diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-02-12 20:30:49 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-02-12 20:30:49 +0000 |
commit | 4673362dc7cec18bd4ec6bd4fb42277f8e2bb7ba (patch) | |
tree | b6e21a0a5383d83ce44f0160fbb45f9e89546b9d | |
parent | b8dab13c1dcfe36a0b575b471b969bbfd19780f7 (diff) | |
parent | 71f22b2fd1c27fc9cb83f822b0aeab771dabc40e (diff) | |
download | gfxstream-emu-34-release.tar.gz |
Snap for 11438001 from 71f22b2fd1c27fc9cb83f822b0aeab771dabc40e to emu-34-releaseemu-34-release
Change-Id: If2effa04c2e7f7ec10383d2ed746a7a31917554a
64 files changed, 2408 insertions, 215 deletions
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/cerealgenerator.py b/codegen/vulkan/vulkan-docs-next/scripts/cerealgenerator.py index 7cbf6174..7bfaecb6 100644 --- a/codegen/vulkan/vulkan-docs-next/scripts/cerealgenerator.py +++ b/codegen/vulkan/vulkan-docs-next/scripts/cerealgenerator.py @@ -131,6 +131,8 @@ SUPPORTED_FEATURES = [ "VK_EXT_vertex_attribute_divisor", # QNX "VK_QNX_external_memory_screen_buffer", + # b/320855472 Chrome + "VK_EXT_fragment_density_map", ] HOST_MODULES = ["goldfish_vk_extension_structs", "goldfish_vk_marshaling", @@ -193,19 +195,6 @@ autogeneratedHeaderTemplate = """ // python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR // """ - -autogeneratedMkTemplate = """ -# Autogenerated makefile -# %s -# Please do not modify directly; -# re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh, -# or directly from Python by defining: -# VULKAN_REGISTRY_XML_DIR : Directory containing vk.xml -# VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py -# CEREAL_OUTPUT_DIR: Where to put the generated sources. -# python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR -""" - namespaceBegin =""" namespace gfxstream { namespace vk {\n @@ -266,41 +255,13 @@ class CerealGenerator(OutputGenerator): self.featureSupported = False self.supportedModules = None - self.guestBaseLibDirPrefix = \ - envGetOrDefault("VK_CEREAL_GUEST_BASELIB_PREFIX", "aemu/base") - self.baseLibDirPrefix = \ - envGetOrDefault("VK_CEREAL_BASELIB_PREFIX", "aemu/base") - self.baseLibLinkName = \ - envGetOrDefault("VK_CEREAL_BASELIB_LINKNAME", "android-emu-base") - self.vulkanHeaderTargetName = envGetOrDefault("VK_CEREAL_VK_HEADER_TARGET", "") - self.utilsHeader = envGetOrDefault("VK_CEREAL_UTILS_LINKNAME", "") - self.utilsHeaderDirPrefix = envGetOrDefault("VK_CEREAL_UTILS_PREFIX", "utils") + self.guestBaseLibDirPrefix = "aemu/base" + self.baseLibDirPrefix = "aemu/base" + self.utilsHeaderDirPrefix = "utils" # THe host always needs all possible guest struct definitions, while the guest only needs # platform sepcific headers. self.hostCommonExtraVulkanHeaders = '#include "vk_android_native_buffer_gfxstream.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_GOOGLE_gfxstream) -if (WIN32) - target_compile_definitions(OpenglRender_vulkan_cereal PRIVATE -DVK_USE_PLATFORM_WIN32_KHR) -endif() -target_link_libraries( - OpenglRender_vulkan_cereal - PUBLIC - {self.baseLibLinkName} - {self.vulkanHeaderTargetName} - PRIVATE - {self.utilsHeader}) - -target_include_directories(OpenglRender_vulkan_cereal - PUBLIC - . - PRIVATE - .. - ../.. - ../../../include) -""" encoderInclude = f""" #include "{self.guestBaseLibDirPrefix}/AndroidHealthMonitor.h" @@ -496,7 +457,7 @@ using DlSymFunc = void* (void*, const char*); #include <memory> #include "{self.utilsHeaderDirPrefix}/GfxApiLogger.h" #include "{self.baseLibDirPrefix}/HealthMonitor.h" -#include "common/goldfish_vk_private_defs.h" +#include "goldfish_vk_private_defs.h" """ decoderSnapshotImplIncludes = f""" #include "VulkanHandleMapping.h" @@ -522,7 +483,7 @@ class BumpPool; decoderImplIncludes = f""" #include "common/goldfish_vk_marshaling.h" #include "common/goldfish_vk_reserved_marshaling.h" -#include "common/goldfish_vk_private_defs.h" +#include "goldfish_vk_private_defs.h" #include "common/goldfish_vk_transform.h" #include "{self.baseLibDirPrefix}/BumpPool.h" @@ -674,22 +635,6 @@ class BumpPool; self.addWrapper(cereal.VulkanAndroidNativeBufferStructureType, "vk_android_native_buffer_structure_type") - self.guestAndroidMkCppFiles = "" - self.hostCMakeCppFiles = "" - self.hostDecoderCMakeCppFiles = "" - - def addSrcEntry(m): - mkSrcEntry = m.getMakefileSrcEntry() - cmakeSrcEntry = m.getCMakeSrcEntry() - if m.directory == self.guest_encoder_tag: - self.guestAndroidMkCppFiles += mkSrcEntry - elif m.directory == self.host_tag: - self.hostDecoderCMakeCppFiles += cmakeSrcEntry - else: - self.hostCMakeCppFiles += cmakeSrcEntry - - self.forEachModule(addSrcEntry) - def addGuestEncoderModule( self, basename, extraHeader="", extraImpl="", useNamespace=True, headerOnly=False, suppressFeatureGuards=False, moduleName=None, suppressVulkanHeaders=False, implOnly=False): @@ -790,9 +735,6 @@ class BumpPool; def beginFile(self, genOpts): OutputGenerator.beginFile(self, genOpts) - write(self.host_cmake_generator(self.hostCMakeCppFiles), - file = self.outFile) - self.forEachModule(lambda m: m.begin(self.genOpts.directory)) self.forEachWrapper(lambda w: w.onBegin(), None) diff --git a/codegen/vulkan/vulkan-docs-next/scripts/genvk.py b/codegen/vulkan/vulkan-docs-next/scripts/genvk.py index f6dbc295..d4c1ab64 100755 --- a/codegen/vulkan/vulkan-docs-next/scripts/genvk.py +++ b/codegen/vulkan/vulkan-docs-next/scripts/genvk.py @@ -957,7 +957,6 @@ def makeGenOpts(args): CerealGenerator, CGeneratorOptions( conventions = conventions, - filename = "CMakeLists.txt", directory = directory, apiname = 'vulkan', profile = None, @@ -1039,7 +1038,7 @@ def genTarget(args): createGenerator = genOpts[args.target][0] options = genOpts[args.target][1] - logDiag('* Building', options.filename) + logDiag('* Building', args.target) logDiag('* options.versions =', options.versions) logDiag('* options.emitversions =', options.emitversions) logDiag('* options.defaultExtensions =', options.defaultExtensions) @@ -1235,7 +1234,7 @@ if __name__ == '__main__': else: startTimer(args.time) reg.apiGen() - endTimer(args.time, '* Time to generate ' + options.filename + ' =') + endTimer(args.time, '* Time to generate ' + args.target + ' =') if not args.quiet: - logDiag('* Generated', options.filename) + logDiag('* Generated', args.target) diff --git a/guest/OpenglCodecCommon/GLClientState.cpp b/guest/OpenglCodecCommon/GLClientState.cpp index 5846ab5f..968dbd02 100644 --- a/guest/OpenglCodecCommon/GLClientState.cpp +++ b/guest/OpenglCodecCommon/GLClientState.cpp @@ -1909,8 +1909,6 @@ GLenum GLClientState::checkFramebufferAttachmentCompleteness(GLenum target, GLen m_glesMajorVersion, m_glesMinorVersion, m_has_color_buffer_float_extension, m_has_color_buffer_half_float_extension); - if (!renderable) { - ALOGD("%s: rbo not color renderable. format: 0x%x\n", __func__, fbo_format_info.rb_format); } break; } break; @@ -1929,9 +1927,6 @@ GLenum GLClientState::checkFramebufferAttachmentCompleteness(GLenum target, GLen m_glesMajorVersion, m_glesMinorVersion, m_has_color_buffer_float_extension, m_has_color_buffer_half_float_extension); - if (!renderable) { - ALOGD("%s: tex not color renderable. format: 0x%x type 0x%x maj min %d %d floatext %d hfloatext %d\n", __func__, fbo_format_info.tex_internalformat, fbo_format_info.tex_type, m_glesMajorVersion, m_glesMinorVersion, m_has_color_buffer_float_extension, m_has_color_buffer_half_float_extension); - } break; } break; @@ -1940,7 +1935,30 @@ GLenum GLClientState::checkFramebufferAttachmentCompleteness(GLenum target, GLen return GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT; } - if (!renderable) return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT; + if (!renderable) { + switch (fbo_format_info.type) { + case FBO_ATTACHMENT_RENDERBUFFER: + ALOGD("%s: rbo not color renderable. target=0x%x attachment=0x%x rb_format=0x%x " + "gles=%d.%d floatext=%d hfloatext=%d\n", + __func__, target, attachment, fbo_format_info.rb_format, + m_glesMajorVersion, m_glesMinorVersion, + m_has_color_buffer_float_extension, + m_has_color_buffer_half_float_extension); + break; + case FBO_ATTACHMENT_TEXTURE: + ALOGD("%s: tex not color renderable. target=0x%x attachment=0x%x " + "tex_intformat=0x%x tex_format=0x%x tex_type=0x%x gles=%d.%d " + "floatext=%d hfloatext=%d\n", + __func__, target, attachment, fbo_format_info.tex_internalformat, + fbo_format_info.tex_format, fbo_format_info.tex_type, m_glesMajorVersion, + m_glesMinorVersion, m_has_color_buffer_float_extension, + m_has_color_buffer_half_float_extension); + break; + default: + break; + } + return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT; + } // Check dimensions std::shared_ptr<TextureRec> texrec; diff --git a/guest/OpenglSystemCommon/Gralloc.h b/guest/OpenglSystemCommon/Gralloc.h index f5c99cfa..8d59f0b2 100644 --- a/guest/OpenglSystemCommon/Gralloc.h +++ b/guest/OpenglSystemCommon/Gralloc.h @@ -61,6 +61,8 @@ class Gralloc { virtual size_t getAllocatedSize(const native_handle_t* handle) = 0; virtual size_t getAllocatedSize(const AHardwareBuffer* handle) = 0; + + virtual bool treatBlobAsImage() { return false; }; }; } // namespace gfxstream diff --git a/guest/OpenglSystemCommon/GrallocGoldfish.cpp b/guest/OpenglSystemCommon/GrallocGoldfish.cpp index eac99ca5..b32562a6 100644 --- a/guest/OpenglSystemCommon/GrallocGoldfish.cpp +++ b/guest/OpenglSystemCommon/GrallocGoldfish.cpp @@ -79,4 +79,6 @@ size_t GoldfishGralloc::getAllocatedSize(const AHardwareBuffer* ahb) { return getAllocatedSize(handle); } +bool GoldfishGralloc::treatBlobAsImage() { return true; } + } // namespace gfxstream diff --git a/guest/OpenglSystemCommon/GrallocGoldfish.h b/guest/OpenglSystemCommon/GrallocGoldfish.h index 16fa8e5b..2d7b9faf 100644 --- a/guest/OpenglSystemCommon/GrallocGoldfish.h +++ b/guest/OpenglSystemCommon/GrallocGoldfish.h @@ -40,6 +40,8 @@ class GoldfishGralloc : public Gralloc { size_t getAllocatedSize(const native_handle_t* handle) override; size_t getAllocatedSize(const AHardwareBuffer* handle) override; + + bool treatBlobAsImage() override; }; diff --git a/guest/egl/egl.cpp b/guest/egl/egl.cpp index c5b93bdf..4fe27c9f 100644 --- a/guest/egl/egl.cpp +++ b/guest/egl/egl.cpp @@ -214,6 +214,7 @@ EGLContext_t::EGLContext_t(EGLDisplay dpy, EGLConfig config, EGLContext_t* share config(config), read(EGL_NO_SURFACE), draw(EGL_NO_SURFACE), + dummy_surface(EGL_NO_SURFACE), shareCtx(shareCtx), rcContext(0), versionString(NULL), @@ -1712,9 +1713,33 @@ EGLBoolean eglSwapInterval(EGLDisplay dpy, EGLint interval) return EGL_TRUE; } +static EGLConfig chooseDefaultEglConfig(const EGLDisplay& display) { + const EGLint attribs[] = { + EGL_RED_SIZE, 8, + EGL_GREEN_SIZE, 8, + EGL_BLUE_SIZE, 8, + EGL_DEPTH_SIZE, 0, + EGL_SURFACE_TYPE, EGL_PBUFFER_BIT, + EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, + EGL_NONE + }; + EGLint numConfigs; + EGLConfig config; + if (!eglChooseConfig(display, attribs, &config, 1, &numConfigs)) { + ALOGE("eglChooseConfig failed to select a default config"); + return EGL_NO_CONFIG_KHR; + } + return config; +} + EGLContext eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list) { VALIDATE_DISPLAY_INIT(dpy, EGL_NO_CONTEXT); + + if (config == EGL_NO_CONFIG_KHR) { + config = chooseDefaultEglConfig(dpy); + } + VALIDATE_CONFIG(config, EGL_NO_CONTEXT); EGLint majorVersion = 1; //default @@ -1887,10 +1912,32 @@ EGLBoolean eglDestroyContext(EGLDisplay dpy, EGLContext ctx) context->rcContext = 0; } + if (context->dummy_surface != EGL_NO_SURFACE) { + eglDestroySurface(context->dpy, context->dummy_surface); + context->dummy_surface = EGL_NO_SURFACE; + } + delete context; return EGL_TRUE; } +static EGLSurface getOrCreateDummySurface(EGLContext_t* context) { + if (context->dummy_surface != EGL_NO_SURFACE) { + return context->dummy_surface; + } + + EGLint attribs[] = { + EGL_WIDTH, 16, + EGL_HEIGHT, 16, + EGL_NONE}; + + context->dummy_surface = eglCreatePbufferSurface(context->dpy, context->config, attribs); + if (context->dummy_surface == EGL_NO_SURFACE) { + ALOGE("Unable to create a dummy PBuffer EGL surface"); + } + return context->dummy_surface; +} + EGLBoolean eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx) { VALIDATE_DISPLAY_INIT(dpy, EGL_FALSE); @@ -1901,12 +1948,20 @@ EGLBoolean eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLC // thread can suddenly jump in any eglMakeCurrent setTlsDestructor((tlsDtorCallback)s_eglReleaseThreadImpl); + EGLContext_t * context = static_cast<EGLContext_t*>(ctx); + + if (ctx != EGL_NO_CONTEXT && read == EGL_NO_SURFACE) { + read = getOrCreateDummySurface(context); + } + if (ctx != EGL_NO_CONTEXT && draw == EGL_NO_SURFACE) { + draw = getOrCreateDummySurface(context); + } + if ((read == EGL_NO_SURFACE && draw == EGL_NO_SURFACE) && (ctx != EGL_NO_CONTEXT)) setErrorReturn(EGL_BAD_MATCH, EGL_FALSE); if ((read != EGL_NO_SURFACE || draw != EGL_NO_SURFACE) && (ctx == EGL_NO_CONTEXT)) setErrorReturn(EGL_BAD_MATCH, EGL_FALSE); - EGLContext_t * context = static_cast<EGLContext_t*>(ctx); uint32_t ctxHandle = (context) ? context->rcContext : 0; egl_surface_t * drawSurf = static_cast<egl_surface_t *>(draw); uint32_t drawHandle = (drawSurf) ? drawSurf->getRcSurface() : 0; diff --git a/guest/egl/eglContext.h b/guest/egl/eglContext.h index 54987bbc..3ad5e979 100644 --- a/guest/egl/eglContext.h +++ b/guest/egl/eglContext.h @@ -36,6 +36,7 @@ struct EGLContext_t { EGLConfig config; EGLSurface read; EGLSurface draw; + EGLSurface dummy_surface; EGLContext_t * shareCtx; uint32_t rcContext; const char* versionString; diff --git a/guest/vulkan_enc/ResourceTracker.cpp b/guest/vulkan_enc/ResourceTracker.cpp index 202090ae..b2affa9c 100644 --- a/guest/vulkan_enc/ResourceTracker.cpp +++ b/guest/vulkan_enc/ResourceTracker.cpp @@ -3444,7 +3444,8 @@ VkResult ResourceTracker::on_vkAllocateMemory(void* context, VkResult input_resu ResourceTracker::threadingCallbacks.hostConnectionGetFunc()->grallocHelper(); const uint32_t hostHandle = gralloc->getHostHandle(ahw); - if (gralloc->getFormat(ahw) == AHARDWAREBUFFER_FORMAT_BLOB) { + if (gralloc->getFormat(ahw) == AHARDWAREBUFFER_FORMAT_BLOB && + !gralloc->treatBlobAsImage()) { importBufferInfo.buffer = hostHandle; vk_append_struct(&structChainIter, &importBufferInfo); } else { @@ -6496,6 +6497,19 @@ void ResourceTracker::on_vkGetPhysicalDeviceExternalBufferProperties_common( VkExternalBufferProperties* pExternalBufferProperties) { VkEncoder* enc = (VkEncoder*)context; + // Older versions of Goldfish's Gralloc did not support allocating AHARDWAREBUFFER_FORMAT_BLOB + // with GPU usage (b/299520213). + if (ResourceTracker::threadingCallbacks.hostConnectionGetFunc() + ->grallocHelper() + ->treatBlobAsImage() && + pExternalBufferInfo->handleType == + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID) { + pExternalBufferProperties->externalMemoryProperties.externalMemoryFeatures = 0; + pExternalBufferProperties->externalMemoryProperties.exportFromImportedHandleTypes = 0; + pExternalBufferProperties->externalMemoryProperties.compatibleHandleTypes = 0; + return; + } + uint32_t supportedHandleType = 0; #ifdef VK_USE_PLATFORM_FUCHSIA supportedHandleType |= VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA; diff --git a/guest/vulkan_enc/VkEncoder.cpp b/guest/vulkan_enc/VkEncoder.cpp index c9ef5c4e..4ec592d1 100644 --- a/guest/vulkan_enc/VkEncoder.cpp +++ b/guest/vulkan_enc/VkEncoder.cpp @@ -33200,6 +33200,8 @@ void VkEncoder::vkCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uin #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control diff --git a/guest/vulkan_enc/VkEncoder.h b/guest/vulkan_enc/VkEncoder.h index 5a40b306..a9702617 100644 --- a/guest/vulkan_enc/VkEncoder.h +++ b/guest/vulkan_enc/VkEncoder.h @@ -941,6 +941,8 @@ class VkEncoder { #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control diff --git a/guest/vulkan_enc/func_table.cpp b/guest/vulkan_enc/func_table.cpp index c4408c3d..04767571 100644 --- a/guest/vulkan_enc/func_table.cpp +++ b/guest/vulkan_enc/func_table.cpp @@ -5303,6 +5303,8 @@ VkResult gfxstream_vk_GetMemoryAndroidHardwareBufferANDROID( #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control diff --git a/guest/vulkan_enc/goldfish_vk_counting_guest.cpp b/guest/vulkan_enc/goldfish_vk_counting_guest.cpp index 0ca2b287..67669e67 100644 --- a/guest/vulkan_enc/goldfish_vk_counting_guest.cpp +++ b/guest/vulkan_enc/goldfish_vk_counting_guest.cpp @@ -6530,6 +6530,61 @@ void count_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT( #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void count_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + uint32_t featureBits, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toCount, size_t* count) { + (void)featureBits; + (void)rootType; + (void)toCount; + (void)count; + *count += sizeof(VkStructureType); + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = toCount->sType; + } + count_extension_struct(featureBits, rootType, toCount->pNext, count); + *count += sizeof(VkBool32); + *count += sizeof(VkBool32); + *count += sizeof(VkBool32); +} + +void count_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + uint32_t featureBits, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toCount, size_t* count) { + (void)featureBits; + (void)rootType; + (void)toCount; + (void)count; + *count += sizeof(VkStructureType); + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = toCount->sType; + } + count_extension_struct(featureBits, rootType, toCount->pNext, count); + count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->minFragmentDensityTexelSize), + count); + count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->maxFragmentDensityTexelSize), + count); + *count += sizeof(VkBool32); +} + +void count_VkRenderPassFragmentDensityMapCreateInfoEXT( + uint32_t featureBits, VkStructureType rootType, + const VkRenderPassFragmentDensityMapCreateInfoEXT* toCount, size_t* count) { + (void)featureBits; + (void)rootType; + (void)toCount; + (void)count; + *count += sizeof(VkStructureType); + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = toCount->sType; + } + count_extension_struct(featureBits, rootType, toCount->pNext, count); + count_VkAttachmentReference(featureBits, rootType, + (VkAttachmentReference*)(&toCount->fragmentDensityMapAttachment), + count); +} + +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control @@ -8206,6 +8261,105 @@ void count_extension_struct(uint32_t featureBits, VkStructureType rootType, break; } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: { + count_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + featureBits, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension), + count); + break; + } + case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: { + count_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + featureBits, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension), + count); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + count_VkImportColorBufferGOOGLE( + featureBits, rootType, + reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension), count); + break; + } + default: { + count_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + featureBits, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension), + count); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: { + count_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + featureBits, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension), + count); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + count_VkCreateBlobGOOGLE( + featureBits, rootType, + reinterpret_cast<const VkCreateBlobGOOGLE*>(structExtension), count); + break; + } + default: { + count_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + featureBits, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension), + count); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: { + count_VkRenderPassFragmentDensityMapCreateInfoEXT( + featureBits, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension), + count); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: { + count_VkRenderPassFragmentDensityMapCreateInfoEXT( + featureBits, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension), + count); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + count_VkImportBufferGOOGLE( + featureBits, rootType, + reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension), count); + break; + } + default: { + count_VkRenderPassFragmentDensityMapCreateInfoEXT( + featureBits, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension), + count); + break; + } + } + break; + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { count_VkPhysicalDeviceProvokingVertexFeaturesEXT( diff --git a/guest/vulkan_enc/goldfish_vk_counting_guest.h b/guest/vulkan_enc/goldfish_vk_counting_guest.h index d8db6b2e..3e8250b2 100644 --- a/guest/vulkan_enc/goldfish_vk_counting_guest.h +++ b/guest/vulkan_enc/goldfish_vk_counting_guest.h @@ -1575,6 +1575,20 @@ DEFINE_ALIAS_FUNCTION(count_VkPipelineCreationFeedback, count_VkPipelineCreation #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void count_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + uint32_t featureBits, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toCount, size_t* count); + +void count_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + uint32_t featureBits, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toCount, size_t* count); + +void count_VkRenderPassFragmentDensityMapCreateInfoEXT( + uint32_t featureBits, VkStructureType rootType, + const VkRenderPassFragmentDensityMapCreateInfoEXT* toCount, size_t* count); + +#endif #ifdef VK_EXT_scalar_block_layout DEFINE_ALIAS_FUNCTION(count_VkPhysicalDeviceScalarBlockLayoutFeatures, count_VkPhysicalDeviceScalarBlockLayoutFeaturesEXT) diff --git a/guest/vulkan_enc/goldfish_vk_deepcopy_guest.cpp b/guest/vulkan_enc/goldfish_vk_deepcopy_guest.cpp index 23cc6249..887d9879 100644 --- a/guest/vulkan_enc/goldfish_vk_deepcopy_guest.cpp +++ b/guest/vulkan_enc/goldfish_vk_deepcopy_guest.cpp @@ -7555,6 +7555,83 @@ void deepcopy_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT( #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void deepcopy_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + Allocator* alloc, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* from, + VkPhysicalDeviceFragmentDensityMapFeaturesEXT* to) { + (void)alloc; + (void)rootType; + *to = *from; + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = from->sType; + } + const void* from_pNext = from; + size_t pNext_size = 0u; + while (!pNext_size && from_pNext) { + from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext; + pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext); + } + to->pNext = nullptr; + if (pNext_size) { + to->pNext = (void*)alloc->alloc(pNext_size); + deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext)); + } +} + +void deepcopy_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + Allocator* alloc, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* from, + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* to) { + (void)alloc; + (void)rootType; + *to = *from; + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = from->sType; + } + const void* from_pNext = from; + size_t pNext_size = 0u; + while (!pNext_size && from_pNext) { + from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext; + pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext); + } + to->pNext = nullptr; + if (pNext_size) { + to->pNext = (void*)alloc->alloc(pNext_size); + deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext)); + } + deepcopy_VkExtent2D(alloc, rootType, &from->minFragmentDensityTexelSize, + (VkExtent2D*)(&to->minFragmentDensityTexelSize)); + deepcopy_VkExtent2D(alloc, rootType, &from->maxFragmentDensityTexelSize, + (VkExtent2D*)(&to->maxFragmentDensityTexelSize)); +} + +void deepcopy_VkRenderPassFragmentDensityMapCreateInfoEXT( + Allocator* alloc, VkStructureType rootType, + const VkRenderPassFragmentDensityMapCreateInfoEXT* from, + VkRenderPassFragmentDensityMapCreateInfoEXT* to) { + (void)alloc; + (void)rootType; + *to = *from; + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = from->sType; + } + const void* from_pNext = from; + size_t pNext_size = 0u; + while (!pNext_size && from_pNext) { + from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext; + pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext); + } + to->pNext = nullptr; + if (pNext_size) { + to->pNext = (void*)alloc->alloc(pNext_size); + deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext)); + } + deepcopy_VkAttachmentReference(alloc, rootType, &from->fragmentDensityMapAttachment, + (VkAttachmentReference*)(&to->fragmentDensityMapAttachment)); +} + +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control @@ -9560,6 +9637,116 @@ void deepcopy_extension_struct(Allocator* alloc, VkStructureType rootType, break; } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: { + deepcopy_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + alloc, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension), + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: { + deepcopy_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + alloc, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension), + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + deepcopy_VkImportColorBufferGOOGLE( + alloc, rootType, + reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension), + reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out)); + break; + } + default: { + deepcopy_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + alloc, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension), + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out)); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: { + deepcopy_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + alloc, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension), + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + deepcopy_VkCreateBlobGOOGLE( + alloc, rootType, + reinterpret_cast<const VkCreateBlobGOOGLE*>(structExtension), + reinterpret_cast<VkCreateBlobGOOGLE*>(structExtension_out)); + break; + } + default: { + deepcopy_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + alloc, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension), + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension_out)); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: { + deepcopy_VkRenderPassFragmentDensityMapCreateInfoEXT( + alloc, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension), + reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: { + deepcopy_VkRenderPassFragmentDensityMapCreateInfoEXT( + alloc, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension), + reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + deepcopy_VkImportBufferGOOGLE( + alloc, rootType, + reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension), + reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out)); + break; + } + default: { + deepcopy_VkRenderPassFragmentDensityMapCreateInfoEXT( + alloc, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension), + reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out)); + break; + } + } + break; + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { deepcopy_VkPhysicalDeviceProvokingVertexFeaturesEXT( diff --git a/guest/vulkan_enc/goldfish_vk_deepcopy_guest.h b/guest/vulkan_enc/goldfish_vk_deepcopy_guest.h index da8bc907..393a1e77 100644 --- a/guest/vulkan_enc/goldfish_vk_deepcopy_guest.h +++ b/guest/vulkan_enc/goldfish_vk_deepcopy_guest.h @@ -1722,6 +1722,23 @@ DEFINE_ALIAS_FUNCTION(deepcopy_VkPipelineCreationFeedback, deepcopy_VkPipelineCr #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void deepcopy_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + Allocator* alloc, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* from, + VkPhysicalDeviceFragmentDensityMapFeaturesEXT* to); + +void deepcopy_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + Allocator* alloc, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* from, + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* to); + +void deepcopy_VkRenderPassFragmentDensityMapCreateInfoEXT( + Allocator* alloc, VkStructureType rootType, + const VkRenderPassFragmentDensityMapCreateInfoEXT* from, + VkRenderPassFragmentDensityMapCreateInfoEXT* to); + +#endif #ifdef VK_EXT_scalar_block_layout DEFINE_ALIAS_FUNCTION(deepcopy_VkPhysicalDeviceScalarBlockLayoutFeatures, deepcopy_VkPhysicalDeviceScalarBlockLayoutFeaturesEXT) diff --git a/guest/vulkan_enc/goldfish_vk_extension_structs_guest.cpp b/guest/vulkan_enc/goldfish_vk_extension_structs_guest.cpp index 979fed21..f4827d09 100644 --- a/guest/vulkan_enc/goldfish_vk_extension_structs_guest.cpp +++ b/guest/vulkan_enc/goldfish_vk_extension_structs_guest.cpp @@ -162,6 +162,8 @@ namespace vk { #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control @@ -632,6 +634,64 @@ size_t goldfish_vk_extension_struct_size(VkStructureType rootType, const void* s return sizeof(VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT); } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: { + return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT); + break; + } + case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: { + return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + return sizeof(VkImportColorBufferGOOGLE); + break; + } + default: { + return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT); + break; + } + } + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: { + return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + return sizeof(VkCreateBlobGOOGLE); + break; + } + default: { + return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT); + break; + } + } + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: { + return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: { + return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + return sizeof(VkImportBufferGOOGLE); + break; + } + default: { + return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT); + break; + } + } + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { return sizeof(VkPhysicalDeviceProvokingVertexFeaturesEXT); @@ -1185,6 +1245,64 @@ size_t goldfish_vk_extension_struct_size_with_stream_features(uint32_t streamFea return sizeof(VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT); } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: { + return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT); + break; + } + case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: { + return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + return sizeof(VkImportColorBufferGOOGLE); + break; + } + default: { + return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT); + break; + } + } + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: { + return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + return sizeof(VkCreateBlobGOOGLE); + break; + } + default: { + return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT); + break; + } + } + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: { + return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: { + return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + return sizeof(VkImportBufferGOOGLE); + break; + } + default: { + return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT); + break; + } + } + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { return sizeof(VkPhysicalDeviceProvokingVertexFeaturesEXT); diff --git a/guest/vulkan_enc/goldfish_vk_extension_structs_guest.h b/guest/vulkan_enc/goldfish_vk_extension_structs_guest.h index 71c73903..48a4442f 100644 --- a/guest/vulkan_enc/goldfish_vk_extension_structs_guest.h +++ b/guest/vulkan_enc/goldfish_vk_extension_structs_guest.h @@ -182,6 +182,8 @@ size_t goldfish_vk_extension_struct_size_with_stream_features(uint32_t streamFea #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control diff --git a/guest/vulkan_enc/goldfish_vk_marshaling_guest.cpp b/guest/vulkan_enc/goldfish_vk_marshaling_guest.cpp index 3edd3228..9dd6ef2f 100644 --- a/guest/vulkan_enc/goldfish_vk_marshaling_guest.cpp +++ b/guest/vulkan_enc/goldfish_vk_marshaling_guest.cpp @@ -12194,6 +12194,100 @@ void unmarshal_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT( #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void marshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forMarshaling) { + (void)rootType; + vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType)); + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forMarshaling->sType; + } + marshal_extension_struct(vkStream, rootType, forMarshaling->pNext); + vkStream->write((VkBool32*)&forMarshaling->fragmentDensityMap, sizeof(VkBool32)); + vkStream->write((VkBool32*)&forMarshaling->fragmentDensityMapDynamic, sizeof(VkBool32)); + vkStream->write((VkBool32*)&forMarshaling->fragmentDensityMapNonSubsampledImages, + sizeof(VkBool32)); +} + +void unmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forUnmarshaling) { + (void)rootType; + vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType)); + forUnmarshaling->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT; + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forUnmarshaling->sType; + } + unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext)); + vkStream->read((VkBool32*)&forUnmarshaling->fragmentDensityMap, sizeof(VkBool32)); + vkStream->read((VkBool32*)&forUnmarshaling->fragmentDensityMapDynamic, sizeof(VkBool32)); + vkStream->read((VkBool32*)&forUnmarshaling->fragmentDensityMapNonSubsampledImages, + sizeof(VkBool32)); +} + +void marshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forMarshaling) { + (void)rootType; + vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType)); + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forMarshaling->sType; + } + marshal_extension_struct(vkStream, rootType, forMarshaling->pNext); + marshal_VkExtent2D(vkStream, rootType, + (VkExtent2D*)(&forMarshaling->minFragmentDensityTexelSize)); + marshal_VkExtent2D(vkStream, rootType, + (VkExtent2D*)(&forMarshaling->maxFragmentDensityTexelSize)); + vkStream->write((VkBool32*)&forMarshaling->fragmentDensityInvocations, sizeof(VkBool32)); +} + +void unmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forUnmarshaling) { + (void)rootType; + vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType)); + forUnmarshaling->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT; + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forUnmarshaling->sType; + } + unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext)); + unmarshal_VkExtent2D(vkStream, rootType, + (VkExtent2D*)(&forUnmarshaling->minFragmentDensityTexelSize)); + unmarshal_VkExtent2D(vkStream, rootType, + (VkExtent2D*)(&forUnmarshaling->maxFragmentDensityTexelSize)); + vkStream->read((VkBool32*)&forUnmarshaling->fragmentDensityInvocations, sizeof(VkBool32)); +} + +void marshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + const VkRenderPassFragmentDensityMapCreateInfoEXT* forMarshaling) { + (void)rootType; + vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType)); + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forMarshaling->sType; + } + marshal_extension_struct(vkStream, rootType, forMarshaling->pNext); + marshal_VkAttachmentReference( + vkStream, rootType, (VkAttachmentReference*)(&forMarshaling->fragmentDensityMapAttachment)); +} + +void unmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + VkRenderPassFragmentDensityMapCreateInfoEXT* forUnmarshaling) { + (void)rootType; + vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType)); + forUnmarshaling->sType = VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT; + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forUnmarshaling->sType; + } + unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext)); + unmarshal_VkAttachmentReference( + vkStream, rootType, + (VkAttachmentReference*)(&forUnmarshaling->fragmentDensityMapAttachment)); +} + +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control @@ -14307,6 +14401,97 @@ void marshal_extension_struct(VulkanStreamGuest* vkStream, VkStructureType rootT break; } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: { + marshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension)); + break; + } + case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: { + marshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + marshal_VkImportColorBufferGOOGLE( + vkStream, rootType, + reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension)); + break; + } + default: { + marshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension)); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: { + marshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + vkStream, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + marshal_VkCreateBlobGOOGLE( + vkStream, rootType, + reinterpret_cast<const VkCreateBlobGOOGLE*>(structExtension)); + break; + } + default: { + marshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + vkStream, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension)); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: { + marshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension)); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: { + marshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + marshal_VkImportBufferGOOGLE( + vkStream, rootType, + reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension)); + break; + } + default: { + marshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension)); + break; + } + } + break; + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { marshal_VkPhysicalDeviceProvokingVertexFeaturesEXT( @@ -15405,6 +15590,97 @@ void unmarshal_extension_struct(VulkanStreamGuest* vkStream, VkStructureType roo break; } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: { + unmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: { + unmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + unmarshal_VkImportColorBufferGOOGLE( + vkStream, rootType, + reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out)); + break; + } + default: { + unmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out)); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: { + unmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + vkStream, rootType, + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + unmarshal_VkCreateBlobGOOGLE( + vkStream, rootType, + reinterpret_cast<VkCreateBlobGOOGLE*>(structExtension_out)); + break; + } + default: { + unmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + vkStream, rootType, + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension_out)); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: { + unmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: { + unmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + unmarshal_VkImportBufferGOOGLE( + vkStream, rootType, + reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out)); + break; + } + default: { + unmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out)); + break; + } + } + break; + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { unmarshal_VkPhysicalDeviceProvokingVertexFeaturesEXT( diff --git a/guest/vulkan_enc/goldfish_vk_marshaling_guest.h b/guest/vulkan_enc/goldfish_vk_marshaling_guest.h index 008d90e5..e981c85d 100644 --- a/guest/vulkan_enc/goldfish_vk_marshaling_guest.h +++ b/guest/vulkan_enc/goldfish_vk_marshaling_guest.h @@ -3252,6 +3252,32 @@ DEFINE_ALIAS_FUNCTION(unmarshal_VkPipelineCreationFeedback, unmarshal_VkPipeline #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void marshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forMarshaling); + +void unmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forUnmarshaling); + +void marshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forMarshaling); + +void unmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forUnmarshaling); + +void marshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + const VkRenderPassFragmentDensityMapCreateInfoEXT* forMarshaling); + +void unmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + VkRenderPassFragmentDensityMapCreateInfoEXT* forUnmarshaling); + +#endif #ifdef VK_EXT_scalar_block_layout DEFINE_ALIAS_FUNCTION(marshal_VkPhysicalDeviceScalarBlockLayoutFeatures, marshal_VkPhysicalDeviceScalarBlockLayoutFeaturesEXT) diff --git a/guest/vulkan_enc/goldfish_vk_reserved_marshaling_guest.cpp b/guest/vulkan_enc/goldfish_vk_reserved_marshaling_guest.cpp index 6c223e7f..5ebb12b6 100644 --- a/guest/vulkan_enc/goldfish_vk_reserved_marshaling_guest.cpp +++ b/guest/vulkan_enc/goldfish_vk_reserved_marshaling_guest.cpp @@ -8208,6 +8208,63 @@ void reservedmarshal_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT( #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void reservedmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forMarshaling, uint8_t** ptr) { + (void)vkStream; + (void)rootType; + memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType)); + *ptr += sizeof(VkStructureType); + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forMarshaling->sType; + } + reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr); + memcpy(*ptr, (VkBool32*)&forMarshaling->fragmentDensityMap, sizeof(VkBool32)); + *ptr += sizeof(VkBool32); + memcpy(*ptr, (VkBool32*)&forMarshaling->fragmentDensityMapDynamic, sizeof(VkBool32)); + *ptr += sizeof(VkBool32); + memcpy(*ptr, (VkBool32*)&forMarshaling->fragmentDensityMapNonSubsampledImages, + sizeof(VkBool32)); + *ptr += sizeof(VkBool32); +} + +void reservedmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forMarshaling, uint8_t** ptr) { + (void)vkStream; + (void)rootType; + memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType)); + *ptr += sizeof(VkStructureType); + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forMarshaling->sType; + } + reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr); + reservedmarshal_VkExtent2D(vkStream, rootType, + (VkExtent2D*)(&forMarshaling->minFragmentDensityTexelSize), ptr); + reservedmarshal_VkExtent2D(vkStream, rootType, + (VkExtent2D*)(&forMarshaling->maxFragmentDensityTexelSize), ptr); + memcpy(*ptr, (VkBool32*)&forMarshaling->fragmentDensityInvocations, sizeof(VkBool32)); + *ptr += sizeof(VkBool32); +} + +void reservedmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + const VkRenderPassFragmentDensityMapCreateInfoEXT* forMarshaling, uint8_t** ptr) { + (void)vkStream; + (void)rootType; + memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType)); + *ptr += sizeof(VkStructureType); + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forMarshaling->sType; + } + reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr); + reservedmarshal_VkAttachmentReference( + vkStream, rootType, (VkAttachmentReference*)(&forMarshaling->fragmentDensityMapAttachment), + ptr); +} + +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control @@ -9961,6 +10018,105 @@ void reservedmarshal_extension_struct(VulkanStreamGuest* vkStream, VkStructureTy break; } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: { + reservedmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension), + ptr); + break; + } + case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: { + reservedmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension), + ptr); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + reservedmarshal_VkImportColorBufferGOOGLE( + vkStream, rootType, + reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension), ptr); + break; + } + default: { + reservedmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension), + ptr); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: { + reservedmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + vkStream, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension), + ptr); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + reservedmarshal_VkCreateBlobGOOGLE( + vkStream, rootType, + reinterpret_cast<const VkCreateBlobGOOGLE*>(structExtension), ptr); + break; + } + default: { + reservedmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + vkStream, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension), + ptr); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: { + reservedmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension), + ptr); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: { + reservedmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension), + ptr); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + reservedmarshal_VkImportBufferGOOGLE( + vkStream, rootType, + reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension), ptr); + break; + } + default: { + reservedmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension), + ptr); + break; + } + } + break; + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { reservedmarshal_VkPhysicalDeviceProvokingVertexFeaturesEXT( diff --git a/guest/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h b/guest/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h index ac2de297..13bac311 100644 --- a/guest/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h +++ b/guest/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h @@ -1749,6 +1749,20 @@ DEFINE_ALIAS_FUNCTION(reservedmarshal_VkPipelineCreationFeedback, #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void reservedmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forMarshaling, uint8_t** ptr); + +void reservedmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forMarshaling, uint8_t** ptr); + +void reservedmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + VulkanStreamGuest* vkStream, VkStructureType rootType, + const VkRenderPassFragmentDensityMapCreateInfoEXT* forMarshaling, uint8_t** ptr); + +#endif #ifdef VK_EXT_scalar_block_layout DEFINE_ALIAS_FUNCTION(reservedmarshal_VkPhysicalDeviceScalarBlockLayoutFeatures, reservedmarshal_VkPhysicalDeviceScalarBlockLayoutFeaturesEXT) diff --git a/guest/vulkan_enc/goldfish_vk_transform_guest.cpp b/guest/vulkan_enc/goldfish_vk_transform_guest.cpp index 8aa5c7d0..e6c66737 100644 --- a/guest/vulkan_enc/goldfish_vk_transform_guest.cpp +++ b/guest/vulkan_enc/goldfish_vk_transform_guest.cpp @@ -7022,6 +7022,76 @@ void transform_fromhost_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT( #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void transform_tohost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + ResourceTracker* resourceTracker, VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toTransform) { + (void)resourceTracker; + (void)toTransform; + if (toTransform->pNext) { + transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext)); + } +} + +void transform_fromhost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + ResourceTracker* resourceTracker, VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toTransform) { + (void)resourceTracker; + (void)toTransform; + if (toTransform->pNext) { + transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext)); + } +} + +void transform_tohost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + ResourceTracker* resourceTracker, + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toTransform) { + (void)resourceTracker; + (void)toTransform; + if (toTransform->pNext) { + transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext)); + } + transform_tohost_VkExtent2D(resourceTracker, + (VkExtent2D*)(&toTransform->minFragmentDensityTexelSize)); + transform_tohost_VkExtent2D(resourceTracker, + (VkExtent2D*)(&toTransform->maxFragmentDensityTexelSize)); +} + +void transform_fromhost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + ResourceTracker* resourceTracker, + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toTransform) { + (void)resourceTracker; + (void)toTransform; + if (toTransform->pNext) { + transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext)); + } + transform_fromhost_VkExtent2D(resourceTracker, + (VkExtent2D*)(&toTransform->minFragmentDensityTexelSize)); + transform_fromhost_VkExtent2D(resourceTracker, + (VkExtent2D*)(&toTransform->maxFragmentDensityTexelSize)); +} + +void transform_tohost_VkRenderPassFragmentDensityMapCreateInfoEXT( + ResourceTracker* resourceTracker, VkRenderPassFragmentDensityMapCreateInfoEXT* toTransform) { + (void)resourceTracker; + (void)toTransform; + if (toTransform->pNext) { + transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext)); + } + transform_tohost_VkAttachmentReference( + resourceTracker, (VkAttachmentReference*)(&toTransform->fragmentDensityMapAttachment)); +} + +void transform_fromhost_VkRenderPassFragmentDensityMapCreateInfoEXT( + ResourceTracker* resourceTracker, VkRenderPassFragmentDensityMapCreateInfoEXT* toTransform) { + (void)resourceTracker; + (void)toTransform; + if (toTransform->pNext) { + transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext)); + } + transform_fromhost_VkAttachmentReference( + resourceTracker, (VkAttachmentReference*)(&toTransform->fragmentDensityMapAttachment)); +} + +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control @@ -8679,6 +8749,26 @@ void transform_tohost_extension_struct(ResourceTracker* resourceTracker, break; } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + transform_tohost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + resourceTracker, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + transform_tohost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + resourceTracker, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + transform_tohost_VkRenderPassFragmentDensityMapCreateInfoEXT( + resourceTracker, reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out)); + break; + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { transform_tohost_VkPhysicalDeviceProvokingVertexFeaturesEXT( @@ -9725,6 +9815,26 @@ void transform_fromhost_extension_struct(ResourceTracker* resourceTracker, break; } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + transform_fromhost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + resourceTracker, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + transform_fromhost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + resourceTracker, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + transform_fromhost_VkRenderPassFragmentDensityMapCreateInfoEXT( + resourceTracker, reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out)); + break; + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { transform_fromhost_VkPhysicalDeviceProvokingVertexFeaturesEXT( diff --git a/guest/vulkan_enc/goldfish_vk_transform_guest.h b/guest/vulkan_enc/goldfish_vk_transform_guest.h index fb8ef89b..540e703f 100644 --- a/guest/vulkan_enc/goldfish_vk_transform_guest.h +++ b/guest/vulkan_enc/goldfish_vk_transform_guest.h @@ -2763,6 +2763,26 @@ DEFINE_ALIAS_FUNCTION(transform_fromhost_VkPipelineCreationFeedback, #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void transform_tohost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + ResourceTracker* resourceTracker, VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toTransform); + +void transform_fromhost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + ResourceTracker* resourceTracker, VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toTransform); + +void transform_tohost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + ResourceTracker* resourceTracker, VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toTransform); + +void transform_fromhost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + ResourceTracker* resourceTracker, VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toTransform); + +void transform_tohost_VkRenderPassFragmentDensityMapCreateInfoEXT( + ResourceTracker* resourceTracker, VkRenderPassFragmentDensityMapCreateInfoEXT* toTransform); + +void transform_fromhost_VkRenderPassFragmentDensityMapCreateInfoEXT( + ResourceTracker* resourceTracker, VkRenderPassFragmentDensityMapCreateInfoEXT* toTransform); + +#endif #ifdef VK_EXT_scalar_block_layout DEFINE_ALIAS_FUNCTION(transform_tohost_VkPhysicalDeviceScalarBlockLayoutFeatures, transform_tohost_VkPhysicalDeviceScalarBlockLayoutFeaturesEXT) diff --git a/host/Android.bp b/host/Android.bp index 203ee3c5..57675f80 100644 --- a/host/Android.bp +++ b/host/Android.bp @@ -18,7 +18,7 @@ package { cc_library_shared { name: "libgfxstream_backend", - defaults: [ "gfxstream_defaults" ], + defaults: ["gfxstream_defaults"], vendor_available: true, cflags: [ "-Wno-unused-parameter", @@ -28,6 +28,7 @@ cc_library_shared { ], header_libs: [ "gfxstream_opengl_headers", + "gfxstream_vulkan_cereal_common", ], static_libs: [ "gfxstream_base", @@ -102,11 +103,11 @@ cc_library_shared { ], target: { host: { - srcs: ["NativeSubWindow_x11.cpp",], + srcs: ["NativeSubWindow_x11.cpp"], }, android: { - srcs: ["NativeSubWindow_android.cpp",], - } + srcs: ["NativeSubWindow_android.cpp"], + }, }, } @@ -147,7 +148,7 @@ cc_test_library { cc_library { name: "libgfxstream_test_image_utils", - defaults: [ "gfxstream_defaults" ], + defaults: ["gfxstream_defaults"], shared_libs: [ "libbase", ], @@ -162,7 +163,7 @@ cc_library { // Run with `atest --host gfxstream_compositorvk_test` cc_test_host { name: "gfxstream_compositorvk_test", - defaults: [ "gfxstream_defaults" ], + defaults: ["gfxstream_defaults"], srcs: [ "tests/CompositorVk_unittest.cpp", ], @@ -217,7 +218,7 @@ cc_test_host { // Run with `atest --host gfxstream_framebuffer_tests` cc_test_host { name: "gfxstream_framebuffer_tests", - defaults: [ "gfxstream_defaults" ], + defaults: ["gfxstream_defaults"], srcs: [ "tests/FrameBuffer_unittest.cpp", ], @@ -249,7 +250,7 @@ cc_test_host { cc_test_host { name: "gfxstream_magma_tests", - defaults: [ "gfxstream_defaults" ], + defaults: ["gfxstream_defaults"], srcs: [ "tests/Magma_unittest.cpp", ], diff --git a/host/CMakeLists.txt b/host/CMakeLists.txt index a36dbda8..2d6184ee 100644 --- a/host/CMakeLists.txt +++ b/host/CMakeLists.txt @@ -98,6 +98,7 @@ target_include_directories( ${GFXSTREAM_REPO_ROOT}/host/magma ${GFXSTREAM_REPO_ROOT}/host/magma/magma_dec ${GFXSTREAM_REPO_ROOT}/host/vulkan + ${GFXSTREAM_REPO_ROOT}/host/vulkan/cereal/common ${GFXSTREAM_REPO_ROOT}/third-party/fuchsia/magma/include ${GFXSTREAM_REPO_ROOT}/third-party/glm/include) diff --git a/host/ContextHelper.h b/host/ContextHelper.h index a15503bf..3aa811ae 100644 --- a/host/ContextHelper.h +++ b/host/ContextHelper.h @@ -48,29 +48,23 @@ class ContextHelper { class RecursiveScopedContextBind { public: RecursiveScopedContextBind(ContextHelper* helper) : mHelper(helper) { - if (helper->isBound()) return; - if (!helper->setupContext()) { - mHelper = nullptr; - return; - } - mNeedUnbind = true; + mIsBound = helper->setupContext(); } - bool isOk() const { return mHelper != nullptr; } + bool isOk() const { return mIsBound; } ~RecursiveScopedContextBind() { release(); } void release() { - if (mNeedUnbind) { + if (mIsBound) { mHelper->teardownContext(); - mNeedUnbind = false; + mIsBound = false; } - mHelper = nullptr; } private: ContextHelper* mHelper; - bool mNeedUnbind = false; + bool mIsBound = false; }; } // namespace gfxstream diff --git a/host/FrameBuffer.h b/host/FrameBuffer.h index 4bffeae0..60a6a357 100644 --- a/host/FrameBuffer.h +++ b/host/FrameBuffer.h @@ -659,7 +659,6 @@ class FrameBuffer : public android::base::EventNotificationSupport<FrameBufferCh const int getDisplayActiveConfig(); bool flushColorBufferFromGl(HandleType colorBufferHandle); - bool flushColorBufferFromGlLocked(HandleType colorBufferHandle); bool flushColorBufferFromVk(HandleType colorBufferHandle); bool flushColorBufferFromVkBytes(HandleType colorBufferHandle, const void* bytes, size_t bytesSize); bool invalidateColorBufferForGl(HandleType colorBufferHandle); diff --git a/host/RenderControl.cpp b/host/RenderControl.cpp index 46fca43a..2c84d45a 100644 --- a/host/RenderControl.cpp +++ b/host/RenderControl.cpp @@ -1101,7 +1101,7 @@ static void rcTriggerWait(uint64_t eglsync_ptr, thread_ptr, timeline); SyncThread::get()->triggerWaitVkQsri(reinterpret_cast<VkImage>(eglsync_ptr), timeline); } else { - EmulatedEglFenceSync* fenceSync = reinterpret_cast<EmulatedEglFenceSync*>(eglsync_ptr); + EmulatedEglFenceSync* fenceSync = EmulatedEglFenceSync::getFromHandle(eglsync_ptr); FrameBuffer *fb = FrameBuffer::getFB(); if (fb && fenceSync && fenceSync->isCompositionFence()) { fb->scheduleVsyncTask([eglsync_ptr, fenceSync, timeline](uint64_t) { diff --git a/host/gl/ColorBufferGl.cpp b/host/gl/ColorBufferGl.cpp index c7e5d1ae..085976a2 100644 --- a/host/gl/ColorBufferGl.cpp +++ b/host/gl/ColorBufferGl.cpp @@ -226,7 +226,7 @@ std::unique_ptr<ColorBufferGl> ColorBufferGl::create(EGLDisplay p_display, int p if (!sGetFormatParameters(&p_internalFormat, &texFormat, &pixelType, &bytesPerPixel, &p_sizedInternalFormat, &isBlob)) { - fprintf(stderr, "ColorBufferGl::create invalid format 0x%x\n", p_internalFormat); + ERR("ColorBufferGl::create invalid format 0x%x", p_internalFormat); return nullptr; } const unsigned long bufsize = ((unsigned long)bytesPerPixel) * p_width @@ -624,7 +624,6 @@ bool ColorBufferGl::readContents(size_t* numBytes, void* pixels) { *numBytes = m_numBytes; if (!pixels) return true; - RecursiveScopedContextBind context(m_helper); readPixels(0, 0, m_width, m_height, m_format, m_type, pixels); diff --git a/host/gl/DisplaySurfaceGl.cpp b/host/gl/DisplaySurfaceGl.cpp index e3bc133d..88fff8dd 100644 --- a/host/gl/DisplaySurfaceGl.cpp +++ b/host/gl/DisplaySurfaceGl.cpp @@ -14,6 +14,10 @@ #include "DisplaySurfaceGl.h" +#include <vector> + +#include <stdio.h> + #include "OpenGLESDispatch/DispatchTables.h" #include "OpenGLESDispatch/EGLDispatch.h" #include "host-common/GfxstreamFatalError.h" @@ -26,6 +30,18 @@ namespace { using emugl::ABORT_REASON_OTHER; using emugl::FatalError; +struct PreviousContextInfo { + EGLContext context = EGL_NO_CONTEXT; + EGLSurface readSurface = EGL_NO_SURFACE; + EGLSurface drawSurface = EGL_NO_SURFACE; +}; + +struct ThreadState { + std::vector<PreviousContextInfo> previousContexts; +}; + +static thread_local ThreadState sThreadState; + class DisplaySurfaceGlContextHelper : public ContextHelper { public: DisplaySurfaceGlContextHelper(EGLDisplay display, @@ -49,65 +65,73 @@ class DisplaySurfaceGlContextHelper : public ContextHelper { } bool setupContext() override { + auto& previousContexts = sThreadState.previousContexts; + EGLContext currentContext = s_egl.eglGetCurrentContext(); EGLSurface currentDrawSurface = s_egl.eglGetCurrentSurface(EGL_DRAW); EGLSurface currentReadSurface = s_egl.eglGetCurrentSurface(EGL_READ); - if (currentContext != mContext || - currentDrawSurface != mSurface || - currentReadSurface != mSurface) { + bool needsUpdate = (currentContext != mContext || + currentDrawSurface != mSurface || + currentReadSurface != mSurface); + + if (needsUpdate) { + if (!previousContexts.empty()) { + ERR("DisplaySurfaceGlContextHelper context was preempted by others, " + "current=%p, needed=%p, thread=%p", currentContext, mContext, &sThreadState); + // Fall through to attempt to recover from error. + } + if (!s_egl.eglMakeCurrent(mDisplay, mSurface, mSurface, mContext)) { // b/284523053 // Legacy swiftshader logspam on exit with this line. GL_LOG("Failed to make display surface context current: %d", s_egl.eglGetError()); - return false; + // Fall through to allow adding previous context to stack. } } - mPreviousContext = currentContext; - mPreviousDrawSurface = currentDrawSurface; - mPreviousReadSurface = currentReadSurface; - - mIsBound = true; - - return mIsBound; + previousContexts.push_back( + {.context = currentContext, + .readSurface = currentReadSurface, + .drawSurface = currentDrawSurface}); + return true; } void teardownContext() override { + auto& previousContexts = sThreadState.previousContexts; + EGLContext currentContext = s_egl.eglGetCurrentContext(); EGLSurface currentDrawSurface = s_egl.eglGetCurrentSurface(EGL_DRAW); EGLSurface currentReadSurface = s_egl.eglGetCurrentSurface(EGL_READ); - if (currentContext != mPreviousContext || - currentDrawSurface != mPreviousDrawSurface || - currentReadSurface != mPreviousReadSurface) { - if (!s_egl.eglMakeCurrent(mDisplay, - mPreviousDrawSurface, - mPreviousReadSurface, - mPreviousContext)) { - ERR("Failed to make restore previous context: %d", s_egl.eglGetError()); - return; - } + PreviousContextInfo newContext; + if (!previousContexts.empty()) { + newContext = previousContexts.back(); + previousContexts.pop_back(); + } + + bool needsUpdate = (currentContext != newContext.context || + currentDrawSurface != newContext.drawSurface || + currentReadSurface != newContext.readSurface); + + if (!needsUpdate) { + return; } - mPreviousContext = EGL_NO_CONTEXT; - mPreviousDrawSurface = EGL_NO_SURFACE; - mPreviousReadSurface = EGL_NO_SURFACE; - mIsBound = false; + if (!s_egl.eglMakeCurrent(mDisplay, + newContext.drawSurface, + newContext.readSurface, + newContext.context)) { + ERR("Failed to restore previous context: %d", s_egl.eglGetError()); + } } - bool isBound() const override { return mIsBound; } + bool isBound() const override { return !sThreadState.previousContexts.empty(); } private: EGLDisplay mDisplay = EGL_NO_DISPLAY; EGLSurface mSurface = EGL_NO_SURFACE; EGLContext mContext = EGL_NO_CONTEXT; - - EGLContext mPreviousContext = EGL_NO_CONTEXT; - EGLSurface mPreviousReadSurface = EGL_NO_SURFACE; - EGLSurface mPreviousDrawSurface = EGL_NO_SURFACE; - - bool mIsBound = false; }; } // namespace diff --git a/host/gl/glestranslator/EGL/EglImp.cpp b/host/gl/glestranslator/EGL/EglImp.cpp index f2fc6028..c5de1e5e 100644 --- a/host/gl/glestranslator/EGL/EglImp.cpp +++ b/host/gl/glestranslator/EGL/EglImp.cpp @@ -31,6 +31,7 @@ #include "aemu/base/system/System.h" #include "aemu/base/SharedLibrary.h" #include "host-common/GfxstreamFatalError.h" +#include "host-common/emugl_vm_operations.h" #include "host-common/logging.h" #include "EglWindowSurface.h" @@ -1387,39 +1388,40 @@ EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay display, EGLContext { VALIDATE_DISPLAY(display); - if (target != EGL_GL_TEXTURE_2D_KHR) { - // Create image from underlying and add to registry - EGLImage image = dpy->createNativeImage(dpy->getHostDriverDisplay(), 0, target, buffer, attrib_list); - - if (image == EGL_NO_IMAGE_KHR) { - return EGL_NO_IMAGE_KHR; - } - - ImagePtr img( new EglImage() ); - img->isNative = true; - img->nativeImage = image; - img->width = 0; - img->height = 0; - if (attrib_list) { - const EGLint* current = attrib_list; - while (EGL_NONE != *current) { - switch (*current) { - case EGL_WIDTH: - img->width = current[1]; - break; - case EGL_HEIGHT: - img->height = current[1]; - break; - case EGL_LINUX_DRM_FOURCC_EXT: - // TODO: Translate drm fourcc to internal format - // img->fourcc = current[1]; - break; - } - current += 2; - } - } - return dpy->addImageKHR(img); - } + if (target != EGL_GL_TEXTURE_2D_KHR) { + // Create image from underlying and add to registry + EGLImage image = dpy->createNativeImage(dpy->getHostDriverDisplay(), 0, target, buffer, attrib_list); + + if (image == EGL_NO_IMAGE_KHR) { + return EGL_NO_IMAGE_KHR; + } + + ImagePtr img( new EglImage() ); + img->isNative = true; + img->nativeImage = image; + img->width = 0; + img->height = 0; + if (attrib_list) { + const EGLint* current = attrib_list; + while (EGL_NONE != *current) { + switch (*current) { + case EGL_WIDTH: + img->width = current[1]; + break; + case EGL_HEIGHT: + img->height = current[1]; + break; + case EGL_LINUX_DRM_FOURCC_EXT: + // TODO: Translate drm fourcc to internal format + // img->fourcc = current[1]; + break; + } + current += 2; + } + } + get_emugl_vm_operations().setSkipSnapshotSave(true); + return dpy->addImageKHR(img); + } ThreadInfo* thread = getThreadInfo(); ShareGroupPtr sg = thread->shareGroup; diff --git a/host/meson.build b/host/meson.build index 4955a3c5..74e3340b 100644 --- a/host/meson.build +++ b/host/meson.build @@ -55,7 +55,8 @@ endif if use_vulkan subdir('vulkan') - inc_gfxstream_backend += [inc_vulkan_headers, inc_vulkan_server, inc_renderdoc_external] + inc_gfxstream_backend += [inc_cereal, inc_cereal_common, inc_vulkan_headers, + inc_vulkan_server, inc_renderdoc_external] link_gfxstream_backend += lib_vulkan_server endif diff --git a/host/vulkan/Android.bp b/host/vulkan/Android.bp index f6589aeb..4e1443ea 100644 --- a/host/vulkan/Android.bp +++ b/host/vulkan/Android.bp @@ -10,10 +10,11 @@ package { cc_library_static { name: "gfxstream_vulkan_server", - defaults: [ "gfxstream_defaults" ], + defaults: ["gfxstream_defaults"], header_libs: [ "gfxstream_gl_host_common_headers", "gfxstream_opengl_headers", + "gfxstream_vulkan_cereal_common", ], static_libs: [ "gfxstream_base", @@ -72,7 +73,7 @@ cc_library_static { // Run with `atest --host gfxstream_vkformatutils_tests` cc_test_host { name: "gfxstream_vkformatutils_tests", - defaults: [ "gfxstream_defaults" ], + defaults: ["gfxstream_defaults"], srcs: [ "VkFormatUtils_unittest.cpp", ], diff --git a/host/vulkan/CMakeLists.txt b/host/vulkan/CMakeLists.txt index ff82d4c9..183ec75c 100644 --- a/host/vulkan/CMakeLists.txt +++ b/host/vulkan/CMakeLists.txt @@ -60,5 +60,6 @@ target_include_directories(gfxstream-vulkan-server ${GFXSTREAM_REPO_ROOT}/include ${GFXSTREAM_REPO_ROOT}/host ${GFXSTREAM_REPO_ROOT}/host/vulkan + ${GFXSTREAM_REPO_ROOT}/host/vulkan/cereal/common ${GFXSTREAM_REPO_ROOT}/host/apigen-codec-common ${GFXSTREAM_REPO_ROOT}/third-party/glm/include) diff --git a/host/vulkan/VkAndroidNativeBuffer.cpp b/host/vulkan/VkAndroidNativeBuffer.cpp index 6a5ea36a..26435d15 100644 --- a/host/vulkan/VkAndroidNativeBuffer.cpp +++ b/host/vulkan/VkAndroidNativeBuffer.cpp @@ -22,7 +22,8 @@ #include "VulkanDispatch.h" #include "cereal/common/goldfish_vk_deepcopy.h" #include "cereal/common/goldfish_vk_extension_structs.h" -#include "cereal/common/goldfish_vk_private_defs.h" + +#include "goldfish_vk_private_defs.h" #include "host-common/GfxstreamFatalError.h" #include "host/FrameBuffer.h" #include "vulkan/vk_enum_string_helper.h" diff --git a/host/vulkan/VkAndroidNativeBuffer.h b/host/vulkan/VkAndroidNativeBuffer.h index d43bfd03..08bc7d7c 100644 --- a/host/vulkan/VkAndroidNativeBuffer.h +++ b/host/vulkan/VkAndroidNativeBuffer.h @@ -26,7 +26,7 @@ #include "aemu/base/BumpPool.h" #include "aemu/base/synchronization/ConditionVariable.h" #include "aemu/base/synchronization/Lock.h" -#include "cereal/common/goldfish_vk_private_defs.h" +#include "goldfish_vk_private_defs.h" namespace gfxstream { namespace vk { diff --git a/host/vulkan/VkCommonOperations.h b/host/vulkan/VkCommonOperations.h index 54348b7b..94a5b821 100644 --- a/host/vulkan/VkCommonOperations.h +++ b/host/vulkan/VkCommonOperations.h @@ -31,7 +31,7 @@ #include "aemu/base/ManagedDescriptor.hpp" #include "aemu/base/Optional.h" #include "aemu/base/synchronization/Lock.h" -#include "cereal/common/goldfish_vk_private_defs.h" +#include "goldfish_vk_private_defs.h" #include "utils/GfxApiLogger.h" #include "utils/RenderDoc.h" diff --git a/host/vulkan/VkDecoder.cpp b/host/vulkan/VkDecoder.cpp index b72880e0..8e965dee 100644 --- a/host/vulkan/VkDecoder.cpp +++ b/host/vulkan/VkDecoder.cpp @@ -45,9 +45,9 @@ #include "aemu/base/Tracing.h" #include "aemu/base/system/System.h" #include "common/goldfish_vk_marshaling.h" -#include "common/goldfish_vk_private_defs.h" #include "common/goldfish_vk_reserved_marshaling.h" #include "common/goldfish_vk_transform.h" +#include "goldfish_vk_private_defs.h" #include "host-common/GfxstreamFatalError.h" #include "host-common/feature_control.h" #include "host-common/logging.h" @@ -18290,6 +18290,8 @@ size_t VkDecoder::Impl::decode(void* buf, size_t len, IOStream* ioStream, #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control diff --git a/host/vulkan/VkDecoder.h b/host/vulkan/VkDecoder.h index ed04fe1a..27041d89 100644 --- a/host/vulkan/VkDecoder.h +++ b/host/vulkan/VkDecoder.h @@ -196,6 +196,8 @@ class VkDecoder { #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control diff --git a/host/vulkan/VkDecoderGlobalState.cpp b/host/vulkan/VkDecoderGlobalState.cpp index 065c9b65..69475e09 100644 --- a/host/vulkan/VkDecoderGlobalState.cpp +++ b/host/vulkan/VkDecoderGlobalState.cpp @@ -5485,48 +5485,48 @@ class VkDecoderGlobalState::Impl { ERR("The VkImageCreateInfo to import %s contains unsupported VkImageCreateFlags. " "All supported VkImageCreateFlags are %s, the input VkImageCreateInfo requires " "support for %s.", - importSource.c_str(), - string_VkImageCreateFlags(colorBufferVkImageCi->flags).c_str(), - string_VkImageCreateFlags(imageCreateInfo.flags).c_str()); + importSource.c_str()?:"", + string_VkImageCreateFlags(colorBufferVkImageCi->flags).c_str()?:"", + string_VkImageCreateFlags(imageCreateInfo.flags).c_str()?:""); } imageCreateInfo.flags |= colorBufferVkImageCi->flags; if (imageCreateInfo.imageType != colorBufferVkImageCi->imageType) { ERR("The VkImageCreateInfo to import %s has an unexpected VkImageType: %s, %s " "expected.", - importSource.c_str(), string_VkImageType(imageCreateInfo.imageType), + importSource.c_str()?:"", string_VkImageType(imageCreateInfo.imageType), string_VkImageType(colorBufferVkImageCi->imageType)); } if (imageCreateInfo.extent.depth != colorBufferVkImageCi->extent.depth) { ERR("The VkImageCreateInfo to import %s has an unexpected VkExtent::depth: %" PRIu32 ", %" PRIu32 " expected.", - importSource.c_str(), imageCreateInfo.extent.depth, + importSource.c_str()?:"", imageCreateInfo.extent.depth, colorBufferVkImageCi->extent.depth); } if (imageCreateInfo.mipLevels != colorBufferVkImageCi->mipLevels) { ERR("The VkImageCreateInfo to import %s has an unexpected mipLevels: %" PRIu32 ", %" PRIu32 " expected.", - importSource.c_str(), imageCreateInfo.mipLevels, + importSource.c_str()?:"", imageCreateInfo.mipLevels, colorBufferVkImageCi->mipLevels); } if (imageCreateInfo.arrayLayers != colorBufferVkImageCi->arrayLayers) { ERR("The VkImageCreateInfo to import %s has an unexpected arrayLayers: %" PRIu32 ", %" PRIu32 " expected.", - importSource.c_str(), imageCreateInfo.arrayLayers, + importSource.c_str()?:"", imageCreateInfo.arrayLayers, colorBufferVkImageCi->arrayLayers); } if (imageCreateInfo.samples != colorBufferVkImageCi->samples) { ERR("The VkImageCreateInfo to import %s has an unexpected VkSampleCountFlagBits: " "%s, %s expected.", - importSource.c_str(), string_VkSampleCountFlagBits(imageCreateInfo.samples), + importSource.c_str()?:"", string_VkSampleCountFlagBits(imageCreateInfo.samples), string_VkSampleCountFlagBits(colorBufferVkImageCi->samples)); } if (imageCreateInfo.usage & (~colorBufferVkImageCi->usage)) { ERR("The VkImageCreateInfo to import %s contains unsupported VkImageUsageFlags. " "All supported VkImageUsageFlags are %s, the input VkImageCreateInfo requires " "support for %s.", - importSource.c_str(), - string_VkImageUsageFlags(colorBufferVkImageCi->usage).c_str(), - string_VkImageUsageFlags(imageCreateInfo.usage).c_str()); + importSource.c_str()?:"", + string_VkImageUsageFlags(colorBufferVkImageCi->usage).c_str()?:"", + string_VkImageUsageFlags(imageCreateInfo.usage).c_str()?:""); } imageCreateInfo.usage |= colorBufferVkImageCi->usage; // For the AndroidHardwareBuffer binding case VkImageCreateInfo::sharingMode isn't @@ -5538,31 +5538,31 @@ class VkDecoderGlobalState::Impl { if (resolvedFormat != colorBufferVkImageCi->format) { ERR("The VkImageCreateInfo to import %s contains unexpected VkFormat: %s. %s " "expected.", - importSource.c_str(), string_VkFormat(imageCreateInfo.format), + importSource.c_str()?:"", string_VkFormat(imageCreateInfo.format), string_VkFormat(colorBufferVkImageCi->format)); } if (imageCreateInfo.extent.width != colorBufferVkImageCi->extent.width) { ERR("The VkImageCreateInfo to import %s contains unexpected VkExtent::width: " "%" PRIu32 ". %" PRIu32 " expected.", - importSource.c_str(), imageCreateInfo.extent.width, + importSource.c_str()?:"", imageCreateInfo.extent.width, colorBufferVkImageCi->extent.width); } if (imageCreateInfo.extent.height != colorBufferVkImageCi->extent.height) { ERR("The VkImageCreateInfo to import %s contains unexpected VkExtent::height: " "%" PRIu32 ". %" PRIu32 " expected.", - importSource.c_str(), imageCreateInfo.extent.height, + importSource.c_str()?:"", imageCreateInfo.extent.height, colorBufferVkImageCi->extent.height); } if (imageCreateInfo.tiling != colorBufferVkImageCi->tiling) { ERR("The VkImageCreateInfo to import %s contains unexpected VkImageTiling: %s. %s " "expected.", - importSource.c_str(), string_VkImageTiling(imageCreateInfo.tiling), + importSource.c_str()?:"", string_VkImageTiling(imageCreateInfo.tiling), string_VkImageTiling(colorBufferVkImageCi->tiling)); } if (imageCreateInfo.sharingMode != colorBufferVkImageCi->sharingMode) { ERR("The VkImageCreateInfo to import %s contains unexpected VkSharingMode: %s. %s " "expected.", - importSource.c_str(), string_VkSharingMode(imageCreateInfo.sharingMode), + importSource.c_str()?:"", string_VkSharingMode(imageCreateInfo.sharingMode), string_VkSharingMode(colorBufferVkImageCi->sharingMode)); } } diff --git a/host/vulkan/VkDecoderGlobalState.h b/host/vulkan/VkDecoderGlobalState.h index 7706fd05..b8cb5be6 100644 --- a/host/vulkan/VkDecoderGlobalState.h +++ b/host/vulkan/VkDecoderGlobalState.h @@ -28,7 +28,7 @@ #include "aemu/base/AsyncResult.h" #include "aemu/base/HealthMonitor.h" #include "aemu/base/synchronization/Lock.h" -#include "cereal/common/goldfish_vk_private_defs.h" +#include "goldfish_vk_private_defs.h" #include "cereal/common/goldfish_vk_transform.h" #include "host-common/GfxstreamFatalError.h" #include "utils/GfxApiLogger.h" diff --git a/host/vulkan/VkDecoderSnapshot.cpp b/host/vulkan/VkDecoderSnapshot.cpp index d901f764..dab90998 100644 --- a/host/vulkan/VkDecoderSnapshot.cpp +++ b/host/vulkan/VkDecoderSnapshot.cpp @@ -2430,6 +2430,8 @@ class VkDecoderSnapshot::Impl { #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control diff --git a/host/vulkan/VkDecoderSnapshot.h b/host/vulkan/VkDecoderSnapshot.h index 47e4a20f..8d8783b2 100644 --- a/host/vulkan/VkDecoderSnapshot.h +++ b/host/vulkan/VkDecoderSnapshot.h @@ -35,7 +35,7 @@ #include <memory> #include "aemu/base/HealthMonitor.h" -#include "common/goldfish_vk_private_defs.h" +#include "goldfish_vk_private_defs.h" #include "utils/GfxApiLogger.h" #include "vk_android_native_buffer_gfxstream.h" #include "vulkan_gfxstream.h" @@ -1337,6 +1337,8 @@ class VkDecoderSnapshot { #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control diff --git a/host/vulkan/VkSubDecoder.cpp b/host/vulkan/VkSubDecoder.cpp index 194cf926..c89cd819 100644 --- a/host/vulkan/VkSubDecoder.cpp +++ b/host/vulkan/VkSubDecoder.cpp @@ -2746,6 +2746,8 @@ size_t subDecode(VulkanMemReadingStream* readStream, VulkanDispatch* vk, void* b #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control diff --git a/host/vulkan/VulkanStream.h b/host/vulkan/VulkanStream.h index ee184766..358432b1 100644 --- a/host/vulkan/VulkanStream.h +++ b/host/vulkan/VulkanStream.h @@ -22,7 +22,7 @@ #include "aemu/base/BumpPool.h" #include "aemu/base/files/Stream.h" #include "aemu/base/files/StreamSerializing.h" -#include "common/goldfish_vk_private_defs.h" +#include "goldfish_vk_private_defs.h" #define E(fmt, ...) fprintf(stderr, fmt "\n", ##__VA_ARGS__) diff --git a/host/vulkan/cereal/Android.bp b/host/vulkan/cereal/Android.bp index 1164fa7e..a8072a5c 100644 --- a/host/vulkan/cereal/Android.bp +++ b/host/vulkan/cereal/Android.bp @@ -9,8 +9,8 @@ package { cc_library_static { name: "gfxstream_vulkan_cereal_host", - defaults: [ "gfxstream_defaults" ], - static_libs: [ "gfxstream_base" ], + defaults: ["gfxstream_defaults"], + static_libs: ["gfxstream_base"], srcs: [ "common/goldfish_vk_extension_structs.cpp", "common/goldfish_vk_marshaling.cpp", @@ -21,6 +21,7 @@ cc_library_static { ], header_libs: [ "gfxstream_vulkan_headers", + "gfxstream_vulkan_cereal_common", ], export_header_lib_headers: [ "gfxstream_vulkan_headers", @@ -29,5 +30,5 @@ cc_library_static { "-DVK_ANDROID_native_buffer", "-DVK_GOOGLE_address_space", ], - export_include_dirs: [ "." ], + export_include_dirs: ["."], } diff --git a/host/vulkan/cereal/CMakeLists.txt b/host/vulkan/cereal/CMakeLists.txt index 40949156..81f91d4c 100644 --- a/host/vulkan/cereal/CMakeLists.txt +++ b/host/vulkan/cereal/CMakeLists.txt @@ -1,14 +1,3 @@ - -# Autogenerated makefile -# codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal -# Please do not modify directly; -# re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh, -# or directly from Python by defining: -# VULKAN_REGISTRY_XML_DIR : Directory containing vk.xml -# VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py -# CEREAL_OUTPUT_DIR: Where to put the generated sources. -# python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR - add_library(OpenglRender_vulkan_cereal common/goldfish_vk_extension_structs.cpp common/goldfish_vk_marshaling.cpp @@ -32,6 +21,7 @@ target_include_directories(OpenglRender_vulkan_cereal PUBLIC . PRIVATE + common/ .. ../.. ../../../include) diff --git a/host/vulkan/cereal/common/Android.bp b/host/vulkan/cereal/common/Android.bp new file mode 100644 index 00000000..e42ad699 --- /dev/null +++ b/host/vulkan/cereal/common/Android.bp @@ -0,0 +1,17 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "hardware_google_gfxstream_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["hardware_google_gfxstream_license"], +} + +cc_library_headers { + name: "gfxstream_vulkan_cereal_common", + vendor_available: true, + host_supported: true, + export_include_dirs: [ + ".", + ], +} diff --git a/host/vulkan/cereal/common/goldfish_vk_deepcopy.cpp b/host/vulkan/cereal/common/goldfish_vk_deepcopy.cpp index 841a6d76..60e54112 100644 --- a/host/vulkan/cereal/common/goldfish_vk_deepcopy.cpp +++ b/host/vulkan/cereal/common/goldfish_vk_deepcopy.cpp @@ -7762,6 +7762,83 @@ void deepcopy_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT( #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void deepcopy_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + Allocator* alloc, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* from, + VkPhysicalDeviceFragmentDensityMapFeaturesEXT* to) { + (void)alloc; + (void)rootType; + *to = *from; + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = from->sType; + } + const void* from_pNext = from; + size_t pNext_size = 0u; + while (!pNext_size && from_pNext) { + from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext; + pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext); + } + to->pNext = nullptr; + if (pNext_size) { + to->pNext = (void*)alloc->alloc(pNext_size); + deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext)); + } +} + +void deepcopy_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + Allocator* alloc, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* from, + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* to) { + (void)alloc; + (void)rootType; + *to = *from; + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = from->sType; + } + const void* from_pNext = from; + size_t pNext_size = 0u; + while (!pNext_size && from_pNext) { + from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext; + pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext); + } + to->pNext = nullptr; + if (pNext_size) { + to->pNext = (void*)alloc->alloc(pNext_size); + deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext)); + } + deepcopy_VkExtent2D(alloc, rootType, &from->minFragmentDensityTexelSize, + (VkExtent2D*)(&to->minFragmentDensityTexelSize)); + deepcopy_VkExtent2D(alloc, rootType, &from->maxFragmentDensityTexelSize, + (VkExtent2D*)(&to->maxFragmentDensityTexelSize)); +} + +void deepcopy_VkRenderPassFragmentDensityMapCreateInfoEXT( + Allocator* alloc, VkStructureType rootType, + const VkRenderPassFragmentDensityMapCreateInfoEXT* from, + VkRenderPassFragmentDensityMapCreateInfoEXT* to) { + (void)alloc; + (void)rootType; + *to = *from; + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = from->sType; + } + const void* from_pNext = from; + size_t pNext_size = 0u; + while (!pNext_size && from_pNext) { + from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext; + pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext); + } + to->pNext = nullptr; + if (pNext_size) { + to->pNext = (void*)alloc->alloc(pNext_size); + deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext)); + } + deepcopy_VkAttachmentReference(alloc, rootType, &from->fragmentDensityMapAttachment, + (VkAttachmentReference*)(&to->fragmentDensityMapAttachment)); +} + +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control @@ -9950,6 +10027,116 @@ void deepcopy_extension_struct(Allocator* alloc, VkStructureType rootType, break; } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: { + deepcopy_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + alloc, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension), + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: { + deepcopy_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + alloc, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension), + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + deepcopy_VkImportColorBufferGOOGLE( + alloc, rootType, + reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension), + reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out)); + break; + } + default: { + deepcopy_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + alloc, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension), + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out)); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: { + deepcopy_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + alloc, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension), + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + deepcopy_VkCreateBlobGOOGLE( + alloc, rootType, + reinterpret_cast<const VkCreateBlobGOOGLE*>(structExtension), + reinterpret_cast<VkCreateBlobGOOGLE*>(structExtension_out)); + break; + } + default: { + deepcopy_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + alloc, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension), + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension_out)); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: { + deepcopy_VkRenderPassFragmentDensityMapCreateInfoEXT( + alloc, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension), + reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: { + deepcopy_VkRenderPassFragmentDensityMapCreateInfoEXT( + alloc, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension), + reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + deepcopy_VkImportBufferGOOGLE( + alloc, rootType, + reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension), + reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out)); + break; + } + default: { + deepcopy_VkRenderPassFragmentDensityMapCreateInfoEXT( + alloc, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension), + reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out)); + break; + } + } + break; + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { deepcopy_VkPhysicalDeviceProvokingVertexFeaturesEXT( diff --git a/host/vulkan/cereal/common/goldfish_vk_deepcopy.h b/host/vulkan/cereal/common/goldfish_vk_deepcopy.h index b2933593..19cf402d 100644 --- a/host/vulkan/cereal/common/goldfish_vk_deepcopy.h +++ b/host/vulkan/cereal/common/goldfish_vk_deepcopy.h @@ -1746,6 +1746,23 @@ DEFINE_ALIAS_FUNCTION(deepcopy_VkPipelineCreationFeedback, deepcopy_VkPipelineCr #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void deepcopy_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + Allocator* alloc, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* from, + VkPhysicalDeviceFragmentDensityMapFeaturesEXT* to); + +void deepcopy_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + Allocator* alloc, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* from, + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* to); + +void deepcopy_VkRenderPassFragmentDensityMapCreateInfoEXT( + Allocator* alloc, VkStructureType rootType, + const VkRenderPassFragmentDensityMapCreateInfoEXT* from, + VkRenderPassFragmentDensityMapCreateInfoEXT* to); + +#endif #ifdef VK_EXT_scalar_block_layout DEFINE_ALIAS_FUNCTION(deepcopy_VkPhysicalDeviceScalarBlockLayoutFeatures, deepcopy_VkPhysicalDeviceScalarBlockLayoutFeaturesEXT) diff --git a/host/vulkan/cereal/common/goldfish_vk_dispatch.cpp b/host/vulkan/cereal/common/goldfish_vk_dispatch.cpp index f3bff18b..65dcfe32 100644 --- a/host/vulkan/cereal/common/goldfish_vk_dispatch.cpp +++ b/host/vulkan/cereal/common/goldfish_vk_dispatch.cpp @@ -167,6 +167,8 @@ namespace vk { #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control diff --git a/host/vulkan/cereal/common/goldfish_vk_dispatch.h b/host/vulkan/cereal/common/goldfish_vk_dispatch.h index b2ecac90..a25d740a 100644 --- a/host/vulkan/cereal/common/goldfish_vk_dispatch.h +++ b/host/vulkan/cereal/common/goldfish_vk_dispatch.h @@ -522,6 +522,8 @@ struct VulkanDispatch { #ifdef VK_EXT_metal_surface PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT; #endif +#ifdef VK_EXT_fragment_density_map +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control diff --git a/host/vulkan/cereal/common/goldfish_vk_extension_structs.cpp b/host/vulkan/cereal/common/goldfish_vk_extension_structs.cpp index d7e70191..6ba7ee42 100644 --- a/host/vulkan/cereal/common/goldfish_vk_extension_structs.cpp +++ b/host/vulkan/cereal/common/goldfish_vk_extension_structs.cpp @@ -162,6 +162,8 @@ namespace vk { #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control @@ -646,6 +648,64 @@ size_t goldfish_vk_extension_struct_size(VkStructureType rootType, const void* s return sizeof(VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT); } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: { + return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT); + break; + } + case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: { + return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + return sizeof(VkImportColorBufferGOOGLE); + break; + } + default: { + return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT); + break; + } + } + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: { + return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + return sizeof(VkCreateBlobGOOGLE); + break; + } + default: { + return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT); + break; + } + } + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: { + return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: { + return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + return sizeof(VkImportBufferGOOGLE); + break; + } + default: { + return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT); + break; + } + } + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { return sizeof(VkPhysicalDeviceProvokingVertexFeaturesEXT); @@ -1232,6 +1292,64 @@ size_t goldfish_vk_extension_struct_size_with_stream_features(uint32_t streamFea return sizeof(VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT); } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: { + return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT); + break; + } + case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: { + return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + return sizeof(VkImportColorBufferGOOGLE); + break; + } + default: { + return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT); + break; + } + } + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: { + return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + return sizeof(VkCreateBlobGOOGLE); + break; + } + default: { + return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT); + break; + } + } + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: { + return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: { + return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + return sizeof(VkImportBufferGOOGLE); + break; + } + default: { + return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT); + break; + } + } + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { return sizeof(VkPhysicalDeviceProvokingVertexFeaturesEXT); diff --git a/host/vulkan/cereal/common/goldfish_vk_extension_structs.h b/host/vulkan/cereal/common/goldfish_vk_extension_structs.h index 06ba3c0e..7a0a923c 100644 --- a/host/vulkan/cereal/common/goldfish_vk_extension_structs.h +++ b/host/vulkan/cereal/common/goldfish_vk_extension_structs.h @@ -176,6 +176,8 @@ size_t goldfish_vk_extension_struct_size_with_stream_features(uint32_t streamFea #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control diff --git a/host/vulkan/cereal/common/goldfish_vk_marshaling.cpp b/host/vulkan/cereal/common/goldfish_vk_marshaling.cpp index 6cf617b7..94abfa4c 100644 --- a/host/vulkan/cereal/common/goldfish_vk_marshaling.cpp +++ b/host/vulkan/cereal/common/goldfish_vk_marshaling.cpp @@ -15681,6 +15681,136 @@ void unmarshal_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT( #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void marshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + VulkanStream* vkStream, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forMarshaling) { + (void)rootType; + vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType)); + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forMarshaling->sType; + } + marshal_extension_struct(vkStream, rootType, forMarshaling->pNext); + vkStream->write((VkBool32*)&forMarshaling->fragmentDensityMap, sizeof(VkBool32)); + vkStream->write((VkBool32*)&forMarshaling->fragmentDensityMapDynamic, sizeof(VkBool32)); + vkStream->write((VkBool32*)&forMarshaling->fragmentDensityMapNonSubsampledImages, + sizeof(VkBool32)); +} + +void unmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + VulkanStream* vkStream, VkStructureType rootType, + VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forUnmarshaling) { + (void)rootType; + vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType)); + forUnmarshaling->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT; + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forUnmarshaling->sType; + } + size_t pNext_size; + pNext_size = vkStream->getBe32(); + forUnmarshaling->pNext = nullptr; + if (pNext_size) { + vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType)); + vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType)); + VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext); + vkStream->alloc((void**)&forUnmarshaling->pNext, + goldfish_vk_extension_struct_size_with_stream_features( + vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext)); + *(VkStructureType*)forUnmarshaling->pNext = extType; + unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext)); + } + vkStream->read((VkBool32*)&forUnmarshaling->fragmentDensityMap, sizeof(VkBool32)); + vkStream->read((VkBool32*)&forUnmarshaling->fragmentDensityMapDynamic, sizeof(VkBool32)); + vkStream->read((VkBool32*)&forUnmarshaling->fragmentDensityMapNonSubsampledImages, + sizeof(VkBool32)); +} + +void marshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + VulkanStream* vkStream, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forMarshaling) { + (void)rootType; + vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType)); + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forMarshaling->sType; + } + marshal_extension_struct(vkStream, rootType, forMarshaling->pNext); + marshal_VkExtent2D(vkStream, rootType, + (VkExtent2D*)(&forMarshaling->minFragmentDensityTexelSize)); + marshal_VkExtent2D(vkStream, rootType, + (VkExtent2D*)(&forMarshaling->maxFragmentDensityTexelSize)); + vkStream->write((VkBool32*)&forMarshaling->fragmentDensityInvocations, sizeof(VkBool32)); +} + +void unmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + VulkanStream* vkStream, VkStructureType rootType, + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forUnmarshaling) { + (void)rootType; + vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType)); + forUnmarshaling->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT; + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forUnmarshaling->sType; + } + size_t pNext_size; + pNext_size = vkStream->getBe32(); + forUnmarshaling->pNext = nullptr; + if (pNext_size) { + vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType)); + vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType)); + VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext); + vkStream->alloc((void**)&forUnmarshaling->pNext, + goldfish_vk_extension_struct_size_with_stream_features( + vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext)); + *(VkStructureType*)forUnmarshaling->pNext = extType; + unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext)); + } + unmarshal_VkExtent2D(vkStream, rootType, + (VkExtent2D*)(&forUnmarshaling->minFragmentDensityTexelSize)); + unmarshal_VkExtent2D(vkStream, rootType, + (VkExtent2D*)(&forUnmarshaling->maxFragmentDensityTexelSize)); + vkStream->read((VkBool32*)&forUnmarshaling->fragmentDensityInvocations, sizeof(VkBool32)); +} + +void marshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + VulkanStream* vkStream, VkStructureType rootType, + const VkRenderPassFragmentDensityMapCreateInfoEXT* forMarshaling) { + (void)rootType; + vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType)); + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forMarshaling->sType; + } + marshal_extension_struct(vkStream, rootType, forMarshaling->pNext); + marshal_VkAttachmentReference( + vkStream, rootType, (VkAttachmentReference*)(&forMarshaling->fragmentDensityMapAttachment)); +} + +void unmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + VulkanStream* vkStream, VkStructureType rootType, + VkRenderPassFragmentDensityMapCreateInfoEXT* forUnmarshaling) { + (void)rootType; + vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType)); + forUnmarshaling->sType = VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT; + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forUnmarshaling->sType; + } + size_t pNext_size; + pNext_size = vkStream->getBe32(); + forUnmarshaling->pNext = nullptr; + if (pNext_size) { + vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType)); + vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType)); + VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext); + vkStream->alloc((void**)&forUnmarshaling->pNext, + goldfish_vk_extension_struct_size_with_stream_features( + vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext)); + *(VkStructureType*)forUnmarshaling->pNext = extType; + unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext)); + } + unmarshal_VkAttachmentReference( + vkStream, rootType, + (VkAttachmentReference*)(&forUnmarshaling->fragmentDensityMapAttachment)); +} + +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control @@ -18548,6 +18678,97 @@ void marshal_extension_struct(VulkanStream* vkStream, VkStructureType rootType, break; } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: { + marshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension)); + break; + } + case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: { + marshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + marshal_VkImportColorBufferGOOGLE( + vkStream, rootType, + reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension)); + break; + } + default: { + marshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension)); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: { + marshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + vkStream, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + marshal_VkCreateBlobGOOGLE( + vkStream, rootType, + reinterpret_cast<const VkCreateBlobGOOGLE*>(structExtension)); + break; + } + default: { + marshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + vkStream, rootType, + reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension)); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: { + marshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension)); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: { + marshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + marshal_VkImportBufferGOOGLE( + vkStream, rootType, + reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension)); + break; + } + default: { + marshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension)); + break; + } + } + break; + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { marshal_VkPhysicalDeviceProvokingVertexFeaturesEXT( @@ -19701,6 +19922,97 @@ void unmarshal_extension_struct(VulkanStream* vkStream, VkStructureType rootType break; } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: { + unmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: { + unmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + unmarshal_VkImportColorBufferGOOGLE( + vkStream, rootType, + reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out)); + break; + } + default: { + unmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out)); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: { + unmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + vkStream, rootType, + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + unmarshal_VkCreateBlobGOOGLE( + vkStream, rootType, + reinterpret_cast<VkCreateBlobGOOGLE*>(structExtension_out)); + break; + } + default: { + unmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + vkStream, rootType, + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension_out)); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: { + unmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: { + unmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + unmarshal_VkImportBufferGOOGLE( + vkStream, rootType, + reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out)); + break; + } + default: { + unmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out)); + break; + } + } + break; + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { unmarshal_VkPhysicalDeviceProvokingVertexFeaturesEXT( diff --git a/host/vulkan/cereal/common/goldfish_vk_marshaling.h b/host/vulkan/cereal/common/goldfish_vk_marshaling.h index 84054cab..51a8b16d 100644 --- a/host/vulkan/cereal/common/goldfish_vk_marshaling.h +++ b/host/vulkan/cereal/common/goldfish_vk_marshaling.h @@ -3275,6 +3275,32 @@ DEFINE_ALIAS_FUNCTION(unmarshal_VkPipelineCreationFeedback, unmarshal_VkPipeline #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void marshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + VulkanStream* vkStream, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forMarshaling); + +void unmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + VulkanStream* vkStream, VkStructureType rootType, + VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forUnmarshaling); + +void marshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + VulkanStream* vkStream, VkStructureType rootType, + const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forMarshaling); + +void unmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + VulkanStream* vkStream, VkStructureType rootType, + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forUnmarshaling); + +void marshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + VulkanStream* vkStream, VkStructureType rootType, + const VkRenderPassFragmentDensityMapCreateInfoEXT* forMarshaling); + +void unmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + VulkanStream* vkStream, VkStructureType rootType, + VkRenderPassFragmentDensityMapCreateInfoEXT* forUnmarshaling); + +#endif #ifdef VK_EXT_scalar_block_layout DEFINE_ALIAS_FUNCTION(marshal_VkPhysicalDeviceScalarBlockLayoutFeatures, marshal_VkPhysicalDeviceScalarBlockLayoutFeaturesEXT) diff --git a/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.cpp b/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.cpp index ffaef3d9..ba88df53 100644 --- a/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.cpp +++ b/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.cpp @@ -12097,6 +12097,108 @@ void reservedunmarshal_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT( #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void reservedunmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + VulkanStream* vkStream, VkStructureType rootType, + VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forUnmarshaling, uint8_t** ptr) { + memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType)); + *ptr += sizeof(VkStructureType); + forUnmarshaling->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT; + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forUnmarshaling->sType; + } + uint32_t pNext_size; + memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t)); + android::base::Stream::fromBe32((uint8_t*)&pNext_size); + *ptr += sizeof(uint32_t); + forUnmarshaling->pNext = nullptr; + if (pNext_size) { + vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType)); + memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType)); + *ptr += sizeof(VkStructureType); + VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext); + vkStream->alloc((void**)&forUnmarshaling->pNext, + goldfish_vk_extension_struct_size_with_stream_features( + vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext)); + *(VkStructureType*)forUnmarshaling->pNext = extType; + reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext), + ptr); + } + memcpy((VkBool32*)&forUnmarshaling->fragmentDensityMap, *ptr, sizeof(VkBool32)); + *ptr += sizeof(VkBool32); + memcpy((VkBool32*)&forUnmarshaling->fragmentDensityMapDynamic, *ptr, sizeof(VkBool32)); + *ptr += sizeof(VkBool32); + memcpy((VkBool32*)&forUnmarshaling->fragmentDensityMapNonSubsampledImages, *ptr, + sizeof(VkBool32)); + *ptr += sizeof(VkBool32); +} + +void reservedunmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + VulkanStream* vkStream, VkStructureType rootType, + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forUnmarshaling, uint8_t** ptr) { + memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType)); + *ptr += sizeof(VkStructureType); + forUnmarshaling->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT; + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forUnmarshaling->sType; + } + uint32_t pNext_size; + memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t)); + android::base::Stream::fromBe32((uint8_t*)&pNext_size); + *ptr += sizeof(uint32_t); + forUnmarshaling->pNext = nullptr; + if (pNext_size) { + vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType)); + memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType)); + *ptr += sizeof(VkStructureType); + VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext); + vkStream->alloc((void**)&forUnmarshaling->pNext, + goldfish_vk_extension_struct_size_with_stream_features( + vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext)); + *(VkStructureType*)forUnmarshaling->pNext = extType; + reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext), + ptr); + } + reservedunmarshal_VkExtent2D(vkStream, rootType, + (VkExtent2D*)(&forUnmarshaling->minFragmentDensityTexelSize), ptr); + reservedunmarshal_VkExtent2D(vkStream, rootType, + (VkExtent2D*)(&forUnmarshaling->maxFragmentDensityTexelSize), ptr); + memcpy((VkBool32*)&forUnmarshaling->fragmentDensityInvocations, *ptr, sizeof(VkBool32)); + *ptr += sizeof(VkBool32); +} + +void reservedunmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + VulkanStream* vkStream, VkStructureType rootType, + VkRenderPassFragmentDensityMapCreateInfoEXT* forUnmarshaling, uint8_t** ptr) { + memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType)); + *ptr += sizeof(VkStructureType); + forUnmarshaling->sType = VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT; + if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) { + rootType = forUnmarshaling->sType; + } + uint32_t pNext_size; + memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t)); + android::base::Stream::fromBe32((uint8_t*)&pNext_size); + *ptr += sizeof(uint32_t); + forUnmarshaling->pNext = nullptr; + if (pNext_size) { + vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType)); + memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType)); + *ptr += sizeof(VkStructureType); + VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext); + vkStream->alloc((void**)&forUnmarshaling->pNext, + goldfish_vk_extension_struct_size_with_stream_features( + vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext)); + *(VkStructureType*)forUnmarshaling->pNext = extType; + reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext), + ptr); + } + reservedunmarshal_VkAttachmentReference( + vkStream, rootType, + (VkAttachmentReference*)(&forUnmarshaling->fragmentDensityMapAttachment), ptr); +} + +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control @@ -14633,6 +14735,105 @@ void reservedunmarshal_extension_struct(VulkanStream* vkStream, VkStructureType break; } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: { + reservedunmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out), + ptr); + break; + } + case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: { + reservedunmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out), + ptr); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + reservedunmarshal_VkImportColorBufferGOOGLE( + vkStream, rootType, + reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out), ptr); + break; + } + default: { + reservedunmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + vkStream, rootType, + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out), + ptr); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: { + reservedunmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + vkStream, rootType, + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension_out), + ptr); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + reservedunmarshal_VkCreateBlobGOOGLE( + vkStream, rootType, + reinterpret_cast<VkCreateBlobGOOGLE*>(structExtension_out), ptr); + break; + } + default: { + reservedunmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + vkStream, rootType, + reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension_out), + ptr); + break; + } + } + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + switch (rootType) { + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: { + reservedunmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out), + ptr); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: { + reservedunmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out), + ptr); + break; + } + case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: { + reservedunmarshal_VkImportBufferGOOGLE( + vkStream, rootType, + reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out), ptr); + break; + } + default: { + reservedunmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + vkStream, rootType, + reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out), + ptr); + break; + } + } + break; + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { reservedunmarshal_VkPhysicalDeviceProvokingVertexFeaturesEXT( diff --git a/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.h b/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.h index 377d139a..fd75598b 100644 --- a/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.h +++ b/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.h @@ -1738,6 +1738,20 @@ DEFINE_ALIAS_FUNCTION(reservedunmarshal_VkPipelineCreationFeedback, #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void reservedunmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + VulkanStream* vkStream, VkStructureType rootType, + VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forUnmarshaling, uint8_t** ptr); + +void reservedunmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + VulkanStream* vkStream, VkStructureType rootType, + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forUnmarshaling, uint8_t** ptr); + +void reservedunmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT( + VulkanStream* vkStream, VkStructureType rootType, + VkRenderPassFragmentDensityMapCreateInfoEXT* forUnmarshaling, uint8_t** ptr); + +#endif #ifdef VK_EXT_scalar_block_layout DEFINE_ALIAS_FUNCTION(reservedunmarshal_VkPhysicalDeviceScalarBlockLayoutFeatures, reservedunmarshal_VkPhysicalDeviceScalarBlockLayoutFeaturesEXT) diff --git a/host/vulkan/cereal/common/goldfish_vk_transform.cpp b/host/vulkan/cereal/common/goldfish_vk_transform.cpp index 8790c1c4..e80c899e 100644 --- a/host/vulkan/cereal/common/goldfish_vk_transform.cpp +++ b/host/vulkan/cereal/common/goldfish_vk_transform.cpp @@ -7234,6 +7234,80 @@ void transform_fromhost_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT( #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void transform_tohost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + VkDecoderGlobalState* resourceTracker, + VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toTransform) { + (void)resourceTracker; + (void)toTransform; + if (toTransform->pNext) { + transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext)); + } +} + +void transform_fromhost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + VkDecoderGlobalState* resourceTracker, + VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toTransform) { + (void)resourceTracker; + (void)toTransform; + if (toTransform->pNext) { + transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext)); + } +} + +void transform_tohost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + VkDecoderGlobalState* resourceTracker, + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toTransform) { + (void)resourceTracker; + (void)toTransform; + if (toTransform->pNext) { + transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext)); + } + transform_tohost_VkExtent2D(resourceTracker, + (VkExtent2D*)(&toTransform->minFragmentDensityTexelSize)); + transform_tohost_VkExtent2D(resourceTracker, + (VkExtent2D*)(&toTransform->maxFragmentDensityTexelSize)); +} + +void transform_fromhost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + VkDecoderGlobalState* resourceTracker, + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toTransform) { + (void)resourceTracker; + (void)toTransform; + if (toTransform->pNext) { + transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext)); + } + transform_fromhost_VkExtent2D(resourceTracker, + (VkExtent2D*)(&toTransform->minFragmentDensityTexelSize)); + transform_fromhost_VkExtent2D(resourceTracker, + (VkExtent2D*)(&toTransform->maxFragmentDensityTexelSize)); +} + +void transform_tohost_VkRenderPassFragmentDensityMapCreateInfoEXT( + VkDecoderGlobalState* resourceTracker, + VkRenderPassFragmentDensityMapCreateInfoEXT* toTransform) { + (void)resourceTracker; + (void)toTransform; + if (toTransform->pNext) { + transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext)); + } + transform_tohost_VkAttachmentReference( + resourceTracker, (VkAttachmentReference*)(&toTransform->fragmentDensityMapAttachment)); +} + +void transform_fromhost_VkRenderPassFragmentDensityMapCreateInfoEXT( + VkDecoderGlobalState* resourceTracker, + VkRenderPassFragmentDensityMapCreateInfoEXT* toTransform) { + (void)resourceTracker; + (void)toTransform; + if (toTransform->pNext) { + transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext)); + } + transform_fromhost_VkAttachmentReference( + resourceTracker, (VkAttachmentReference*)(&toTransform->fragmentDensityMapAttachment)); +} + +#endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control @@ -9045,6 +9119,26 @@ void transform_tohost_extension_struct(VkDecoderGlobalState* resourceTracker, break; } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + transform_tohost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + resourceTracker, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + transform_tohost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + resourceTracker, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + transform_tohost_VkRenderPassFragmentDensityMapCreateInfoEXT( + resourceTracker, reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out)); + break; + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { transform_tohost_VkPhysicalDeviceProvokingVertexFeaturesEXT( @@ -10150,6 +10244,26 @@ void transform_fromhost_extension_struct(VkDecoderGlobalState* resourceTracker, break; } #endif +#ifdef VK_EXT_fragment_density_map + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + transform_fromhost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + resourceTracker, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + transform_fromhost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + resourceTracker, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>( + structExtension_out)); + break; + } + case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: { + transform_fromhost_VkRenderPassFragmentDensityMapCreateInfoEXT( + resourceTracker, reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>( + structExtension_out)); + break; + } +#endif #ifdef VK_EXT_provoking_vertex case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { transform_fromhost_VkPhysicalDeviceProvokingVertexFeaturesEXT( diff --git a/host/vulkan/cereal/common/goldfish_vk_transform.h b/host/vulkan/cereal/common/goldfish_vk_transform.h index 359fa4d0..b7b5851a 100644 --- a/host/vulkan/cereal/common/goldfish_vk_transform.h +++ b/host/vulkan/cereal/common/goldfish_vk_transform.h @@ -2884,6 +2884,32 @@ DEFINE_ALIAS_FUNCTION(transform_fromhost_VkPipelineCreationFeedback, #endif #ifdef VK_EXT_metal_surface #endif +#ifdef VK_EXT_fragment_density_map +void transform_tohost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + VkDecoderGlobalState* resourceTracker, + VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toTransform); + +void transform_fromhost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT( + VkDecoderGlobalState* resourceTracker, + VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toTransform); + +void transform_tohost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + VkDecoderGlobalState* resourceTracker, + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toTransform); + +void transform_fromhost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT( + VkDecoderGlobalState* resourceTracker, + VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toTransform); + +void transform_tohost_VkRenderPassFragmentDensityMapCreateInfoEXT( + VkDecoderGlobalState* resourceTracker, + VkRenderPassFragmentDensityMapCreateInfoEXT* toTransform); + +void transform_fromhost_VkRenderPassFragmentDensityMapCreateInfoEXT( + VkDecoderGlobalState* resourceTracker, + VkRenderPassFragmentDensityMapCreateInfoEXT* toTransform); + +#endif #ifdef VK_EXT_scalar_block_layout DEFINE_ALIAS_FUNCTION(transform_tohost_VkPhysicalDeviceScalarBlockLayoutFeatures, transform_tohost_VkPhysicalDeviceScalarBlockLayoutFeaturesEXT) diff --git a/host/vulkan/cereal/meson.build b/host/vulkan/cereal/meson.build index c0d228e0..d9f917d7 100644 --- a/host/vulkan/cereal/meson.build +++ b/host/vulkan/cereal/meson.build @@ -19,7 +19,8 @@ lib_vulkan_cereal = static_library( 'cereal', files_lib_cereal, cpp_args: cereal_cpp_args + default_cpp_args, - include_directories: [inc_stream_servers, inc_vulkan_server, inc_utils, + include_directories: [inc_cereal, inc_cereal_common, inc_stream_servers, + inc_vulkan_server, inc_utils, inc_include, inc_vulkan_headers], dependencies: [aemu_base_dep, aemu_common_dep] ) diff --git a/host/vulkan/meson.build b/host/vulkan/meson.build index 00a2be3a..744f84c6 100644 --- a/host/vulkan/meson.build +++ b/host/vulkan/meson.build @@ -1,7 +1,8 @@ # Copyright 2023 Android Open Source Project # SPDX-License-Identifier: MIT -inc_vulkan_cereal = include_directories('cereal') +inc_cereal = include_directories('cereal') +inc_cereal_common = include_directories('cereal/common') inc_vulkan_server = include_directories('.') subdir('cereal') @@ -56,7 +57,7 @@ lib_vulkan_server = static_library( files_lib_vulkan_server, cpp_args: vulkan_server_cpp_args + default_cpp_args, include_directories: [inc_root, inc_include, inc_utils, inc_apigen_codec, - inc_vulkan_cereal, inc_stream_servers, + inc_cereal, inc_cereal_common, inc_stream_servers, inc_vulkan_server, inc_renderdoc_external, inc_gl_host_common, inc_vulkan_headers, inc_glm], link_with: [lib_vulkan_cereal, lib_emulated_textures], diff --git a/scripts/generate-gfxstream-vulkan.sh b/scripts/generate-gfxstream-vulkan.sh index 9722b41b..eea57f91 100755 --- a/scripts/generate-gfxstream-vulkan.sh +++ b/scripts/generate-gfxstream-vulkan.sh @@ -34,13 +34,6 @@ export GFXSTREAM_HOST_DECODER_DIR=$GFXSTREAM_DIR/host/vulkan export GFXSTREAM_OUTPUT_DIR=$GFXSTREAM_HOST_DECODER_DIR/cereal export GFXSTREAM_SCRIPTS_DIR=$GFXSTREAM_DIR/scripts -# Legacy build info, used by cereal generator. CMake specific, should delete eventually. -export VK_CEREAL_BASELIB_PREFIX=aemu/base -export VK_CEREAL_BASELIB_LINKNAME=aemu-base.headers -export VK_CEREAL_VK_HEADER_TARGET=gfxstream_vulkan_headers -export VK_CEREAL_UTILS_LINKNAME=gfxstream_utils.headers -export VK_CEREAL_UTILS_PREFIX=utils - export GEN_VK=$GFXSTREAM_DIR/codegen/vulkan/vulkan-docs-next/scripts/genvk.py export VK_XML=$GFXSTREAM_DIR/codegen/vulkan/vulkan-docs-next/xml/vk.xml export CUSTOM_XML=$GFXSTREAM_DIR/codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml |