Vulkan: Add a feature related to shader subsets
On vendors that support VK_EXT_graphics_pipeline_library the shaders
subset of the pipeline can either be combined into a single pipeline
or can be decoupled into separate pipelines. Upcoming optimizations
require the ability to distinguish between the two options.
Add a feature declaring support for only the combined variant.
Bug: angleproject:8601
Change-Id: I44fb828d972ca6ebba5549819ce8e41645683e14
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5484673
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
diff --git a/include/platform/autogen/FeaturesVk_autogen.h b/include/platform/autogen/FeaturesVk_autogen.h
index 200f0f0..205aa94 100644
--- a/include/platform/autogen/FeaturesVk_autogen.h
+++ b/include/platform/autogen/FeaturesVk_autogen.h
@@ -1366,6 +1366,15 @@
&members, "http://anglebug.com/8549"
};
+ FeatureInfo combineAllShadersInPipelineLibrary = {
+ "combineAllShadersInPipelineLibrary",
+ FeatureCategory::VulkanFeatures,
+ "For Vulkan ICDs that support VK_EXT_graphics_pipeline_library the shaders subset of the pipeline"
+ "can either be combined into a single pipeline or can be decoupled into separate pipelines. This feature"
+ "is enabled when the former is the case.",
+ &members, "http://anglebug.com/8601"
+ };
+
};
inline FeaturesVk::FeaturesVk() = default;
diff --git a/include/platform/vk_features.json b/include/platform/vk_features.json
index 0315ffb..8579060 100644
--- a/include/platform/vk_features.json
+++ b/include/platform/vk_features.json
@@ -1488,6 +1488,16 @@
"Enable non-semantic info inside shader module via VK_KHR_shader_non_semantic_info extension"
],
"issue": "http://anglebug.com/8549"
+ },
+ {
+ "name": "combine_all_shaders_in_pipeline_library",
+ "category": "Features",
+ "description": [
+ "For Vulkan ICDs that support VK_EXT_graphics_pipeline_library the shaders subset of the pipeline",
+ "can either be combined into a single pipeline or can be decoupled into separate pipelines. This feature",
+ "is enabled when the former is the case."
+ ],
+ "issue": "http://anglebug.com/8601"
}
]
-}
\ No newline at end of file
+}
diff --git a/src/libANGLE/renderer/vulkan/vk_renderer.cpp b/src/libANGLE/renderer/vulkan/vk_renderer.cpp
index da63d68..1173c5a 100644
--- a/src/libANGLE/renderer/vulkan/vk_renderer.cpp
+++ b/src/libANGLE/renderer/vulkan/vk_renderer.cpp
@@ -4792,6 +4792,9 @@
mGraphicsPipelineLibraryFeatures.graphicsPipelineLibrary == VK_TRUE &&
(!isNvidia || nvidiaVersion.major >= 531) && !isRADV);
+ // By default all shaders are compiled into the same pipeline library
+ ANGLE_FEATURE_CONDITION(&mFeatures, combineAllShadersInPipelineLibrary, true);
+
// The following drivers are known to key the pipeline cache blobs with vertex input and
// fragment output state, causing draw-time pipeline creation to miss the cache regardless of
// warmup:
diff --git a/util/autogen/angle_features_autogen.cpp b/util/autogen/angle_features_autogen.cpp
index e5c1e19..6783168 100644
--- a/util/autogen/angle_features_autogen.cpp
+++ b/util/autogen/angle_features_autogen.cpp
@@ -68,6 +68,7 @@
{Feature::ClearsWithGapsNeedFlush, "clearsWithGapsNeedFlush"},
{Feature::ClearToZeroOrOneBroken, "clearToZeroOrOneBroken"},
{Feature::ClipSrcRegionForBlitFramebuffer, "clipSrcRegionForBlitFramebuffer"},
+ {Feature::CombineAllShadersInPipelineLibrary, "combineAllShadersInPipelineLibrary"},
{Feature::CompileJobIsThreadSafe, "compileJobIsThreadSafe"},
{Feature::CompileMetalShaders, "compileMetalShaders"},
{Feature::CompressVertexData, "compressVertexData"},
diff --git a/util/autogen/angle_features_autogen.h b/util/autogen/angle_features_autogen.h
index 0d969f7..3e7a582 100644
--- a/util/autogen/angle_features_autogen.h
+++ b/util/autogen/angle_features_autogen.h
@@ -68,6 +68,7 @@
ClearsWithGapsNeedFlush,
ClearToZeroOrOneBroken,
ClipSrcRegionForBlitFramebuffer,
+ CombineAllShadersInPipelineLibrary,
CompileJobIsThreadSafe,
CompileMetalShaders,
CompressVertexData,