summaryrefslogtreecommitdiff
path: root/src/video_core/vulkan_common
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-06-12 05:07:52 -0300
committerGravatar ameerj2021-07-22 21:51:35 -0400
commitea038d66538975319858f792052af1d0fa997fe3 (patch)
tree472905d458f31cdcfffcf45a41c276f91094d1b4 /src/video_core/vulkan_common
parentshader: Reorder shader cache directories (diff)
downloadyuzu-ea038d66538975319858f792052af1d0fa997fe3.tar.gz
yuzu-ea038d66538975319858f792052af1d0fa997fe3.tar.xz
yuzu-ea038d66538975319858f792052af1d0fa997fe3.zip
vulkan: Add VK_EXT_vertex_input_dynamic_state support
Reduces the number of total pipelines generated on Vulkan. Tested on Super Smash Bros. Ultimate.
Diffstat (limited to 'src/video_core/vulkan_common')
-rw-r--r--src/video_core/vulkan_common/vulkan_device.h6
-rw-r--r--src/video_core/vulkan_common/vulkan_wrapper.cpp1
-rw-r--r--src/video_core/vulkan_common/vulkan_wrapper.h8
3 files changed, 15 insertions, 0 deletions
diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h
index 37f589612..4fda472b0 100644
--- a/src/video_core/vulkan_common/vulkan_device.h
+++ b/src/video_core/vulkan_common/vulkan_device.h
@@ -239,6 +239,11 @@ public:
239 return ext_extended_dynamic_state; 239 return ext_extended_dynamic_state;
240 } 240 }
241 241
242 /// Returns true if the device supports VK_EXT_vertex_input_dynamic_state.
243 bool IsExtVertexInputDynamicStateSupported() const {
244 return ext_vertex_input_dynamic_state;
245 }
246
242 /// Returns true if the device supports VK_EXT_shader_stencil_export. 247 /// Returns true if the device supports VK_EXT_shader_stencil_export.
243 bool IsExtShaderStencilExportSupported() const { 248 bool IsExtShaderStencilExportSupported() const {
244 return ext_shader_stencil_export; 249 return ext_shader_stencil_export;
@@ -349,6 +354,7 @@ private:
349 bool ext_transform_feedback{}; ///< Support for VK_EXT_transform_feedback. 354 bool ext_transform_feedback{}; ///< Support for VK_EXT_transform_feedback.
350 bool ext_custom_border_color{}; ///< Support for VK_EXT_custom_border_color. 355 bool ext_custom_border_color{}; ///< Support for VK_EXT_custom_border_color.
351 bool ext_extended_dynamic_state{}; ///< Support for VK_EXT_extended_dynamic_state. 356 bool ext_extended_dynamic_state{}; ///< Support for VK_EXT_extended_dynamic_state.
357 bool ext_vertex_input_dynamic_state{}; ///< Support for VK_EXT_vertex_input_dynamic_state.
352 bool ext_shader_stencil_export{}; ///< Support for VK_EXT_shader_stencil_export. 358 bool ext_shader_stencil_export{}; ///< Support for VK_EXT_shader_stencil_export.
353 bool ext_shader_atomic_int64{}; ///< Support for VK_KHR_shader_atomic_int64. 359 bool ext_shader_atomic_int64{}; ///< Support for VK_KHR_shader_atomic_int64.
354 bool ext_provoking_vertex{}; ///< Support for VK_EXT_provoking_vertex. 360 bool ext_provoking_vertex{}; ///< Support for VK_EXT_provoking_vertex.
diff --git a/src/video_core/vulkan_common/vulkan_wrapper.cpp b/src/video_core/vulkan_common/vulkan_wrapper.cpp
index 33fb74bfb..7e13ae8af 100644
--- a/src/video_core/vulkan_common/vulkan_wrapper.cpp
+++ b/src/video_core/vulkan_common/vulkan_wrapper.cpp
@@ -123,6 +123,7 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept {
123 X(vkCmdSetPrimitiveTopologyEXT); 123 X(vkCmdSetPrimitiveTopologyEXT);
124 X(vkCmdSetStencilOpEXT); 124 X(vkCmdSetStencilOpEXT);
125 X(vkCmdSetStencilTestEnableEXT); 125 X(vkCmdSetStencilTestEnableEXT);
126 X(vkCmdSetVertexInputEXT);
126 X(vkCmdResolveImage); 127 X(vkCmdResolveImage);
127 X(vkCreateBuffer); 128 X(vkCreateBuffer);
128 X(vkCreateBufferView); 129 X(vkCreateBufferView);
diff --git a/src/video_core/vulkan_common/vulkan_wrapper.h b/src/video_core/vulkan_common/vulkan_wrapper.h
index 3e36d356a..6e5be1186 100644
--- a/src/video_core/vulkan_common/vulkan_wrapper.h
+++ b/src/video_core/vulkan_common/vulkan_wrapper.h
@@ -238,6 +238,7 @@ struct DeviceDispatch : InstanceDispatch {
238 PFN_vkCmdSetPrimitiveTopologyEXT vkCmdSetPrimitiveTopologyEXT{}; 238 PFN_vkCmdSetPrimitiveTopologyEXT vkCmdSetPrimitiveTopologyEXT{};
239 PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT{}; 239 PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT{};
240 PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT{}; 240 PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT{};
241 PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT{};
241 PFN_vkCmdResolveImage vkCmdResolveImage{}; 242 PFN_vkCmdResolveImage vkCmdResolveImage{};
242 PFN_vkCreateBuffer vkCreateBuffer{}; 243 PFN_vkCreateBuffer vkCreateBuffer{};
243 PFN_vkCreateBufferView vkCreateBufferView{}; 244 PFN_vkCreateBufferView vkCreateBufferView{};
@@ -1203,6 +1204,13 @@ public:
1203 dld->vkCmdSetStencilTestEnableEXT(handle, enable ? VK_TRUE : VK_FALSE); 1204 dld->vkCmdSetStencilTestEnableEXT(handle, enable ? VK_TRUE : VK_FALSE);
1204 } 1205 }
1205 1206
1207 void SetVertexInputEXT(
1208 vk::Span<VkVertexInputBindingDescription2EXT> bindings,
1209 vk::Span<VkVertexInputAttributeDescription2EXT> attributes) const noexcept {
1210 dld->vkCmdSetVertexInputEXT(handle, bindings.size(), bindings.data(), attributes.size(),
1211 attributes.data());
1212 }
1213
1206 void BindTransformFeedbackBuffersEXT(u32 first, u32 count, const VkBuffer* buffers, 1214 void BindTransformFeedbackBuffersEXT(u32 first, u32 count, const VkBuffer* buffers,
1207 const VkDeviceSize* offsets, 1215 const VkDeviceSize* offsets,
1208 const VkDeviceSize* sizes) const noexcept { 1216 const VkDeviceSize* sizes) const noexcept {