diff options
Diffstat (limited to 'codegen/vulkan/scripts/cereal/frontend.py')
-rw-r--r-- | codegen/vulkan/scripts/cereal/frontend.py | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/codegen/vulkan/scripts/cereal/frontend.py b/codegen/vulkan/scripts/cereal/frontend.py new file mode 100644 index 00000000..b182c0e7 --- /dev/null +++ b/codegen/vulkan/scripts/cereal/frontend.py @@ -0,0 +1,102 @@ +# Copyright (c) 2018 The Android Open Source Project +# Copyright (c) 2018 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .common.codegen import CodeGen, VulkanAPIWrapper +from .common.vulkantypes import \ + VulkanAPI, makeVulkanTypeSimple, iterateVulkanType + +from .wrapperdefs import VulkanWrapperGenerator + +from .wrapperdefs import API_PREFIX_VALIDATE +from .wrapperdefs import PARAMETERS_VALIDATE +from .wrapperdefs import VOID_TYPE +from .wrapperdefs import VALIDATE_RESULT_TYPE +from .wrapperdefs import VALIDATE_VAR_NAME +from .wrapperdefs import VALIDATE_GOOD_RESULT + +from .wrapperdefs import VULKAN_STREAM_TYPE +from .wrapperdefs import VULKAN_STREAM_VAR_NAME + +from .wrapperdefs import API_PREFIX_MARSHAL +from .wrapperdefs import API_PREFIX_FRONTEND + +# Frontend +class VulkanFrontend(VulkanWrapperGenerator): + + def __init__(self, module, typeInfo): + VulkanWrapperGenerator.__init__(self, module, typeInfo) + + def validateDefFunc(_codegen, _api): + # TODO + pass + + self.validateWrapper = \ + VulkanAPIWrapper( + API_PREFIX_VALIDATE, + PARAMETERS_VALIDATE, + VOID_TYPE, + validateDefFunc) + + def frontendDefFunc(codegen, api): + retTypeName = api.retType.typeName + + codegen.stmt( + "%s %s = %s" % (VALIDATE_RESULT_TYPE, VALIDATE_VAR_NAME, + VALIDATE_GOOD_RESULT)) + codegen.funcCall(None, API_PREFIX_VALIDATE + api.origName, + ["&%s" % VALIDATE_VAR_NAME] + list( + map(lambda p: p.paramName, api.parameters))) + + codegen.beginIf( + "%s != %s" % (VALIDATE_VAR_NAME, VALIDATE_GOOD_RESULT)) + if retTypeName == VALIDATE_RESULT_TYPE: + codegen.stmt("return %s" % VALIDATE_VAR_NAME) + elif retTypeName != "void": + codegen.stmt("return (%s)0" % retTypeName) + else: + codegen.stmt("return") + codegen.endIf() + + codegen.stmt("// VULKAN_STREAM_GET()") + codegen.stmt("%s* %s = nullptr" % (VULKAN_STREAM_TYPE, + VULKAN_STREAM_VAR_NAME)) + + retLhs = None + if retTypeName != "void": + retLhs = retTypeName + " res" + + codegen.funcCall(retLhs, API_PREFIX_MARSHAL + api.origName, + [VULKAN_STREAM_VAR_NAME] + list( + map(lambda p: p.paramName, api.parameters))) + + if retTypeName != "void": + codegen.stmt("return res") + + self.frontendWrapper = \ + VulkanAPIWrapper( + API_PREFIX_FRONTEND, + [], + None, + frontendDefFunc) + + def onGenCmd(self, cmdinfo, name, alias): + VulkanWrapperGenerator.onGenCmd(self, cmdinfo, name, alias) + self.module.appendHeader( + self.frontendWrapper.makeDecl(self.typeInfo, name)) + self.module.appendImpl( + self.validateWrapper.makeDefinition( + self.typeInfo, name, isStatic=True)) + self.module.appendImpl( + self.frontendWrapper.makeDefinition(self.typeInfo, name)) |