diff options
| author | 2021-04-11 02:07:02 -0400 | |
|---|---|---|
| committer | 2021-07-22 21:51:27 -0400 | |
| commit | 3db2b3effa953ae66457b7a19b419fc4db2c4801 (patch) | |
| tree | 04c73897a74be053a610edf60703c72e985ee590 /src/video_core/vulkan_common | |
| parent | nsight_aftermath_tracker: Report used shaders to Nsight Aftermath (diff) | |
| download | yuzu-3db2b3effa953ae66457b7a19b419fc4db2c4801.tar.gz yuzu-3db2b3effa953ae66457b7a19b419fc4db2c4801.tar.xz yuzu-3db2b3effa953ae66457b7a19b419fc4db2c4801.zip | |
shader: Implement ATOM/S and RED
Diffstat (limited to 'src/video_core/vulkan_common')
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.cpp | 14 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.h | 6 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 78bb741bc..911dfed44 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp | |||
| @@ -681,6 +681,7 @@ std::vector<const char*> Device::LoadExtensions(bool requires_surface) { | |||
| 681 | bool has_ext_transform_feedback{}; | 681 | bool has_ext_transform_feedback{}; |
| 682 | bool has_ext_custom_border_color{}; | 682 | bool has_ext_custom_border_color{}; |
| 683 | bool has_ext_extended_dynamic_state{}; | 683 | bool has_ext_extended_dynamic_state{}; |
| 684 | bool has_ext_shader_atomic_int64{}; | ||
| 684 | for (const VkExtensionProperties& extension : physical.EnumerateDeviceExtensionProperties()) { | 685 | for (const VkExtensionProperties& extension : physical.EnumerateDeviceExtensionProperties()) { |
| 685 | const auto test = [&](std::optional<std::reference_wrapper<bool>> status, const char* name, | 686 | const auto test = [&](std::optional<std::reference_wrapper<bool>> status, const char* name, |
| 686 | bool push) { | 687 | bool push) { |
| @@ -710,6 +711,7 @@ std::vector<const char*> Device::LoadExtensions(bool requires_surface) { | |||
| 710 | test(has_ext_custom_border_color, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, false); | 711 | test(has_ext_custom_border_color, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, false); |
| 711 | test(has_ext_extended_dynamic_state, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, false); | 712 | test(has_ext_extended_dynamic_state, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, false); |
| 712 | test(has_ext_subgroup_size_control, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, false); | 713 | test(has_ext_subgroup_size_control, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, false); |
| 714 | test(has_ext_shader_atomic_int64, VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME, false); | ||
| 713 | test(has_khr_workgroup_memory_explicit_layout, | 715 | test(has_khr_workgroup_memory_explicit_layout, |
| 714 | VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME, false); | 716 | VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME, false); |
| 715 | if (Settings::values.renderer_debug) { | 717 | if (Settings::values.renderer_debug) { |
| @@ -760,6 +762,18 @@ std::vector<const char*> Device::LoadExtensions(bool requires_surface) { | |||
| 760 | } else { | 762 | } else { |
| 761 | is_warp_potentially_bigger = true; | 763 | is_warp_potentially_bigger = true; |
| 762 | } | 764 | } |
| 765 | if (has_ext_shader_atomic_int64) { | ||
| 766 | VkPhysicalDeviceShaderAtomicInt64Features atomic_int64; | ||
| 767 | atomic_int64.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT; | ||
| 768 | atomic_int64.pNext = nullptr; | ||
| 769 | features.pNext = &atomic_int64; | ||
| 770 | physical.GetFeatures2KHR(features); | ||
| 771 | |||
| 772 | if (atomic_int64.shaderBufferInt64Atomics && atomic_int64.shaderSharedInt64Atomics) { | ||
| 773 | extensions.push_back(VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME); | ||
| 774 | ext_shader_atomic_int64 = true; | ||
| 775 | } | ||
| 776 | } | ||
| 763 | if (has_ext_transform_feedback) { | 777 | if (has_ext_transform_feedback) { |
| 764 | VkPhysicalDeviceTransformFeedbackFeaturesEXT tfb_features; | 778 | VkPhysicalDeviceTransformFeedbackFeaturesEXT tfb_features; |
| 765 | tfb_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT; | 779 | tfb_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT; |
diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index adf62a707..4e6d13308 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h | |||
| @@ -229,6 +229,11 @@ public: | |||
| 229 | return ext_shader_stencil_export; | 229 | return ext_shader_stencil_export; |
| 230 | } | 230 | } |
| 231 | 231 | ||
| 232 | /// Returns true if the device supports VK_KHR_shader_atomic_int64. | ||
| 233 | bool IsExtShaderAtomicInt64Supported() const { | ||
| 234 | return ext_shader_atomic_int64; | ||
| 235 | } | ||
| 236 | |||
| 232 | /// Returns true when a known debugging tool is attached. | 237 | /// Returns true when a known debugging tool is attached. |
| 233 | bool HasDebuggingToolAttached() const { | 238 | bool HasDebuggingToolAttached() const { |
| 234 | return has_renderdoc || has_nsight_graphics; | 239 | return has_renderdoc || has_nsight_graphics; |
| @@ -320,6 +325,7 @@ private: | |||
| 320 | bool ext_custom_border_color{}; ///< Support for VK_EXT_custom_border_color. | 325 | bool ext_custom_border_color{}; ///< Support for VK_EXT_custom_border_color. |
| 321 | bool ext_extended_dynamic_state{}; ///< Support for VK_EXT_extended_dynamic_state. | 326 | bool ext_extended_dynamic_state{}; ///< Support for VK_EXT_extended_dynamic_state. |
| 322 | bool ext_shader_stencil_export{}; ///< Support for VK_EXT_shader_stencil_export. | 327 | bool ext_shader_stencil_export{}; ///< Support for VK_EXT_shader_stencil_export. |
| 328 | bool ext_shader_atomic_int64{}; ///< Support for VK_KHR_shader_atomic_int64. | ||
| 323 | bool nv_device_diagnostics_config{}; ///< Support for VK_NV_device_diagnostics_config. | 329 | bool nv_device_diagnostics_config{}; ///< Support for VK_NV_device_diagnostics_config. |
| 324 | bool has_renderdoc{}; ///< Has RenderDoc attached | 330 | bool has_renderdoc{}; ///< Has RenderDoc attached |
| 325 | bool has_nsight_graphics{}; ///< Has Nsight Graphics attached | 331 | bool has_nsight_graphics{}; ///< Has Nsight Graphics attached |