aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-02-12 20:30:49 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-02-12 20:30:49 +0000
commit4673362dc7cec18bd4ec6bd4fb42277f8e2bb7ba (patch)
treeb6e21a0a5383d83ce44f0160fbb45f9e89546b9d
parentb8dab13c1dcfe36a0b575b471b969bbfd19780f7 (diff)
parent71f22b2fd1c27fc9cb83f822b0aeab771dabc40e (diff)
downloadgfxstream-emu-34-release.tar.gz
Snap for 11438001 from 71f22b2fd1c27fc9cb83f822b0aeab771dabc40e to emu-34-releaseemu-34-release
Change-Id: If2effa04c2e7f7ec10383d2ed746a7a31917554a
-rw-r--r--codegen/vulkan/vulkan-docs-next/scripts/cerealgenerator.py72
-rwxr-xr-xcodegen/vulkan/vulkan-docs-next/scripts/genvk.py7
-rw-r--r--guest/OpenglCodecCommon/GLClientState.cpp30
-rw-r--r--guest/OpenglSystemCommon/Gralloc.h2
-rw-r--r--guest/OpenglSystemCommon/GrallocGoldfish.cpp2
-rw-r--r--guest/OpenglSystemCommon/GrallocGoldfish.h2
-rw-r--r--guest/egl/egl.cpp57
-rw-r--r--guest/egl/eglContext.h1
-rw-r--r--guest/vulkan_enc/ResourceTracker.cpp16
-rw-r--r--guest/vulkan_enc/VkEncoder.cpp2
-rw-r--r--guest/vulkan_enc/VkEncoder.h2
-rw-r--r--guest/vulkan_enc/func_table.cpp2
-rw-r--r--guest/vulkan_enc/goldfish_vk_counting_guest.cpp154
-rw-r--r--guest/vulkan_enc/goldfish_vk_counting_guest.h14
-rw-r--r--guest/vulkan_enc/goldfish_vk_deepcopy_guest.cpp187
-rw-r--r--guest/vulkan_enc/goldfish_vk_deepcopy_guest.h17
-rw-r--r--guest/vulkan_enc/goldfish_vk_extension_structs_guest.cpp118
-rw-r--r--guest/vulkan_enc/goldfish_vk_extension_structs_guest.h2
-rw-r--r--guest/vulkan_enc/goldfish_vk_marshaling_guest.cpp276
-rw-r--r--guest/vulkan_enc/goldfish_vk_marshaling_guest.h26
-rw-r--r--guest/vulkan_enc/goldfish_vk_reserved_marshaling_guest.cpp156
-rw-r--r--guest/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h14
-rw-r--r--guest/vulkan_enc/goldfish_vk_transform_guest.cpp110
-rw-r--r--guest/vulkan_enc/goldfish_vk_transform_guest.h20
-rw-r--r--host/Android.bp17
-rw-r--r--host/CMakeLists.txt1
-rw-r--r--host/ContextHelper.h16
-rw-r--r--host/FrameBuffer.h1
-rw-r--r--host/RenderControl.cpp2
-rw-r--r--host/gl/ColorBufferGl.cpp3
-rw-r--r--host/gl/DisplaySurfaceGl.cpp88
-rw-r--r--host/gl/glestranslator/EGL/EglImp.cpp68
-rw-r--r--host/meson.build3
-rw-r--r--host/vulkan/Android.bp5
-rw-r--r--host/vulkan/CMakeLists.txt1
-rw-r--r--host/vulkan/VkAndroidNativeBuffer.cpp3
-rw-r--r--host/vulkan/VkAndroidNativeBuffer.h2
-rw-r--r--host/vulkan/VkCommonOperations.h2
-rw-r--r--host/vulkan/VkDecoder.cpp4
-rw-r--r--host/vulkan/VkDecoder.h2
-rw-r--r--host/vulkan/VkDecoderGlobalState.cpp32
-rw-r--r--host/vulkan/VkDecoderGlobalState.h2
-rw-r--r--host/vulkan/VkDecoderSnapshot.cpp2
-rw-r--r--host/vulkan/VkDecoderSnapshot.h4
-rw-r--r--host/vulkan/VkSubDecoder.cpp2
-rw-r--r--host/vulkan/VulkanStream.h2
-rw-r--r--host/vulkan/cereal/Android.bp7
-rw-r--r--host/vulkan/cereal/CMakeLists.txt12
-rw-r--r--host/vulkan/cereal/common/Android.bp17
-rw-r--r--host/vulkan/cereal/common/goldfish_vk_deepcopy.cpp187
-rw-r--r--host/vulkan/cereal/common/goldfish_vk_deepcopy.h17
-rw-r--r--host/vulkan/cereal/common/goldfish_vk_dispatch.cpp2
-rw-r--r--host/vulkan/cereal/common/goldfish_vk_dispatch.h2
-rw-r--r--host/vulkan/cereal/common/goldfish_vk_extension_structs.cpp118
-rw-r--r--host/vulkan/cereal/common/goldfish_vk_extension_structs.h2
-rw-r--r--host/vulkan/cereal/common/goldfish_vk_marshaling.cpp312
-rw-r--r--host/vulkan/cereal/common/goldfish_vk_marshaling.h26
-rw-r--r--host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.cpp201
-rw-r--r--host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.h14
-rw-r--r--host/vulkan/cereal/common/goldfish_vk_transform.cpp114
-rw-r--r--host/vulkan/cereal/common/goldfish_vk_transform.h26
-rw-r--r--host/vulkan/cereal/meson.build3
-rw-r--r--host/vulkan/meson.build5
-rwxr-xr-xscripts/generate-gfxstream-vulkan.sh7
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