gfxstream: guest: add VK_EXT_color_write_enable
Zink uses this extension.
BUG=349122558
TEST=run zink
Change-Id: I25de9d8eccf738f0c0687ca6e8ce829860ed5084
diff --git a/host/vulkan/VkDecoder.cpp b/host/vulkan/VkDecoder.cpp
index d01db9c..e36069c 100644
--- a/host/vulkan/VkDecoder.cpp
+++ b/host/vulkan/VkDecoder.cpp
@@ -20508,6 +20508,53 @@
break;
}
#endif
+#ifdef VK_EXT_color_write_enable
+ case OP_vkCmdSetColorWriteEnableEXT: {
+ android::base::beginTrace("vkCmdSetColorWriteEnableEXT decode");
+ VkCommandBuffer commandBuffer;
+ uint32_t attachmentCount;
+ const VkBool32* pColorWriteEnables;
+ // Begin non wrapped dispatchable handle unboxing for commandBuffer;
+ uint64_t cgen_var_0;
+ memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
+ *readStreamPtrPtr += 1 * 8;
+ *(VkCommandBuffer*)&commandBuffer =
+ (VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
+ auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
+ auto vk = dispatch_VkCommandBuffer(commandBuffer);
+ // End manual dispatchable handle unboxing for commandBuffer;
+ memcpy((uint32_t*)&attachmentCount, *readStreamPtrPtr, sizeof(uint32_t));
+ *readStreamPtrPtr += sizeof(uint32_t);
+ vkReadStream->alloc((void**)&pColorWriteEnables,
+ ((attachmentCount)) * sizeof(const VkBool32));
+ memcpy((VkBool32*)pColorWriteEnables, *readStreamPtrPtr,
+ ((attachmentCount)) * sizeof(const VkBool32));
+ *readStreamPtrPtr += ((attachmentCount)) * sizeof(const VkBool32);
+ if (m_logCalls) {
+ fprintf(stderr,
+ "stream %p: call vkCmdSetColorWriteEnableEXT 0x%llx 0x%llx 0x%llx \n",
+ ioStream, (unsigned long long)commandBuffer,
+ (unsigned long long)attachmentCount,
+ (unsigned long long)pColorWriteEnables);
+ }
+ vk->vkCmdSetColorWriteEnableEXT(unboxed_commandBuffer, attachmentCount,
+ pColorWriteEnables);
+ vkStream->unsetHandleMapping();
+ vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
+ (uintptr_t)snapshotTraceBegin);
+ size_t snapshotTraceBytes = vkReadStream->endTrace();
+ if (m_state->snapshotsEnabled()) {
+ m_state->snapshot()->vkCmdSetColorWriteEnableEXT(
+ snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
+ attachmentCount, pColorWriteEnables);
+ }
+ vkReadStream->clearPool();
+ if (m_queueSubmitWithCommandsEnabled)
+ seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
+ android::base::endTrace();
+ break;
+ }
+#endif
#ifdef VK_GOOGLE_gfxstream
case OP_vkMapMemoryIntoAddressSpaceGOOGLE: {
android::base::beginTrace("vkMapMemoryIntoAddressSpaceGOOGLE decode");
diff --git a/host/vulkan/VkDecoder.h b/host/vulkan/VkDecoder.h
index 80d41ed..b1087e1 100644
--- a/host/vulkan/VkDecoder.h
+++ b/host/vulkan/VkDecoder.h
@@ -252,6 +252,8 @@
#endif
#ifdef VK_EXT_extended_dynamic_state2
#endif
+#ifdef VK_EXT_color_write_enable
+#endif
#ifdef VK_GOOGLE_gfxstream
#endif
#ifdef VK_EXT_load_store_op_none
diff --git a/host/vulkan/VkDecoderSnapshot.cpp b/host/vulkan/VkDecoderSnapshot.cpp
index 448c8b6..a406dcb 100644
--- a/host/vulkan/VkDecoderSnapshot.cpp
+++ b/host/vulkan/VkDecoderSnapshot.cpp
@@ -3616,6 +3616,22 @@
}
}
#endif
+#ifdef VK_EXT_color_write_enable
+ void vkCmdSetColorWriteEnableEXT(const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes,
+ android::base::BumpPool* pool, VkCommandBuffer commandBuffer,
+ uint32_t attachmentCount, const VkBool32* pColorWriteEnables) {
+ android::base::AutoLock lock(mLock);
+ // commandBuffer modify
+ auto apiHandle = mReconstruction.createApiInfo();
+ auto apiInfo = mReconstruction.getApiInfo(apiHandle);
+ mReconstruction.setApiTrace(apiInfo, OP_vkCmdSetColorWriteEnableEXT, snapshotTraceBegin,
+ snapshotTraceBytes);
+ for (uint32_t i = 0; i < 1; ++i) {
+ VkCommandBuffer boxed = unboxed_to_boxed_VkCommandBuffer((&commandBuffer)[i]);
+ mReconstruction.forEachHandleAddModifyApi((const uint64_t*)(&boxed), 1, apiHandle);
+ }
+ }
+#endif
#ifdef VK_GOOGLE_gfxstream
void vkMapMemoryIntoAddressSpaceGOOGLE(const uint8_t* snapshotTraceBegin,
size_t snapshotTraceBytes, android::base::BumpPool* pool,
@@ -7052,6 +7068,14 @@
commandBuffer, primitiveRestartEnable);
}
#endif
+#ifdef VK_EXT_color_write_enable
+void VkDecoderSnapshot::vkCmdSetColorWriteEnableEXT(
+ const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes, android::base::BumpPool* pool,
+ VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkBool32* pColorWriteEnables) {
+ mImpl->vkCmdSetColorWriteEnableEXT(snapshotTraceBegin, snapshotTraceBytes, pool, commandBuffer,
+ attachmentCount, pColorWriteEnables);
+}
+#endif
#ifdef VK_GOOGLE_gfxstream
void VkDecoderSnapshot::vkMapMemoryIntoAddressSpaceGOOGLE(
const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes, android::base::BumpPool* pool,
diff --git a/host/vulkan/VkDecoderSnapshot.h b/host/vulkan/VkDecoderSnapshot.h
index 337d151..723d72e 100644
--- a/host/vulkan/VkDecoderSnapshot.h
+++ b/host/vulkan/VkDecoderSnapshot.h
@@ -1555,6 +1555,11 @@
VkCommandBuffer commandBuffer,
VkBool32 primitiveRestartEnable);
#endif
+#ifdef VK_EXT_color_write_enable
+ void vkCmdSetColorWriteEnableEXT(const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes,
+ android::base::BumpPool* pool, VkCommandBuffer commandBuffer,
+ uint32_t attachmentCount, const VkBool32* pColorWriteEnables);
+#endif
#ifdef VK_GOOGLE_gfxstream
void vkMapMemoryIntoAddressSpaceGOOGLE(const uint8_t* snapshotTraceBegin,
size_t snapshotTraceBytes, android::base::BumpPool* pool,
diff --git a/host/vulkan/VkSubDecoder.cpp b/host/vulkan/VkSubDecoder.cpp
index 215fc80..b204f42 100644
--- a/host/vulkan/VkSubDecoder.cpp
+++ b/host/vulkan/VkSubDecoder.cpp
@@ -3137,6 +3137,29 @@
break;
}
#endif
+#ifdef VK_EXT_color_write_enable
+ case OP_vkCmdSetColorWriteEnableEXT: {
+ android::base::beginTrace("vkCmdSetColorWriteEnableEXT subdecode");
+ uint32_t attachmentCount;
+ const VkBool32* pColorWriteEnables;
+ VkBool32 stack_pColorWriteEnables[MAX_STACK_ITEMS];
+ memcpy((uint32_t*)&attachmentCount, *readStreamPtrPtr, sizeof(uint32_t));
+ *readStreamPtrPtr += sizeof(uint32_t);
+ if (((attachmentCount)) <= MAX_STACK_ITEMS) {
+ pColorWriteEnables = (VkBool32*)stack_pColorWriteEnables;
+ } else {
+ readStream->alloc((void**)&pColorWriteEnables,
+ ((attachmentCount)) * sizeof(const VkBool32));
+ }
+ memcpy((VkBool32*)pColorWriteEnables, *readStreamPtrPtr,
+ ((attachmentCount)) * sizeof(const VkBool32));
+ *readStreamPtrPtr += ((attachmentCount)) * sizeof(const VkBool32);
+ vk->vkCmdSetColorWriteEnableEXT((VkCommandBuffer)dispatchHandle, attachmentCount,
+ pColorWriteEnables);
+ android::base::endTrace();
+ break;
+ }
+#endif
#ifdef VK_GOOGLE_gfxstream
case OP_vkBeginCommandBufferAsyncGOOGLE: {
android::base::beginTrace("vkBeginCommandBufferAsyncGOOGLE subdecode");
diff --git a/host/vulkan/cereal/common/goldfish_vk_deepcopy.cpp b/host/vulkan/cereal/common/goldfish_vk_deepcopy.cpp
index fb5072e..ce7ba9e 100644
--- a/host/vulkan/cereal/common/goldfish_vk_deepcopy.cpp
+++ b/host/vulkan/cereal/common/goldfish_vk_deepcopy.cpp
@@ -9191,6 +9191,58 @@
}
#endif
+#ifdef VK_EXT_color_write_enable
+void deepcopy_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ Allocator* alloc, VkStructureType rootType,
+ const VkPhysicalDeviceColorWriteEnableFeaturesEXT* from,
+ VkPhysicalDeviceColorWriteEnableFeaturesEXT* 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_VkPipelineColorWriteCreateInfoEXT(Allocator* alloc, VkStructureType rootType,
+ const VkPipelineColorWriteCreateInfoEXT* from,
+ VkPipelineColorWriteCreateInfoEXT* 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));
+ }
+ to->pColorWriteEnables = nullptr;
+ if (from->pColorWriteEnables) {
+ to->pColorWriteEnables = (VkBool32*)alloc->dupArray(
+ from->pColorWriteEnables, from->attachmentCount * sizeof(const VkBool32));
+ }
+}
+
+#endif
#ifdef VK_GOOGLE_gfxstream
void deepcopy_VkImportColorBufferGOOGLE(Allocator* alloc, VkStructureType rootType,
const VkImportColorBufferGOOGLE* from,
@@ -10769,6 +10821,24 @@
break;
}
#endif
+#ifdef VK_EXT_color_write_enable
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT: {
+ deepcopy_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ alloc, rootType,
+ reinterpret_cast<const VkPhysicalDeviceColorWriteEnableFeaturesEXT*>(
+ structExtension),
+ reinterpret_cast<VkPhysicalDeviceColorWriteEnableFeaturesEXT*>(
+ structExtension_out));
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT: {
+ deepcopy_VkPipelineColorWriteCreateInfoEXT(
+ alloc, rootType,
+ reinterpret_cast<const VkPipelineColorWriteCreateInfoEXT*>(structExtension),
+ reinterpret_cast<VkPipelineColorWriteCreateInfoEXT*>(structExtension_out));
+ break;
+ }
+#endif
#ifdef VK_GOOGLE_gfxstream
case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE: {
deepcopy_VkImportColorBufferGOOGLE(
diff --git a/host/vulkan/cereal/common/goldfish_vk_deepcopy.h b/host/vulkan/cereal/common/goldfish_vk_deepcopy.h
index 74ffcb3..1ab18b3 100644
--- a/host/vulkan/cereal/common/goldfish_vk_deepcopy.h
+++ b/host/vulkan/cereal/common/goldfish_vk_deepcopy.h
@@ -2078,6 +2078,17 @@
VkPhysicalDeviceExtendedDynamicState2FeaturesEXT* to);
#endif
+#ifdef VK_EXT_color_write_enable
+void deepcopy_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ Allocator* alloc, VkStructureType rootType,
+ const VkPhysicalDeviceColorWriteEnableFeaturesEXT* from,
+ VkPhysicalDeviceColorWriteEnableFeaturesEXT* to);
+
+void deepcopy_VkPipelineColorWriteCreateInfoEXT(Allocator* alloc, VkStructureType rootType,
+ const VkPipelineColorWriteCreateInfoEXT* from,
+ VkPipelineColorWriteCreateInfoEXT* to);
+
+#endif
#ifdef VK_GOOGLE_gfxstream
void deepcopy_VkImportColorBufferGOOGLE(Allocator* alloc, VkStructureType rootType,
const VkImportColorBufferGOOGLE* from,
diff --git a/host/vulkan/cereal/common/goldfish_vk_dispatch.cpp b/host/vulkan/cereal/common/goldfish_vk_dispatch.cpp
index d225e29..acf2ae9 100644
--- a/host/vulkan/cereal/common/goldfish_vk_dispatch.cpp
+++ b/host/vulkan/cereal/common/goldfish_vk_dispatch.cpp
@@ -223,6 +223,8 @@
#endif
#ifdef VK_EXT_extended_dynamic_state2
#endif
+#ifdef VK_EXT_color_write_enable
+#endif
#ifdef VK_GOOGLE_gfxstream
#endif
#ifdef VK_EXT_load_store_op_none
@@ -921,6 +923,10 @@
out->vkCmdSetPrimitiveRestartEnableEXT =
(PFN_vkCmdSetPrimitiveRestartEnableEXT)dlSymFunc(lib, "vkCmdSetPrimitiveRestartEnableEXT");
#endif
+#ifdef VK_EXT_color_write_enable
+ out->vkCmdSetColorWriteEnableEXT =
+ (PFN_vkCmdSetColorWriteEnableEXT)dlSymFunc(lib, "vkCmdSetColorWriteEnableEXT");
+#endif
#ifdef VK_GOOGLE_gfxstream
out->vkMapMemoryIntoAddressSpaceGOOGLE =
(PFN_vkMapMemoryIntoAddressSpaceGOOGLE)dlSymFunc(lib, "vkMapMemoryIntoAddressSpaceGOOGLE");
@@ -1875,6 +1881,10 @@
(PFN_vkCmdSetPrimitiveRestartEnableEXT)vk->vkGetInstanceProcAddr(
instance, "vkCmdSetPrimitiveRestartEnableEXT");
#endif
+#ifdef VK_EXT_color_write_enable
+ out->vkCmdSetColorWriteEnableEXT = (PFN_vkCmdSetColorWriteEnableEXT)vk->vkGetInstanceProcAddr(
+ instance, "vkCmdSetColorWriteEnableEXT");
+#endif
#ifdef VK_GOOGLE_gfxstream
out->vkMapMemoryIntoAddressSpaceGOOGLE =
(PFN_vkMapMemoryIntoAddressSpaceGOOGLE)vk->vkGetInstanceProcAddr(
@@ -2811,6 +2821,10 @@
(PFN_vkCmdSetPrimitiveRestartEnableEXT)vk->vkGetDeviceProcAddr(
device, "vkCmdSetPrimitiveRestartEnableEXT");
#endif
+#ifdef VK_EXT_color_write_enable
+ out->vkCmdSetColorWriteEnableEXT = (PFN_vkCmdSetColorWriteEnableEXT)vk->vkGetDeviceProcAddr(
+ device, "vkCmdSetColorWriteEnableEXT");
+#endif
#ifdef VK_GOOGLE_gfxstream
out->vkMapMemoryIntoAddressSpaceGOOGLE =
(PFN_vkMapMemoryIntoAddressSpaceGOOGLE)vk->vkGetDeviceProcAddr(
diff --git a/host/vulkan/cereal/common/goldfish_vk_dispatch.h b/host/vulkan/cereal/common/goldfish_vk_dispatch.h
index b54a8b1..bb57b78 100644
--- a/host/vulkan/cereal/common/goldfish_vk_dispatch.h
+++ b/host/vulkan/cereal/common/goldfish_vk_dispatch.h
@@ -617,6 +617,9 @@
PFN_vkCmdSetLogicOpEXT vkCmdSetLogicOpEXT;
PFN_vkCmdSetPrimitiveRestartEnableEXT vkCmdSetPrimitiveRestartEnableEXT;
#endif
+#ifdef VK_EXT_color_write_enable
+ PFN_vkCmdSetColorWriteEnableEXT vkCmdSetColorWriteEnableEXT;
+#endif
#ifdef VK_GOOGLE_gfxstream
PFN_vkMapMemoryIntoAddressSpaceGOOGLE vkMapMemoryIntoAddressSpaceGOOGLE;
PFN_vkUpdateDescriptorSetWithTemplateSizedGOOGLE vkUpdateDescriptorSetWithTemplateSizedGOOGLE;
diff --git a/host/vulkan/cereal/common/goldfish_vk_extension_structs.cpp b/host/vulkan/cereal/common/goldfish_vk_extension_structs.cpp
index 34c17e6..d1be96b 100644
--- a/host/vulkan/cereal/common/goldfish_vk_extension_structs.cpp
+++ b/host/vulkan/cereal/common/goldfish_vk_extension_structs.cpp
@@ -218,6 +218,8 @@
#endif
#ifdef VK_EXT_extended_dynamic_state2
#endif
+#ifdef VK_EXT_color_write_enable
+#endif
#ifdef VK_GOOGLE_gfxstream
#endif
#ifdef VK_EXT_load_store_op_none
@@ -871,6 +873,14 @@
return sizeof(VkPhysicalDeviceExtendedDynamicState2FeaturesEXT);
}
#endif
+#ifdef VK_EXT_color_write_enable
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT: {
+ return sizeof(VkPhysicalDeviceColorWriteEnableFeaturesEXT);
+ }
+ case VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT: {
+ return sizeof(VkPipelineColorWriteCreateInfoEXT);
+ }
+#endif
#ifdef VK_GOOGLE_gfxstream
case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE: {
return sizeof(VkImportColorBufferGOOGLE);
@@ -1541,6 +1551,14 @@
return sizeof(VkPhysicalDeviceExtendedDynamicState2FeaturesEXT);
}
#endif
+#ifdef VK_EXT_color_write_enable
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT: {
+ return sizeof(VkPhysicalDeviceColorWriteEnableFeaturesEXT);
+ }
+ case VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT: {
+ return sizeof(VkPipelineColorWriteCreateInfoEXT);
+ }
+#endif
#ifdef VK_GOOGLE_gfxstream
case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE: {
return sizeof(VkImportColorBufferGOOGLE);
diff --git a/host/vulkan/cereal/common/goldfish_vk_extension_structs.h b/host/vulkan/cereal/common/goldfish_vk_extension_structs.h
index 092fc41..80cd508 100644
--- a/host/vulkan/cereal/common/goldfish_vk_extension_structs.h
+++ b/host/vulkan/cereal/common/goldfish_vk_extension_structs.h
@@ -232,6 +232,8 @@
#endif
#ifdef VK_EXT_extended_dynamic_state2
#endif
+#ifdef VK_EXT_color_write_enable
+#endif
#ifdef VK_GOOGLE_gfxstream
#endif
#ifdef VK_EXT_load_store_op_none
diff --git a/host/vulkan/cereal/common/goldfish_vk_marshaling.cpp b/host/vulkan/cereal/common/goldfish_vk_marshaling.cpp
index b077246..3465068 100644
--- a/host/vulkan/cereal/common/goldfish_vk_marshaling.cpp
+++ b/host/vulkan/cereal/common/goldfish_vk_marshaling.cpp
@@ -18149,6 +18149,86 @@
}
#endif
+#ifdef VK_EXT_color_write_enable
+void marshal_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ VulkanStream* vkStream, VkStructureType rootType,
+ const VkPhysicalDeviceColorWriteEnableFeaturesEXT* 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->colorWriteEnable, sizeof(VkBool32));
+}
+
+void unmarshal_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ VulkanStream* vkStream, VkStructureType rootType,
+ VkPhysicalDeviceColorWriteEnableFeaturesEXT* forUnmarshaling) {
+ (void)rootType;
+ vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+ 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->colorWriteEnable, sizeof(VkBool32));
+}
+
+void marshal_VkPipelineColorWriteCreateInfoEXT(
+ VulkanStream* vkStream, VkStructureType rootType,
+ const VkPipelineColorWriteCreateInfoEXT* 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((uint32_t*)&forMarshaling->attachmentCount, sizeof(uint32_t));
+ vkStream->write((const VkBool32*)forMarshaling->pColorWriteEnables,
+ forMarshaling->attachmentCount * sizeof(const VkBool32));
+}
+
+void unmarshal_VkPipelineColorWriteCreateInfoEXT(
+ VulkanStream* vkStream, VkStructureType rootType,
+ VkPipelineColorWriteCreateInfoEXT* forUnmarshaling) {
+ (void)rootType;
+ vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+ 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((uint32_t*)&forUnmarshaling->attachmentCount, sizeof(uint32_t));
+ vkStream->alloc((void**)&forUnmarshaling->pColorWriteEnables,
+ forUnmarshaling->attachmentCount * sizeof(const VkBool32));
+ vkStream->read((VkBool32*)forUnmarshaling->pColorWriteEnables,
+ forUnmarshaling->attachmentCount * sizeof(const VkBool32));
+}
+
+#endif
#ifdef VK_GOOGLE_gfxstream
void marshal_VkImportColorBufferGOOGLE(VulkanStream* vkStream, VkStructureType rootType,
const VkImportColorBufferGOOGLE* forMarshaling) {
@@ -19569,6 +19649,21 @@
break;
}
#endif
+#ifdef VK_EXT_color_write_enable
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT: {
+ marshal_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ vkStream, rootType,
+ reinterpret_cast<const VkPhysicalDeviceColorWriteEnableFeaturesEXT*>(
+ structExtension));
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT: {
+ marshal_VkPipelineColorWriteCreateInfoEXT(
+ vkStream, rootType,
+ reinterpret_cast<const VkPipelineColorWriteCreateInfoEXT*>(structExtension));
+ break;
+ }
+#endif
#ifdef VK_GOOGLE_gfxstream
case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE: {
marshal_VkImportColorBufferGOOGLE(
@@ -20854,6 +20949,21 @@
break;
}
#endif
+#ifdef VK_EXT_color_write_enable
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT: {
+ unmarshal_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ vkStream, rootType,
+ reinterpret_cast<VkPhysicalDeviceColorWriteEnableFeaturesEXT*>(
+ structExtension_out));
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT: {
+ unmarshal_VkPipelineColorWriteCreateInfoEXT(
+ vkStream, rootType,
+ reinterpret_cast<VkPipelineColorWriteCreateInfoEXT*>(structExtension_out));
+ break;
+ }
+#endif
#ifdef VK_GOOGLE_gfxstream
case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE: {
unmarshal_VkImportColorBufferGOOGLE(
@@ -21659,6 +21769,11 @@
return "OP_vkGetDeviceBufferMemoryRequirementsKHR";
}
#endif
+#ifdef VK_EXT_color_write_enable
+ case OP_vkCmdSetColorWriteEnableEXT: {
+ return "OP_vkCmdSetColorWriteEnableEXT";
+ }
+#endif
#ifdef VK_KHR_maintenance5
case OP_vkCmdBindIndexBuffer2KHR: {
return "OP_vkCmdBindIndexBuffer2KHR";
diff --git a/host/vulkan/cereal/common/goldfish_vk_marshaling.h b/host/vulkan/cereal/common/goldfish_vk_marshaling.h
index 66897c2..96b368e 100644
--- a/host/vulkan/cereal/common/goldfish_vk_marshaling.h
+++ b/host/vulkan/cereal/common/goldfish_vk_marshaling.h
@@ -3847,6 +3847,25 @@
#define OP_vkCmdSetLogicOpEXT 267481927
#define OP_vkCmdSetPrimitiveRestartEnableEXT 299567883
#endif
+#ifdef VK_EXT_color_write_enable
+void marshal_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ VulkanStream* vkStream, VkStructureType rootType,
+ const VkPhysicalDeviceColorWriteEnableFeaturesEXT* forMarshaling);
+
+void unmarshal_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ VulkanStream* vkStream, VkStructureType rootType,
+ VkPhysicalDeviceColorWriteEnableFeaturesEXT* forUnmarshaling);
+
+void marshal_VkPipelineColorWriteCreateInfoEXT(
+ VulkanStream* vkStream, VkStructureType rootType,
+ const VkPipelineColorWriteCreateInfoEXT* forMarshaling);
+
+void unmarshal_VkPipelineColorWriteCreateInfoEXT(
+ VulkanStream* vkStream, VkStructureType rootType,
+ VkPipelineColorWriteCreateInfoEXT* forUnmarshaling);
+
+#define OP_vkCmdSetColorWriteEnableEXT 202223297
+#endif
#ifdef VK_GOOGLE_gfxstream
void marshal_VkImportColorBufferGOOGLE(VulkanStream* vkStream, VkStructureType rootType,
const VkImportColorBufferGOOGLE* forMarshaling);
diff --git a/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.cpp b/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.cpp
index 5dee122..20c4c86 100644
--- a/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.cpp
+++ b/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.cpp
@@ -14064,6 +14064,71 @@
}
#endif
+#ifdef VK_EXT_color_write_enable
+void reservedunmarshal_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ VulkanStream* vkStream, VkStructureType rootType,
+ VkPhysicalDeviceColorWriteEnableFeaturesEXT* forUnmarshaling, uint8_t** ptr) {
+ memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+ *ptr += sizeof(VkStructureType);
+ 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->colorWriteEnable, *ptr, sizeof(VkBool32));
+ *ptr += sizeof(VkBool32);
+}
+
+void reservedunmarshal_VkPipelineColorWriteCreateInfoEXT(
+ VulkanStream* vkStream, VkStructureType rootType,
+ VkPipelineColorWriteCreateInfoEXT* forUnmarshaling, uint8_t** ptr) {
+ memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+ *ptr += sizeof(VkStructureType);
+ 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((uint32_t*)&forUnmarshaling->attachmentCount, *ptr, sizeof(uint32_t));
+ *ptr += sizeof(uint32_t);
+ vkStream->alloc((void**)&forUnmarshaling->pColorWriteEnables,
+ forUnmarshaling->attachmentCount * sizeof(const VkBool32));
+ memcpy((VkBool32*)forUnmarshaling->pColorWriteEnables, *ptr,
+ forUnmarshaling->attachmentCount * sizeof(const VkBool32));
+ *ptr += forUnmarshaling->attachmentCount * sizeof(const VkBool32);
+}
+
+#endif
#ifdef VK_GOOGLE_gfxstream
void reservedunmarshal_VkImportColorBufferGOOGLE(VulkanStream* vkStream, VkStructureType rootType,
VkImportColorBufferGOOGLE* forUnmarshaling,
@@ -15546,6 +15611,21 @@
break;
}
#endif
+#ifdef VK_EXT_color_write_enable
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT: {
+ reservedunmarshal_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ vkStream, rootType,
+ reinterpret_cast<VkPhysicalDeviceColorWriteEnableFeaturesEXT*>(structExtension_out),
+ ptr);
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT: {
+ reservedunmarshal_VkPipelineColorWriteCreateInfoEXT(
+ vkStream, rootType,
+ reinterpret_cast<VkPipelineColorWriteCreateInfoEXT*>(structExtension_out), ptr);
+ break;
+ }
+#endif
#ifdef VK_GOOGLE_gfxstream
case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE: {
reservedunmarshal_VkImportColorBufferGOOGLE(
diff --git a/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.h b/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.h
index cc6d7aa..8571822 100644
--- a/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.h
+++ b/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.h
@@ -2051,6 +2051,16 @@
VkPhysicalDeviceExtendedDynamicState2FeaturesEXT* forUnmarshaling, uint8_t** ptr);
#endif
+#ifdef VK_EXT_color_write_enable
+void reservedunmarshal_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ VulkanStream* vkStream, VkStructureType rootType,
+ VkPhysicalDeviceColorWriteEnableFeaturesEXT* forUnmarshaling, uint8_t** ptr);
+
+void reservedunmarshal_VkPipelineColorWriteCreateInfoEXT(
+ VulkanStream* vkStream, VkStructureType rootType,
+ VkPipelineColorWriteCreateInfoEXT* forUnmarshaling, uint8_t** ptr);
+
+#endif
#ifdef VK_GOOGLE_gfxstream
void reservedunmarshal_VkImportColorBufferGOOGLE(VulkanStream* vkStream, VkStructureType rootType,
VkImportColorBufferGOOGLE* forUnmarshaling,
diff --git a/host/vulkan/cereal/common/goldfish_vk_transform.cpp b/host/vulkan/cereal/common/goldfish_vk_transform.cpp
index 4974e11..d22c383 100644
--- a/host/vulkan/cereal/common/goldfish_vk_transform.cpp
+++ b/host/vulkan/cereal/common/goldfish_vk_transform.cpp
@@ -8420,6 +8420,46 @@
}
#endif
+#ifdef VK_EXT_color_write_enable
+void transform_tohost_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ VkDecoderGlobalState* resourceTracker,
+ VkPhysicalDeviceColorWriteEnableFeaturesEXT* toTransform) {
+ (void)resourceTracker;
+ (void)toTransform;
+ if (toTransform->pNext) {
+ transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+ }
+}
+
+void transform_fromhost_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ VkDecoderGlobalState* resourceTracker,
+ VkPhysicalDeviceColorWriteEnableFeaturesEXT* toTransform) {
+ (void)resourceTracker;
+ (void)toTransform;
+ if (toTransform->pNext) {
+ transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+ }
+}
+
+void transform_tohost_VkPipelineColorWriteCreateInfoEXT(
+ VkDecoderGlobalState* resourceTracker, VkPipelineColorWriteCreateInfoEXT* toTransform) {
+ (void)resourceTracker;
+ (void)toTransform;
+ if (toTransform->pNext) {
+ transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+ }
+}
+
+void transform_fromhost_VkPipelineColorWriteCreateInfoEXT(
+ VkDecoderGlobalState* resourceTracker, VkPipelineColorWriteCreateInfoEXT* toTransform) {
+ (void)resourceTracker;
+ (void)toTransform;
+ if (toTransform->pNext) {
+ transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+ }
+}
+
+#endif
#ifdef VK_GOOGLE_gfxstream
void transform_tohost_VkImportColorBufferGOOGLE(VkDecoderGlobalState* resourceTracker,
VkImportColorBufferGOOGLE* toTransform) {
@@ -9638,6 +9678,20 @@
break;
}
#endif
+#ifdef VK_EXT_color_write_enable
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT: {
+ transform_tohost_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ resourceTracker, reinterpret_cast<VkPhysicalDeviceColorWriteEnableFeaturesEXT*>(
+ structExtension_out));
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT: {
+ transform_tohost_VkPipelineColorWriteCreateInfoEXT(
+ resourceTracker,
+ reinterpret_cast<VkPipelineColorWriteCreateInfoEXT*>(structExtension_out));
+ break;
+ }
+#endif
#ifdef VK_GOOGLE_gfxstream
case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE: {
transform_tohost_VkImportColorBufferGOOGLE(
@@ -10806,6 +10860,20 @@
break;
}
#endif
+#ifdef VK_EXT_color_write_enable
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT: {
+ transform_fromhost_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ resourceTracker, reinterpret_cast<VkPhysicalDeviceColorWriteEnableFeaturesEXT*>(
+ structExtension_out));
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT: {
+ transform_fromhost_VkPipelineColorWriteCreateInfoEXT(
+ resourceTracker,
+ reinterpret_cast<VkPipelineColorWriteCreateInfoEXT*>(structExtension_out));
+ break;
+ }
+#endif
#ifdef VK_GOOGLE_gfxstream
case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE: {
transform_fromhost_VkImportColorBufferGOOGLE(
diff --git a/host/vulkan/cereal/common/goldfish_vk_transform.h b/host/vulkan/cereal/common/goldfish_vk_transform.h
index bfe011c..360d734 100644
--- a/host/vulkan/cereal/common/goldfish_vk_transform.h
+++ b/host/vulkan/cereal/common/goldfish_vk_transform.h
@@ -3382,6 +3382,22 @@
VkPhysicalDeviceExtendedDynamicState2FeaturesEXT* toTransform);
#endif
+#ifdef VK_EXT_color_write_enable
+void transform_tohost_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ VkDecoderGlobalState* resourceTracker,
+ VkPhysicalDeviceColorWriteEnableFeaturesEXT* toTransform);
+
+void transform_fromhost_VkPhysicalDeviceColorWriteEnableFeaturesEXT(
+ VkDecoderGlobalState* resourceTracker,
+ VkPhysicalDeviceColorWriteEnableFeaturesEXT* toTransform);
+
+void transform_tohost_VkPipelineColorWriteCreateInfoEXT(
+ VkDecoderGlobalState* resourceTracker, VkPipelineColorWriteCreateInfoEXT* toTransform);
+
+void transform_fromhost_VkPipelineColorWriteCreateInfoEXT(
+ VkDecoderGlobalState* resourceTracker, VkPipelineColorWriteCreateInfoEXT* toTransform);
+
+#endif
#ifdef VK_GOOGLE_gfxstream
void transform_tohost_VkImportColorBufferGOOGLE(VkDecoderGlobalState* resourceTracker,
VkImportColorBufferGOOGLE* toTransform);