(3/8) vulkan_enc: Add VkImportBufferGOOGLE
We add a struct VkImportBufferGOOGLE used for host-guest
Vulkan interop.
This struct is similar to VkImportColorBufferGOOGLE but the
handle passed in should be a handle of host "Buffer" instead
of "ColorBuffer".
Change-Id: I1f22e94d2b3c8b81d670b35e181b0e902deecb5d
diff --git a/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp b/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
index e2d3294..8e81c7f 100644
--- a/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
@@ -6363,6 +6363,22 @@
}
}
+void deepcopy_VkImportBufferGOOGLE(
+ Pool* pool,
+ const VkImportBufferGOOGLE* from,
+ VkImportBufferGOOGLE* to)
+{
+ (void)pool;
+ *to = *from;
+ size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
+ to->pNext = nullptr;
+ if (pNext_size)
+ {
+ to->pNext = (void*)pool->alloc(pNext_size);
+ deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
+ }
+}
+
void deepcopy_VkImportPhysicalAddressGOOGLE(
Pool* pool,
const VkImportPhysicalAddressGOOGLE* from,
@@ -7041,6 +7057,11 @@
deepcopy_VkImportColorBufferGOOGLE(pool, reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension), reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
break;
}
+ case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+ {
+ deepcopy_VkImportBufferGOOGLE(pool, reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension), reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+ break;
+ }
case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
{
deepcopy_VkImportPhysicalAddressGOOGLE(pool, reinterpret_cast<const VkImportPhysicalAddressGOOGLE*>(structExtension), reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
diff --git a/system/vulkan_enc/goldfish_vk_deepcopy_guest.h b/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
index 1164e1c..c0fdfcb 100644
--- a/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
+++ b/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
@@ -2016,6 +2016,11 @@
const VkImportColorBufferGOOGLE* from,
VkImportColorBufferGOOGLE* to);
+void deepcopy_VkImportBufferGOOGLE(
+ Pool* pool,
+ const VkImportBufferGOOGLE* from,
+ VkImportBufferGOOGLE* to);
+
void deepcopy_VkImportPhysicalAddressGOOGLE(
Pool* pool,
const VkImportPhysicalAddressGOOGLE* from,
diff --git a/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp b/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
index e4b1ca7..2f50b39 100644
--- a/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
@@ -834,6 +834,10 @@
{
return sizeof(VkImportColorBufferGOOGLE);
}
+ case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+ {
+ return sizeof(VkImportBufferGOOGLE);
+ }
case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
{
return sizeof(VkImportPhysicalAddressGOOGLE);
diff --git a/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp b/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
index 8e66554..976e124 100644
--- a/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
@@ -4731,6 +4731,18 @@
}
}
+void handlemap_VkImportBufferGOOGLE(
+ VulkanHandleMapping* handlemap,
+ VkImportBufferGOOGLE* toMap)
+{
+ (void)handlemap;
+ (void)toMap;
+ if (toMap->pNext)
+ {
+ handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+ }
+}
+
void handlemap_VkImportPhysicalAddressGOOGLE(
VulkanHandleMapping* handlemap,
VkImportPhysicalAddressGOOGLE* toMap)
@@ -5404,6 +5416,11 @@
handlemap_VkImportColorBufferGOOGLE(handlemap, reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
break;
}
+ case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+ {
+ handlemap_VkImportBufferGOOGLE(handlemap, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+ break;
+ }
case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
{
handlemap_VkImportPhysicalAddressGOOGLE(handlemap, reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
diff --git a/system/vulkan_enc/goldfish_vk_handlemap_guest.h b/system/vulkan_enc/goldfish_vk_handlemap_guest.h
index 0dcedcb..071c218 100644
--- a/system/vulkan_enc/goldfish_vk_handlemap_guest.h
+++ b/system/vulkan_enc/goldfish_vk_handlemap_guest.h
@@ -1670,6 +1670,10 @@
VulkanHandleMapping* handlemap,
VkImportColorBufferGOOGLE* toMap);
+void handlemap_VkImportBufferGOOGLE(
+ VulkanHandleMapping* handlemap,
+ VkImportBufferGOOGLE* toMap);
+
void handlemap_VkImportPhysicalAddressGOOGLE(
VulkanHandleMapping* handlemap,
VkImportPhysicalAddressGOOGLE* toMap);
diff --git a/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp b/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
index 371e92e..9474572 100644
--- a/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
@@ -13567,6 +13567,37 @@
vkStream->read((uint32_t*)&forUnmarshaling->colorBuffer, sizeof(uint32_t));
}
+void marshal_VkImportBufferGOOGLE(
+ VulkanStreamGuest* vkStream,
+ const VkImportBufferGOOGLE* forMarshaling)
+{
+ vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+ size_t pNext_size = goldfish_vk_extension_struct_size(forMarshaling->pNext);
+ vkStream->putBe32(pNext_size);
+ if (pNext_size)
+ {
+ vkStream->write((void*)forMarshaling->pNext, sizeof(VkStructureType));
+ marshal_extension_struct(vkStream, forMarshaling->pNext);
+ }
+ vkStream->write((uint32_t*)&forMarshaling->buffer, sizeof(uint32_t));
+}
+
+void unmarshal_VkImportBufferGOOGLE(
+ VulkanStreamGuest* vkStream,
+ VkImportBufferGOOGLE* forUnmarshaling)
+{
+ vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+ size_t pNext_size;
+ pNext_size = vkStream->getBe32();
+ if (pNext_size)
+ {
+ uint64_t pNext_placeholder;
+ vkStream->read((void*)(&pNext_placeholder), sizeof(VkStructureType));
+ unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+ }
+ vkStream->read((uint32_t*)&forUnmarshaling->buffer, sizeof(uint32_t));
+}
+
void marshal_VkImportPhysicalAddressGOOGLE(
VulkanStreamGuest* vkStream,
const VkImportPhysicalAddressGOOGLE* forMarshaling)
@@ -14267,6 +14298,11 @@
marshal_VkImportColorBufferGOOGLE(vkStream, reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension));
break;
}
+ case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+ {
+ marshal_VkImportBufferGOOGLE(vkStream, reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension));
+ break;
+ }
case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
{
marshal_VkImportPhysicalAddressGOOGLE(vkStream, reinterpret_cast<const VkImportPhysicalAddressGOOGLE*>(structExtension));
@@ -14930,6 +14966,11 @@
unmarshal_VkImportColorBufferGOOGLE(vkStream, reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
break;
}
+ case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+ {
+ unmarshal_VkImportBufferGOOGLE(vkStream, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+ break;
+ }
case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
{
unmarshal_VkImportPhysicalAddressGOOGLE(vkStream, reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
diff --git a/system/vulkan_enc/goldfish_vk_marshaling_guest.h b/system/vulkan_enc/goldfish_vk_marshaling_guest.h
index 993c890..fce6adc 100644
--- a/system/vulkan_enc/goldfish_vk_marshaling_guest.h
+++ b/system/vulkan_enc/goldfish_vk_marshaling_guest.h
@@ -3370,6 +3370,14 @@
VulkanStreamGuest* vkStream,
VkImportColorBufferGOOGLE* forUnmarshaling);
+void marshal_VkImportBufferGOOGLE(
+ VulkanStreamGuest* vkStream,
+ const VkImportBufferGOOGLE* forMarshaling);
+
+void unmarshal_VkImportBufferGOOGLE(
+ VulkanStreamGuest* vkStream,
+ VkImportBufferGOOGLE* forUnmarshaling);
+
void marshal_VkImportPhysicalAddressGOOGLE(
VulkanStreamGuest* vkStream,
const VkImportPhysicalAddressGOOGLE* forMarshaling);
diff --git a/system/vulkan_enc/goldfish_vk_private_defs.h b/system/vulkan_enc/goldfish_vk_private_defs.h
index 9e673c0..3facad7 100644
--- a/system/vulkan_enc/goldfish_vk_private_defs.h
+++ b/system/vulkan_enc/goldfish_vk_private_defs.h
@@ -95,6 +95,7 @@
#define VK_GOOGLE_COLOR_BUFFER_ENUM(type,id) ((type)(1000000000 + (1000 * (VK_GOOGLE_COLOR_BUFFER_EXTENSION_NUMBER - 1)) + (id)))
#define VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE VK_GOOGLE_COLOR_BUFFER_ENUM(VkStructureType, 0)
#define VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE VK_GOOGLE_COLOR_BUFFER_ENUM(VkStructureType, 1)
+#define VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE VK_GOOGLE_COLOR_BUFFER_ENUM(VkStructureType, 2)
typedef struct {
VkStructureType sType; // must be VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE
@@ -112,6 +113,12 @@
uint32_t tilingParameter;
} VkImportPhysicalAddressGOOGLE;
+typedef struct {
+ VkStructureType sType; // must be VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE
+ const void* pNext;
+ uint32_t buffer;
+} VkImportBufferGOOGLE;
+
typedef VkResult (VKAPI_PTR *PFN_vkRegisterImageColorBufferGOOGLE)(VkDevice device, VkImage image, uint32_t colorBuffer);
typedef VkResult (VKAPI_PTR *PFN_vkRegisterBufferColorBufferGOOGLE)(VkDevice device, VkBuffer image, uint32_t colorBuffer);
diff --git a/system/vulkan_enc/goldfish_vk_transform_guest.cpp b/system/vulkan_enc/goldfish_vk_transform_guest.cpp
index 550313f..f4acb8e 100644
--- a/system/vulkan_enc/goldfish_vk_transform_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_transform_guest.cpp
@@ -8916,6 +8916,30 @@
}
}
+void transform_tohost_VkImportBufferGOOGLE(
+ ResourceTracker* resourceTracker,
+ VkImportBufferGOOGLE* toTransform)
+{
+ (void)resourceTracker;
+ (void)toTransform;
+ if (toTransform->pNext)
+ {
+ transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+ }
+}
+
+void transform_fromhost_VkImportBufferGOOGLE(
+ ResourceTracker* resourceTracker,
+ VkImportBufferGOOGLE* toTransform)
+{
+ (void)resourceTracker;
+ (void)toTransform;
+ if (toTransform->pNext)
+ {
+ transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+ }
+}
+
void transform_tohost_VkImportPhysicalAddressGOOGLE(
ResourceTracker* resourceTracker,
VkImportPhysicalAddressGOOGLE* toTransform)
@@ -9606,6 +9630,11 @@
transform_tohost_VkImportColorBufferGOOGLE(resourceTracker, reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
break;
}
+ case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+ {
+ transform_tohost_VkImportBufferGOOGLE(resourceTracker, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+ break;
+ }
case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
{
transform_tohost_VkImportPhysicalAddressGOOGLE(resourceTracker, reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
@@ -10274,6 +10303,11 @@
transform_fromhost_VkImportColorBufferGOOGLE(resourceTracker, reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
break;
}
+ case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+ {
+ transform_fromhost_VkImportBufferGOOGLE(resourceTracker, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+ break;
+ }
case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
{
transform_fromhost_VkImportPhysicalAddressGOOGLE(resourceTracker, reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
diff --git a/system/vulkan_enc/goldfish_vk_transform_guest.h b/system/vulkan_enc/goldfish_vk_transform_guest.h
index d0b610b..da1f493 100644
--- a/system/vulkan_enc/goldfish_vk_transform_guest.h
+++ b/system/vulkan_enc/goldfish_vk_transform_guest.h
@@ -3054,6 +3054,14 @@
ResourceTracker* resourceTracker,
VkImportColorBufferGOOGLE* toTransform);
+void transform_tohost_VkImportBufferGOOGLE(
+ ResourceTracker* resourceTracker,
+ VkImportBufferGOOGLE* toTransform);
+
+void transform_fromhost_VkImportBufferGOOGLE(
+ ResourceTracker* resourceTracker,
+ VkImportBufferGOOGLE* toTransform);
+
void transform_tohost_VkImportPhysicalAddressGOOGLE(
ResourceTracker* resourceTracker,
VkImportPhysicalAddressGOOGLE* toTransform);