summaryrefslogtreecommitdiff
path: root/src/video_core
diff options
context:
space:
mode:
authorGravatar ameerj2021-03-23 20:27:17 -0400
committerGravatar ameerj2021-07-22 21:51:24 -0400
commit3d07cef009cf9e287744c7771c67166ef5761ce8 (patch)
tree78f4fea18d9facb72850b4c2fe115e96b7af8f26 /src/video_core
parentvk_pipeline_cache: Fix ReleaseContents order (diff)
downloadyuzu-3d07cef009cf9e287744c7771c67166ef5761ce8.tar.gz
yuzu-3d07cef009cf9e287744c7771c67166ef5761ce8.tar.xz
yuzu-3d07cef009cf9e287744c7771c67166ef5761ce8.zip
shader: Implement VOTE
Diffstat (limited to 'src/video_core')
-rw-r--r--src/video_core/renderer_vulkan/vk_compute_pipeline.cpp7
-rw-r--r--src/video_core/renderer_vulkan/vk_pipeline_cache.cpp2
-rw-r--r--src/video_core/vulkan_common/vulkan_device.cpp1
-rw-r--r--src/video_core/vulkan_common/vulkan_device.h6
4 files changed, 15 insertions, 1 deletions
diff --git a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
index 6684d37a6..8e544d745 100644
--- a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
+++ b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
@@ -36,13 +36,18 @@ ComputePipeline::ComputePipeline(const Device& device, VKDescriptorPool& descrip
36 descriptor_update_template = std::move(tuple.descriptor_update_template); 36 descriptor_update_template = std::move(tuple.descriptor_update_template);
37 descriptor_allocator = DescriptorAllocator(descriptor_pool, *descriptor_set_layout); 37 descriptor_allocator = DescriptorAllocator(descriptor_pool, *descriptor_set_layout);
38 38
39 const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT subgroup_size_ci{
40 .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT,
41 .pNext = nullptr,
42 .requiredSubgroupSize = GuestWarpSize,
43 };
39 pipeline = device.GetLogical().CreateComputePipeline({ 44 pipeline = device.GetLogical().CreateComputePipeline({
40 .sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, 45 .sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,
41 .pNext = nullptr, 46 .pNext = nullptr,
42 .flags = 0, 47 .flags = 0,
43 .stage{ 48 .stage{
44 .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, 49 .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
45 .pNext = nullptr, 50 .pNext = device.IsExtSubgroupSizeControlSupported() ? &subgroup_size_ci : nullptr,
46 .flags = 0, 51 .flags = 0,
47 .stage = VK_SHADER_STAGE_COMPUTE_BIT, 52 .stage = VK_SHADER_STAGE_COMPUTE_BIT,
48 .module = *spv_module, 53 .module = *spv_module,
diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
index 41fc9588f..bdbc8dd1e 100644
--- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
@@ -455,6 +455,8 @@ PipelineCache::PipelineCache(RasterizerVulkan& rasterizer_, Tegra::GPU& gpu_,
455 float_control.shaderSignedZeroInfNanPreserveFloat32 != VK_FALSE, 455 float_control.shaderSignedZeroInfNanPreserveFloat32 != VK_FALSE,
456 .support_fp64_signed_zero_nan_preserve = 456 .support_fp64_signed_zero_nan_preserve =
457 float_control.shaderSignedZeroInfNanPreserveFloat64 != VK_FALSE, 457 float_control.shaderSignedZeroInfNanPreserveFloat64 != VK_FALSE,
458 .support_vote = true,
459 .warp_size_potentially_larger_than_guest = device.IsWarpSizePotentiallyBiggerThanGuest(),
458 .has_broken_spirv_clamp = driver_id == VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR, 460 .has_broken_spirv_clamp = driver_id == VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR,
459 }; 461 };
460} 462}
diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp
index f0e5b098c..009b74f12 100644
--- a/src/video_core/vulkan_common/vulkan_device.cpp
+++ b/src/video_core/vulkan_common/vulkan_device.cpp
@@ -737,6 +737,7 @@ std::vector<const char*> Device::LoadExtensions(bool requires_surface) {
737 subgroup_properties.maxSubgroupSize >= GuestWarpSize) { 737 subgroup_properties.maxSubgroupSize >= GuestWarpSize) {
738 extensions.push_back(VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME); 738 extensions.push_back(VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME);
739 guest_warp_stages = subgroup_properties.requiredSubgroupSizeStages; 739 guest_warp_stages = subgroup_properties.requiredSubgroupSizeStages;
740 ext_subgroup_size_control = true;
740 } 741 }
741 } else { 742 } else {
742 is_warp_potentially_bigger = true; 743 is_warp_potentially_bigger = true;
diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h
index 82bccc8f0..c268a4f8d 100644
--- a/src/video_core/vulkan_common/vulkan_device.h
+++ b/src/video_core/vulkan_common/vulkan_device.h
@@ -193,6 +193,11 @@ public:
193 return ext_shader_viewport_index_layer; 193 return ext_shader_viewport_index_layer;
194 } 194 }
195 195
196 /// Returns true if the device supports VK_EXT_subgroup_size_control.
197 bool IsExtSubgroupSizeControlSupported() const {
198 return ext_subgroup_size_control;
199 }
200
196 /// Returns true if the device supports VK_EXT_transform_feedback. 201 /// Returns true if the device supports VK_EXT_transform_feedback.
197 bool IsExtTransformFeedbackSupported() const { 202 bool IsExtTransformFeedbackSupported() const {
198 return ext_transform_feedback; 203 return ext_transform_feedback;
@@ -297,6 +302,7 @@ private:
297 bool ext_depth_range_unrestricted{}; ///< Support for VK_EXT_depth_range_unrestricted. 302 bool ext_depth_range_unrestricted{}; ///< Support for VK_EXT_depth_range_unrestricted.
298 bool ext_shader_viewport_index_layer{}; ///< Support for VK_EXT_shader_viewport_index_layer. 303 bool ext_shader_viewport_index_layer{}; ///< Support for VK_EXT_shader_viewport_index_layer.
299 bool ext_tooling_info{}; ///< Support for VK_EXT_tooling_info. 304 bool ext_tooling_info{}; ///< Support for VK_EXT_tooling_info.
305 bool ext_subgroup_size_control{}; ///< Support for VK_EXT_subgroup_size_control.
300 bool ext_transform_feedback{}; ///< Support for VK_EXT_transform_feedback. 306 bool ext_transform_feedback{}; ///< Support for VK_EXT_transform_feedback.
301 bool ext_custom_border_color{}; ///< Support for VK_EXT_custom_border_color. 307 bool ext_custom_border_color{}; ///< Support for VK_EXT_custom_border_color.
302 bool ext_extended_dynamic_state{}; ///< Support for VK_EXT_extended_dynamic_state. 308 bool ext_extended_dynamic_state{}; ///< Support for VK_EXT_extended_dynamic_state.