103 lines
3.7 KiB
Python
103 lines
3.7 KiB
Python
# 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))
|