vulkan: 1.2.1 CTS fixes
- Set the default API version to 1.1 (assume 1.1 is supported on the
host), so that CTS tests don't exercise the rare case where we have a
1.0 instance and a 1.1 device
- Don't suppress memory type indices with properties == 0. This works
around a driver bug where some ycbcr copy tests only work with a memory
type index that has properties == 0
Fixes: 152769369
Merged-In: I2dc9df05ea93f8562c1c34a0bddaf28a5a83c414
Change-Id: I98db7e30120d4486eb466243b8d9e47fd8bc461b
diff --git a/system/vulkan_enc/AndroidHardwareBuffer.cpp b/system/vulkan_enc/AndroidHardwareBuffer.cpp
index a40a3a7..fe5a847 100644
--- a/system/vulkan_enc/AndroidHardwareBuffer.cpp
+++ b/system/vulkan_enc/AndroidHardwareBuffer.cpp
@@ -123,7 +123,6 @@
// (hard to make actual dedicated allocs)
uint32_t memoryTypeBits = 0;
for (uint32_t i = 0; i < VK_MAX_MEMORY_TYPES; ++i) {
- if (isNoFlagsMemoryTypeIndexForGuest(hostMemVirtInfo, i)) continue;
if (isHostVisibleMemoryTypeIndexForGuest(hostMemVirtInfo, i)) continue;
memoryTypeBits |= (1 << i);
}
diff --git a/system/vulkan_enc/HostVisibleMemoryVirtualization.cpp b/system/vulkan_enc/HostVisibleMemoryVirtualization.cpp
index 6169e7c..318940e 100644
--- a/system/vulkan_enc/HostVisibleMemoryVirtualization.cpp
+++ b/system/vulkan_enc/HostVisibleMemoryVirtualization.cpp
@@ -162,7 +162,8 @@
// Was the original memory type also a device local type? If so,
// advertise both types in resulting type bits.
info_out->memoryTypeBitsShouldAdvertiseBoth[i] =
- type.propertyFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ type.propertyFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT ||
+ type.propertyFlags == 0;
++firstFreeTypeIndex;
@@ -204,16 +205,6 @@
return props.memoryTypes[index].propertyFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
}
-bool isNoFlagsMemoryTypeIndexForGuest(
- const HostVisibleMemoryVirtualizationInfo* info,
- uint32_t index) {
- const auto& props =
- info->virtualizationSupported ?
- info->guestMemoryProperties :
- info->hostMemoryProperties;
- return props.memoryTypes[index].propertyFlags == 0;
-}
-
VkResult finishHostMemAllocInit(
VkEncoder*,
VkDevice device,
diff --git a/system/vulkan_enc/HostVisibleMemoryVirtualization.h b/system/vulkan_enc/HostVisibleMemoryVirtualization.h
index 305dca2..46e69ec 100644
--- a/system/vulkan_enc/HostVisibleMemoryVirtualization.h
+++ b/system/vulkan_enc/HostVisibleMemoryVirtualization.h
@@ -72,10 +72,6 @@
const HostVisibleMemoryVirtualizationInfo* info,
uint32_t index);
-bool isNoFlagsMemoryTypeIndexForGuest(
- const HostVisibleMemoryVirtualizationInfo* info,
- uint32_t index);
-
struct HostMemAlloc {
bool initialized = false;
VkResult initResult = VK_SUCCESS;
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index 7fa35b9..b7c6599 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -634,8 +634,7 @@
return true;
}
- static constexpr uint32_t kMaxApiVersion = VK_MAKE_VERSION(1, 1, 0);
- static constexpr uint32_t kMinApiVersion = VK_MAKE_VERSION(1, 0, 0);
+ static constexpr uint32_t kDefaultApiVersion = VK_MAKE_VERSION(1, 1, 0);
void setInstanceInfo(VkInstance instance,
uint32_t enabledExtensionCount,
@@ -2398,8 +2397,6 @@
uint32_t hostBits) {
uint32_t res = 0;
for (uint32_t i = 0; i < VK_MAX_MEMORY_TYPES; ++i) {
- if (isNoFlagsMemoryTypeIndexForGuest(
- &mHostVisibleMemoryVirtInfo, i)) continue;
if (hostBits & (1 << i)) {
res |= (1 << i);
}
@@ -2411,8 +2408,6 @@
uint32_t normalBits) {
uint32_t res = 0;
for (uint32_t i = 0; i < VK_MAX_MEMORY_TYPES; ++i) {
- if (isNoFlagsMemoryTypeIndexForGuest(
- &mHostVisibleMemoryVirtInfo, i)) continue;
if (normalBits & (1 << i) &&
!isHostVisibleMemoryTypeIndexForGuest(
&mHostVisibleMemoryVirtInfo, i)) {
@@ -4381,7 +4376,7 @@
uint32_t getApiVersionFromInstance(VkInstance instance) const {
AutoLock lock(mLock);
- uint32_t api = kMinApiVersion;
+ uint32_t api = kDefaultApiVersion;
auto it = info_VkInstance.find(instance);
if (it == info_VkInstance.end()) return api;
@@ -4394,7 +4389,7 @@
uint32_t getApiVersionFromDevice(VkDevice device) const {
AutoLock lock(mLock);
- uint32_t api = kMinApiVersion;
+ uint32_t api = kDefaultApiVersion;
auto it = info_VkDevice.find(device);
if (it == info_VkDevice.end()) return api;