diff options
author | Kaiyi Li <kaiyili@google.com> | 2022-08-23 06:21:34 -0700 |
---|---|---|
committer | Kaiyi Li <kaiyili@google.com> | 2022-08-26 20:33:20 -0700 |
commit | b687b304f60271c0a9ca01c50e5868c220ea9b51 (patch) | |
tree | b99241fe89ff78a81690a2b467067b7b714a13e6 | |
parent | 65fce9e4574dd2f87eb4d911d91193fcfdd842f0 (diff) | |
download | gfxstream-protocols-b687b304f60271c0a9ca01c50e5868c220ea9b51.tar.gz |
vulkan: move gfxstream specific definitions into a separate header
... and move that header into dependent project.
Change-Id: Ibe845c57f937f27165cf952a63853973bc5a98f4
-rw-r--r-- | include/vulkan/include/vulkan/vulkan_core.h | 186 | ||||
-rw-r--r-- | registry/vulkan/scripts/cereal/__init__.py | 3 | ||||
-rw-r--r-- | registry/vulkan/scripts/cereal/common/codegen.py | 21 | ||||
-rw-r--r-- | registry/vulkan/scripts/cereal/gfxstreamstructuretype.py | 34 | ||||
-rw-r--r-- | registry/vulkan/scripts/cerealgenerator.py | 117 | ||||
-rwxr-xr-x | registry/vulkan/scripts/genvk.py | 55 | ||||
-rwxr-xr-x | scripts/generate-vulkan-sources.sh | 24 |
7 files changed, 191 insertions, 249 deletions
diff --git a/include/vulkan/include/vulkan/vulkan_core.h b/include/vulkan/include/vulkan/vulkan_core.h index 0e543147..3b97ee8c 100644 --- a/include/vulkan/include/vulkan/vulkan_core.h +++ b/include/vulkan/include/vulkan/vulkan_core.h @@ -13069,192 +13069,6 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetColorWrite #endif -#define VK_GOOGLE_gfxstream 1 -#define VK_GOOGLE_GFXSTREAM_SPEC_VERSION 0 -#define VK_GOOGLE_GFXSTREAM_NUMBER 386 -#define VK_GOOGLE_GFXSTREAM_EXTENSION_NAME "VK_GOOGLE_gfxstream" -typedef struct VkImportColorBufferGOOGLE { - VkStructureType sType; - void* pNext; - uint32_t colorBuffer; -} VkImportColorBufferGOOGLE; - -typedef struct VkImportBufferGOOGLE { - VkStructureType sType; - void* pNext; - uint32_t buffer; -} VkImportBufferGOOGLE; - -typedef struct VkImportPhysicalAddressGOOGLE { - VkStructureType sType; - void* pNext; - uint64_t physicalAddress; - VkDeviceSize size; - VkFormat format; - VkImageTiling tiling; - uint32_t tilingParameter; -} VkImportPhysicalAddressGOOGLE; - -typedef VkResult (VKAPI_PTR *PFN_vkRegisterImageColorBufferGOOGLE)(VkDevice device, VkImage image, uint32_t colorBuffer); -typedef VkResult (VKAPI_PTR *PFN_vkRegisterBufferColorBufferGOOGLE)(VkDevice device, VkBuffer buffer, uint32_t colorBuffer); -typedef VkResult (VKAPI_PTR *PFN_vkMapMemoryIntoAddressSpaceGOOGLE)(VkDevice device, VkDeviceMemory memory, uint64_t* pAddress); -typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplateSizedGOOGLE)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, uint32_t imageInfoCount, uint32_t bufferInfoCount, uint32_t bufferViewCount, const uint32_t* pImageInfoEntryIndices, const uint32_t* pBufferInfoEntryIndices, const uint32_t* pBufferViewEntryIndices, const VkDescriptorImageInfo* pImageInfos, const VkDescriptorBufferInfo* pBufferInfos, const VkBufferView* pBufferViews); -typedef void (VKAPI_PTR *PFN_vkBeginCommandBufferAsyncGOOGLE)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo); -typedef void (VKAPI_PTR *PFN_vkEndCommandBufferAsyncGOOGLE)(VkCommandBuffer commandBuffer); -typedef void (VKAPI_PTR *PFN_vkResetCommandBufferAsyncGOOGLE)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags); -typedef void (VKAPI_PTR *PFN_vkCommandBufferHostSyncGOOGLE)(VkCommandBuffer commandBuffer, uint32_t needHostSync, uint32_t sequenceNumber); -typedef VkResult (VKAPI_PTR *PFN_vkCreateImageWithRequirementsGOOGLE)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage, VkMemoryRequirements* pMemoryRequirements); -typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferWithRequirementsGOOGLE)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer, VkMemoryRequirements* pMemoryRequirements); -typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryHostAddressInfoGOOGLE)(VkDevice device, VkDeviceMemory memory, uint64_t* pAddress, uint64_t* pSize, uint64_t* pHostmemId); -typedef VkResult (VKAPI_PTR *PFN_vkFreeMemorySyncGOOGLE)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator); -typedef void (VKAPI_PTR *PFN_vkQueueHostSyncGOOGLE)(VkQueue queue, uint32_t needHostSync, uint32_t sequenceNumber); -typedef void (VKAPI_PTR *PFN_vkQueueSubmitAsyncGOOGLE)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence); -typedef void (VKAPI_PTR *PFN_vkQueueWaitIdleAsyncGOOGLE)(VkQueue queue); -typedef void (VKAPI_PTR *PFN_vkQueueBindSparseAsyncGOOGLE)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence); -typedef void (VKAPI_PTR *PFN_vkGetLinearImageLayoutGOOGLE)(VkDevice device, VkFormat format, VkDeviceSize* pOffset, VkDeviceSize* pRowPitchAlignment); -typedef void (VKAPI_PTR *PFN_vkGetLinearImageLayout2GOOGLE)(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkDeviceSize* pOffset, VkDeviceSize* pRowPitchAlignment); -typedef void (VKAPI_PTR *PFN_vkQueueFlushCommandsGOOGLE)(VkQueue queue, VkCommandBuffer commandBuffer, VkDeviceSize dataSize, const void* pData); -typedef void (VKAPI_PTR *PFN_vkQueueCommitDescriptorSetUpdatesGOOGLE)(VkQueue queue, uint32_t descriptorPoolCount, const VkDescriptorPool* pDescriptorPools, uint32_t descriptorSetCount, const VkDescriptorSetLayout* pSetLayouts, const uint64_t* pDescriptorSetPoolIds, const uint32_t* pDescriptorSetWhichPool, const uint32_t* pDescriptorSetPendingAllocation, const uint32_t* pDescriptorWriteStartingIndices, uint32_t pendingDescriptorWriteCount, const VkWriteDescriptorSet* pPendingDescriptorWrites); -typedef void (VKAPI_PTR *PFN_vkCollectDescriptorPoolIdsGOOGLE)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t* pPoolIdCount, uint64_t* pPoolIds); -typedef void (VKAPI_PTR *PFN_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE)(VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore* pWaitSemaphores, VkImage image); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkRegisterImageColorBufferGOOGLE( - VkDevice device, - VkImage image, - uint32_t colorBuffer); - -VKAPI_ATTR VkResult VKAPI_CALL vkRegisterBufferColorBufferGOOGLE( - VkDevice device, - VkBuffer buffer, - uint32_t colorBuffer); - -VKAPI_ATTR VkResult VKAPI_CALL vkMapMemoryIntoAddressSpaceGOOGLE( - VkDevice device, - VkDeviceMemory memory, - uint64_t* pAddress); - -VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplateSizedGOOGLE( - VkDevice device, - VkDescriptorSet descriptorSet, - VkDescriptorUpdateTemplate descriptorUpdateTemplate, - uint32_t imageInfoCount, - uint32_t bufferInfoCount, - uint32_t bufferViewCount, - const uint32_t* pImageInfoEntryIndices, - const uint32_t* pBufferInfoEntryIndices, - const uint32_t* pBufferViewEntryIndices, - const VkDescriptorImageInfo* pImageInfos, - const VkDescriptorBufferInfo* pBufferInfos, - const VkBufferView* pBufferViews); - -VKAPI_ATTR void VKAPI_CALL vkBeginCommandBufferAsyncGOOGLE( - VkCommandBuffer commandBuffer, - const VkCommandBufferBeginInfo* pBeginInfo); - -VKAPI_ATTR void VKAPI_CALL vkEndCommandBufferAsyncGOOGLE( - VkCommandBuffer commandBuffer); - -VKAPI_ATTR void VKAPI_CALL vkResetCommandBufferAsyncGOOGLE( - VkCommandBuffer commandBuffer, - VkCommandBufferResetFlags flags); - -VKAPI_ATTR void VKAPI_CALL vkCommandBufferHostSyncGOOGLE( - VkCommandBuffer commandBuffer, - uint32_t needHostSync, - uint32_t sequenceNumber); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageWithRequirementsGOOGLE( - VkDevice device, - const VkImageCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkImage* pImage, - VkMemoryRequirements* pMemoryRequirements); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferWithRequirementsGOOGLE( - VkDevice device, - const VkBufferCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkBuffer* pBuffer, - VkMemoryRequirements* pMemoryRequirements); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryHostAddressInfoGOOGLE( - VkDevice device, - VkDeviceMemory memory, - uint64_t* pAddress, - uint64_t* pSize, - uint64_t* pHostmemId); - -VKAPI_ATTR VkResult VKAPI_CALL vkFreeMemorySyncGOOGLE( - VkDevice device, - VkDeviceMemory memory, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR void VKAPI_CALL vkQueueHostSyncGOOGLE( - VkQueue queue, - uint32_t needHostSync, - uint32_t sequenceNumber); - -VKAPI_ATTR void VKAPI_CALL vkQueueSubmitAsyncGOOGLE( - VkQueue queue, - uint32_t submitCount, - const VkSubmitInfo* pSubmits, - VkFence fence); - -VKAPI_ATTR void VKAPI_CALL vkQueueWaitIdleAsyncGOOGLE( - VkQueue queue); - -VKAPI_ATTR void VKAPI_CALL vkQueueBindSparseAsyncGOOGLE( - VkQueue queue, - uint32_t bindInfoCount, - const VkBindSparseInfo* pBindInfo, - VkFence fence); - -VKAPI_ATTR void VKAPI_CALL vkGetLinearImageLayoutGOOGLE( - VkDevice device, - VkFormat format, - VkDeviceSize* pOffset, - VkDeviceSize* pRowPitchAlignment); - -VKAPI_ATTR void VKAPI_CALL vkGetLinearImageLayout2GOOGLE( - VkDevice device, - const VkImageCreateInfo* pCreateInfo, - VkDeviceSize* pOffset, - VkDeviceSize* pRowPitchAlignment); - -VKAPI_ATTR void VKAPI_CALL vkQueueFlushCommandsGOOGLE( - VkQueue queue, - VkCommandBuffer commandBuffer, - VkDeviceSize dataSize, - const void* pData); - -VKAPI_ATTR void VKAPI_CALL vkQueueCommitDescriptorSetUpdatesGOOGLE( - VkQueue queue, - uint32_t descriptorPoolCount, - const VkDescriptorPool* pDescriptorPools, - uint32_t descriptorSetCount, - const VkDescriptorSetLayout* pSetLayouts, - const uint64_t* pDescriptorSetPoolIds, - const uint32_t* pDescriptorSetWhichPool, - const uint32_t* pDescriptorSetPendingAllocation, - const uint32_t* pDescriptorWriteStartingIndices, - uint32_t pendingDescriptorWriteCount, - const VkWriteDescriptorSet* pPendingDescriptorWrites); - -VKAPI_ATTR void VKAPI_CALL vkCollectDescriptorPoolIdsGOOGLE( - VkDevice device, - VkDescriptorPool descriptorPool, - uint32_t* pPoolIdCount, - uint64_t* pPoolIds); - -VKAPI_ATTR void VKAPI_CALL vkQueueSignalReleaseImageANDROIDAsyncGOOGLE( - VkQueue queue, - uint32_t waitSemaphoreCount, - const VkSemaphore* pWaitSemaphores, - VkImage image); -#endif - - #define VK_EXT_global_priority_query 1 #define VK_MAX_GLOBAL_PRIORITY_SIZE_EXT 16U #define VK_EXT_GLOBAL_PRIORITY_QUERY_SPEC_VERSION 1 diff --git a/registry/vulkan/scripts/cereal/__init__.py b/registry/vulkan/scripts/cereal/__init__.py index e4710d2e..66355e61 100644 --- a/registry/vulkan/scripts/cereal/__init__.py +++ b/registry/vulkan/scripts/cereal/__init__.py @@ -15,4 +15,5 @@ from .dispatch import * from .unbox import * from .decodersnapshot import * from .subdecode import * -from .api_log_decoder import *
\ No newline at end of file +from .api_log_decoder import * +from .gfxstreamstructuretype import VulkanGfxstreamStructureType diff --git a/registry/vulkan/scripts/cereal/common/codegen.py b/registry/vulkan/scripts/cereal/common/codegen.py index bb39231b..66b53378 100644 --- a/registry/vulkan/scripts/cereal/common/codegen.py +++ b/registry/vulkan/scripts/cereal/common/codegen.py @@ -24,7 +24,7 @@ import sys # Class capturing a .cpp file and a .h file (a "C++ module") class Module(object): - def __init__(self, directory, basename, customAbsDir = None, suppress = False, implOnly = False): + def __init__(self, directory, basename, customAbsDir = None, suppress = False, implOnly = False, headerOnly = False, suppressFeatureGuards = False): self.directory = directory self.basename = basename @@ -42,6 +42,9 @@ class Module(object): self.suppress = suppress self.implOnly = implOnly + self.headerOnly = headerOnly + + self.suppressFeatureGuards = suppressFeatureGuards def getMakefileSrcEntry(self): if self.customAbsDir: @@ -72,11 +75,13 @@ class Module(object): filename = os.path.join(absDir, self.basename) fpHeader = None + fpImpl = None if not self.implOnly: fpHeader = open(filename + ".h", "w", encoding="utf-8") - fpImpl = open(filename + ".cpp", "w", encoding="utf-8") + if not self.headerOnly: + fpImpl = open(filename + ".cpp", "w", encoding="utf-8") self.headerFileHandle = fpHeader self.implFileHandle = fpImpl @@ -84,7 +89,8 @@ class Module(object): if not self.implOnly: self.headerFileHandle.write(self.headerPreamble) - self.implFileHandle.write(self.implPreamble) + if not self.headerOnly: + self.implFileHandle.write(self.implPreamble) def appendHeader(self, toAppend): if self.suppress: @@ -97,7 +103,8 @@ class Module(object): if self.suppress: return - self.implFileHandle.write(toAppend) + if not self.headerOnly: + self.implFileHandle.write(toAppend) def end(self): if self.suppress: @@ -106,12 +113,14 @@ class Module(object): if not self.implOnly: self.headerFileHandle.write(self.headerPostamble) - self.implFileHandle.write(self.implPostamble) + if not self.headerOnly: + self.implFileHandle.write(self.implPostamble) if not self.implOnly: self.headerFileHandle.close() - self.implFileHandle.close() + if not self.headerOnly: + self.implFileHandle.close() # Class capturing a .proto protobuf definition file class Proto(object): diff --git a/registry/vulkan/scripts/cereal/gfxstreamstructuretype.py b/registry/vulkan/scripts/cereal/gfxstreamstructuretype.py new file mode 100644 index 00000000..baa11f65 --- /dev/null +++ b/registry/vulkan/scripts/cereal/gfxstreamstructuretype.py @@ -0,0 +1,34 @@ +# 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. + +from .wrapperdefs import VulkanWrapperGenerator + + +class VulkanGfxstreamStructureType(VulkanWrapperGenerator): + def __init__(self, module, typeInfo): + super().__init__(module, typeInfo) + + def onGenGroup(self, groupinfo, groupName, alias=None): + super().onGenGroup(groupinfo, groupName, alias) + elem = groupinfo.elem + if (not elem.get('type') == 'enum'): + return + if (not elem.get('name') == 'VkStructureType'): + return + for enum in elem.findall("enum[@extname='VK_GOOGLE_gfxstream']"): + name = enum.get('name') + offset = enum.get('offset') + self.module.appendHeader( + f"#define {name} VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, {offset})\n") diff --git a/registry/vulkan/scripts/cerealgenerator.py b/registry/vulkan/scripts/cerealgenerator.py index 0ffc6329..353fc9ad 100644 --- a/registry/vulkan/scripts/cerealgenerator.py +++ b/registry/vulkan/scripts/cerealgenerator.py @@ -394,6 +394,11 @@ class BumpPool; #include <unordered_map> """ % VULKAN_STREAM_TYPE + gfxstreamstructuretypePreamble = """ +#define VK_GOOGLE_GFXSTREAM_ENUM(type,id) \ + ((type)(1000000000 + (1000 * (VK_GOOGLE_GFXSTREAM_NUMBER - 1)) + (id))) +""" + self.guest_encoder_tag = "guest_encoder" self.guest_hal_tag = "guest_hal" self.host_tag = "host" @@ -452,6 +457,10 @@ class BumpPool; self.addGuestEncoderModule("goldfish_vk_transform_guest", extraHeader=commonCerealIncludesGuest + transformIncludeGuest, extraImpl=commonCerealImplIncludesGuest + transformImplIncludeGuest) + self.addGuestEncoderModule( + "vulkan_gfxstream_structure_type", headerOnly=True, suppressFeatureGuards=True, + moduleName="vulkan_gfxstream_structure_type_guest", useNamespace=False, + suppressVulkanHeaders=True, extraHeader=gfxstreamstructuretypePreamble) self.addGuestEncoderModule("func_table", extraImpl=functableImplInclude) @@ -497,6 +506,10 @@ class BumpPool; useNamespace=False, implOnly=True, suppress=True) + self.addHostModule( + "vulkan_gfxstream_structure_type", headerOnly=True, suppressFeatureGuards=True, + moduleName="vulkan_gfxstream_structure_type_host", useNamespace=False, + suppressVulkanHeaders=True, extraHeader=gfxstreamstructuretypePreamble) self.addWrapper(cereal.VulkanEncoder, "VkEncoder") self.addWrapper(cereal.VulkanExtensionStructs, "goldfish_vk_extension_structs_guest") @@ -519,6 +532,9 @@ class BumpPool; self.addWrapper(cereal.VulkanDecoderSnapshot, "VkDecoderSnapshot") self.addWrapper(cereal.VulkanSubDecoder, "VkSubDecoder") self.addWrapper(cereal.ApiLogDecoder, "ApiLogDecoder") + self.addWrapper(cereal.VulkanGfxstreamStructureType, + "vulkan_gfxstream_structure_type_guest") + self.addWrapper(cereal.VulkanGfxstreamStructureType, "vulkan_gfxstream_structure_type_host") self.guestAndroidMkCppFiles = "" self.hostCMakeCppFiles = "" @@ -536,16 +552,17 @@ class BumpPool; self.forEachModule(addSrcEntry) - def addGuestEncoderModule(self, basename, extraHeader = "", extraImpl = "", useNamespace = True): + def addGuestEncoderModule( + self, basename, extraHeader="", extraImpl="", useNamespace=True, headerOnly=False, + suppressFeatureGuards=False, moduleName=None, suppressVulkanHeaders=False): if not os.path.exists(self.guest_abs_encoder_destination): print("Path [%s] not found (guest encoder path), skipping" % self.guest_abs_encoder_destination) return - self.addModule(self.guest_encoder_tag, - basename, - extraHeader = extraHeader, - extraImpl = extraImpl, - customAbsDir = self.guest_abs_encoder_destination, - useNamespace = useNamespace) + self.addModule(self.guest_encoder_tag, basename, extraHeader=extraHeader, + extraImpl=extraImpl, customAbsDir=self.guest_abs_encoder_destination, + useNamespace=useNamespace, headerOnly=headerOnly, + suppressFeatureGuards=suppressFeatureGuards, moduleName=moduleName, + suppressVulkanHeaders=suppressVulkanHeaders) def addGuestHalModule(self, basename, extraHeader = "", extraImpl = "", useNamespace = True): if not os.path.exists(self.guest_abs_hal_destination): @@ -558,55 +575,53 @@ class BumpPool; customAbsDir = self.guest_abs_hal_destination, useNamespace = useNamespace) - def addHostModule(self, basename, extraHeader = "", extraImpl = "", useNamespace = True, - implOnly = False, suppress = False): + def addHostModule( + self, basename, extraHeader="", extraImpl="", useNamespace=True, implOnly=False, + 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) return - self.addModule(self.host_tag, - basename, - extraHeader = extraHeader, - extraImpl = extraImpl, - customAbsDir = self.host_abs_decoder_destination, - useNamespace = useNamespace, - implOnly = implOnly, - suppress = suppress) - - def addModule(self, directory, basename, - extraHeader = "", extraImpl = "", - customAbsDir = None, - useNamespace = True, - implOnly = False, - suppress = False): - self.moduleList.append(basename) - self.modules[basename] = \ - cereal.Module(directory, basename, customAbsDir = customAbsDir, suppress = suppress, implOnly = implOnly) - self.modules[basename].headerPreamble = copyrightHeader - self.modules[basename].headerPreamble += \ + self.addModule( + self.host_tag, basename, extraHeader=extraHeader, extraImpl=extraImpl, + customAbsDir=self.host_abs_decoder_destination, useNamespace=useNamespace, + implOnly=implOnly, suppress=suppress, headerOnly=headerOnly, + suppressFeatureGuards=suppressFeatureGuards, moduleName=moduleName, + suppressVulkanHeaders=suppressVulkanHeaders) + + def addModule( + self, directory, basename, extraHeader="", extraImpl="", customAbsDir=None, + useNamespace=True, implOnly=False, suppress=False, headerOnly=False, + suppressFeatureGuards=False, moduleName=None, suppressVulkanHeaders=False): + if moduleName is None: + moduleName = basename + self.moduleList.append(moduleName) + self.modules[moduleName] = cereal.Module( + directory, basename, customAbsDir=customAbsDir, suppress=suppress, implOnly=implOnly, + headerOnly=headerOnly, suppressFeatureGuards=suppressFeatureGuards) + self.modules[moduleName].headerPreamble = copyrightHeader + self.modules[moduleName].headerPreamble += \ autogeneratedHeaderTemplate % \ (basename, "(header) generated by %s" % banner_command(sys.argv)) namespaceBegin = "namespace goldfish_vk {" if useNamespace else "" namespaceEnd = "} // namespace goldfish_vk" if useNamespace else "" - self.modules[basename].headerPreamble += """ -#pragma once - -#include <vulkan/vulkan.h> - -%s - -%s - -""" % (extraHeader, namespaceBegin) + self.modules[moduleName].headerPreamble += "#pragma once\n" + if (not suppressVulkanHeaders): + self.modules[moduleName].headerPreamble += "#include <vulkan/vulkan.h>\n" + self.modules[moduleName].headerPreamble += '#include "vulkan_gfxstream.h"\n' + self.modules[moduleName].headerPreamble += extraHeader + '\n' + if namespaceBegin: + self.modules[moduleName].headerPreamble += namespaceBegin + '\n' - self.modules[basename].implPreamble = copyrightHeader - self.modules[basename].implPreamble += \ + self.modules[moduleName].implPreamble = copyrightHeader + self.modules[moduleName].implPreamble += \ autogeneratedHeaderTemplate % \ (basename, "(impl) generated by %s" % \ banner_command(sys.argv)) if not implOnly: - self.modules[basename].implPreamble += """ + self.modules[moduleName].implPreamble += """ #include "%s.h" %s @@ -615,10 +630,10 @@ class BumpPool; """ % (basename, extraImpl, namespaceBegin) - self.modules[basename].headerPostamble = """ + self.modules[moduleName].headerPostamble = """ %s """ % namespaceEnd - self.modules[basename].implPostamble = """ + self.modules[moduleName].implPostamble = """ %s """ % namespaceEnd @@ -676,8 +691,12 @@ class BumpPool; self.typeInfo.onBeginFeature(self.featureName, self.featureType) - self.forEachModule(lambda m: m.appendHeader("#ifdef %s\n" % self.featureName)) - self.forEachModule(lambda m: m.appendImpl("#ifdef %s\n" % self.featureName)) + self.forEachModule( + lambda m: m.appendHeader("#ifdef %s\n" % self.featureName) + if not m.suppressFeatureGuards else None) + self.forEachModule( + lambda m: m.appendImpl("#ifdef %s\n" % self.featureName) + if not m.suppressFeatureGuards else None) self.forEachWrapper(lambda w: w.onBeginFeature(self.featureName, self.featureType)) # functable needs to understand the feature type (device vs instance) of each cmd for features in interface.findall('require'): @@ -690,8 +709,10 @@ class BumpPool; self.typeInfo.onEndFeature() - self.forEachModule(lambda m: m.appendHeader("#endif\n")) - self.forEachModule(lambda m: m.appendImpl("#endif\n")) + self.forEachModule(lambda m: m.appendHeader("#endif\n") + if not m.suppressFeatureGuards else None) + self.forEachModule(lambda m: m.appendImpl("#endif\n") + if not m.suppressFeatureGuards else None) self.forEachWrapper(lambda w: w.onEndFeature()) def genType(self, typeinfo: TypeInfo, name, alias): diff --git a/registry/vulkan/scripts/genvk.py b/registry/vulkan/scripts/genvk.py index ec8b9a01..ad39664b 100755 --- a/registry/vulkan/scripts/genvk.py +++ b/registry/vulkan/scripts/genvk.py @@ -256,6 +256,61 @@ def makeGenOpts(args): alignFuncParam = 48) ] + gfxstreamPrefixStrings = [ + '// 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 vulkan_gfxstream.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.', + '', + '#ifdef VK_GFXSTREAM_STRUCTURE_TYPE_EXT', + '#include "vulkan_gfxstream_structure_type.h"', + '#endif', + ] + # gfxstream specific header + genOpts['vulkan_gfxstream.h'] = [ + COutputGenerator, + CGeneratorOptions( + conventions = conventions, + filename = 'vulkan_gfxstream.h', + directory = directory, + genpath = None, + apiname = 'vulkan', + profile = None, + versions = featuresPat, + emitversions = None, + defaultExtensions = None, + addExtensions = makeREstring(['VK_GOOGLE_gfxstream'], None), + removeExtensions = None, + emitExtensions = makeREstring(['VK_GOOGLE_gfxstream'], None), + prefixText = gfxstreamPrefixStrings, + genFuncPointers = True, + protectFile = protectFile, + protectFeature = False, + 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 f870e281..d0674d82 100755 --- a/scripts/generate-vulkan-sources.sh +++ b/scripts/generate-vulkan-sources.sh @@ -17,19 +17,16 @@ PROJECT_ROOT=$(pwd) # Generate Vulkan headers -cd registry/vulkan/xml && make -if [ $? -ne 0 ]; then - echo "Failed to generate Vulkan headers." 1>&2 - exit $? -fi -rm -rf $PROJECT_ROOT/include/vulkan && mkdir -p $PROJECT_ROOT/include +VULKAN_HEADERS_ROOT=$PROJECT_ROOT/include/vulkan +rm -rf $VULKAN_HEADERS_ROOT && mkdir -p $VULKAN_HEADERS_ROOT if [ $? -ne 0 ]; then echo "Failed to clear the old Vulkan headers." 1>&2 exit $? fi -mv ../gen $PROJECT_ROOT/include/vulkan + +cd registry/vulkan/xml && make GENOPTS="-removeExtensions VK_GOOGLE_gfxstream" GENERATED=$VULKAN_HEADERS_ROOT if [ $? -ne 0 ]; then - echo "Failed to move the new Vulkan headers to the target folder." 1>&2 + echo "Failed to generate Vulkan headers." 1>&2 exit $? fi @@ -54,3 +51,14 @@ VULKAN_REGISTRY_XML_DIR=$VULKAN_REGISTRY_DIR/xml 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 + +for OUT_DIR in $VK_CEREAL_HOST_DECODER_DIR $VK_CEREAL_GUEST_ENCODER_DIR; do + mkdir -p $OUT_DIR + python3 registry/vulkan/scripts/genvk.py -registry registry/vulkan/xml/vk.xml -o $OUT_DIR \ + vulkan_gfxstream.h + + if [ $? -ne 0 ]; then + echo "Failed to generate gfxstream specific vulkan headers." 1>&2 + exit $? + fi +done
\ No newline at end of file |