goldfish-opengl: update AHB with host color buffer memory index
- use host defined memory index instead hardcoding to zero
- updateMemoryBitsForAndroidHardwareBuffers --> updateMemoryBits
-- maybe a namesapce can be added later,
-- gfxstream::guest::vk::ahb::updateMemoryBits
BUG=215538934
TEST=compile
Change-Id: Ifcdb877f0502249ec5fdfe5964fca9cd4f91bd5e
diff --git a/system/vulkan_enc/AndroidHardwareBuffer.cpp b/system/vulkan_enc/AndroidHardwareBuffer.cpp
index 4a46421..09946ee 100644
--- a/system/vulkan_enc/AndroidHardwareBuffer.cpp
+++ b/system/vulkan_enc/AndroidHardwareBuffer.cpp
@@ -62,9 +62,8 @@
return ahw_usage;
}
-void updateMemoryTypeBitsForAndroidHardwareBuffers(uint32_t* memoryTypeBits) {
- constexpr const uint32_t kReservedAndroidHardwareBufferMemoryTypeIndex = 0;
- *memoryTypeBits = 1u << kReservedAndroidHardwareBufferMemoryTypeIndex;
+void updateMemoryTypeBits(uint32_t* memoryTypeBits, uint32_t colorBufferMemoryIndex) {
+ *memoryTypeBits = 1u << colorBufferMemoryIndex;
}
VkResult getAndroidHardwareBufferPropertiesANDROID(
@@ -236,8 +235,6 @@
return VK_ERROR_INVALID_EXTERNAL_HANDLE;
}
- updateMemoryTypeBitsForAndroidHardwareBuffers(&pProperties->memoryTypeBits);
-
pProperties->allocationSize =
grallocHelper->getAllocatedSize(handle);
diff --git a/system/vulkan_enc/AndroidHardwareBuffer.h b/system/vulkan_enc/AndroidHardwareBuffer.h
index cab626b..c5e64ee 100644
--- a/system/vulkan_enc/AndroidHardwareBuffer.h
+++ b/system/vulkan_enc/AndroidHardwareBuffer.h
@@ -32,8 +32,7 @@
const VkImageCreateFlags vk_create,
const VkImageUsageFlags vk_usage);
-void updateMemoryTypeBitsForAndroidHardwareBuffers(
- uint32_t* memoryTypeBits);
+void updateMemoryTypeBits(uint32_t* memoryTypeBits, uint32_t colorBufferMemoryIndex);
VkResult getAndroidHardwareBufferPropertiesANDROID(
Gralloc* grallocHelper,
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index 2f9a292..e74392f 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -912,6 +912,11 @@
void setupCaps(void) {
VirtGpuDevice& instance = VirtGpuDevice::getInstance((enum VirtGpuCapset)3);
mCaps = instance.getCaps();
+
+ // Delete once goldfish Linux drivers are gone
+ if (mCaps.gfxstreamCapset.protocolVersion == 0) {
+ mCaps.gfxstreamCapset.colorBufferMemoryIndex = 0xFFFFFFFF;
+ }
}
void setupFeatures(const EmulatorFeatureInfo* features) {
@@ -1657,12 +1662,25 @@
#ifdef VK_USE_PLATFORM_ANDROID_KHR
VkResult on_vkGetAndroidHardwareBufferPropertiesANDROID(
- void*, VkResult,
- VkDevice,
+ void* context, VkResult,
+ VkDevice device,
const AHardwareBuffer* buffer,
VkAndroidHardwareBufferPropertiesANDROID* pProperties) {
auto grallocHelper =
ResourceTracker::threadingCallbacks.hostConnectionGetFunc()->grallocHelper();
+
+ // Delete once goldfish Linux drivers are gone
+ if (mCaps.gfxstreamCapset.colorBufferMemoryIndex == 0xFFFFFFFF) {
+ const VkPhysicalDeviceMemoryProperties& memProps =
+ getPhysicalDeviceMemoryProperties(context, device, VK_NULL_HANDLE);
+
+ mCaps.gfxstreamCapset.colorBufferMemoryIndex =
+ (1u << memProps.memoryTypeCount) - 1;
+ }
+
+ updateMemoryTypeBits(&pProperties->memoryTypeBits,
+ mCaps.gfxstreamCapset.colorBufferMemoryIndex);
+
return getAndroidHardwareBufferPropertiesANDROID(
grallocHelper, buffer, pProperties);
}
@@ -4228,11 +4246,15 @@
info.isSysmemBackedMemory = true;
}
#endif
+
+// Delete `protocolVersion` check goldfish drivers are gone.
#ifdef VK_USE_PLATFORM_ANDROID_KHR
if (extImgCiPtr &&
+ mCaps.gfxstreamCapset.protocolVersion &&
(extImgCiPtr->handleTypes &
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID)) {
- updateMemoryTypeBitsForAndroidHardwareBuffers(&memReqs.memoryTypeBits);
+ updateMemoryTypeBits(&memReqs.memoryTypeBits,
+ mCaps.gfxstreamCapset.colorBufferMemoryIndex);
}
#endif
@@ -5271,11 +5293,14 @@
if (res != VK_SUCCESS) return res;
+// Delete `protocolVersion` check goldfish drivers are gone.
#ifdef VK_USE_PLATFORM_ANDROID_KHR
if (extBufCiPtr &&
+ mCaps.gfxstreamCapset.protocolVersion &&
(extBufCiPtr->handleTypes &
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID)) {
- updateMemoryTypeBitsForAndroidHardwareBuffers(&memReqs.memoryTypeBits);
+ updateMemoryTypeBits(&memReqs.memoryTypeBits,
+ mCaps.gfxstreamCapset.colorBufferMemoryIndex);
}
#endif