summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaiyi Li <kaiyili@google.com>2022-09-09 20:18:48 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2022-09-09 20:18:48 +0000
commit5a1efeaeb1981a32b436e6cc75dd004da4a4b08c (patch)
tree92a5806874eb890dd0569151921f3e1266e71716
parent3a3865ab1ac2eb0fe4c86bcd9bcaabc602cb1524 (diff)
parente0f27e446a47e169ef01fb7cef1aab0b32afdcc5 (diff)
downloadgfxstream-protocols-5a1efeaeb1981a32b436e6cc75dd004da4a4b08c.tar.gz
Merge "vulkan: generate the Vulkan header specific to VK_ANDROID_native_buffer"
-rw-r--r--registry/vulkan/scripts/cereal/__init__.py3
-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.py51
-rwxr-xr-xregistry/vulkan/scripts/genvk.py58
-rwxr-xr-xscripts/generate-vulkan-sources.sh19
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