Snap for 12404440 from d3d18b9594802628415f7065aa06691374b20a7b to 24Q4-release
Change-Id: I43cb8553eb93240f0aa8c1566f66b8fc75474ca9
diff --git a/.gitignore b/.gitignore
index d01643a..7035b25 100644
--- a/.gitignore
+++ b/.gitignore
@@ -294,3 +294,22 @@
.cache/
compile_commands.json
.gdb_history
+
+# Guest autogenerated files during builds
+guest/vulkan_enc/func_table.cpp
+guest/vulkan_enc/goldfish_vk_counting_guest.cpp
+guest/vulkan_enc/goldfish_vk_counting_guest.h
+guest/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
+guest/vulkan_enc/goldfish_vk_deepcopy_guest.h
+guest/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
+guest/vulkan_enc/goldfish_vk_extension_structs_guest.h
+guest/vulkan_enc/goldfish_vk_marshaling_guest.cpp
+guest/vulkan_enc/goldfish_vk_marshaling_guest.h
+guest/vulkan_enc/goldfish_vk_reserved_marshaling_guest.cpp
+guest/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h
+guest/vulkan_enc/goldfish_vk_transform_guest.cpp
+guest/vulkan_enc/goldfish_vk_transform_guest.h
+guest/vulkan_enc/VkEncoder.cpp
+guest/vulkan_enc/VkEncoder.h
+guest/vulkan_enc/vulkan_gfxstream_structure_type.h
+guest/vulkan_enc/vulkan_gfxstream.h
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/cereal/common/vulkantypes.py b/codegen/vulkan/vulkan-docs-next/scripts/cereal/common/vulkantypes.py
index 79d7dad..70eacf9 100644
--- a/codegen/vulkan/vulkan-docs-next/scripts/cereal/common/vulkantypes.py
+++ b/codegen/vulkan/vulkan-docs-next/scripts/cereal/common/vulkantypes.py
@@ -69,6 +69,7 @@
"VkAccelerationStructureNV",
"VkIndirectCommandsLayoutNV",
"VkAccelerationStructureKHR",
+ "VkPrivateDataSlot",
]
CUSTOM_HANDLE_CREATE_TYPES = [
diff --git a/guest/vulkan_enc/VulkanHandles.h b/guest/vulkan_enc/VulkanHandles.h
index b026ce5..1400b9c 100644
--- a/guest/vulkan_enc/VulkanHandles.h
+++ b/guest/vulkan_enc/VulkanHandles.h
@@ -104,6 +104,7 @@
f(VkValidationCacheEXT) \
f(VkDebugReportCallbackEXT) \
f(VkDebugUtilsMessengerEXT) \
+ f(VkPrivateDataSlot) \
f(VkMicromapEXT) \
__GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_NVX_BINARY_IMPORT(f) \
__GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_NVX_DEVICE_GENERATED_COMMANDS(f) \
diff --git a/host/vulkan/VkDecoder.cpp b/host/vulkan/VkDecoder.cpp
index aa5036f..5b99c8d 100644
--- a/host/vulkan/VkDecoder.cpp
+++ b/host/vulkan/VkDecoder.cpp
@@ -11446,9 +11446,11 @@
// Begin manual dispatchable handle unboxing for pPrivateDataSlot;
vkReadStream->unsetHandleMapping();
vkReadStream->alloc((void**)&pPrivateDataSlot, sizeof(VkPrivateDataSlot));
- memcpy((VkPrivateDataSlot*)&(*pPrivateDataSlot), (*readStreamPtrPtr), 8);
- android::base::Stream::fromBe64((uint8_t*)&(*pPrivateDataSlot));
+ uint64_t cgen_var_2;
+ memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
*readStreamPtrPtr += 8;
+ *(VkPrivateDataSlot*)pPrivateDataSlot =
+ (VkPrivateDataSlot)(VkPrivateDataSlot)((VkPrivateDataSlot)(*&cgen_var_2));
if (pCreateInfo) {
transform_tohost_VkPrivateDataSlotCreateInfo(
m_state, (VkPrivateDataSlotCreateInfo*)(pCreateInfo));
@@ -11472,8 +11474,17 @@
m_state->on_CheckOutOfMemory(vkCreatePrivateDataSlot_VkResult_return, opcode,
context);
vkStream->unsetHandleMapping();
- uint64_t cgen_var_3 = (uint64_t)(*pPrivateDataSlot);
- vkStream->putBe64(cgen_var_3);
+ // Begin auto non dispatchable handle create for pPrivateDataSlot;
+ if (vkCreatePrivateDataSlot_VkResult_return == VK_SUCCESS)
+ vkStream->setHandleMapping(&m_boxedHandleCreateMapping);
+ uint64_t cgen_var_3;
+ static_assert(8 == sizeof(VkPrivateDataSlot),
+ "handle map overwrite requires VkPrivateDataSlot to be 8 bytes long");
+ vkStream->handleMapping()->mapHandles_VkPrivateDataSlot(
+ (VkPrivateDataSlot*)pPrivateDataSlot, 1);
+ vkStream->write((VkPrivateDataSlot*)pPrivateDataSlot, 8 * 1);
+ // Begin auto non dispatchable handle create for pPrivateDataSlot;
+ vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
vkStream->write(&vkCreatePrivateDataSlot_VkResult_return, sizeof(VkResult));
vkStream->commitWrite();
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
@@ -11504,9 +11515,15 @@
auto unboxed_device = unbox_VkDevice(device);
auto vk = dispatch_VkDevice(device);
// End manual dispatchable handle unboxing for device;
- memcpy((VkPrivateDataSlot*)&privateDataSlot, (*readStreamPtrPtr), 8);
- android::base::Stream::fromBe64((uint8_t*)&privateDataSlot);
- *readStreamPtrPtr += 8;
+ // Begin manual non dispatchable handle destroy unboxing for privateDataSlot;
+ VkPrivateDataSlot boxed_privateDataSlot_preserve;
+ uint64_t cgen_var_1;
+ memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
+ *readStreamPtrPtr += 1 * 8;
+ *(VkPrivateDataSlot*)&privateDataSlot =
+ (VkPrivateDataSlot)(VkPrivateDataSlot)((VkPrivateDataSlot)(*&cgen_var_1));
+ boxed_privateDataSlot_preserve = privateDataSlot;
+ privateDataSlot = unbox_VkPrivateDataSlot(privateDataSlot);
// WARNING PTR CHECK
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
@@ -11534,9 +11551,10 @@
size_t snapshotTraceBytes = vkReadStream->endTrace();
if (m_state->snapshotsEnabled()) {
m_state->snapshot()->vkDestroyPrivateDataSlot(
- snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, privateDataSlot,
- pAllocator);
+ snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
+ boxed_privateDataSlot_preserve, pAllocator);
}
+ delete_VkPrivateDataSlot(boxed_privateDataSlot_preserve);
vkReadStream->clearPool();
if (m_queueSubmitWithCommandsEnabled)
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
@@ -11562,9 +11580,11 @@
*readStreamPtrPtr += sizeof(VkObjectType);
memcpy((uint64_t*)&objectHandle, *readStreamPtrPtr, sizeof(uint64_t));
*readStreamPtrPtr += sizeof(uint64_t);
- memcpy((VkPrivateDataSlot*)&privateDataSlot, (*readStreamPtrPtr), 8);
- android::base::Stream::fromBe64((uint8_t*)&privateDataSlot);
- *readStreamPtrPtr += 8;
+ uint64_t cgen_var_1;
+ memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
+ *readStreamPtrPtr += 1 * 8;
+ *(VkPrivateDataSlot*)&privateDataSlot =
+ (VkPrivateDataSlot)unbox_VkPrivateDataSlot((VkPrivateDataSlot)(*&cgen_var_1));
memcpy((uint64_t*)&data, *readStreamPtrPtr, sizeof(uint64_t));
*readStreamPtrPtr += sizeof(uint64_t);
if (m_logCalls) {
@@ -11618,9 +11638,11 @@
*readStreamPtrPtr += sizeof(VkObjectType);
memcpy((uint64_t*)&objectHandle, *readStreamPtrPtr, sizeof(uint64_t));
*readStreamPtrPtr += sizeof(uint64_t);
- memcpy((VkPrivateDataSlot*)&privateDataSlot, (*readStreamPtrPtr), 8);
- android::base::Stream::fromBe64((uint8_t*)&privateDataSlot);
- *readStreamPtrPtr += 8;
+ uint64_t cgen_var_1;
+ memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
+ *readStreamPtrPtr += 1 * 8;
+ *(VkPrivateDataSlot*)&privateDataSlot =
+ (VkPrivateDataSlot)unbox_VkPrivateDataSlot((VkPrivateDataSlot)(*&cgen_var_1));
// Begin manual dispatchable handle unboxing for pData;
vkReadStream->unsetHandleMapping();
vkReadStream->alloc((void**)&pData, sizeof(uint64_t));
@@ -20148,9 +20170,11 @@
// Begin manual dispatchable handle unboxing for pPrivateDataSlot;
vkReadStream->unsetHandleMapping();
vkReadStream->alloc((void**)&pPrivateDataSlot, sizeof(VkPrivateDataSlot));
- memcpy((VkPrivateDataSlot*)&(*pPrivateDataSlot), (*readStreamPtrPtr), 8);
- android::base::Stream::fromBe64((uint8_t*)&(*pPrivateDataSlot));
+ uint64_t cgen_var_2;
+ memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
*readStreamPtrPtr += 8;
+ *(VkPrivateDataSlot*)pPrivateDataSlot =
+ (VkPrivateDataSlot)(VkPrivateDataSlot)((VkPrivateDataSlot)(*&cgen_var_2));
if (pCreateInfo) {
transform_tohost_VkPrivateDataSlotCreateInfo(
m_state, (VkPrivateDataSlotCreateInfo*)(pCreateInfo));
@@ -20174,8 +20198,10 @@
m_state->on_CheckOutOfMemory(vkCreatePrivateDataSlotEXT_VkResult_return, opcode,
context);
vkStream->unsetHandleMapping();
- uint64_t cgen_var_3 = (uint64_t)(*pPrivateDataSlot);
- vkStream->putBe64(cgen_var_3);
+ uint64_t cgen_var_3;
+ vkStream->handleMapping()->mapHandles_VkPrivateDataSlot_u64(pPrivateDataSlot,
+ &cgen_var_3, 1);
+ vkStream->write((uint64_t*)&cgen_var_3, 8);
vkStream->write(&vkCreatePrivateDataSlotEXT_VkResult_return, sizeof(VkResult));
vkStream->commitWrite();
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
@@ -20206,9 +20232,11 @@
auto unboxed_device = unbox_VkDevice(device);
auto vk = dispatch_VkDevice(device);
// End manual dispatchable handle unboxing for device;
- memcpy((VkPrivateDataSlot*)&privateDataSlot, (*readStreamPtrPtr), 8);
- android::base::Stream::fromBe64((uint8_t*)&privateDataSlot);
- *readStreamPtrPtr += 8;
+ uint64_t cgen_var_1;
+ memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
+ *readStreamPtrPtr += 1 * 8;
+ *(VkPrivateDataSlot*)&privateDataSlot =
+ (VkPrivateDataSlot)unbox_VkPrivateDataSlot((VkPrivateDataSlot)(*&cgen_var_1));
// WARNING PTR CHECK
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
@@ -20264,9 +20292,11 @@
*readStreamPtrPtr += sizeof(VkObjectType);
memcpy((uint64_t*)&objectHandle, *readStreamPtrPtr, sizeof(uint64_t));
*readStreamPtrPtr += sizeof(uint64_t);
- memcpy((VkPrivateDataSlot*)&privateDataSlot, (*readStreamPtrPtr), 8);
- android::base::Stream::fromBe64((uint8_t*)&privateDataSlot);
- *readStreamPtrPtr += 8;
+ uint64_t cgen_var_1;
+ memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
+ *readStreamPtrPtr += 1 * 8;
+ *(VkPrivateDataSlot*)&privateDataSlot =
+ (VkPrivateDataSlot)unbox_VkPrivateDataSlot((VkPrivateDataSlot)(*&cgen_var_1));
memcpy((uint64_t*)&data, *readStreamPtrPtr, sizeof(uint64_t));
*readStreamPtrPtr += sizeof(uint64_t);
if (m_logCalls) {
@@ -20320,9 +20350,11 @@
*readStreamPtrPtr += sizeof(VkObjectType);
memcpy((uint64_t*)&objectHandle, *readStreamPtrPtr, sizeof(uint64_t));
*readStreamPtrPtr += sizeof(uint64_t);
- memcpy((VkPrivateDataSlot*)&privateDataSlot, (*readStreamPtrPtr), 8);
- android::base::Stream::fromBe64((uint8_t*)&privateDataSlot);
- *readStreamPtrPtr += 8;
+ uint64_t cgen_var_1;
+ memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
+ *readStreamPtrPtr += 1 * 8;
+ *(VkPrivateDataSlot*)&privateDataSlot =
+ (VkPrivateDataSlot)unbox_VkPrivateDataSlot((VkPrivateDataSlot)(*&cgen_var_1));
// Begin manual dispatchable handle unboxing for pData;
vkReadStream->unsetHandleMapping();
vkReadStream->alloc((void**)&pData, sizeof(uint64_t));
diff --git a/host/vulkan/VkDecoderSnapshot.cpp b/host/vulkan/VkDecoderSnapshot.cpp
index 18effb2..494c2fe 100644
--- a/host/vulkan/VkDecoderSnapshot.cpp
+++ b/host/vulkan/VkDecoderSnapshot.cpp
@@ -1959,11 +1959,29 @@
android::base::BumpPool* pool, VkResult input_result,
VkDevice device, const VkPrivateDataSlotCreateInfo* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
- VkPrivateDataSlot* pPrivateDataSlot) {}
+ VkPrivateDataSlot* pPrivateDataSlot) {
+ if (!pPrivateDataSlot) return;
+ android::base::AutoLock lock(mLock);
+ // pPrivateDataSlot create
+ mReconstruction.addHandles((const uint64_t*)pPrivateDataSlot, 1);
+ mReconstruction.addHandleDependency((const uint64_t*)pPrivateDataSlot, 1,
+ (uint64_t)(uintptr_t)device);
+ auto apiHandle = mReconstruction.createApiInfo();
+ auto apiInfo = mReconstruction.getApiInfo(apiHandle);
+ mReconstruction.setApiTrace(apiInfo, OP_vkCreatePrivateDataSlot, snapshotTraceBegin,
+ snapshotTraceBytes);
+ mReconstruction.forEachHandleAddApi((const uint64_t*)pPrivateDataSlot, 1, apiHandle,
+ VkReconstruction::CREATED);
+ mReconstruction.setCreatedHandlesForApi(apiHandle, (const uint64_t*)pPrivateDataSlot, 1);
+ }
void vkDestroyPrivateDataSlot(const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes,
android::base::BumpPool* pool, VkDevice device,
VkPrivateDataSlot privateDataSlot,
- const VkAllocationCallbacks* pAllocator) {}
+ const VkAllocationCallbacks* pAllocator) {
+ android::base::AutoLock lock(mLock);
+ // privateDataSlot destroy
+ mReconstruction.removeHandles((const uint64_t*)(&privateDataSlot), 1, true);
+ }
void vkSetPrivateData(const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes,
android::base::BumpPool* pool, VkResult input_result, VkDevice device,
VkObjectType objectType, uint64_t objectHandle,
diff --git a/host/vulkan/VulkanHandles.h b/host/vulkan/VulkanHandles.h
index 29d40ae..a6d0963 100644
--- a/host/vulkan/VulkanHandles.h
+++ b/host/vulkan/VulkanHandles.h
@@ -57,6 +57,7 @@
f(VkAccelerationStructureKHR) \
f(VkCuModuleNVX) \
f(VkCuFunctionNVX) \
+ f(VkPrivateDataSlot) \
f(VkMicromapEXT)
#define GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES(f) \
@@ -108,4 +109,5 @@
f(VkAccelerationStructureKHR) \
f(VkCuModuleNVX) \
f(VkCuFunctionNVX) \
+ f(VkPrivateDataSlot) \
f(VkMicromapEXT)
diff --git a/host/vulkan/meson.build b/host/vulkan/meson.build
index 7d33f1f..c119570 100644
--- a/host/vulkan/meson.build
+++ b/host/vulkan/meson.build
@@ -63,7 +63,7 @@
inc_cereal, inc_cereal_common, inc_stream_servers,
inc_vulkan_server, inc_renderdoc_external,
inc_gl_host_common, inc_vulkan_headers, inc_glm, inc_host_backend,
- inc_host_features, inc_host_tracing],
+ inc_host_features, inc_host_tracing, inc_common_utils],
link_with: [lib_vulkan_cereal, lib_emulated_textures, lib_host_backend, lib_host_features,
lib_host_tracing],
dependencies: [aemu_base_dep, aemu_common_dep, aemu_snapshot_dep]
diff --git a/include/render-utils/render_api_types.h b/include/render-utils/render_api_types.h
index 71792fc..e7fcd99 100644
--- a/include/render-utils/render_api_types.h
+++ b/include/render-utils/render_api_types.h
@@ -23,5 +23,13 @@
// Feature control
typedef bool (*emugl_feature_is_enabled_t)(android::featurecontrol::Feature feature);
+typedef void (*gfxstream_logger_internal_t)(char severity, const char* file, unsigned int line,
+ int64_t timestamp_us, const char* message);
+
+#ifdef CONFIG_AEMU
using emugl_logger_t = gfxstream_logger_t;
using emugl_logger_struct = gfxstream_logger_t;
+#else
+using emugl_logger_t = gfxstream_logger_internal_t;
+using emugl_logger_struct = gfxstream_logger_internal_t;
+#endif