diff options
| author | 2021-06-12 05:07:52 -0300 | |
|---|---|---|
| committer | 2021-07-22 21:51:35 -0400 | |
| commit | ea038d66538975319858f792052af1d0fa997fe3 (patch) | |
| tree | 472905d458f31cdcfffcf45a41c276f91094d1b4 /src/video_core/vulkan_common | |
| parent | shader: Reorder shader cache directories (diff) | |
| download | yuzu-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.h | 6 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_wrapper.cpp | 1 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_wrapper.h | 8 |
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 { |