blob: b182c0e7852b79e7a3351c96eb085faa6b6a4d39 [file] [log] [blame]
# 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))