diff options
author | Kaiyi Li <kaiyili@google.com> | 2022-09-09 20:18:48 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2022-09-09 20:18:48 +0000 |
commit | 5a1efeaeb1981a32b436e6cc75dd004da4a4b08c (patch) | |
tree | 92a5806874eb890dd0569151921f3e1266e71716 | |
parent | 3a3865ab1ac2eb0fe4c86bcd9bcaabc602cb1524 (diff) | |
parent | e0f27e446a47e169ef01fb7cef1aab0b32afdcc5 (diff) | |
download | gfxstream-protocols-5a1efeaeb1981a32b436e6cc75dd004da4a4b08c.tar.gz |
Merge "vulkan: generate the Vulkan header specific to VK_ANDROID_native_buffer"
-rw-r--r-- | registry/vulkan/scripts/cereal/__init__.py | 3 | ||||
-rw-r--r-- | registry/vulkan/scripts/cereal/vkextensionstructuretype.py (renamed from registry/vulkan/scripts/cereal/gfxstreamstructuretype.py) | 20 | ||||
-rw-r--r-- | registry/vulkan/scripts/cerealgenerator.py | 51 | ||||
-rwxr-xr-x | registry/vulkan/scripts/genvk.py | 58 | ||||
-rwxr-xr-x | scripts/generate-vulkan-sources.sh | 19 |
5 files changed, 131 insertions, 20 deletions
diff --git a/registry/vulkan/scripts/cereal/__init__.py b/registry/vulkan/scripts/cereal/__init__.py index 66355e61..1966572f 100644 --- a/registry/vulkan/scripts/cereal/__init__.py +++ b/registry/vulkan/scripts/cereal/__init__.py @@ -16,4 +16,5 @@ from .unbox import * from .decodersnapshot import * from .subdecode import * from .api_log_decoder import * -from .gfxstreamstructuretype import VulkanGfxstreamStructureType +from .vkextensionstructuretype import VulkanGfxstreamStructureType, \ + VulkanAndroidNativeBufferStructureType diff --git a/registry/vulkan/scripts/cereal/gfxstreamstructuretype.py b/registry/vulkan/scripts/cereal/vkextensionstructuretype.py index baa11f65..8db988ae 100644 --- a/registry/vulkan/scripts/cereal/gfxstreamstructuretype.py +++ b/registry/vulkan/scripts/cereal/vkextensionstructuretype.py @@ -16,9 +16,10 @@ from .wrapperdefs import VulkanWrapperGenerator -class VulkanGfxstreamStructureType(VulkanWrapperGenerator): - def __init__(self, module, typeInfo): +class VulkanExtensionStructureType(VulkanWrapperGenerator): + def __init__(self, extensionName: str, module, typeInfo): super().__init__(module, typeInfo) + self._extensionName = extensionName def onGenGroup(self, groupinfo, groupName, alias=None): super().onGenGroup(groupinfo, groupName, alias) @@ -27,8 +28,19 @@ class VulkanGfxstreamStructureType(VulkanWrapperGenerator): return if (not elem.get('name') == 'VkStructureType'): return - for enum in elem.findall("enum[@extname='VK_GOOGLE_gfxstream']"): + extensionEnumFactoryMacro = f'{self._extensionName.upper()}_ENUM' + for enum in elem.findall(f"enum[@extname='{self._extensionName}']"): name = enum.get('name') offset = enum.get('offset') self.module.appendHeader( - f"#define {name} VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, {offset})\n") + f"#define {name} {extensionEnumFactoryMacro}(VkStructureType, {offset})\n") + + +class VulkanGfxstreamStructureType(VulkanExtensionStructureType): + def __init__(self, module, typeInfo): + super().__init__('VK_GOOGLE_gfxstream', module, typeInfo) + + +class VulkanAndroidNativeBufferStructureType(VulkanExtensionStructureType): + def __init__(self, module, typeInfo): + super().__init__('VK_ANDROID_native_buffer', module, typeInfo) diff --git a/registry/vulkan/scripts/cerealgenerator.py b/registry/vulkan/scripts/cerealgenerator.py index adb641a4..7046ffcc 100644 --- a/registry/vulkan/scripts/cerealgenerator.py +++ b/registry/vulkan/scripts/cerealgenerator.py @@ -146,9 +146,12 @@ class CerealGenerator(OutputGenerator): envGetOrDefault("VK_CEREAL_BASELIB_LINKNAME", "android-emu-base") self.vulkanHeaderTargetName = envGetOrDefault("VK_CEREAL_VK_HEADER_TARGET", "") + # THe host always needs all possible guest struct definitions, while the guest only needs + # platform sepcific headers. + self.hostCommonExtraVulkanHeaders = '#include "vk_android_native_buffer.h"' self.host_cmake_generator = lambda cppFiles: f"""{autogeneratedMkTemplate % banner_command(sys.argv)} add_library(OpenglRender_vulkan_cereal {cppFiles}) -target_compile_definitions(OpenglRender_vulkan_cereal PRIVATE -DVK_ANDROID_native_buffer -DVK_GOOGLE_gfxstream) +target_compile_definitions(OpenglRender_vulkan_cereal PRIVATE -DVK_GOOGLE_gfxstream) if (WIN32) target_compile_definitions(OpenglRender_vulkan_cereal PRIVATE -DVK_USE_PLATFORM_WIN32_KHR) endif() @@ -241,32 +244,37 @@ class IOStream; """ vulkanStreamIncludeHost = f""" +{self.hostCommonExtraVulkanHeaders} #include "goldfish_vk_private_defs.h" #include "%s.h" #include "{self.baseLibDirPrefix}/StreamSerializing.h" """ % VULKAN_STREAM_TYPE - testingInclude = """ + testingInclude = f""" +{self.hostCommonExtraVulkanHeaders} #include "goldfish_vk_private_defs.h" #include <string.h> #include <functional> using OnFailCompareFunc = std::function<void(const char*)>; """ poolInclude = f""" +{self.hostCommonExtraVulkanHeaders} #include "goldfish_vk_private_defs.h" #include "{self.baseLibDirPrefix}/BumpPool.h" using android::base::Allocator; using android::base::BumpPool; """ - handleMapInclude = """ + handleMapInclude = f""" +{self.hostCommonExtraVulkanHeaders} #include "goldfish_vk_private_defs.h" #include "VulkanHandleMapping.h" """ transformIncludeGuest = """ #include "goldfish_vk_private_defs.h" """ - transformInclude = """ + transformInclude = f""" +{self.hostCommonExtraVulkanHeaders} #include "goldfish_vk_private_defs.h" #include "goldfish_vk_extension_structs.h" """ @@ -301,18 +309,20 @@ using android::base::BumpPool; #undef VK_KHR_android_surface #undef VK_ANDROID_external_memory_android_hardware_buffer """ - dispatchHeaderDefs = """ + dispatchHeaderDefs = f""" +{self.hostCommonExtraVulkanHeaders} #include "goldfish_vk_private_defs.h" -namespace goldfish_vk { +namespace goldfish_vk {{ struct VulkanDispatch; -} // namespace goldfish_vk +}} // namespace goldfish_vk using DlOpenFunc = void* (void); using DlSymFunc = void* (void*, const char*); """ - extensionStructsInclude = """ + extensionStructsInclude = f""" +{self.hostCommonExtraVulkanHeaders} #include "goldfish_vk_private_defs.h" """ @@ -403,11 +413,11 @@ class BumpPool; #include <functional> """ % VULKAN_STREAM_TYPE - gfxstreamstructuretypePreamble = """ -#define VK_GOOGLE_GFXSTREAM_ENUM(type,id) \ - ((type)(1000000000 + (1000 * (VK_GOOGLE_GFXSTREAM_NUMBER - 1)) + (id))) + def createVkExtensionStructureTypePreamble(extensionName: str) -> str: + return f""" +#define {extensionName}_ENUM(type,id) \ + ((type)(1000000000 + (1000 * ({extensionName}_NUMBER - 1)) + (id))) """ - self.guest_encoder_tag = "guest_encoder" self.guest_hal_tag = "guest_hal" self.host_tag = "host" @@ -471,7 +481,8 @@ class BumpPool; self.addGuestEncoderModule( "vulkan_gfxstream_structure_type", headerOnly=True, suppressFeatureGuards=True, moduleName="vulkan_gfxstream_structure_type_guest", useNamespace=False, - suppressVulkanHeaders=True, extraHeader=gfxstreamstructuretypePreamble) + suppressVulkanHeaders=True, + extraHeader=createVkExtensionStructureTypePreamble('VK_GOOGLE_GFXSTREAM')) self.addGuestEncoderModule("func_table", extraImpl=functableImplInclude) @@ -517,7 +528,12 @@ class BumpPool; self.addHostModule( "vulkan_gfxstream_structure_type", headerOnly=True, suppressFeatureGuards=True, moduleName="vulkan_gfxstream_structure_type_host", useNamespace=False, - suppressVulkanHeaders=True, extraHeader=gfxstreamstructuretypePreamble) + suppressVulkanHeaders=True, + extraHeader=createVkExtensionStructureTypePreamble('VK_GOOGLE_GFXSTREAM')) + self.addHostModule( + "vk_android_native_buffer_structure_type", headerOnly=True, suppressFeatureGuards=True, + useNamespace=False, suppressVulkanHeaders=True, + extraHeader=createVkExtensionStructureTypePreamble('VK_ANDROID_NATIVE_BUFFER')) self.addWrapper(cereal.VulkanEncoder, "VkEncoder") self.addWrapper(cereal.VulkanExtensionStructs, "goldfish_vk_extension_structs_guest") @@ -543,6 +559,8 @@ class BumpPool; self.addWrapper(cereal.VulkanGfxstreamStructureType, "vulkan_gfxstream_structure_type_guest") self.addWrapper(cereal.VulkanGfxstreamStructureType, "vulkan_gfxstream_structure_type_host") + self.addWrapper(cereal.VulkanAndroidNativeBufferStructureType, + "vk_android_native_buffer_structure_type") self.guestAndroidMkCppFiles = "" self.hostCMakeCppFiles = "" @@ -588,8 +606,11 @@ class BumpPool; suppress=False, headerOnly=False, suppressFeatureGuards=False, moduleName=None, suppressVulkanHeaders=False): if not os.path.exists(self.host_abs_decoder_destination): - print("Path [%s] not found (guest encoder path), skipping" % self.guest_abs_encoder_destination) + print("Path [%s] not found (host encoder path), skipping" % + self.host_abs_decoder_destination) return + if not suppressVulkanHeaders: + extraHeader = self.hostCommonExtraVulkanHeaders + '\n' + extraHeader self.addCppModule( self.host_tag, basename, extraHeader=extraHeader, extraImpl=extraImpl, customAbsDir=self.host_abs_decoder_destination, useNamespace=useNamespace, diff --git a/registry/vulkan/scripts/genvk.py b/registry/vulkan/scripts/genvk.py index f7646d56..02cd1a5c 100755 --- a/registry/vulkan/scripts/genvk.py +++ b/registry/vulkan/scripts/genvk.py @@ -314,6 +314,64 @@ def makeGenOpts(args): misracppstyle = misracppstyle) ] + androidNativeBufferPrefixStrings = [ + '// Copyright (C) 2022 The Android Open Source Project', + '// Copyright (C) 2022 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.', + '//', + '// Autogenerated header vk_android_native_buffer.h', + '// Please do not modify directly;', + '// re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,', + '// or directly from Python by calling the genvk.py script with correct parameters.', + '', + '#pragma once', + '#ifndef VK_ANDROID_native_buffer', + '#include "vk_android_native_buffer_structure_type.h"', + '#endif /* VK_ANDROID_native_buffer */', + ] + # header + genOpts['vk_android_native_buffer.h'] = [ + COutputGenerator, + CGeneratorOptions( + conventions = conventions, + filename = 'vk_android_native_buffer.h', + directory = directory, + genpath = None, + apiname = 'vulkan', + profile = None, + versions = featuresPat, + emitversions = None, + defaultExtensions = None, + addExtensions = makeREstring(['VK_ANDROID_native_buffer'], None), + removeExtensions = None, + emitExtensions = makeREstring(['VK_ANDROID_native_buffer'], None), + prefixText = androidNativeBufferPrefixStrings, + genFuncPointers = True, + # Use #pragma once in the prefixText instead, so that we can put the copyright comments + # at the beginning of the file. + protectFile = False, + protectFeature = True, + protectProto = '#ifndef', + protectProtoStr = 'VK_NO_PROTOTYPES', + apicall = 'VKAPI_ATTR ', + apientry = 'VKAPI_CALL ', + apientryp = 'VKAPI_PTR *', + alignFuncParam = 48, + misracstyle = misracstyle, + misracppstyle = misracppstyle) + ] + # API host sync table files for spec genOpts['hostsyncinc'] = [ HostSynchronizationOutputGenerator, diff --git a/scripts/generate-vulkan-sources.sh b/scripts/generate-vulkan-sources.sh index f3e0578c..9d202a1c 100755 --- a/scripts/generate-vulkan-sources.sh +++ b/scripts/generate-vulkan-sources.sh @@ -72,6 +72,25 @@ VULKAN_REGISTRY_SCRIPTS_DIR=$VULKAN_REGISTRY_DIR/scripts python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $VK_CEREAL_OUTPUT_DIR + +# Generate VK_ANDROID_native_buffer specific Vulkan definitions. +if [ -d $VK_CEREAL_HOST_DECODER_DIR ]; then + OUT_DIR=$VK_CEREAL_HOST_DECODER_DIR + OUT_FILE_BASENAME="vk_android_native_buffer.h" + + python3 registry/vulkan/scripts/genvk.py -registry registry/vulkan/xml/vk.xml -o $OUT_DIR \ + $OUT_FILE_BASENAME + + if [ $? -ne 0 ]; then + echo "Failed to generate vk_android_native_buffer.h" 1>&2 + exit 1 + fi + if ! clang-format -i $OUT_DIR/$OUT_FILE_BASENAME; then + echo "Failed to reformat vk_android_native_buffer.h" 1>&2 + exit 1 + fi +fi + # Generate gfxstream specific Vulkan definitions. for OUT_DIR in $VK_CEREAL_HOST_DECODER_DIR $VK_CEREAL_GUEST_ENCODER_DIR; do if [ -d "$OUT_DIR" ]; then |