| # 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)) |