From ef96bde8b0fff13517c65e6a35d291ae65c4d505 Mon Sep 17 00:00:00 2001 From: Cody Northrop Date: Sat, 28 Aug 2021 23:59:33 -0600 Subject: [PATCH] Vulkan: Fix VVL error regarding geometryStreams Addresses new validation error: [ VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-geometryStreams-02324 ] Validation Error: [ VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-geometryStreams-02324 ] Object 0: handle = 0xb400007e8176af60, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xf1034461 | pCreateInfos[0].pRasterizationState pNext chain includes VkPipelineRasterizationStateStreamCreateInfoEXT, but geometryStreams feature is not enabled. The Vulkan spec states: VkPhysicalDeviceTransformFeedbackFeaturesEXT::geometryStreams must be enabled (https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-geometryStreams-02324) The validation was added in this commit: https://github.com/KhronosGroup/Vulkan-ValidationLayers/commit/bdaec8454a27e65dd81f46bbfad1889b7a3e34f6 Test: World of Kings MEC Bug: b/198101940 Bug: angleproject:6339 Change-Id: I3cfacc20d231d246500e83451c9ec6b74d9372f2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3127942 Reviewed-by: Shahbaz Youssefi Commit-Queue: Cody Northrop --- include/platform/FeaturesVk.h | 5 +++++ src/libANGLE/renderer/vulkan/RendererVk.cpp | 3 +++ src/libANGLE/renderer/vulkan/vk_cache_utils.cpp | 2 +- util/EGLWindow.cpp | 1 + 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/include/platform/FeaturesVk.h b/include/platform/FeaturesVk.h index 321c1e812..5289c004c 100644 --- a/include/platform/FeaturesVk.h +++ b/include/platform/FeaturesVk.h @@ -199,6 +199,11 @@ struct FeaturesVk : FeatureSetBase "Transform feedback uses the VK_EXT_transform_feedback extension.", &members, "http://anglebug.com/3206"}; + Feature supportsGeometryStreamsCapability = { + "supportsGeometryStreamsCapability", FeatureCategory::VulkanFeatures, + "Implementation supports the GeometryStreams SPIR-V capability.", &members, + "http://anglebug.com/3206"}; + // Whether the VkDevice supports the VK_EXT_index_type_uint8 extension // http://anglebug.com/4405 Feature supportsIndexTypeUint8 = {"supportsIndexTypeUint8", FeatureCategory::VulkanFeatures, diff --git a/src/libANGLE/renderer/vulkan/RendererVk.cpp b/src/libANGLE/renderer/vulkan/RendererVk.cpp index 9f01bd1a6..36b1590ec 100644 --- a/src/libANGLE/renderer/vulkan/RendererVk.cpp +++ b/src/libANGLE/renderer/vulkan/RendererVk.cpp @@ -2368,6 +2368,9 @@ void RendererVk::initFeatures(DisplayVk *displayVk, ANGLE_FEATURE_CONDITION(&mFeatures, supportsTransformFeedbackExtension, mTransformFeedbackFeatures.transformFeedback == VK_TRUE); + ANGLE_FEATURE_CONDITION(&mFeatures, supportsGeometryStreamsCapability, + mTransformFeedbackFeatures.geometryStreams == VK_TRUE); + ANGLE_FEATURE_CONDITION(&mFeatures, supportsIndexTypeUint8, mIndexTypeUint8Features.indexTypeUint8 == VK_TRUE); diff --git a/src/libANGLE/renderer/vulkan/vk_cache_utils.cpp b/src/libANGLE/renderer/vulkan/vk_cache_utils.cpp index 6d7091d1f..2e0145963 100644 --- a/src/libANGLE/renderer/vulkan/vk_cache_utils.cpp +++ b/src/libANGLE/renderer/vulkan/vk_cache_utils.cpp @@ -1957,7 +1957,7 @@ angle::Result GraphicsPipelineDesc::initializePipeline( VkPipelineRasterizationStateStreamCreateInfoEXT rasterStreamState = {}; rasterStreamState.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT; - if (contextVk->getFeatures().supportsTransformFeedbackExtension.enabled) + if (contextVk->getFeatures().supportsGeometryStreamsCapability.enabled) { rasterStreamState.rasterizationStream = 0; *pNextPtr = &rasterStreamState; diff --git a/util/EGLWindow.cpp b/util/EGLWindow.cpp index 082619331..bf716860c 100644 --- a/util/EGLWindow.cpp +++ b/util/EGLWindow.cpp @@ -202,6 +202,7 @@ bool EGLWindow::initializeDisplay(OSWindow *osWindow, if (params.transformFeedbackFeature == EGL_FALSE) { disabledFeatureOverrides.push_back("supportsTransformFeedbackExtension"); + disabledFeatureOverrides.push_back("supportsGeometryStreamsCapability"); disabledFeatureOverrides.push_back("emulateTransformFeedback"); }