summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaiyi Li <kaiyili@google.com>2022-08-23 06:21:34 -0700
committerKaiyi Li <kaiyili@google.com>2022-08-26 20:33:20 -0700
commitb687b304f60271c0a9ca01c50e5868c220ea9b51 (patch)
treeb99241fe89ff78a81690a2b467067b7b714a13e6
parent65fce9e4574dd2f87eb4d911d91193fcfdd842f0 (diff)
downloadgfxstream-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.h186
-rw-r--r--registry/vulkan/scripts/cereal/__init__.py3
-rw-r--r--registry/vulkan/scripts/cereal/common/codegen.py21
-rw-r--r--registry/vulkan/scripts/cereal/gfxstreamstructuretype.py34
-rw-r--r--registry/vulkan/scripts/cerealgenerator.py117
-rwxr-xr-xregistry/vulkan/scripts/genvk.py55
-rwxr-xr-xscripts/generate-vulkan-sources.sh24
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