Vulkan: remove dependency to inheritedQueries If using vk::priv::SecondaryCommandBuffer. This would allow ES3 support where inheritedQueries is not supported. Bug: angleproject:3136 Change-Id: I10508058301ea6da8f3415cfdcc052500a67f810 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1538829 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tobin Ehlis <tobine@google.com>
diff --git a/src/libANGLE/renderer/vulkan/CommandGraph.cpp b/src/libANGLE/renderer/vulkan/CommandGraph.cpp index 8d2072e..ab244bd 100644 --- a/src/libANGLE/renderer/vulkan/CommandGraph.cpp +++ b/src/libANGLE/renderer/vulkan/CommandGraph.cpp
@@ -320,7 +320,7 @@ inheritanceInfo.subpass = 0; inheritanceInfo.framebuffer = VK_NULL_HANDLE; inheritanceInfo.occlusionQueryEnable = - context->getRenderer()->getPhysicalDeviceFeatures().inheritedQueries; + CommandBuffer::SupportsQueries(context->getRenderer()->getPhysicalDeviceFeatures()); inheritanceInfo.queryFlags = 0; inheritanceInfo.pipelineStatistics = 0; @@ -348,7 +348,7 @@ inheritanceInfo.subpass = 0; inheritanceInfo.framebuffer = mRenderPassFramebuffer.getHandle(); inheritanceInfo.occlusionQueryEnable = - context->getRenderer()->getPhysicalDeviceFeatures().inheritedQueries; + CommandBuffer::SupportsQueries(context->getRenderer()->getPhysicalDeviceFeatures()); inheritanceInfo.queryFlags = 0; inheritanceInfo.pipelineStatistics = 0;
diff --git a/src/libANGLE/renderer/vulkan/RendererVk.cpp b/src/libANGLE/renderer/vulkan/RendererVk.cpp index 0347b39..45a3cf7 100644 --- a/src/libANGLE/renderer/vulkan/RendererVk.cpp +++ b/src/libANGLE/renderer/vulkan/RendererVk.cpp
@@ -1141,8 +1141,8 @@ maxVersion = gl::Version(2, 0); #endif - // Vulkan inherited queries are required to support any GL query type - if (!mPhysicalDeviceFeatures.inheritedQueries) + // If the command buffer doesn't support queries, we can't support ES3. + if (!vk::CommandBuffer::SupportsQueries(mPhysicalDeviceFeatures)) { maxVersion = std::max(maxVersion, gl::Version(2, 0)); }
diff --git a/src/libANGLE/renderer/vulkan/SecondaryCommandBuffer.h b/src/libANGLE/renderer/vulkan/SecondaryCommandBuffer.h index 3aa66ec..951150b 100644 --- a/src/libANGLE/renderer/vulkan/SecondaryCommandBuffer.h +++ b/src/libANGLE/renderer/vulkan/SecondaryCommandBuffer.h
@@ -328,6 +328,8 @@ SecondaryCommandBuffer(); ~SecondaryCommandBuffer(); + static bool SupportsQueries(const VkPhysicalDeviceFeatures &features) { return true; } + // Add commands void beginQuery(VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags);
diff --git a/src/libANGLE/renderer/vulkan/vk_caps_utils.cpp b/src/libANGLE/renderer/vulkan/vk_caps_utils.cpp index 4374bb5..49bdbac 100644 --- a/src/libANGLE/renderer/vulkan/vk_caps_utils.cpp +++ b/src/libANGLE/renderer/vulkan/vk_caps_utils.cpp
@@ -68,7 +68,8 @@ // We use secondary command buffers almost everywhere and they require a feature to be // able to execute in the presence of queries. As a result, we won't support queries // unless that feature is available. - mNativeExtensions.occlusionQueryBoolean = mPhysicalDeviceFeatures.inheritedQueries; + mNativeExtensions.occlusionQueryBoolean = + vk::CommandBuffer::SupportsQueries(mPhysicalDeviceFeatures); // From the Vulkan specs: // > The number of valid bits in a timestamp value is determined by the
diff --git a/src/libANGLE/renderer/vulkan/vk_wrapper.h b/src/libANGLE/renderer/vulkan/vk_wrapper.h index f8bc474..e1c1fbe 100644 --- a/src/libANGLE/renderer/vulkan/vk_wrapper.h +++ b/src/libANGLE/renderer/vulkan/vk_wrapper.h
@@ -172,6 +172,11 @@ using WrappedObject::operator=; + static bool SupportsQueries(const VkPhysicalDeviceFeatures &features) + { + return features.inheritedQueries; + } + VkResult begin(const VkCommandBufferBeginInfo &info); void beginQuery(VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags);