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,