summaryrefslogtreecommitdiff
path: root/codegen/vulkan/scripts/cereal/frontend.py
diff options
context:
space:
mode:
Diffstat (limited to 'codegen/vulkan/scripts/cereal/frontend.py')
-rw-r--r--codegen/vulkan/scripts/cereal/frontend.py102
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))