fuchsia: Support BufferCollection FUCHSIAX extension.
We are migrating the buffer collection extension to
a separated extension (VK_FUCHSIA_buffer_collection_x).
This change migrates all existing buffer collection
methods to corresponding FUCHSIAX functions, while we
still keep the old methods for soft transition.
Bug: fxbug.dev/73447
TEST=workstation.x64
Change-Id: I1ce36b6914cf8b0eb3fac157951d0c5ce6f383a6
diff --git a/system/vulkan/goldfish_vulkan.cpp b/system/vulkan/goldfish_vulkan.cpp
index 7387a1f..e72d835 100644
--- a/system/vulkan/goldfish_vulkan.cpp
+++ b/system/vulkan/goldfish_vulkan.cpp
@@ -197,6 +197,8 @@
return VK_SUCCESS;
}
+// TODO(fxbug.dev/73447): Remove all the *FUCHSIA functions below once we
+// finish migration of buffer collection extension to FUCHSIAX.
VkResult
CreateBufferCollectionFUCHSIA(VkDevice /*device*/,
const VkBufferCollectionCreateInfoFUCHSIA* /*pInfo*/,
@@ -252,6 +254,63 @@
AEMU_SCOPED_TRACE("vkstubhal::GetBufferCollectionProperties2FUCHSIA");
return VK_SUCCESS;
}
+
+VkResult CreateBufferCollectionFUCHSIAX(
+ VkDevice /*device*/,
+ const VkBufferCollectionCreateInfoFUCHSIAX* /*pInfo*/,
+ const VkAllocationCallbacks* /*pAllocator*/,
+ VkBufferCollectionFUCHSIAX* /*pCollection*/) {
+ AEMU_SCOPED_TRACE("vkstubhal::CreateBufferCollectionFUCHSIAX");
+ return VK_SUCCESS;
+}
+
+void DestroyBufferCollectionFUCHSIAX(
+ VkDevice /*device*/,
+ VkBufferCollectionFUCHSIAX /*collection*/,
+ const VkAllocationCallbacks* /*pAllocator*/) {
+ AEMU_SCOPED_TRACE("vkstubhal::DestroyBufferCollectionFUCHSIAX");
+}
+
+VkResult SetBufferCollectionConstraintsFUCHSIAX(
+ VkDevice /*device*/,
+ VkBufferCollectionFUCHSIAX /*collection*/,
+ const VkImageCreateInfo* /*pImageInfo*/) {
+ AEMU_SCOPED_TRACE("vkstubhal::SetBufferCollectionConstraintsFUCHSIAX");
+ return VK_SUCCESS;
+}
+
+VkResult SetBufferCollectionImageConstraintsFUCHSIAX(
+ VkDevice /*device*/,
+ VkBufferCollectionFUCHSIAX /*collection*/,
+ const VkImageConstraintsInfoFUCHSIAX* /*pImageConstraintsInfo*/) {
+ AEMU_SCOPED_TRACE("vkstubhal::SetBufferCollectionImageConstraintsFUCHSIAX");
+ return VK_SUCCESS;
+}
+
+VkResult SetBufferCollectionBufferConstraintsFUCHSIAX(
+ VkDevice /*device*/,
+ VkBufferCollectionFUCHSIAX /*collection*/,
+ const VkBufferConstraintsInfoFUCHSIAX* /*pBufferConstraintsInfo*/) {
+ AEMU_SCOPED_TRACE(
+ "vkstubhal::SetBufferCollectionBufferConstraintsFUCHSIAX");
+ return VK_SUCCESS;
+}
+
+VkResult GetBufferCollectionPropertiesFUCHSIAX(
+ VkDevice /*device*/,
+ VkBufferCollectionFUCHSIAX /*collection*/,
+ VkBufferCollectionPropertiesFUCHSIAX* /*pProperties*/) {
+ AEMU_SCOPED_TRACE("vkstubhal::GetBufferCollectionPropertiesFUCHSIAX");
+ return VK_SUCCESS;
+}
+
+VkResult GetBufferCollectionProperties2FUCHSIAX(
+ VkDevice /*device*/,
+ VkBufferCollectionFUCHSIAX /*collection*/,
+ VkBufferCollectionProperties2FUCHSIAX* /*pProperties*/) {
+ AEMU_SCOPED_TRACE("vkstubhal::GetBufferCollectionProperties2FUCHSIAX");
+ return VK_SUCCESS;
+}
#endif
PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance,
@@ -313,6 +372,27 @@
if (strcmp(name, "vkGetBufferCollectionProperties2FUCHSIA") == 0)
return reinterpret_cast<PFN_vkVoidFunction>(
GetBufferCollectionProperties2FUCHSIA);
+ if (strcmp(name, "vkCreateBufferCollectionFUCHSIAX") == 0)
+ return reinterpret_cast<PFN_vkVoidFunction>(
+ CreateBufferCollectionFUCHSIAX);
+ if (strcmp(name, "vkDestroyBufferCollectionFUCHSIAX") == 0)
+ return reinterpret_cast<PFN_vkVoidFunction>(
+ DestroyBufferCollectionFUCHSIAX);
+ if (strcmp(name, "vkSetBufferCollectionConstraintsFUCHSIAX") == 0)
+ return reinterpret_cast<PFN_vkVoidFunction>(
+ SetBufferCollectionConstraintsFUCHSIAX);
+ if (strcmp(name, "vkSetBufferCollectionImageConstraintsFUCHSIAX") == 0)
+ return reinterpret_cast<PFN_vkVoidFunction>(
+ SetBufferCollectionImageConstraintsFUCHSIAX);
+ if (strcmp(name, "vkSetBufferCollectionBufferConstraintsFUCHSIAX") == 0)
+ return reinterpret_cast<PFN_vkVoidFunction>(
+ SetBufferCollectionBufferConstraintsFUCHSIAX);
+ if (strcmp(name, "vkGetBufferCollectionPropertiesFUCHSIAX") == 0)
+ return reinterpret_cast<PFN_vkVoidFunction>(
+ GetBufferCollectionPropertiesFUCHSIAX);
+ if (strcmp(name, "vkGetBufferCollectionProperties2FUCHSIAX") == 0)
+ return reinterpret_cast<PFN_vkVoidFunction>(
+ GetBufferCollectionProperties2FUCHSIAX);
#endif
// Return NoOp for entrypoints that should never be called.
if (strcmp(name, "vkGetPhysicalDeviceFeatures") == 0 ||
@@ -672,6 +752,158 @@
return res;
}
+
+VKAPI_ATTR
+VkResult CreateBufferCollectionFUCHSIAX(
+ VkDevice device,
+ const VkBufferCollectionCreateInfoFUCHSIAX* pInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkBufferCollectionFUCHSIAX* pCollection) {
+ AEMU_SCOPED_TRACE("goldfish_vulkan::CreateBufferCollectionFUCHSIAX");
+
+ VK_HOST_CONNECTION(VK_ERROR_DEVICE_LOST)
+
+ if (!hostSupportsVulkan) {
+ return vkstubhal::CreateBufferCollectionFUCHSIAX(
+ device, pInfo, pAllocator, pCollection);
+ }
+
+ VkResult res =
+ goldfish_vk::ResourceTracker::get()
+ ->on_vkCreateBufferCollectionFUCHSIAX(
+ vkEnc, VK_SUCCESS, device, pInfo, pAllocator, pCollection);
+
+ return res;
+}
+
+VKAPI_ATTR
+void DestroyBufferCollectionFUCHSIAX(VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ const VkAllocationCallbacks* pAllocator) {
+ AEMU_SCOPED_TRACE("goldfish_vulkan::DestroyBufferCollectionFUCHSIAX");
+
+ VK_HOST_CONNECTION()
+
+ if (!hostSupportsVulkan) {
+ vkstubhal::DestroyBufferCollectionFUCHSIAX(device, collection,
+ pAllocator);
+ return;
+ }
+
+ goldfish_vk::ResourceTracker::get()->on_vkDestroyBufferCollectionFUCHSIAX(
+ vkEnc, VK_SUCCESS, device, collection, pAllocator);
+}
+
+VKAPI_ATTR
+VkResult SetBufferCollectionConstraintsFUCHSIAX(
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ const VkImageCreateInfo* pImageInfo) {
+ AEMU_SCOPED_TRACE(
+ "goldfish_vulkan::SetBufferCollectionConstraintsFUCHSIAX");
+
+ VK_HOST_CONNECTION(VK_ERROR_DEVICE_LOST)
+
+ if (!hostSupportsVulkan) {
+ return vkstubhal::SetBufferCollectionConstraintsFUCHSIAX(
+ device, collection, pImageInfo);
+ }
+
+ VkResult res = goldfish_vk::ResourceTracker::get()
+ ->on_vkSetBufferCollectionConstraintsFUCHSIAX(
+ vkEnc, VK_SUCCESS, device, collection, pImageInfo);
+
+ return res;
+}
+
+VKAPI_ATTR
+VkResult SetBufferCollectionBufferConstraintsFUCHSIAX(
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ const VkBufferConstraintsInfoFUCHSIAX* pBufferConstraintsInfo) {
+ AEMU_SCOPED_TRACE(
+ "goldfish_vulkan::SetBufferCollectionBufferConstraintsFUCHSIAX");
+
+ VK_HOST_CONNECTION(VK_ERROR_DEVICE_LOST)
+
+ if (!hostSupportsVulkan) {
+ return vkstubhal::SetBufferCollectionBufferConstraintsFUCHSIAX(
+ device, collection, pBufferConstraintsInfo);
+ }
+
+ VkResult res =
+ goldfish_vk::ResourceTracker::get()
+ ->on_vkSetBufferCollectionBufferConstraintsFUCHSIAX(
+ vkEnc, VK_SUCCESS, device, collection, pBufferConstraintsInfo);
+
+ return res;
+}
+
+VKAPI_ATTR
+VkResult SetBufferCollectionImageConstraintsFUCHSIAX(
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ const VkImageConstraintsInfoFUCHSIAX* pImageConstraintsInfo) {
+ AEMU_SCOPED_TRACE(
+ "goldfish_vulkan::SetBufferCollectionBufferConstraintsFUCHSIAX");
+
+ VK_HOST_CONNECTION(VK_ERROR_DEVICE_LOST)
+
+ if (!hostSupportsVulkan) {
+ return vkstubhal::SetBufferCollectionImageConstraintsFUCHSIAX(
+ device, collection, pImageConstraintsInfo);
+ }
+
+ VkResult res =
+ goldfish_vk::ResourceTracker::get()
+ ->on_vkSetBufferCollectionImageConstraintsFUCHSIAX(
+ vkEnc, VK_SUCCESS, device, collection, pImageConstraintsInfo);
+
+ return res;
+}
+
+VKAPI_ATTR
+VkResult GetBufferCollectionPropertiesFUCHSIAX(
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ VkBufferCollectionPropertiesFUCHSIAX* pProperties) {
+ AEMU_SCOPED_TRACE("goldfish_vulkan::GetBufferCollectionPropertiesFUCHSIAX");
+
+ VK_HOST_CONNECTION(VK_ERROR_DEVICE_LOST)
+
+ if (!hostSupportsVulkan) {
+ return vkstubhal::GetBufferCollectionPropertiesFUCHSIAX(
+ device, collection, pProperties);
+ }
+
+ VkResult res = goldfish_vk::ResourceTracker::get()
+ ->on_vkGetBufferCollectionPropertiesFUCHSIAX(
+ vkEnc, VK_SUCCESS, device, collection, pProperties);
+
+ return res;
+}
+
+VKAPI_ATTR
+VkResult GetBufferCollectionProperties2FUCHSIAX(
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ VkBufferCollectionProperties2FUCHSIAX* pProperties) {
+ AEMU_SCOPED_TRACE(
+ "goldfish_vulkan::GetBufferCollectionProperties2FUCHSIAX");
+
+ VK_HOST_CONNECTION(VK_ERROR_DEVICE_LOST)
+
+ if (!hostSupportsVulkan) {
+ return vkstubhal::GetBufferCollectionProperties2FUCHSIAX(
+ device, collection, pProperties);
+ }
+
+ VkResult res = goldfish_vk::ResourceTracker::get()
+ ->on_vkGetBufferCollectionProperties2FUCHSIAX(
+ vkEnc, VK_SUCCESS, device, collection, pProperties);
+
+ return res;
+}
#endif
uint64_t currGuestTimeNs() {
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index 3fa037a..621c56c 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -427,12 +427,12 @@
uint32_t unused;
};
- struct VkBufferCollectionFUCHSIA_Info {
+ struct VkBufferCollectionFUCHSIAX_Info {
#ifdef VK_USE_PLATFORM_FUCHSIA
android::base::Optional<
fuchsia_sysmem::wire::BufferCollectionConstraints>
constraints;
- android::base::Optional<VkBufferCollectionProperties2FUCHSIA>
+ android::base::Optional<VkBufferCollectionProperties2FUCHSIAX>
properties;
// the index of corresponding createInfo for each image format
@@ -638,10 +638,10 @@
}
#ifdef VK_USE_PLATFORM_FUCHSIA
- void unregister_VkBufferCollectionFUCHSIA(
- VkBufferCollectionFUCHSIA collection) {
+ void unregister_VkBufferCollectionFUCHSIAX(
+ VkBufferCollectionFUCHSIAX collection) {
AutoLock lock(mLock);
- info_VkBufferCollectionFUCHSIA.erase(collection);
+ info_VkBufferCollectionFUCHSIAX.erase(collection);
}
#endif
@@ -1995,11 +1995,13 @@
return VK_SUCCESS;
}
- VkResult on_vkCreateBufferCollectionFUCHSIA(
- void*, VkResult, VkDevice,
- const VkBufferCollectionCreateInfoFUCHSIA* pInfo,
+ VkResult on_vkCreateBufferCollectionFUCHSIAX(
+ void*,
+ VkResult,
+ VkDevice,
+ const VkBufferCollectionCreateInfoFUCHSIAX* pInfo,
const VkAllocationCallbacks*,
- VkBufferCollectionFUCHSIA* pCollection) {
+ VkBufferCollectionFUCHSIAX* pCollection) {
fidl::ClientEnd<::fuchsia_sysmem::BufferCollectionToken> token_client;
if (pInfo->collectionToken) {
@@ -2039,15 +2041,18 @@
auto* sysmem_collection =
new fidl::WireSyncClient<fuchsia_sysmem::BufferCollection>(
std::move(collection_client));
- *pCollection = reinterpret_cast<VkBufferCollectionFUCHSIA>(sysmem_collection);
+ *pCollection =
+ reinterpret_cast<VkBufferCollectionFUCHSIAX>(sysmem_collection);
- register_VkBufferCollectionFUCHSIA(*pCollection);
+ register_VkBufferCollectionFUCHSIAX(*pCollection);
return VK_SUCCESS;
}
- void on_vkDestroyBufferCollectionFUCHSIA(
- void*, VkResult, VkDevice,
- VkBufferCollectionFUCHSIA collection,
+ void on_vkDestroyBufferCollectionFUCHSIAX(
+ void*,
+ VkResult,
+ VkDevice,
+ VkBufferCollectionFUCHSIAX collection,
const VkAllocationCallbacks*) {
auto sysmem_collection = reinterpret_cast<
fidl::WireSyncClient<fuchsia_sysmem::BufferCollection>*>(collection);
@@ -2056,7 +2061,7 @@
}
delete sysmem_collection;
- unregister_VkBufferCollectionFUCHSIA(collection);
+ unregister_VkBufferCollectionFUCHSIAX(collection);
}
inline fuchsia_sysmem::wire::BufferCollectionConstraints
@@ -2121,7 +2126,7 @@
}
uint32_t getBufferCollectionConstraintsVulkanBufferUsage(
- const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo) {
+ const VkBufferConstraintsInfoFUCHSIAX* pBufferConstraintsInfo) {
uint32_t usage = 0u;
VkBufferUsageFlags bufferUsage =
pBufferConstraintsInfo->pBufferCreateInfo->usage;
@@ -2270,9 +2275,9 @@
createInfos.push_back(*pImageInfo);
}
- VkImageConstraintsInfoFUCHSIA imageConstraints;
+ VkImageConstraintsInfoFUCHSIAX imageConstraints;
imageConstraints.sType =
- VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA;
+ VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIAX;
imageConstraints.pNext = nullptr;
imageConstraints.createInfoCount = createInfos.size();
imageConstraints.pCreateInfos = createInfos.data();
@@ -2293,7 +2298,7 @@
VkDevice device,
VkPhysicalDevice physicalDevice,
const VkImageCreateInfo* createInfo,
- const VkImageFormatConstraintsInfoFUCHSIA* formatConstraints,
+ const VkImageFormatConstraintsInfoFUCHSIAX* formatConstraints,
VkImageTiling tiling,
fuchsia_sysmem::wire::BufferCollectionConstraints* constraints) {
// First check if the format, tiling and usage is supported on host.
@@ -2423,10 +2428,12 @@
VkEncoder* enc,
VkDevice device,
fidl::WireSyncClient<fuchsia_sysmem::BufferCollection>* collection,
- const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo) {
+ const VkImageConstraintsInfoFUCHSIAX* pImageConstraintsInfo) {
if (!pImageConstraintsInfo ||
- pImageConstraintsInfo->sType !=
- VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA) {
+ (pImageConstraintsInfo->sType !=
+ VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIAX &&
+ pImageConstraintsInfo->sType !=
+ VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA)) {
ALOGE("%s: invalid pImageConstraintsInfo", __func__);
return VK_ERROR_INITIALIZATION_FAILED;
}
@@ -2463,7 +2470,7 @@
for (uint32_t i = 0; i < pImageConstraintsInfo->createInfoCount; i++) {
const VkImageCreateInfo* createInfo =
&pImageConstraintsInfo->pCreateInfos[i];
- const VkImageFormatConstraintsInfoFUCHSIA* formatConstraints =
+ const VkImageFormatConstraintsInfoFUCHSIAX* formatConstraints =
pImageConstraintsInfo->pFormatConstraints
? &pImageConstraintsInfo->pFormatConstraints[i]
: nullptr;
@@ -2505,14 +2512,15 @@
// Set buffer memory constraints based on optimal/linear tiling support
// and flags.
- VkImageConstraintsInfoFlagsFUCHSIA flags = pImageConstraintsInfo->flags;
- if (flags & VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA)
+ VkImageConstraintsInfoFlagsFUCHSIAX flags =
+ pImageConstraintsInfo->flags;
+ if (flags & VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIAX)
constraints.usage.cpu |= fuchsia_sysmem::wire::kCpuUsageRead;
- if (flags & VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA)
+ if (flags & VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIAX)
constraints.usage.cpu |= fuchsia_sysmem::wire::kCpuUsageReadOften;
- if (flags & VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA)
+ if (flags & VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIAX)
constraints.usage.cpu |= fuchsia_sysmem::wire::kCpuUsageWrite;
- if (flags & VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA)
+ if (flags & VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIAX)
constraints.usage.cpu |= fuchsia_sysmem::wire::kCpuUsageWriteOften;
constraints.has_buffer_memory_constraints = true;
@@ -2521,10 +2529,10 @@
memory_constraints.ram_domain_supported = true;
memory_constraints.inaccessible_domain_supported =
hasOptimalTiling &&
- !(flags & (VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA |
- VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA |
- VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA |
- VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA));
+ !(flags & (VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIAX |
+ VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIAX |
+ VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIAX |
+ VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIAX));
if (memory_constraints.inaccessible_domain_supported) {
memory_constraints.heap_permitted_count = 2;
@@ -2555,16 +2563,16 @@
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
}
- // copy constraints to info_VkBufferCollectionFUCHSIA if
- // |collection| is a valid VkBufferCollectionFUCHSIA handle.
+ // copy constraints to info_VkBufferCollectionFUCHSIAX if
+ // |collection| is a valid VkBufferCollectionFUCHSIAX handle.
AutoLock lock(mLock);
- VkBufferCollectionFUCHSIA buffer_collection =
- reinterpret_cast<VkBufferCollectionFUCHSIA>(collection);
- if (info_VkBufferCollectionFUCHSIA.find(buffer_collection) !=
- info_VkBufferCollectionFUCHSIA.end()) {
- info_VkBufferCollectionFUCHSIA[buffer_collection].constraints =
+ VkBufferCollectionFUCHSIAX buffer_collection =
+ reinterpret_cast<VkBufferCollectionFUCHSIAX>(collection);
+ if (info_VkBufferCollectionFUCHSIAX.find(buffer_collection) !=
+ info_VkBufferCollectionFUCHSIAX.end()) {
+ info_VkBufferCollectionFUCHSIAX[buffer_collection].constraints =
android::base::makeOptional(std::move(constraints));
- info_VkBufferCollectionFUCHSIA[buffer_collection].createInfoIndex =
+ info_VkBufferCollectionFUCHSIAX[buffer_collection].createInfoIndex =
std::move(createInfoIndex);
}
@@ -2573,7 +2581,7 @@
VkResult setBufferCollectionBufferConstraints(
fidl::WireSyncClient<fuchsia_sysmem::BufferCollection>* collection,
- const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo) {
+ const VkBufferConstraintsInfoFUCHSIAX* pBufferConstraintsInfo) {
if (pBufferConstraintsInfo == nullptr) {
ALOGE(
"setBufferCollectionBufferConstraints: "
@@ -2600,23 +2608,25 @@
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
}
- // copy constraints to info_VkBufferCollectionFUCHSIA if
- // |collection| is a valid VkBufferCollectionFUCHSIA handle.
+ // copy constraints to info_VkBufferCollectionFUCHSIAX if
+ // |collection| is a valid VkBufferCollectionFUCHSIAX handle.
AutoLock lock(mLock);
- VkBufferCollectionFUCHSIA buffer_collection =
- reinterpret_cast<VkBufferCollectionFUCHSIA>(collection);
- if (info_VkBufferCollectionFUCHSIA.find(buffer_collection) !=
- info_VkBufferCollectionFUCHSIA.end()) {
- info_VkBufferCollectionFUCHSIA[buffer_collection].constraints =
+ VkBufferCollectionFUCHSIAX buffer_collection =
+ reinterpret_cast<VkBufferCollectionFUCHSIAX>(collection);
+ if (info_VkBufferCollectionFUCHSIAX.find(buffer_collection) !=
+ info_VkBufferCollectionFUCHSIAX.end()) {
+ info_VkBufferCollectionFUCHSIAX[buffer_collection].constraints =
android::base::makeOptional(std::move(constraints));
}
return VK_SUCCESS;
}
- VkResult on_vkSetBufferCollectionConstraintsFUCHSIA(
- void* context, VkResult, VkDevice device,
- VkBufferCollectionFUCHSIA collection,
+ VkResult on_vkSetBufferCollectionConstraintsFUCHSIAX(
+ void* context,
+ VkResult,
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
const VkImageCreateInfo* pImageInfo) {
VkEncoder* enc = (VkEncoder*)context;
auto sysmem_collection = reinterpret_cast<
@@ -2624,12 +2634,12 @@
return setBufferCollectionConstraints(enc, device, sysmem_collection, pImageInfo);
}
- VkResult on_vkSetBufferCollectionImageConstraintsFUCHSIA(
+ VkResult on_vkSetBufferCollectionImageConstraintsFUCHSIAX(
void* context,
VkResult,
VkDevice device,
- VkBufferCollectionFUCHSIA collection,
- const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo) {
+ VkBufferCollectionFUCHSIAX collection,
+ const VkImageConstraintsInfoFUCHSIAX* pImageConstraintsInfo) {
VkEncoder* enc = (VkEncoder*)context;
auto sysmem_collection = reinterpret_cast<
fidl::WireSyncClient<fuchsia_sysmem::BufferCollection>*>(collection);
@@ -2637,28 +2647,28 @@
enc, device, sysmem_collection, pImageConstraintsInfo);
}
- VkResult on_vkSetBufferCollectionBufferConstraintsFUCHSIA(
+ VkResult on_vkSetBufferCollectionBufferConstraintsFUCHSIAX(
void*,
VkResult,
VkDevice,
- VkBufferCollectionFUCHSIA collection,
- const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo) {
+ VkBufferCollectionFUCHSIAX collection,
+ const VkBufferConstraintsInfoFUCHSIAX* pBufferConstraintsInfo) {
auto sysmem_collection = reinterpret_cast<
fidl::WireSyncClient<fuchsia_sysmem::BufferCollection>*>(collection);
return setBufferCollectionBufferConstraints(sysmem_collection,
pBufferConstraintsInfo);
}
- VkResult on_vkGetBufferCollectionPropertiesFUCHSIA(
+ VkResult on_vkGetBufferCollectionPropertiesFUCHSIAX(
void* context,
VkResult,
VkDevice device,
- VkBufferCollectionFUCHSIA collection,
- VkBufferCollectionPropertiesFUCHSIA* pProperties) {
- VkBufferCollectionProperties2FUCHSIA properties2 = {
- .sType = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES2_FUCHSIA,
+ VkBufferCollectionFUCHSIAX collection,
+ VkBufferCollectionPropertiesFUCHSIAX* pProperties) {
+ VkBufferCollectionProperties2FUCHSIAX properties2 = {
+ .sType = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES2_FUCHSIAX,
.pNext = nullptr};
- auto result = on_vkGetBufferCollectionProperties2FUCHSIA(
+ auto result = on_vkGetBufferCollectionProperties2FUCHSIAX(
context, VK_SUCCESS, device, collection, &properties2);
if (result != VK_SUCCESS) {
return result;
@@ -2670,10 +2680,10 @@
}
VkResult getBufferCollectionImageCreateInfoIndexLocked(
- VkBufferCollectionFUCHSIA collection,
+ VkBufferCollectionFUCHSIAX collection,
fuchsia_sysmem::wire::BufferCollectionInfo2& info,
uint32_t* outCreateInfoIndex) {
- if (!info_VkBufferCollectionFUCHSIA[collection]
+ if (!info_VkBufferCollectionFUCHSIAX[collection]
.constraints.hasValue()) {
ALOGE("%s: constraints not set", __func__);
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
@@ -2685,9 +2695,9 @@
}
const auto& constraints =
- *info_VkBufferCollectionFUCHSIA[collection].constraints;
+ *info_VkBufferCollectionFUCHSIAX[collection].constraints;
const auto& createInfoIndices =
- info_VkBufferCollectionFUCHSIA[collection].createInfoIndex;
+ info_VkBufferCollectionFUCHSIAX[collection].createInfoIndex;
const auto& out = info.settings.image_format_constraints;
bool foundCreateInfo = false;
@@ -2740,12 +2750,12 @@
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
}
- VkResult on_vkGetBufferCollectionProperties2FUCHSIA(
+ VkResult on_vkGetBufferCollectionProperties2FUCHSIAX(
void* context,
VkResult,
VkDevice device,
- VkBufferCollectionFUCHSIA collection,
- VkBufferCollectionProperties2FUCHSIA* pProperties) {
+ VkBufferCollectionFUCHSIAX collection,
+ VkBufferCollectionProperties2FUCHSIAX* pProperties) {
VkEncoder* enc = (VkEncoder*)context;
auto sysmem_collection = reinterpret_cast<
fidl::WireSyncClient<fuchsia_sysmem::BufferCollection>*>(collection);
@@ -2800,18 +2810,18 @@
auto storeProperties = [this, collection, pProperties]() -> VkResult {
// store properties to storage
AutoLock lock(mLock);
- if (info_VkBufferCollectionFUCHSIA.find(collection) ==
- info_VkBufferCollectionFUCHSIA.end()) {
+ if (info_VkBufferCollectionFUCHSIAX.find(collection) ==
+ info_VkBufferCollectionFUCHSIAX.end()) {
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
}
- info_VkBufferCollectionFUCHSIA[collection].properties =
+ info_VkBufferCollectionFUCHSIAX[collection].properties =
android::base::makeOptional(*pProperties);
// We only do a shallow copy so we should remove all pNext pointers.
- info_VkBufferCollectionFUCHSIA[collection].properties->pNext =
+ info_VkBufferCollectionFUCHSIAX[collection].properties->pNext =
nullptr;
- info_VkBufferCollectionFUCHSIA[collection]
+ info_VkBufferCollectionFUCHSIAX[collection]
.properties->colorSpace.pNext = nullptr;
return VK_SUCCESS;
};
@@ -3357,15 +3367,15 @@
const VkImageCreateInfo* pImageCreateInfo = nullptr;
- VkBufferConstraintsInfoFUCHSIA bufferConstraintsInfo = {
+ VkBufferConstraintsInfoFUCHSIAX bufferConstraintsInfo = {
.sType =
- VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA,
+ VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIAX,
.pNext = nullptr,
.pBufferCreateInfo = nullptr,
.requiredFormatFeatures = 0,
.minCount = 1,
};
- const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo =
+ const VkBufferConstraintsInfoFUCHSIAX* pBufferConstraintsInfo =
nullptr;
if (hasDedicatedImage) {
@@ -4052,8 +4062,18 @@
#endif
#ifdef VK_USE_PLATFORM_FUCHSIA
- const VkBufferCollectionImageCreateInfoFUCHSIA* extBufferCollectionPtr =
- vk_find_struct<VkBufferCollectionImageCreateInfoFUCHSIA>(pCreateInfo);
+ const VkBufferCollectionImageCreateInfoFUCHSIAX*
+ extBufferCollectionPtr =
+ vk_find_struct<VkBufferCollectionImageCreateInfoFUCHSIAX>(
+ pCreateInfo);
+ if (extBufferCollectionPtr == nullptr) {
+ // TODO(fxbug.dev/73447): remove this once we finish migration to
+ // FUCHSIAX.
+ extBufferCollectionPtr = reinterpret_cast<
+ const VkBufferCollectionImageCreateInfoFUCHSIAX*>(
+ vk_find_struct<VkBufferCollectionImageCreateInfoFUCHSIA>(
+ pCreateInfo));
+ }
bool isSysmemBackedMemory = false;
if (extImgCiPtr &&
@@ -5123,8 +5143,16 @@
}
const auto* extBufferCollectionPtr =
+ vk_find_struct<VkBufferCollectionBufferCreateInfoFUCHSIAX>(
+ pCreateInfo);
+ if (extBufferCollectionPtr == nullptr) {
+ // TODO(fxbug.dev/73447): Remove this once we finish migration to
+ // FUCHSIAX.
+ extBufferCollectionPtr = reinterpret_cast<
+ const VkBufferCollectionBufferCreateInfoFUCHSIAX*>(
vk_find_struct<VkBufferCollectionBufferCreateInfoFUCHSIA>(
- pCreateInfo);
+ pCreateInfo));
+ }
if (extBufferCollectionPtr) {
auto collection = reinterpret_cast<
@@ -7493,8 +7521,10 @@
const VkBufferCollectionCreateInfoFUCHSIA* pInfo,
const VkAllocationCallbacks* pAllocator,
VkBufferCollectionFUCHSIA* pCollection) {
- return mImpl->on_vkCreateBufferCollectionFUCHSIA(
- context, input_result, device, pInfo, pAllocator, pCollection);
+ return mImpl->on_vkCreateBufferCollectionFUCHSIAX(
+ context, input_result, device,
+ reinterpret_cast<const VkBufferCollectionCreateInfoFUCHSIAX*>(pInfo),
+ pAllocator, reinterpret_cast<VkBufferCollectionFUCHSIAX*>(pCollection));
}
void ResourceTracker::on_vkDestroyBufferCollectionFUCHSIA(
@@ -7502,8 +7532,9 @@
VkDevice device,
VkBufferCollectionFUCHSIA collection,
const VkAllocationCallbacks* pAllocator) {
- return mImpl->on_vkDestroyBufferCollectionFUCHSIA(
- context, input_result, device, collection, pAllocator);
+ return mImpl->on_vkDestroyBufferCollectionFUCHSIAX(
+ context, input_result, device,
+ reinterpret_cast<VkBufferCollectionFUCHSIAX>(collection), pAllocator);
}
VkResult ResourceTracker::on_vkSetBufferCollectionConstraintsFUCHSIA(
@@ -7511,17 +7542,22 @@
VkDevice device,
VkBufferCollectionFUCHSIA collection,
const VkImageCreateInfo* pImageInfo) {
- return mImpl->on_vkSetBufferCollectionConstraintsFUCHSIA(
- context, input_result, device, collection, pImageInfo);
+ return mImpl->on_vkSetBufferCollectionConstraintsFUCHSIAX(
+ context, input_result, device,
+ reinterpret_cast<VkBufferCollectionFUCHSIAX>(collection), pImageInfo);
}
VkResult ResourceTracker::on_vkSetBufferCollectionBufferConstraintsFUCHSIA(
- void* context, VkResult input_result,
- VkDevice device,
- VkBufferCollectionFUCHSIA collection,
- const VkBufferConstraintsInfoFUCHSIA* pBufferDConstraintsInfo) {
- return mImpl->on_vkSetBufferCollectionBufferConstraintsFUCHSIA(
- context, input_result, device, collection, pBufferDConstraintsInfo);
+ void* context,
+ VkResult input_result,
+ VkDevice device,
+ VkBufferCollectionFUCHSIA collection,
+ const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo) {
+ return mImpl->on_vkSetBufferCollectionBufferConstraintsFUCHSIAX(
+ context, input_result, device,
+ reinterpret_cast<VkBufferCollectionFUCHSIAX>(collection),
+ reinterpret_cast<const VkBufferConstraintsInfoFUCHSIAX*>(
+ pBufferConstraintsInfo));
}
VkResult ResourceTracker::on_vkSetBufferCollectionImageConstraintsFUCHSIA(
@@ -7530,8 +7566,11 @@
VkDevice device,
VkBufferCollectionFUCHSIA collection,
const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo) {
- return mImpl->on_vkSetBufferCollectionImageConstraintsFUCHSIA(
- context, input_result, device, collection, pImageConstraintsInfo);
+ return mImpl->on_vkSetBufferCollectionImageConstraintsFUCHSIAX(
+ context, input_result, device,
+ reinterpret_cast<VkBufferCollectionFUCHSIAX>(collection),
+ reinterpret_cast<const VkImageConstraintsInfoFUCHSIAX*>(
+ pImageConstraintsInfo));
}
VkResult ResourceTracker::on_vkGetBufferCollectionPropertiesFUCHSIA(
@@ -7539,8 +7578,10 @@
VkDevice device,
VkBufferCollectionFUCHSIA collection,
VkBufferCollectionPropertiesFUCHSIA* pProperties) {
- return mImpl->on_vkGetBufferCollectionPropertiesFUCHSIA(
- context, input_result, device, collection, pProperties);
+ return mImpl->on_vkGetBufferCollectionPropertiesFUCHSIAX(
+ context, input_result, device,
+ reinterpret_cast<VkBufferCollectionFUCHSIAX>(collection),
+ reinterpret_cast<VkBufferCollectionPropertiesFUCHSIAX*>(pProperties));
}
VkResult ResourceTracker::on_vkGetBufferCollectionProperties2FUCHSIA(
@@ -7549,7 +7590,80 @@
VkDevice device,
VkBufferCollectionFUCHSIA collection,
VkBufferCollectionProperties2FUCHSIA* pProperties) {
- return mImpl->on_vkGetBufferCollectionProperties2FUCHSIA(
+ return mImpl->on_vkGetBufferCollectionProperties2FUCHSIAX(
+ context, input_result, device,
+ reinterpret_cast<VkBufferCollectionFUCHSIAX>(collection),
+ reinterpret_cast<VkBufferCollectionProperties2FUCHSIAX*>(pProperties));
+}
+
+VkResult ResourceTracker::on_vkCreateBufferCollectionFUCHSIAX(
+ void* context,
+ VkResult input_result,
+ VkDevice device,
+ const VkBufferCollectionCreateInfoFUCHSIAX* pInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkBufferCollectionFUCHSIAX* pCollection) {
+ return mImpl->on_vkCreateBufferCollectionFUCHSIAX(
+ context, input_result, device, pInfo, pAllocator, pCollection);
+}
+
+void ResourceTracker::on_vkDestroyBufferCollectionFUCHSIAX(
+ void* context,
+ VkResult input_result,
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ const VkAllocationCallbacks* pAllocator) {
+ return mImpl->on_vkDestroyBufferCollectionFUCHSIAX(
+ context, input_result, device, collection, pAllocator);
+}
+
+VkResult ResourceTracker::on_vkSetBufferCollectionConstraintsFUCHSIAX(
+ void* context,
+ VkResult input_result,
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ const VkImageCreateInfo* pImageInfo) {
+ return mImpl->on_vkSetBufferCollectionConstraintsFUCHSIAX(
+ context, input_result, device, collection, pImageInfo);
+}
+
+VkResult ResourceTracker::on_vkSetBufferCollectionBufferConstraintsFUCHSIAX(
+ void* context,
+ VkResult input_result,
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ const VkBufferConstraintsInfoFUCHSIAX* pBufferDConstraintsInfo) {
+ return mImpl->on_vkSetBufferCollectionBufferConstraintsFUCHSIAX(
+ context, input_result, device, collection, pBufferDConstraintsInfo);
+}
+
+VkResult ResourceTracker::on_vkSetBufferCollectionImageConstraintsFUCHSIAX(
+ void* context,
+ VkResult input_result,
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ const VkImageConstraintsInfoFUCHSIAX* pImageConstraintsInfo) {
+ return mImpl->on_vkSetBufferCollectionImageConstraintsFUCHSIAX(
+ context, input_result, device, collection, pImageConstraintsInfo);
+}
+
+VkResult ResourceTracker::on_vkGetBufferCollectionPropertiesFUCHSIAX(
+ void* context,
+ VkResult input_result,
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ VkBufferCollectionPropertiesFUCHSIAX* pProperties) {
+ return mImpl->on_vkGetBufferCollectionPropertiesFUCHSIAX(
+ context, input_result, device, collection, pProperties);
+}
+
+VkResult ResourceTracker::on_vkGetBufferCollectionProperties2FUCHSIAX(
+ void* context,
+ VkResult input_result,
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ VkBufferCollectionProperties2FUCHSIAX* pProperties) {
+ return mImpl->on_vkGetBufferCollectionProperties2FUCHSIAX(
context, input_result, device, collection, pProperties);
}
#endif
diff --git a/system/vulkan_enc/ResourceTracker.h b/system/vulkan_enc/ResourceTracker.h
index 86e4dde..323bee8 100644
--- a/system/vulkan_enc/ResourceTracker.h
+++ b/system/vulkan_enc/ResourceTracker.h
@@ -273,6 +273,8 @@
void* context, VkResult input_result,
VkDevice device,
const VkImportSemaphoreZirconHandleInfoFUCHSIA* pInfo);
+ // TODO(fxbug.dev/73447): Remove all the *FUCHSIA functions below once we
+ // finish migration to FUCHSIAX.
VkResult on_vkCreateBufferCollectionFUCHSIA(
void* context, VkResult input_result,
VkDevice device,
@@ -312,6 +314,49 @@
VkDevice device,
VkBufferCollectionFUCHSIA collection,
VkBufferCollectionProperties2FUCHSIA* pProperties);
+ VkResult on_vkCreateBufferCollectionFUCHSIAX(
+ void* context,
+ VkResult input_result,
+ VkDevice device,
+ const VkBufferCollectionCreateInfoFUCHSIAX* pInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkBufferCollectionFUCHSIAX* pCollection);
+ void on_vkDestroyBufferCollectionFUCHSIAX(
+ void* context,
+ VkResult input_result,
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ const VkAllocationCallbacks* pAllocator);
+ VkResult on_vkSetBufferCollectionConstraintsFUCHSIAX(
+ void* context,
+ VkResult input_result,
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ const VkImageCreateInfo* pImageInfo);
+ VkResult on_vkSetBufferCollectionBufferConstraintsFUCHSIAX(
+ void* context,
+ VkResult input_result,
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ const VkBufferConstraintsInfoFUCHSIAX* pBufferConstraintsInfo);
+ VkResult on_vkSetBufferCollectionImageConstraintsFUCHSIAX(
+ void* context,
+ VkResult input_result,
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ const VkImageConstraintsInfoFUCHSIAX* pImageConstraintsInfo);
+ VkResult on_vkGetBufferCollectionPropertiesFUCHSIAX(
+ void* context,
+ VkResult input_result,
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ VkBufferCollectionPropertiesFUCHSIAX* pProperties);
+ VkResult on_vkGetBufferCollectionProperties2FUCHSIAX(
+ void* context,
+ VkResult input_result,
+ VkDevice device,
+ VkBufferCollectionFUCHSIAX collection,
+ VkBufferCollectionProperties2FUCHSIAX* pProperties);
#endif
VkResult on_vkGetAndroidHardwareBufferPropertiesANDROID(
diff --git a/system/vulkan_enc/VulkanHandles.h b/system/vulkan_enc/VulkanHandles.h
index b0f4f6c..b3b7e51 100644
--- a/system/vulkan_enc/VulkanHandles.h
+++ b/system/vulkan_enc/VulkanHandles.h
@@ -74,7 +74,7 @@
#ifdef VK_USE_PLATFORM_FUCHSIA
#define __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_FUCHSIA(f) \
- f(VkBufferCollectionFUCHSIA)
+ f(VkBufferCollectionFUCHSIAX)
#else
diff --git a/system/vulkan_enc/goldfish_vk_private_defs.h b/system/vulkan_enc/goldfish_vk_private_defs.h
index bf57d8a..dfeb3c5 100644
--- a/system/vulkan_enc/goldfish_vk_private_defs.h
+++ b/system/vulkan_enc/goldfish_vk_private_defs.h
@@ -498,6 +498,137 @@
((VkStructureType)1001004008)
#endif // VK_FUCHSIA_buffer_collection
+#ifndef VK_FUCHSIA_buffer_collection_x
+
+#define VK_FUCHSIA_buffer_collection_x 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferCollectionFUCHSIAX)
+#define VK_FUCHSIA_BUFFER_COLLECTION_X_SPEC_VERSION 1
+#define VK_FUCHSIA_BUFFER_COLLECTION_X_EXTENSION_NAME \
+ "VK_FUCHSIA_buffer_collection_x"
+
+typedef enum VkImageFormatConstraintsFlagBitsFUCHSIAX {
+ VK_IMAGE_FORMAT_CONSTRAINTS_FLAG_BITS_MAX_ENUM_FUCHSIAX = 0x7FFFFFFF
+} VkImageFormatConstraintsFlagBitsFUCHSIAX;
+typedef VkFlags VkImageFormatConstraintsFlagsFUCHSIAX;
+
+typedef enum VkImageConstraintsInfoFlagBitsFUCHSIAX {
+ VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIAX = 0x00000001,
+ VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIAX = 0x00000002,
+ VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIAX = 0x00000004,
+ VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIAX = 0x00000008,
+ VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIAX = 0x00000010,
+ VK_IMAGE_CONSTRAINTS_INFO_FLAG_BITS_MAX_ENUM_FUCHSIAX = 0x7FFFFFFF
+} VkImageConstraintsInfoFlagBitsFUCHSIAX;
+typedef VkFlags VkImageConstraintsInfoFlagsFUCHSIAX;
+typedef struct VkBufferCollectionCreateInfoFUCHSIAX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t collectionToken;
+} VkBufferCollectionCreateInfoFUCHSIAX;
+
+typedef struct VkImportMemoryBufferCollectionFUCHSIAX {
+ VkStructureType sType;
+ const void* pNext;
+ VkBufferCollectionFUCHSIAX collection;
+ uint32_t index;
+} VkImportMemoryBufferCollectionFUCHSIAX;
+
+typedef struct VkBufferCollectionImageCreateInfoFUCHSIAX {
+ VkStructureType sType;
+ const void* pNext;
+ VkBufferCollectionFUCHSIAX collection;
+ uint32_t index;
+} VkBufferCollectionImageCreateInfoFUCHSIAX;
+
+typedef struct VkBufferConstraintsInfoFUCHSIAX {
+ VkStructureType sType;
+ const void* pNext;
+ const VkBufferCreateInfo* pBufferCreateInfo;
+ VkFormatFeatureFlags requiredFormatFeatures;
+ uint32_t minCount;
+} VkBufferConstraintsInfoFUCHSIAX;
+
+typedef struct VkBufferCollectionBufferCreateInfoFUCHSIAX {
+ VkStructureType sType;
+ const void* pNext;
+ VkBufferCollectionFUCHSIAX collection;
+ uint32_t index;
+} VkBufferCollectionBufferCreateInfoFUCHSIAX;
+
+typedef struct VkBufferCollectionPropertiesFUCHSIAX {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t memoryTypeBits;
+ uint32_t count;
+} VkBufferCollectionPropertiesFUCHSIAX;
+
+typedef struct VkSysmemColorSpaceFUCHSIAX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t colorSpace;
+} VkSysmemColorSpaceFUCHSIAX;
+
+typedef struct VkBufferCollectionProperties2FUCHSIAX {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t memoryTypeBits;
+ uint32_t bufferCount;
+ uint32_t createInfoIndex;
+ uint64_t sysmemFormat;
+ VkFormatFeatureFlags formatFeatures;
+ VkSysmemColorSpaceFUCHSIAX colorSpace;
+ VkComponentMapping samplerYcbcrConversionComponents;
+ VkSamplerYcbcrModelConversion suggestedYcbcrModel;
+ VkSamplerYcbcrRange suggestedYcbcrRange;
+ VkChromaLocation suggestedXChromaOffset;
+ VkChromaLocation suggestedYChromaOffset;
+} VkBufferCollectionProperties2FUCHSIAX;
+
+typedef struct VkImageFormatConstraintsInfoFUCHSIAX {
+ VkStructureType sType;
+ const void* pNext;
+ VkFormatFeatureFlags requiredFormatFeatures;
+ VkImageFormatConstraintsFlagsFUCHSIAX flags;
+ uint64_t sysmemFormat;
+ uint32_t colorSpaceCount;
+ const VkSysmemColorSpaceFUCHSIAX* pColorSpaces;
+} VkImageFormatConstraintsInfoFUCHSIAX;
+
+typedef struct VkImageConstraintsInfoFUCHSIAX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t createInfoCount;
+ const VkImageCreateInfo* pCreateInfos;
+ const VkImageFormatConstraintsInfoFUCHSIAX* pFormatConstraints;
+ uint32_t minBufferCount;
+ uint32_t maxBufferCount;
+ uint32_t minBufferCountForCamping;
+ uint32_t minBufferCountForDedicatedSlack;
+ uint32_t minBufferCountForSharedSlack;
+ VkImageConstraintsInfoFlagsFUCHSIAX flags;
+} VkImageConstraintsInfoFUCHSIAX;
+
+#define VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIAX \
+ ((VkStructureType)1000367000)
+#define VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIAX \
+ ((VkStructureType)1000367004)
+#define VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIAX \
+ ((VkStructureType)1000367005)
+#define VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIAX \
+ ((VkStructureType)1000367006)
+#define VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIAX \
+ ((VkStructureType)1000367007)
+#define VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIAX \
+ ((VkStructureType)1000367008)
+#define VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIAX \
+ ((VkStructureType)1000367009)
+#define VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIAX \
+ ((VkStructureType)1000367010)
+#define VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES2_FUCHSIAX \
+ ((VkStructureType)1000367011)
+
+#endif // VK_FUCHSIA_buffer_collection_x
+
#ifndef VK_FUCHSIA_external_memory
#define VK_FUCHSIA_external_memory 1
#define VK_FUCHSIA_EXTERNAL_MEMORY_SPEC_VERSION 1
diff --git a/system/vulkan_enc/vk_struct_id.h b/system/vulkan_enc/vk_struct_id.h
index 5a7328a..f51d8f6 100644
--- a/system/vulkan_enc/vk_struct_id.h
+++ b/system/vulkan_enc/vk_struct_id.h
@@ -47,6 +47,9 @@
REGISTER_VK_STRUCT_ID(VkImportMemoryZirconHandleInfoFUCHSIA, VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA);
REGISTER_VK_STRUCT_ID(VkBufferCollectionImageCreateInfoFUCHSIA, VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA);
REGISTER_VK_STRUCT_ID(VkBufferCollectionBufferCreateInfoFUCHSIA, VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA);
+REGISTER_VK_STRUCT_ID(VkImportMemoryBufferCollectionFUCHSIAX, VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIAX);
+REGISTER_VK_STRUCT_ID(VkBufferCollectionImageCreateInfoFUCHSIAX, VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIAX);
+REGISTER_VK_STRUCT_ID(VkBufferCollectionBufferCreateInfoFUCHSIAX, VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIAX);
REGISTER_VK_STRUCT_ID(VkSamplerCreateInfo, VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO);
REGISTER_VK_STRUCT_ID(VkSamplerYcbcrConversionInfo, VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO);
REGISTER_VK_STRUCT_ID(VkFenceCreateInfo, VK_STRUCTURE_TYPE_FENCE_CREATE_INFO);