diff options
| author | 2021-02-20 03:30:13 -0300 | |
|---|---|---|
| committer | 2021-07-22 21:51:22 -0400 | |
| commit | e2bc05b17d91854cbb9c0ce3647141bf7d33143e (patch) | |
| tree | 96769db006b6015cd536483db98ee0697aee4992 /src/video_core/renderer_vulkan | |
| parent | spirv: Add lower fp16 to fp32 pass (diff) | |
| download | yuzu-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.cpp | 7 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | 15 |
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 | ||
| 133 | void ComputePipeline::ConfigureBufferCache(BufferCache& buffer_cache) { | 133 | void 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); |