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 <syoussefi@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
diff --git a/include/platform/FeaturesVk.h b/include/platform/FeaturesVk.h
index 321c1e8..5289c00 100644
--- a/include/platform/FeaturesVk.h
+++ b/include/platform/FeaturesVk.h
@@ -199,6 +199,11 @@
"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 9f01bd1..36b1590 100644
--- a/src/libANGLE/renderer/vulkan/RendererVk.cpp
+++ b/src/libANGLE/renderer/vulkan/RendererVk.cpp
@@ -2368,6 +2368,9 @@
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 6d7091d..2e01459 100644
--- a/src/libANGLE/renderer/vulkan/vk_cache_utils.cpp
+++ b/src/libANGLE/renderer/vulkan/vk_cache_utils.cpp
@@ -1957,7 +1957,7 @@
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 0826193..bf71686 100644
--- a/util/EGLWindow.cpp
+++ b/util/EGLWindow.cpp
@@ -202,6 +202,7 @@
if (params.transformFeedbackFeature == EGL_FALSE)
{
disabledFeatureOverrides.push_back("supportsTransformFeedbackExtension");
+ disabledFeatureOverrides.push_back("supportsGeometryStreamsCapability");
disabledFeatureOverrides.push_back("emulateTransformFeedback");
}