gfxstream: codegen: allow generating host/guest autogen separately
This allows codgen the guest encoders and host decoders are separate steps, based on environment variables. This is useful since genRule (Android.bp) and custom_target (meson) both the output files to explicitly listed. Reviewed-by: Aaron Ruby <aruby@blackberry.com> Acked-by: Yonggang Luo <luoyonggang@gmail.com> Acked-by: Adam Jackson <ajax@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27246>
This commit is contained in:

committed by
Marge Bot

parent
6bb76947ae
commit
1b33515a08
@@ -27,6 +27,10 @@ from cereal.wrapperdefs import VULKAN_STREAM_TYPE_GUEST
|
|||||||
# while being agnostic to the stream implementation
|
# while being agnostic to the stream implementation
|
||||||
from reg import GroupInfo, TypeInfo, EnumInfo
|
from reg import GroupInfo, TypeInfo, EnumInfo
|
||||||
|
|
||||||
|
VK_CEREAL_FLAG_HOST = 1
|
||||||
|
VK_CEREAL_FLAG_GUEST = 2
|
||||||
|
VK_CEREAL_FLAG_ALL = VK_CEREAL_FLAG_GUEST | VK_CEREAL_FLAG_HOST
|
||||||
|
|
||||||
SUPPORTED_FEATURES = [
|
SUPPORTED_FEATURES = [
|
||||||
"VK_VERSION_1_0",
|
"VK_VERSION_1_0",
|
||||||
"VK_VERSION_1_1",
|
"VK_VERSION_1_1",
|
||||||
@@ -257,6 +261,19 @@ class CerealGenerator(OutputGenerator):
|
|||||||
self.baseLibDirPrefix = "aemu/base"
|
self.baseLibDirPrefix = "aemu/base"
|
||||||
self.utilsHeaderDirPrefix = "utils"
|
self.utilsHeaderDirPrefix = "utils"
|
||||||
|
|
||||||
|
# The cereal variant should be an environmental variable of one of
|
||||||
|
# the following:
|
||||||
|
# - "guest"
|
||||||
|
# - "host"
|
||||||
|
# - "both"
|
||||||
|
cerealVariant = envGetOrDefault("CEREAL_VARIANT", "both")
|
||||||
|
if cerealVariant == "guest":
|
||||||
|
self.cerealFlags = VK_CEREAL_FLAG_GUEST
|
||||||
|
elif cerealVariant == "host":
|
||||||
|
self.cerealFlags = VK_CEREAL_FLAG_HOST
|
||||||
|
else:
|
||||||
|
self.cerealFlags = VK_CEREAL_FLAG_ALL
|
||||||
|
|
||||||
# THe host always needs all possible guest struct definitions, while the guest only needs
|
# THe host always needs all possible guest struct definitions, while the guest only needs
|
||||||
# platform sepcific headers.
|
# platform sepcific headers.
|
||||||
self.hostCommonExtraVulkanHeaders = '#include "vk_android_native_buffer_gfxstream.h"'
|
self.hostCommonExtraVulkanHeaders = '#include "vk_android_native_buffer_gfxstream.h"'
|
||||||
@@ -534,104 +551,106 @@ class BumpPool;
|
|||||||
self.host_script_destination = envGetOrDefault("GFXSTREAM_SCRIPTS_DIR")
|
self.host_script_destination = envGetOrDefault("GFXSTREAM_SCRIPTS_DIR")
|
||||||
assert(self.host_script_destination is not None)
|
assert(self.host_script_destination is not None)
|
||||||
|
|
||||||
self.addGuestEncoderModule(
|
if self.cerealFlags & VK_CEREAL_FLAG_GUEST:
|
||||||
"VkEncoder",
|
self.addGuestEncoderModule(
|
||||||
extraHeader = encoderInclude,
|
"VkEncoder",
|
||||||
extraImpl = encoderImplInclude)
|
extraHeader = encoderInclude,
|
||||||
|
extraImpl = encoderImplInclude)
|
||||||
|
|
||||||
self.addGuestEncoderModule("goldfish_vk_extension_structs_guest",
|
self.addGuestEncoderModule("goldfish_vk_extension_structs_guest",
|
||||||
extraHeader=extensionStructsIncludeGuest)
|
extraHeader=extensionStructsIncludeGuest)
|
||||||
self.addGuestEncoderModule("goldfish_vk_marshaling_guest",
|
self.addGuestEncoderModule("goldfish_vk_marshaling_guest",
|
||||||
extraHeader=commonCerealIncludesGuest + marshalIncludeGuest,
|
extraHeader=commonCerealIncludesGuest + marshalIncludeGuest,
|
||||||
extraImpl=commonCerealImplIncludesGuest)
|
extraImpl=commonCerealImplIncludesGuest)
|
||||||
self.addGuestEncoderModule("goldfish_vk_reserved_marshaling_guest",
|
self.addGuestEncoderModule("goldfish_vk_reserved_marshaling_guest",
|
||||||
extraHeader=commonCerealIncludesGuest + reservedmarshalIncludeGuest,
|
extraHeader=commonCerealIncludesGuest + reservedmarshalIncludeGuest,
|
||||||
extraImpl=commonCerealImplIncludesGuest + reservedmarshalImplIncludeGuest)
|
extraImpl=commonCerealImplIncludesGuest + reservedmarshalImplIncludeGuest)
|
||||||
self.addGuestEncoderModule("goldfish_vk_deepcopy_guest",
|
self.addGuestEncoderModule("goldfish_vk_deepcopy_guest",
|
||||||
extraHeader=commonCerealIncludesGuest + poolIncludeGuest,
|
extraHeader=commonCerealIncludesGuest + poolIncludeGuest,
|
||||||
extraImpl=commonCerealImplIncludesGuest + deepcopyInclude)
|
extraImpl=commonCerealImplIncludesGuest + deepcopyInclude)
|
||||||
self.addGuestEncoderModule("goldfish_vk_counting_guest",
|
self.addGuestEncoderModule("goldfish_vk_counting_guest",
|
||||||
extraHeader=countingIncludes,
|
extraHeader=countingIncludes,
|
||||||
extraImpl=commonCerealImplIncludesGuest)
|
extraImpl=commonCerealImplIncludesGuest)
|
||||||
self.addGuestEncoderModule("goldfish_vk_transform_guest",
|
self.addGuestEncoderModule("goldfish_vk_transform_guest",
|
||||||
extraHeader=commonCerealIncludesGuest + transformIncludeGuest,
|
extraHeader=commonCerealIncludesGuest + transformIncludeGuest,
|
||||||
extraImpl=commonCerealImplIncludesGuest + transformImplIncludeGuest)
|
extraImpl=commonCerealImplIncludesGuest + transformImplIncludeGuest)
|
||||||
self.addGuestEncoderModule(
|
self.addGuestEncoderModule(
|
||||||
"vulkan_gfxstream_structure_type", headerOnly=True, suppressFeatureGuards=True,
|
"vulkan_gfxstream_structure_type", headerOnly=True, suppressFeatureGuards=True,
|
||||||
moduleName="vulkan_gfxstream_structure_type_guest", useNamespace=False,
|
moduleName="vulkan_gfxstream_structure_type_guest", useNamespace=False,
|
||||||
suppressVulkanHeaders=True,
|
suppressVulkanHeaders=True,
|
||||||
extraHeader=createVkExtensionStructureTypePreamble('VK_GOOGLE_GFXSTREAM'))
|
extraHeader=createVkExtensionStructureTypePreamble('VK_GOOGLE_GFXSTREAM'))
|
||||||
|
|
||||||
self.addGuestEncoderModule("func_table", extraImpl=functableImplInclude, implOnly = True,
|
self.addGuestEncoderModule("func_table", extraImpl=functableImplInclude, implOnly = True,
|
||||||
useNamespace = False)
|
useNamespace = False)
|
||||||
|
|
||||||
self.addCppModule("common", "goldfish_vk_extension_structs",
|
self.addWrapper(cereal.VulkanEncoder, "VkEncoder")
|
||||||
extraHeader=extensionStructsInclude)
|
self.addWrapper(cereal.VulkanExtensionStructs, "goldfish_vk_extension_structs_guest", variant = "guest")
|
||||||
self.addCppModule("common", "goldfish_vk_marshaling",
|
self.addWrapper(cereal.VulkanMarshaling, "goldfish_vk_marshaling_guest", variant = "guest")
|
||||||
extraHeader=vulkanStreamIncludeHost,
|
self.addWrapper(cereal.VulkanReservedMarshaling, "goldfish_vk_reserved_marshaling_guest", variant = "guest")
|
||||||
extraImpl=commonCerealImplIncludes)
|
self.addWrapper(cereal.VulkanDeepcopy, "goldfish_vk_deepcopy_guest")
|
||||||
self.addCppModule("common", "goldfish_vk_reserved_marshaling",
|
self.addWrapper(cereal.VulkanCounting, "goldfish_vk_counting_guest")
|
||||||
extraHeader=vulkanStreamIncludeHost,
|
self.addWrapper(cereal.VulkanTransform, "goldfish_vk_transform_guest")
|
||||||
extraImpl=commonCerealImplIncludes)
|
self.addWrapper(cereal.VulkanFuncTable, "func_table")
|
||||||
self.addCppModule("common", "goldfish_vk_deepcopy",
|
self.addWrapper(cereal.VulkanGfxstreamStructureType,
|
||||||
extraHeader=poolInclude,
|
"vulkan_gfxstream_structure_type_guest")
|
||||||
extraImpl=commonCerealImplIncludes + deepcopyInclude)
|
|
||||||
self.addCppModule("common", "goldfish_vk_dispatch",
|
|
||||||
extraHeader=dispatchHeaderDefs,
|
|
||||||
extraImpl=dispatchImplIncludes)
|
|
||||||
self.addCppModule("common", "goldfish_vk_transform",
|
|
||||||
extraHeader=transformInclude,
|
|
||||||
extraImpl=transformImplInclude)
|
|
||||||
self.addHostModule("VkDecoder",
|
|
||||||
extraHeader=decoderHeaderIncludes,
|
|
||||||
extraImpl=decoderImplIncludes,
|
|
||||||
useNamespace=False)
|
|
||||||
self.addHostModule("VkDecoderSnapshot",
|
|
||||||
extraHeader=decoderSnapshotHeaderIncludes,
|
|
||||||
extraImpl=decoderSnapshotImplIncludes,
|
|
||||||
useNamespace=False)
|
|
||||||
self.addHostModule("VkSubDecoder",
|
|
||||||
extraHeader="",
|
|
||||||
extraImpl="",
|
|
||||||
useNamespace=False,
|
|
||||||
implOnly=True)
|
|
||||||
|
|
||||||
self.addModule(cereal.PyScript(self.host_tag, "vulkan_printer", customAbsDir=Path(
|
if self.cerealFlags & VK_CEREAL_FLAG_HOST:
|
||||||
self.host_script_destination) / "print_gfx_logs"), moduleName="ApiLogDecoder")
|
self.addCppModule("common", "goldfish_vk_extension_structs",
|
||||||
self.addHostModule(
|
extraHeader=extensionStructsInclude)
|
||||||
"vulkan_gfxstream_structure_type", headerOnly=True, suppressFeatureGuards=True,
|
self.addCppModule("common", "goldfish_vk_marshaling",
|
||||||
moduleName="vulkan_gfxstream_structure_type_host", useNamespace=False,
|
extraHeader=vulkanStreamIncludeHost,
|
||||||
suppressVulkanHeaders=True,
|
extraImpl=commonCerealImplIncludes)
|
||||||
extraHeader=createVkExtensionStructureTypePreamble('VK_GOOGLE_GFXSTREAM'))
|
self.addCppModule("common", "goldfish_vk_reserved_marshaling",
|
||||||
self.addHostModule(
|
extraHeader=vulkanStreamIncludeHost,
|
||||||
"vk_android_native_buffer_structure_type", headerOnly=True, suppressFeatureGuards=True,
|
extraImpl=commonCerealImplIncludes)
|
||||||
useNamespace=False, suppressVulkanHeaders=True,
|
self.addCppModule("common", "goldfish_vk_deepcopy",
|
||||||
extraHeader=createVkExtensionStructureTypePreamble('VK_ANDROID_NATIVE_BUFFER'))
|
extraHeader=poolInclude,
|
||||||
|
extraImpl=commonCerealImplIncludes + deepcopyInclude)
|
||||||
|
self.addCppModule("common", "goldfish_vk_dispatch",
|
||||||
|
extraHeader=dispatchHeaderDefs,
|
||||||
|
extraImpl=dispatchImplIncludes)
|
||||||
|
self.addCppModule("common", "goldfish_vk_transform",
|
||||||
|
extraHeader=transformInclude,
|
||||||
|
extraImpl=transformImplInclude)
|
||||||
|
self.addHostModule("VkDecoder",
|
||||||
|
extraHeader=decoderHeaderIncludes,
|
||||||
|
extraImpl=decoderImplIncludes,
|
||||||
|
useNamespace=False)
|
||||||
|
self.addHostModule("VkDecoderSnapshot",
|
||||||
|
extraHeader=decoderSnapshotHeaderIncludes,
|
||||||
|
extraImpl=decoderSnapshotImplIncludes,
|
||||||
|
useNamespace=False)
|
||||||
|
self.addHostModule("VkSubDecoder",
|
||||||
|
extraHeader="",
|
||||||
|
extraImpl="",
|
||||||
|
useNamespace=False,
|
||||||
|
implOnly=True)
|
||||||
|
|
||||||
self.addWrapper(cereal.VulkanEncoder, "VkEncoder")
|
self.addModule(cereal.PyScript(self.host_tag, "vulkan_printer", customAbsDir=Path(
|
||||||
self.addWrapper(cereal.VulkanExtensionStructs, "goldfish_vk_extension_structs_guest", variant = "guest")
|
self.host_script_destination) / "print_gfx_logs"), moduleName="ApiLogDecoder")
|
||||||
self.addWrapper(cereal.VulkanMarshaling, "goldfish_vk_marshaling_guest", variant = "guest")
|
self.addHostModule(
|
||||||
self.addWrapper(cereal.VulkanReservedMarshaling, "goldfish_vk_reserved_marshaling_guest", variant = "guest")
|
"vulkan_gfxstream_structure_type", headerOnly=True, suppressFeatureGuards=True,
|
||||||
self.addWrapper(cereal.VulkanDeepcopy, "goldfish_vk_deepcopy_guest")
|
moduleName="vulkan_gfxstream_structure_type_host", useNamespace=False,
|
||||||
self.addWrapper(cereal.VulkanCounting, "goldfish_vk_counting_guest")
|
suppressVulkanHeaders=True,
|
||||||
self.addWrapper(cereal.VulkanTransform, "goldfish_vk_transform_guest")
|
extraHeader=createVkExtensionStructureTypePreamble('VK_GOOGLE_GFXSTREAM'))
|
||||||
self.addWrapper(cereal.VulkanFuncTable, "func_table")
|
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.VulkanExtensionStructs, "goldfish_vk_extension_structs", variant = "host")
|
self.addWrapper(cereal.VulkanExtensionStructs, "goldfish_vk_extension_structs", variant = "host")
|
||||||
self.addWrapper(cereal.VulkanMarshaling, "goldfish_vk_marshaling")
|
self.addWrapper(cereal.VulkanMarshaling, "goldfish_vk_marshaling")
|
||||||
self.addWrapper(cereal.VulkanReservedMarshaling, "goldfish_vk_reserved_marshaling", variant = "host")
|
self.addWrapper(cereal.VulkanReservedMarshaling, "goldfish_vk_reserved_marshaling", variant = "host")
|
||||||
self.addWrapper(cereal.VulkanDeepcopy, "goldfish_vk_deepcopy")
|
self.addWrapper(cereal.VulkanDeepcopy, "goldfish_vk_deepcopy")
|
||||||
self.addWrapper(cereal.VulkanDispatch, "goldfish_vk_dispatch")
|
self.addWrapper(cereal.VulkanDispatch, "goldfish_vk_dispatch")
|
||||||
self.addWrapper(cereal.VulkanTransform, "goldfish_vk_transform", resourceTrackerTypeName="VkDecoderGlobalState")
|
self.addWrapper(cereal.VulkanTransform, "goldfish_vk_transform", resourceTrackerTypeName="VkDecoderGlobalState")
|
||||||
self.addWrapper(cereal.VulkanDecoder, "VkDecoder")
|
self.addWrapper(cereal.VulkanDecoder, "VkDecoder")
|
||||||
self.addWrapper(cereal.VulkanDecoderSnapshot, "VkDecoderSnapshot")
|
self.addWrapper(cereal.VulkanDecoderSnapshot, "VkDecoderSnapshot")
|
||||||
self.addWrapper(cereal.VulkanSubDecoder, "VkSubDecoder")
|
self.addWrapper(cereal.VulkanSubDecoder, "VkSubDecoder")
|
||||||
self.addWrapper(cereal.ApiLogDecoder, "ApiLogDecoder")
|
self.addWrapper(cereal.ApiLogDecoder, "ApiLogDecoder")
|
||||||
self.addWrapper(cereal.VulkanGfxstreamStructureType,
|
self.addWrapper(cereal.VulkanGfxstreamStructureType, "vulkan_gfxstream_structure_type_host")
|
||||||
"vulkan_gfxstream_structure_type_guest")
|
self.addWrapper(cereal.VulkanAndroidNativeBufferStructureType,
|
||||||
self.addWrapper(cereal.VulkanGfxstreamStructureType, "vulkan_gfxstream_structure_type_host")
|
"vk_android_native_buffer_structure_type")
|
||||||
self.addWrapper(cereal.VulkanAndroidNativeBufferStructureType,
|
|
||||||
"vk_android_native_buffer_structure_type")
|
|
||||||
|
|
||||||
def addGuestEncoderModule(
|
def addGuestEncoderModule(
|
||||||
self, basename, extraHeader="", extraImpl="", useNamespace=True, headerOnly=False,
|
self, basename, extraHeader="", extraImpl="", useNamespace=True, headerOnly=False,
|
||||||
|
Reference in New Issue
Block a user