Revert "Revert "goldfish-opengl: codegen for VkCreateBlobGOOGLE ..."
Revert submission 2521483-revert-2516960-gfxstream-guest-mem-XARGEGZPAM
Reason for revert: Easiest to revert the entire topic
Reverted changes: /q/submissionid:2521483-revert-2516960-gfxstream-guest-mem-XARGEGZPAM
Change-Id: I4d8427c4dbd7e8c83dc73ed7da9509688f5e0394
diff --git a/system/vulkan_enc/VkEncoder.cpp b/system/vulkan_enc/VkEncoder.cpp
index 8ee3aa9..068f779 100644
--- a/system/vulkan_enc/VkEncoder.cpp
+++ b/system/vulkan_enc/VkEncoder.cpp
@@ -60930,6 +60930,99 @@
if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
}
+VkResult VkEncoder::vkGetBlobGOOGLE(VkDevice device, VkDeviceMemory memory, uint32_t doLock) {
+ std::optional<uint32_t> healthMonitorAnnotation_seqno = std::nullopt;
+ std::optional<uint32_t> healthMonitorAnnotation_packetSize = std::nullopt;
+ std::vector<uint8_t> healthMonitorAnnotation_packetContents;
+
+ auto watchdog =
+ WATCHDOG_BUILDER(mHealthMonitor, "vkGetBlobGOOGLE in VkEncoder")
+ .setOnHangCallback([&]() {
+ auto annotations = std::make_unique<EventHangMetadata::HangAnnotations>();
+ if (healthMonitorAnnotation_seqno) {
+ annotations->insert(
+ {{"seqno", std::to_string(healthMonitorAnnotation_seqno.value())}});
+ }
+ if (healthMonitorAnnotation_packetSize) {
+ annotations->insert(
+ {{"packetSize",
+ std::to_string(healthMonitorAnnotation_packetSize.value())}});
+ }
+ if (!healthMonitorAnnotation_packetContents.empty()) {
+ annotations->insert(
+ {{"packetContents",
+ getPacketContents(&healthMonitorAnnotation_packetContents[0],
+ healthMonitorAnnotation_packetContents.size())}});
+ }
+ return std::move(annotations);
+ })
+ .build();
+
+ ENCODER_DEBUG_LOG("vkGetBlobGOOGLE(device:%p, memory:%p)", device, memory);
+ (void)doLock;
+ bool queueSubmitWithCommandsEnabled =
+ sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
+ if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
+ auto stream = mImpl->stream();
+ auto pool = mImpl->pool();
+ VkDevice local_device;
+ VkDeviceMemory local_memory;
+ local_device = device;
+ local_memory = memory;
+ sResourceTracker->deviceMemoryTransform_tohost(
+ (VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0,
+ (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
+ size_t count = 0;
+ size_t* countPtr = &count;
+ {
+ uint64_t cgen_var_0;
+ *countPtr += 1 * 8;
+ uint64_t cgen_var_1;
+ *countPtr += 1 * 8;
+ }
+ uint32_t packetSize_vkGetBlobGOOGLE = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
+ healthMonitorAnnotation_packetSize = std::make_optional(packetSize_vkGetBlobGOOGLE);
+ uint8_t* streamPtr = stream->reserve(packetSize_vkGetBlobGOOGLE);
+ uint8_t* packetBeginPtr = streamPtr;
+ uint8_t** streamPtrPtr = &streamPtr;
+ uint32_t opcode_vkGetBlobGOOGLE = OP_vkGetBlobGOOGLE;
+ uint32_t seqno;
+ if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
+ healthMonitorAnnotation_seqno = std::make_optional(seqno);
+ memcpy(streamPtr, &opcode_vkGetBlobGOOGLE, sizeof(uint32_t));
+ streamPtr += sizeof(uint32_t);
+ memcpy(streamPtr, &packetSize_vkGetBlobGOOGLE, sizeof(uint32_t));
+ streamPtr += sizeof(uint32_t);
+ if (queueSubmitWithCommandsEnabled) {
+ memcpy(streamPtr, &seqno, sizeof(uint32_t));
+ streamPtr += sizeof(uint32_t);
+ }
+ uint64_t cgen_var_0;
+ *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
+ memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
+ *streamPtrPtr += 1 * 8;
+ uint64_t cgen_var_1;
+ *&cgen_var_1 = get_host_u64_VkDeviceMemory((*&local_memory));
+ memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
+ *streamPtrPtr += 1 * 8;
+ if (watchdog) {
+ size_t watchdogBufSize =
+ std::min<size_t>(static_cast<size_t>(packetSize_vkGetBlobGOOGLE), kWatchdogBufferMax);
+ healthMonitorAnnotation_packetContents.resize(watchdogBufSize);
+ memcpy(&healthMonitorAnnotation_packetContents[0], packetBeginPtr, watchdogBufSize);
+ }
+ VkResult vkGetBlobGOOGLE_VkResult_return = (VkResult)0;
+ stream->read(&vkGetBlobGOOGLE_VkResult_return, sizeof(VkResult));
+ ++encodeCount;
+ ;
+ if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
+ pool->freeAll();
+ stream->clearPool();
+ }
+ if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
+ return vkGetBlobGOOGLE_VkResult_return;
+}
+
#endif
#ifdef VK_EXT_global_priority_query
#endif
diff --git a/system/vulkan_enc/VkEncoder.h b/system/vulkan_enc/VkEncoder.h
index 4e0b762..ab50adc 100644
--- a/system/vulkan_enc/VkEncoder.h
+++ b/system/vulkan_enc/VkEncoder.h
@@ -2030,6 +2030,7 @@
VkDeviceMemory deviceMemory,
VkDeviceSize dataOffset, VkDeviceSize dataSize,
uint32_t doLock);
+ VkResult vkGetBlobGOOGLE(VkDevice device, VkDeviceMemory memory, uint32_t doLock);
#endif
#ifdef VK_EXT_global_priority_query
#endif
diff --git a/system/vulkan_enc/func_table.cpp b/system/vulkan_enc/func_table.cpp
index 91cfb6d..83bf6f4 100644
--- a/system/vulkan_enc/func_table.cpp
+++ b/system/vulkan_enc/func_table.cpp
@@ -8436,6 +8436,24 @@
vkEnc->vkQueueFlushCommandsFromAuxMemoryGOOGLE(queue, commandBuffer, deviceMemory, dataOffset,
dataSize, true /* do lock */);
}
+static VkResult entry_vkGetBlobGOOGLE(VkDevice device, VkDeviceMemory memory) {
+ AEMU_SCOPED_TRACE("vkGetBlobGOOGLE");
+ auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+ VkResult vkGetBlobGOOGLE_VkResult_return = (VkResult)0;
+ vkGetBlobGOOGLE_VkResult_return = vkEnc->vkGetBlobGOOGLE(device, memory, true /* do lock */);
+ return vkGetBlobGOOGLE_VkResult_return;
+}
+static VkResult dynCheck_entry_vkGetBlobGOOGLE(VkDevice device, VkDeviceMemory memory) {
+ auto resources = ResourceTracker::get();
+ if (!resources->hasDeviceExtension(device, "VK_GOOGLE_gfxstream")) {
+ sOnInvalidDynamicallyCheckedCall("vkGetBlobGOOGLE", "VK_GOOGLE_gfxstream");
+ }
+ AEMU_SCOPED_TRACE("vkGetBlobGOOGLE");
+ auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+ VkResult vkGetBlobGOOGLE_VkResult_return = (VkResult)0;
+ vkGetBlobGOOGLE_VkResult_return = vkEnc->vkGetBlobGOOGLE(device, memory, true /* do lock */);
+ return vkGetBlobGOOGLE_VkResult_return;
+}
#endif
#ifdef VK_EXT_global_priority_query
#endif
@@ -10838,6 +10856,9 @@
if (!strcmp(name, "vkQueueFlushCommandsFromAuxMemoryGOOGLE")) {
return nullptr;
}
+ if (!strcmp(name, "vkGetBlobGOOGLE")) {
+ return nullptr;
+ }
#endif
#ifdef VK_EXT_multi_draw
if (!strcmp(name, "vkCmdDrawMultiEXT")) {
@@ -13041,6 +13062,10 @@
bool hasExt = resources->hasInstanceExtension(instance, "VK_GOOGLE_gfxstream");
return hasExt ? (void*)entry_vkQueueFlushCommandsFromAuxMemoryGOOGLE : nullptr;
}
+ if (!strcmp(name, "vkGetBlobGOOGLE")) {
+ bool hasExt = resources->hasInstanceExtension(instance, "VK_GOOGLE_gfxstream");
+ return hasExt ? (void*)dynCheck_entry_vkGetBlobGOOGLE : nullptr;
+ }
#endif
#ifdef VK_EXT_multi_draw
if (!strcmp(name, "vkCmdDrawMultiEXT")) {
@@ -15286,6 +15311,10 @@
bool hasExt = resources->hasDeviceExtension(device, "VK_GOOGLE_gfxstream");
return hasExt ? (void*)entry_vkQueueFlushCommandsFromAuxMemoryGOOGLE : nullptr;
}
+ if (!strcmp(name, "vkGetBlobGOOGLE")) {
+ bool hasExt = resources->hasDeviceExtension(device, "VK_GOOGLE_gfxstream");
+ return hasExt ? (void*)entry_vkGetBlobGOOGLE : nullptr;
+ }
#endif
#ifdef VK_EXT_multi_draw
if (!strcmp(name, "vkCmdDrawMultiEXT")) {
diff --git a/system/vulkan_enc/goldfish_vk_counting_guest.cpp b/system/vulkan_enc/goldfish_vk_counting_guest.cpp
index 77e05db..120e18c 100644
--- a/system/vulkan_enc/goldfish_vk_counting_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_counting_guest.cpp
@@ -13756,6 +13756,22 @@
*count += sizeof(uint32_t);
}
+void count_VkCreateBlobGOOGLE(uint32_t featureBits, VkStructureType rootType,
+ const VkCreateBlobGOOGLE* 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(uint32_t);
+ *count += sizeof(uint32_t);
+ *count += sizeof(uint64_t);
+}
+
#endif
#ifdef VK_EXT_global_priority_query
void count_VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT(
@@ -16462,6 +16478,12 @@
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,
@@ -17259,6 +17281,12 @@
reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension), count);
break;
}
+ case VK_STRUCTURE_TYPE_CREATE_BLOB_GOOGLE: {
+ count_VkCreateBlobGOOGLE(featureBits, rootType,
+ reinterpret_cast<const VkCreateBlobGOOGLE*>(structExtension),
+ count);
+ break;
+ }
#endif
#ifdef VK_EXT_global_priority_query
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT: {
diff --git a/system/vulkan_enc/goldfish_vk_counting_guest.h b/system/vulkan_enc/goldfish_vk_counting_guest.h
index 4de8da0..00d5eda 100644
--- a/system/vulkan_enc/goldfish_vk_counting_guest.h
+++ b/system/vulkan_enc/goldfish_vk_counting_guest.h
@@ -3417,6 +3417,9 @@
void count_VkImportBufferGOOGLE(uint32_t featureBits, VkStructureType rootType,
const VkImportBufferGOOGLE* toCount, size_t* count);
+void count_VkCreateBlobGOOGLE(uint32_t featureBits, VkStructureType rootType,
+ const VkCreateBlobGOOGLE* toCount, size_t* count);
+
#endif
#ifdef VK_EXT_global_priority_query
void count_VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT(
diff --git a/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp b/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
index a9676c8..655a4d2 100644
--- a/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
@@ -17025,6 +17025,27 @@
}
}
+void deepcopy_VkCreateBlobGOOGLE(Allocator* alloc, VkStructureType rootType,
+ const VkCreateBlobGOOGLE* from, VkCreateBlobGOOGLE* 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));
+ }
+}
+
#endif
#ifdef VK_EXT_global_priority_query
void deepcopy_VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT(
@@ -20033,6 +20054,13 @@
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,
@@ -20892,6 +20920,12 @@
reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
break;
}
+ case VK_STRUCTURE_TYPE_CREATE_BLOB_GOOGLE: {
+ deepcopy_VkCreateBlobGOOGLE(
+ alloc, rootType, reinterpret_cast<const VkCreateBlobGOOGLE*>(structExtension),
+ reinterpret_cast<VkCreateBlobGOOGLE*>(structExtension_out));
+ break;
+ }
#endif
#ifdef VK_EXT_global_priority_query
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT: {
diff --git a/system/vulkan_enc/goldfish_vk_deepcopy_guest.h b/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
index 22de00f..c23eb8c 100644
--- a/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
+++ b/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
@@ -3776,6 +3776,9 @@
void deepcopy_VkImportBufferGOOGLE(Allocator* alloc, VkStructureType rootType,
const VkImportBufferGOOGLE* from, VkImportBufferGOOGLE* to);
+void deepcopy_VkCreateBlobGOOGLE(Allocator* alloc, VkStructureType rootType,
+ const VkCreateBlobGOOGLE* from, VkCreateBlobGOOGLE* to);
+
#endif
#ifdef VK_EXT_global_priority_query
void deepcopy_VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT(
diff --git a/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp b/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
index 6e780ba..ade32c2 100644
--- a/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
@@ -1554,6 +1554,10 @@
return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT);
break;
}
+ case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: {
+ return sizeof(VkCreateBlobGOOGLE);
+ break;
+ }
default: {
return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT);
break;
@@ -1940,6 +1944,9 @@
case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE: {
return sizeof(VkImportBufferGOOGLE);
}
+ case VK_STRUCTURE_TYPE_CREATE_BLOB_GOOGLE: {
+ return sizeof(VkCreateBlobGOOGLE);
+ }
#endif
#ifdef VK_EXT_global_priority_query
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT: {
@@ -2979,6 +2986,10 @@
return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT);
break;
}
+ case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: {
+ return sizeof(VkCreateBlobGOOGLE);
+ break;
+ }
default: {
return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT);
break;
@@ -3365,6 +3376,9 @@
case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE: {
return sizeof(VkImportBufferGOOGLE);
}
+ case VK_STRUCTURE_TYPE_CREATE_BLOB_GOOGLE: {
+ return sizeof(VkCreateBlobGOOGLE);
+ }
#endif
#ifdef VK_EXT_global_priority_query
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT: {
diff --git a/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp b/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
index f3042ed..c1b9fcc 100644
--- a/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
@@ -7795,6 +7795,14 @@
}
}
+void handlemap_VkCreateBlobGOOGLE(VulkanHandleMapping* handlemap, VkCreateBlobGOOGLE* toMap) {
+ (void)handlemap;
+ (void)toMap;
+ if (toMap->pNext) {
+ handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+ }
+}
+
#endif
#ifdef VK_EXT_global_priority_query
void handlemap_VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT(
@@ -10476,6 +10484,11 @@
handlemap, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
break;
}
+ case VK_STRUCTURE_TYPE_CREATE_BLOB_GOOGLE: {
+ handlemap_VkCreateBlobGOOGLE(
+ handlemap, reinterpret_cast<VkCreateBlobGOOGLE*>(structExtension_out));
+ break;
+ }
#endif
#ifdef VK_EXT_global_priority_query
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT: {
diff --git a/system/vulkan_enc/goldfish_vk_handlemap_guest.h b/system/vulkan_enc/goldfish_vk_handlemap_guest.h
index bfc3090..49cb457 100644
--- a/system/vulkan_enc/goldfish_vk_handlemap_guest.h
+++ b/system/vulkan_enc/goldfish_vk_handlemap_guest.h
@@ -2885,6 +2885,8 @@
void handlemap_VkImportBufferGOOGLE(VulkanHandleMapping* handlemap, VkImportBufferGOOGLE* toMap);
+void handlemap_VkCreateBlobGOOGLE(VulkanHandleMapping* handlemap, VkCreateBlobGOOGLE* toMap);
+
#endif
#ifdef VK_EXT_global_priority_query
void handlemap_VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT(
diff --git a/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp b/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
index b24484f..3b4cdb7 100644
--- a/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
@@ -24877,6 +24877,33 @@
vkStream->read((uint32_t*)&forUnmarshaling->buffer, sizeof(uint32_t));
}
+void marshal_VkCreateBlobGOOGLE(VulkanStreamGuest* vkStream, VkStructureType rootType,
+ const VkCreateBlobGOOGLE* 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->blobMem, sizeof(uint32_t));
+ vkStream->write((uint32_t*)&forMarshaling->blobFlags, sizeof(uint32_t));
+ vkStream->write((uint64_t*)&forMarshaling->blobId, sizeof(uint64_t));
+}
+
+void unmarshal_VkCreateBlobGOOGLE(VulkanStreamGuest* vkStream, VkStructureType rootType,
+ VkCreateBlobGOOGLE* forUnmarshaling) {
+ (void)rootType;
+ vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+ forUnmarshaling->sType = VK_STRUCTURE_TYPE_CREATE_BLOB_GOOGLE;
+ if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+ rootType = forUnmarshaling->sType;
+ }
+ unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+ vkStream->read((uint32_t*)&forUnmarshaling->blobMem, sizeof(uint32_t));
+ vkStream->read((uint32_t*)&forUnmarshaling->blobFlags, sizeof(uint32_t));
+ vkStream->read((uint64_t*)&forUnmarshaling->blobId, sizeof(uint64_t));
+}
+
#endif
#ifdef VK_EXT_global_priority_query
void marshal_VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT(
@@ -27988,6 +28015,12 @@
structExtension));
break;
}
+ case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: {
+ marshal_VkCreateBlobGOOGLE(
+ vkStream, rootType,
+ reinterpret_cast<const VkCreateBlobGOOGLE*>(structExtension));
+ break;
+ }
default: {
marshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
vkStream, rootType,
@@ -28707,6 +28740,11 @@
vkStream, rootType, reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension));
break;
}
+ case VK_STRUCTURE_TYPE_CREATE_BLOB_GOOGLE: {
+ marshal_VkCreateBlobGOOGLE(
+ vkStream, rootType, reinterpret_cast<const VkCreateBlobGOOGLE*>(structExtension));
+ break;
+ }
#endif
#ifdef VK_EXT_global_priority_query
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT: {
@@ -30665,6 +30703,12 @@
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,
@@ -31375,6 +31419,11 @@
vkStream, rootType, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
break;
}
+ case VK_STRUCTURE_TYPE_CREATE_BLOB_GOOGLE: {
+ unmarshal_VkCreateBlobGOOGLE(
+ vkStream, rootType, reinterpret_cast<VkCreateBlobGOOGLE*>(structExtension_out));
+ break;
+ }
#endif
#ifdef VK_EXT_global_priority_query
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT: {
@@ -32597,6 +32646,9 @@
case OP_vkQueueFlushCommandsGOOGLE: {
return "OP_vkQueueFlushCommandsGOOGLE";
}
+ case OP_vkGetBlobGOOGLE: {
+ return "OP_vkGetBlobGOOGLE";
+ }
#endif
#ifdef VK_KHR_dynamic_rendering
case OP_vkCmdEndRenderingKHR: {
diff --git a/system/vulkan_enc/goldfish_vk_marshaling_guest.h b/system/vulkan_enc/goldfish_vk_marshaling_guest.h
index 6098399..0fd4111 100644
--- a/system/vulkan_enc/goldfish_vk_marshaling_guest.h
+++ b/system/vulkan_enc/goldfish_vk_marshaling_guest.h
@@ -6682,6 +6682,12 @@
void unmarshal_VkImportBufferGOOGLE(VulkanStreamGuest* vkStream, VkStructureType rootType,
VkImportBufferGOOGLE* forUnmarshaling);
+void marshal_VkCreateBlobGOOGLE(VulkanStreamGuest* vkStream, VkStructureType rootType,
+ const VkCreateBlobGOOGLE* forMarshaling);
+
+void unmarshal_VkCreateBlobGOOGLE(VulkanStreamGuest* vkStream, VkStructureType rootType,
+ VkCreateBlobGOOGLE* forUnmarshaling);
+
#define OP_vkMapMemoryIntoAddressSpaceGOOGLE 20317
#define OP_vkUpdateDescriptorSetWithTemplateSizedGOOGLE 20320
#define OP_vkBeginCommandBufferAsyncGOOGLE 20321
@@ -6703,6 +6709,7 @@
#define OP_vkCollectDescriptorPoolIdsGOOGLE 213659202
#define OP_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE 243985229
#define OP_vkQueueFlushCommandsFromAuxMemoryGOOGLE 290633483
+#define OP_vkGetBlobGOOGLE 20341
#endif
#ifdef VK_EXT_global_priority_query
void marshal_VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT(
diff --git a/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.cpp b/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.cpp
index 7cab997..24c249f 100644
--- a/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.cpp
@@ -16560,6 +16560,24 @@
*ptr += sizeof(uint32_t);
}
+void reservedmarshal_VkCreateBlobGOOGLE(VulkanStreamGuest* vkStream, VkStructureType rootType,
+ const VkCreateBlobGOOGLE* 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, (uint32_t*)&forMarshaling->blobMem, sizeof(uint32_t));
+ *ptr += sizeof(uint32_t);
+ memcpy(*ptr, (uint32_t*)&forMarshaling->blobFlags, sizeof(uint32_t));
+ *ptr += sizeof(uint32_t);
+ memcpy(*ptr, (uint64_t*)&forMarshaling->blobId, sizeof(uint64_t));
+ *ptr += sizeof(uint64_t);
+}
+
#endif
#ifdef VK_EXT_global_priority_query
void reservedmarshal_VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT(
@@ -19367,6 +19385,12 @@
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,
@@ -20160,6 +20184,12 @@
ptr);
break;
}
+ case VK_STRUCTURE_TYPE_CREATE_BLOB_GOOGLE: {
+ reservedmarshal_VkCreateBlobGOOGLE(
+ vkStream, rootType, reinterpret_cast<const VkCreateBlobGOOGLE*>(structExtension),
+ ptr);
+ break;
+ }
#endif
#ifdef VK_EXT_global_priority_query
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT: {
diff --git a/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h b/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h
index d35823d..54b3555 100644
--- a/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h
+++ b/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h
@@ -3707,6 +3707,9 @@
void reservedmarshal_VkImportBufferGOOGLE(VulkanStreamGuest* vkStream, VkStructureType rootType,
const VkImportBufferGOOGLE* forMarshaling, uint8_t** ptr);
+void reservedmarshal_VkCreateBlobGOOGLE(VulkanStreamGuest* vkStream, VkStructureType rootType,
+ const VkCreateBlobGOOGLE* forMarshaling, uint8_t** ptr);
+
#endif
#ifdef VK_EXT_global_priority_query
void reservedmarshal_VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT(
diff --git a/system/vulkan_enc/goldfish_vk_transform_guest.cpp b/system/vulkan_enc/goldfish_vk_transform_guest.cpp
index ac4bffe..2683ea9 100644
--- a/system/vulkan_enc/goldfish_vk_transform_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_transform_guest.cpp
@@ -15255,6 +15255,24 @@
}
}
+void transform_tohost_VkCreateBlobGOOGLE(ResourceTracker* resourceTracker,
+ VkCreateBlobGOOGLE* toTransform) {
+ (void)resourceTracker;
+ (void)toTransform;
+ if (toTransform->pNext) {
+ transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+ }
+}
+
+void transform_fromhost_VkCreateBlobGOOGLE(ResourceTracker* resourceTracker,
+ VkCreateBlobGOOGLE* toTransform) {
+ (void)resourceTracker;
+ (void)toTransform;
+ if (toTransform->pNext) {
+ transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+ }
+}
+
#endif
#ifdef VK_EXT_global_priority_query
void transform_tohost_VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT(
@@ -18395,6 +18413,11 @@
resourceTracker, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
break;
}
+ case VK_STRUCTURE_TYPE_CREATE_BLOB_GOOGLE: {
+ transform_tohost_VkCreateBlobGOOGLE(
+ resourceTracker, reinterpret_cast<VkCreateBlobGOOGLE*>(structExtension_out));
+ break;
+ }
#endif
#ifdef VK_EXT_global_priority_query
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT: {
@@ -20885,6 +20908,11 @@
resourceTracker, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
break;
}
+ case VK_STRUCTURE_TYPE_CREATE_BLOB_GOOGLE: {
+ transform_fromhost_VkCreateBlobGOOGLE(
+ resourceTracker, reinterpret_cast<VkCreateBlobGOOGLE*>(structExtension_out));
+ break;
+ }
#endif
#ifdef VK_EXT_global_priority_query
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT: {
diff --git a/system/vulkan_enc/goldfish_vk_transform_guest.h b/system/vulkan_enc/goldfish_vk_transform_guest.h
index fd0edca..8552ee6 100644
--- a/system/vulkan_enc/goldfish_vk_transform_guest.h
+++ b/system/vulkan_enc/goldfish_vk_transform_guest.h
@@ -5568,6 +5568,12 @@
void transform_fromhost_VkImportBufferGOOGLE(ResourceTracker* resourceTracker,
VkImportBufferGOOGLE* toTransform);
+void transform_tohost_VkCreateBlobGOOGLE(ResourceTracker* resourceTracker,
+ VkCreateBlobGOOGLE* toTransform);
+
+void transform_fromhost_VkCreateBlobGOOGLE(ResourceTracker* resourceTracker,
+ VkCreateBlobGOOGLE* toTransform);
+
#endif
#ifdef VK_EXT_global_priority_query
void transform_tohost_VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT(
diff --git a/system/vulkan_enc/vulkan_gfxstream.h b/system/vulkan_enc/vulkan_gfxstream.h
index a2c922e..060dac5 100644
--- a/system/vulkan_enc/vulkan_gfxstream.h
+++ b/system/vulkan_enc/vulkan_gfxstream.h
@@ -43,6 +43,14 @@
uint32_t buffer;
} VkImportBufferGOOGLE;
+typedef struct VkCreateBlobGOOGLE {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t blobMem;
+ uint32_t blobFlags;
+ uint64_t blobId;
+} VkCreateBlobGOOGLE;
+
typedef VkResult(VKAPI_PTR* PFN_vkMapMemoryIntoAddressSpaceGOOGLE)(VkDevice device,
VkDeviceMemory memory,
uint64_t* pAddress);
@@ -110,6 +118,7 @@
VkDeviceMemory deviceMemory,
VkDeviceSize dataOffset,
VkDeviceSize dataSize);
+typedef VkResult(VKAPI_PTR* PFN_vkGetBlobGOOGLE)(VkDevice device, VkDeviceMemory memory);
#ifndef VK_NO_PROTOTYPES
VKAPI_ATTR VkResult VKAPI_CALL vkMapMemoryIntoAddressSpaceGOOGLE(VkDevice device,
@@ -197,6 +206,8 @@
VkDeviceMemory deviceMemory,
VkDeviceSize dataOffset,
VkDeviceSize dataSize);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetBlobGOOGLE(VkDevice device, VkDeviceMemory memory);
#endif
#ifdef __cplusplus
diff --git a/system/vulkan_enc/vulkan_gfxstream_structure_type.h b/system/vulkan_enc/vulkan_gfxstream_structure_type.h
index 4df95ec..c8df42f 100644
--- a/system/vulkan_enc/vulkan_gfxstream_structure_type.h
+++ b/system/vulkan_enc/vulkan_gfxstream_structure_type.h
@@ -34,7 +34,5 @@
((type)(1000000000 + (1000 * (VK_GOOGLE_GFXSTREAM_NUMBER - 1)) + (id)))
#define VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 0)
-#define VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE \
- VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 1)
-#define VK_STRUCTURE_TYPE_IMPORT_BUFFER_HANDLE_GOOGLE VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 2)
-#define VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 3)
+#define VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 1)
+#define VK_STRUCTURE_TYPE_CREATE_BLOB_GOOGLE VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 2)