summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-02-20 03:30:13 -0300
committerGravatar ameerj2021-07-22 21:51:22 -0400
commite2bc05b17d91854cbb9c0ce3647141bf7d33143e (patch)
tree96769db006b6015cd536483db98ee0697aee4992 /src/video_core/renderer_vulkan
parentspirv: Add lower fp16 to fp32 pass (diff)
downloadyuzu-e2bc05b17d91854cbb9c0ce3647141bf7d33143e.tar.gz
yuzu-e2bc05b17d91854cbb9c0ce3647141bf7d33143e.tar.xz
yuzu-e2bc05b17d91854cbb9c0ce3647141bf7d33143e.zip
shader: Add denorm flush support
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_compute_pipeline.cpp7
-rw-r--r--src/video_core/renderer_vulkan/vk_pipeline_cache.cpp15
2 files changed, 15 insertions, 7 deletions
diff --git a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
index 588ce6139..a658a3276 100644
--- a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
+++ b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
@@ -131,12 +131,7 @@ ComputePipeline::ComputePipeline(const Device& device, VKDescriptorPool& descrip
131 })} {} 131 })} {}
132 132
133void ComputePipeline::ConfigureBufferCache(BufferCache& buffer_cache) { 133void ComputePipeline::ConfigureBufferCache(BufferCache& buffer_cache) {
134 u32 enabled_uniforms{}; 134 buffer_cache.SetEnabledComputeUniformBuffers(info.constant_buffer_mask);
135 for (const auto& desc : info.constant_buffer_descriptors) {
136 enabled_uniforms |= ((1ULL << desc.count) - 1) << desc.index;
137 }
138 buffer_cache.SetEnabledComputeUniformBuffers(enabled_uniforms);
139
140 buffer_cache.UnbindComputeStorageBuffers(); 135 buffer_cache.UnbindComputeStorageBuffers();
141 size_t index{}; 136 size_t index{};
142 for (const auto& desc : info.storage_buffers_descriptors) { 137 for (const auto& desc : info.storage_buffers_descriptors) {
diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
index c2a41a360..49ff911d6 100644
--- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
@@ -177,7 +177,20 @@ ComputePipeline PipelineCache::CreateComputePipeline(ShaderInfo* shader_info) {
177 if (const std::optional<u128> cached_hash{env.Analyze(qmd.program_start)}) { 177 if (const std::optional<u128> cached_hash{env.Analyze(qmd.program_start)}) {
178 // TODO: Load from cache 178 // TODO: Load from cache
179 } 179 }
180 const auto [info, code]{Shader::RecompileSPIRV(env, qmd.program_start)}; 180 const auto& float_control{device.FloatControlProperties()};
181 const Shader::Profile profile{
182 .unified_descriptor_binding = true,
183 .support_float_controls = true,
184 .support_separate_denorm_behavior = float_control.denormBehaviorIndependence ==
185 VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR,
186 .support_separate_rounding_mode =
187 float_control.roundingModeIndependence == VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR,
188 .support_fp16_denorm_preserve = float_control.shaderDenormPreserveFloat16 != VK_FALSE,
189 .support_fp32_denorm_preserve = float_control.shaderDenormPreserveFloat32 != VK_FALSE,
190 .support_fp16_denorm_flush = float_control.shaderDenormFlushToZeroFloat16 != VK_FALSE,
191 .support_fp32_denorm_flush = float_control.shaderDenormFlushToZeroFloat32 != VK_FALSE,
192 };
193 const auto [info, code]{Shader::RecompileSPIRV(profile, env, qmd.program_start)};
181 194
182 FILE* file = fopen("D:\\shader.spv", "wb"); 195 FILE* file = fopen("D:\\shader.spv", "wb");
183 fwrite(code.data(), 4, code.size(), file); 196 fwrite(code.data(), 4, code.size(), file);