Make vkEnumerate*ExtensionProperties conform to the Vulkan spec
Vulkan specifies that "on return the [pPropertyCount] is overwritten
with the number of structures actually written to pProperties," but this
wasn't happening.
Bug: 150953274
Test: presubmit
Merged-In: I9c576e05fa66eb2a1210c2b432d3ed20adf2cdd0
Change-Id: Iff26b63d77da0389ecf3b59fde72c1cac8d75472
Signed-off-by: Roman Kiryanov <rkir@google.com>
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index 809732c..e7ad451 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -883,9 +883,11 @@
return VK_SUCCESS;
} else {
auto actualExtensionCount = (uint32_t)filteredExts.size();
- auto toWrite = actualExtensionCount < *pPropertyCount ? actualExtensionCount : *pPropertyCount;
+ if (*pPropertyCount > actualExtensionCount) {
+ *pPropertyCount = actualExtensionCount;
+ }
- for (uint32_t i = 0; i < toWrite; ++i) {
+ for (uint32_t i = 0; i < *pPropertyCount; ++i) {
pProperties[i] = filteredExts[i];
}
@@ -1051,9 +1053,11 @@
return VK_SUCCESS;
} else {
auto actualExtensionCount = (uint32_t)filteredExts.size();
- auto toWrite = actualExtensionCount < *pPropertyCount ? actualExtensionCount : *pPropertyCount;
+ if (*pPropertyCount > actualExtensionCount) {
+ *pPropertyCount = actualExtensionCount;
+ }
- for (uint32_t i = 0; i < toWrite; ++i) {
+ for (uint32_t i = 0; i < *pPropertyCount; ++i) {
pProperties[i] = filteredExts[i];
}