Merge changes I66707b4a,Ide5e4416,Ib2eb4c92 into main
* changes:
gfxstream: linux guest: support client-side blob allocations
gfxstream: host + guest: bump up version of the protocol
gfxstream: host: create blobs backed by ColorBuffers
diff --git a/host/FrameBuffer.cpp b/host/FrameBuffer.cpp
index 399bd8d..cd02bab 100644
--- a/host/FrameBuffer.cpp
+++ b/host/FrameBuffer.cpp
@@ -339,7 +339,7 @@
#if GFXSTREAM_ENABLE_HOST_GLES
// Do not initialize GL emulation if the guest is using ANGLE.
- if (!fb->m_features.GuestUsesAngle.enabled) {
+ if (!fb->m_features.GuestVulkanOnly.enabled) {
fb->m_emulationGl = EmulationGl::create(width, height, fb->m_features, useSubWindow, egl2egl);
if (!fb->m_emulationGl) {
ERR("Failed to initialize GL emulation.");
@@ -348,9 +348,7 @@
}
#endif
- fb->m_guestUsesAngle = fb->m_features.GuestUsesAngle.enabled;
-
- fb->m_useVulkanComposition = fb->m_features.GuestUsesAngle.enabled ||
+ fb->m_useVulkanComposition = fb->m_features.GuestVulkanOnly.enabled ||
fb->m_features.VulkanNativeSwapchain.enabled;
std::unique_ptr<VkEmulationFeatures> vkEmulationFeatures =
@@ -369,7 +367,7 @@
.astcLdrEmulationMode = AstcEmulationMode::Gpu,
.enableEtc2Emulation = true,
.enableYcbcrEmulation = false,
- .guestUsesAngle = fb->m_guestUsesAngle,
+ .guestVulkanOnly = fb->m_features.GuestVulkanOnly.enabled,
.useDedicatedAllocations = false, // Set later.
});
@@ -378,7 +376,7 @@
// current-context when asked for them.
//
bool useVulkanGraphicsDiagInfo =
- vkEmu && fb->m_features.VulkanNativeSwapchain.enabled && fb->m_guestUsesAngle;
+ vkEmu && fb->m_features.VulkanNativeSwapchain.enabled && fb->m_features.GuestVulkanOnly.enabled;
if (useVulkanGraphicsDiagInfo) {
fb->m_graphicsAdapterVendor = vkEmu->deviceInfo.driverVendor;
@@ -1706,7 +1704,7 @@
bool FrameBuffer::post(HandleType p_colorbuffer, bool needLockAndBind) {
#if GFXSTREAM_ENABLE_HOST_GLES
- if (m_guestUsesAngle) {
+ if (m_features.GuestVulkanOnly.enabled) {
flushColorBufferFromGl(p_colorbuffer);
}
#endif
@@ -1719,7 +1717,7 @@
void FrameBuffer::postWithCallback(HandleType p_colorbuffer, Post::CompletionCallback callback,
bool needLockAndBind) {
#if GFXSTREAM_ENABLE_HOST_GLES
- if (m_guestUsesAngle) {
+ if (m_features.GuestVulkanOnly.enabled) {
flushColorBufferFromGl(p_colorbuffer);
}
#endif
diff --git a/host/FrameBuffer.h b/host/FrameBuffer.h
index 5a6e099..52104df 100644
--- a/host/FrameBuffer.h
+++ b/host/FrameBuffer.h
@@ -848,7 +848,6 @@
bool m_vulkanInteropSupported = false;
bool m_vulkanEnabled = false;
- bool m_guestUsesAngle = false;
// Whether the guest manages ColorBuffer lifetime
// so we don't need refcounting on the host side.
bool m_guestManagedColorBufferLifetime = false;
diff --git a/host/RenderThread.cpp b/host/RenderThread.cpp
index 2f5aa3a..8a83803 100644
--- a/host/RenderThread.cpp
+++ b/host/RenderThread.cpp
@@ -273,7 +273,7 @@
//
// initialize decoders
#if GFXSTREAM_ENABLE_HOST_GLES
- if (!FrameBuffer::getFB()->getFeatures().GuestUsesAngle.enabled) {
+ if (!FrameBuffer::getFB()->getFeatures().GuestVulkanOnly.enabled) {
tInfo.initGl();
}
diff --git a/host/features/include/gfxstream/host/Features.h b/host/features/include/gfxstream/host/Features.h
index e6a7024..c17fac4 100644
--- a/host/features/include/gfxstream/host/Features.h
+++ b/host/features/include/gfxstream/host/Features.h
@@ -114,10 +114,12 @@
"a guest app may directly writing to gralloc buffers and posting.",
&map,
};
- FeatureInfo GuestUsesAngle = {
- "GuestUsesAngle",
- "If enabled, indicates that the guest will not use GL and the host will not "
- "enable the GL backend.",
+ FeatureInfo GuestVulkanOnly = {
+ "GuestVulkanOnly",
+ "If enabled, indicates that the guest only requires Vulkan translation. "
+ " The guest will not use GL and the host will not enable the GL backend. "
+ " This is the case when the guest uses libraries such as Angle or Zink for "
+ " GL to Vulkan translation.",
&map,
};
FeatureInfo HasSharedSlotsHostMemoryAllocator = {
diff --git a/host/virtio-gpu-gfxstream-renderer.cpp b/host/virtio-gpu-gfxstream-renderer.cpp
index 22faee6..89ad5cc 100644
--- a/host/virtio-gpu-gfxstream-renderer.cpp
+++ b/host/virtio-gpu-gfxstream-renderer.cpp
@@ -2522,7 +2522,7 @@
GFXSTREAM_SET_FEATURE_ON_CONDITION(
&features, GlPipeChecksum, false);
GFXSTREAM_SET_FEATURE_ON_CONDITION(
- &features, GuestUsesAngle,
+ &features, GuestVulkanOnly,
(renderer_flags & STREAM_RENDERER_FLAGS_USE_VK_BIT) &&
!(renderer_flags & STREAM_RENDERER_FLAGS_USE_GLES_BIT));
GFXSTREAM_SET_FEATURE_ON_CONDITION(
diff --git a/host/vulkan/VkAndroidNativeBuffer.cpp b/host/vulkan/VkAndroidNativeBuffer.cpp
index a3601c1..ce1563f 100644
--- a/host/vulkan/VkAndroidNativeBuffer.cpp
+++ b/host/vulkan/VkAndroidNativeBuffer.cpp
@@ -153,7 +153,7 @@
}
out->useVulkanNativeImage =
- (emu && emu->live && emu->guestUsesAngle) || colorBufferExportedToGl;
+ (emu && emu->live && emu->guestVulkanOnly) || colorBufferExportedToGl;
VkDeviceSize bindOffset = 0;
if (out->externallyBacked) {
diff --git a/host/vulkan/VkCommonOperations.cpp b/host/vulkan/VkCommonOperations.cpp
index 9643bc3..05851be 100644
--- a/host/vulkan/VkCommonOperations.cpp
+++ b/host/vulkan/VkCommonOperations.cpp
@@ -1369,7 +1369,7 @@
INFO(" ASTC LDR emulation mode: %d", features->astcLdrEmulationMode);
INFO(" enable ETC2 emulation: %s", features->enableEtc2Emulation ? "true" : "false");
INFO(" enable Ycbcr emulation: %s", features->enableYcbcrEmulation ? "true" : "false");
- INFO(" guestUsesAngle: %s", features->guestUsesAngle ? "true" : "false");
+ INFO(" guestVulkanOnly: %s", features->guestVulkanOnly ? "true" : "false");
INFO(" useDedicatedAllocations: %s", features->useDedicatedAllocations ? "true" : "false");
sVkEmulation->deviceInfo.glInteropSupported = features->glInteropSupported;
sVkEmulation->useDeferredCommands = features->deferredCommands;
@@ -1378,7 +1378,7 @@
sVkEmulation->astcLdrEmulationMode = features->astcLdrEmulationMode;
sVkEmulation->enableEtc2Emulation = features->enableEtc2Emulation;
sVkEmulation->enableYcbcrEmulation = features->enableYcbcrEmulation;
- sVkEmulation->guestUsesAngle = features->guestUsesAngle;
+ sVkEmulation->guestVulkanOnly = features->guestVulkanOnly;
sVkEmulation->useDedicatedAllocations = features->useDedicatedAllocations;
if (features->useVulkanComposition) {
diff --git a/host/vulkan/VkCommonOperations.h b/host/vulkan/VkCommonOperations.h
index 430233b..cb53bf2 100644
--- a/host/vulkan/VkCommonOperations.h
+++ b/host/vulkan/VkCommonOperations.h
@@ -125,7 +125,7 @@
// conversion or not.
bool enableYcbcrEmulation = false;
- bool guestUsesAngle = false;
+ bool guestVulkanOnly = false;
bool useDedicatedAllocations = false;
@@ -445,7 +445,7 @@
AstcEmulationMode astcLdrEmulationMode = AstcEmulationMode::Disabled;
bool enableEtc2Emulation = false;
bool enableYcbcrEmulation = false;
- bool guestUsesAngle = false;
+ bool guestVulkanOnly = false;
bool useDedicatedAllocations = false;
};
void initVkEmulationFeatures(std::unique_ptr<VkEmulationFeatures>);
diff --git a/host/vulkan/VkDecoderGlobalState.cpp b/host/vulkan/VkDecoderGlobalState.cpp
index 3022974..40c2918 100644
--- a/host/vulkan/VkDecoderGlobalState.cpp
+++ b/host/vulkan/VkDecoderGlobalState.cpp
@@ -372,7 +372,6 @@
.control_get_hw_funcs()
->getPhysAddrStartLocked();
}
- mGuestUsesAngle = m_emu->features.GuestUsesAngle.enabled;
}
~Impl() = default;
@@ -4396,8 +4395,6 @@
void* mappedPtr = nullptr;
ManagedDescriptor externalMemoryHandle;
if (importCbInfoPtr) {
- bool vulkanOnly = mGuestUsesAngle;
-
bool colorBufferMemoryUsesDedicatedAlloc = false;
if (!getColorBufferAllocationInfo(importCbInfoPtr->colorBuffer,
&localAllocInfo.allocationSize,
@@ -4410,7 +4407,7 @@
shouldUseDedicatedAllocInfo &= colorBufferMemoryUsesDedicatedAlloc;
- if (!vulkanOnly) {
+ if (!m_emu->features.GuestVulkanOnly.enabled) {
auto fb = FrameBuffer::getFB();
if (fb) {
fb->invalidateColorBufferForVk(importCbInfoPtr->colorBuffer);
@@ -5375,8 +5372,7 @@
std::unordered_set<HandleType> acquiredColorBuffers;
std::unordered_set<HandleType> releasedColorBuffers;
- bool vulkanOnly = mGuestUsesAngle;
- if (!vulkanOnly) {
+ if (!m_emu->features.GuestVulkanOnly.enabled) {
{
std::lock_guard<std::recursive_mutex> lock(mLock);
for (int i = 0; i < submitCount; i++) {
@@ -7780,7 +7776,6 @@
bool mLogging = false;
bool mVerbosePrints = false;
bool mUseOldMemoryCleanupPath = false;
- bool mGuestUsesAngle = false;
std::recursive_mutex mLock;