diff options
| author | 2021-06-16 03:03:08 -0300 | |
|---|---|---|
| committer | 2021-07-22 21:51:38 -0400 | |
| commit | cbbca26d182991abf68d9b2e1b1e5935bf4eb476 (patch) | |
| tree | 09662bca5ff6bfa688e409294562ed1cdd8754b2 /src/video_core/renderer_vulkan | |
| parent | shader: Rename maxwell/program.h to translate_program.h (diff) | |
| download | yuzu-cbbca26d182991abf68d9b2e1b1e5935bf4eb476.tar.gz yuzu-cbbca26d182991abf68d9b2e1b1e5935bf4eb476.tar.xz yuzu-cbbca26d182991abf68d9b2e1b1e5935bf4eb476.zip | |
shader: Add support for native 16-bit floats
Diffstat (limited to 'src/video_core/renderer_vulkan')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | 12 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_pipeline_cache.h | 3 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index 0b6fe8e2e..72e6f4207 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | |||
| @@ -307,6 +307,10 @@ PipelineCache::PipelineCache(RasterizerVulkan& rasterizer_, Tegra::Engines::Maxw | |||
| 307 | .has_broken_signed_operations = false, | 307 | .has_broken_signed_operations = false, |
| 308 | .ignore_nan_fp_comparisons = false, | 308 | .ignore_nan_fp_comparisons = false, |
| 309 | }; | 309 | }; |
| 310 | host_info = Shader::HostTranslateInfo{ | ||
| 311 | .support_float16 = device.IsFloat16Supported(), | ||
| 312 | .support_int64 = true, | ||
| 313 | }; | ||
| 310 | } | 314 | } |
| 311 | 315 | ||
| 312 | PipelineCache::~PipelineCache() = default; | 316 | PipelineCache::~PipelineCache() = default; |
| @@ -484,11 +488,11 @@ std::unique_ptr<GraphicsPipeline> PipelineCache::CreateGraphicsPipeline( | |||
| 484 | Shader::Maxwell::Flow::CFG cfg(env, pools.flow_block, cfg_offset, index == 0); | 488 | Shader::Maxwell::Flow::CFG cfg(env, pools.flow_block, cfg_offset, index == 0); |
| 485 | if (!uses_vertex_a || index != 1) { | 489 | if (!uses_vertex_a || index != 1) { |
| 486 | // Normal path | 490 | // Normal path |
| 487 | programs[index] = TranslateProgram(pools.inst, pools.block, env, cfg); | 491 | programs[index] = TranslateProgram(pools.inst, pools.block, env, cfg, host_info); |
| 488 | } else { | 492 | } else { |
| 489 | // VertexB path when VertexA is present. | 493 | // VertexB path when VertexA is present. |
| 490 | Shader::IR::Program& program_va{programs[0]}; | 494 | auto& program_va{programs[0]}; |
| 491 | Shader::IR::Program program_vb{TranslateProgram(pools.inst, pools.block, env, cfg)}; | 495 | auto program_vb{TranslateProgram(pools.inst, pools.block, env, cfg, host_info)}; |
| 492 | programs[index] = MergeDualVertexPrograms(program_va, program_vb, env); | 496 | programs[index] = MergeDualVertexPrograms(program_va, program_vb, env); |
| 493 | } | 497 | } |
| 494 | } | 498 | } |
| @@ -575,7 +579,7 @@ std::unique_ptr<ComputePipeline> PipelineCache::CreateComputePipeline( | |||
| 575 | LOG_INFO(Render_Vulkan, "0x{:016x}", key.Hash()); | 579 | LOG_INFO(Render_Vulkan, "0x{:016x}", key.Hash()); |
| 576 | 580 | ||
| 577 | Shader::Maxwell::Flow::CFG cfg{env, pools.flow_block, env.StartAddress()}; | 581 | Shader::Maxwell::Flow::CFG cfg{env, pools.flow_block, env.StartAddress()}; |
| 578 | Shader::IR::Program program{TranslateProgram(pools.inst, pools.block, env, cfg)}; | 582 | auto program{TranslateProgram(pools.inst, pools.block, env, cfg, host_info)}; |
| 579 | const std::vector<u32> code{EmitSPIRV(profile, program)}; | 583 | const std::vector<u32> code{EmitSPIRV(profile, program)}; |
| 580 | device.SaveShader(code); | 584 | device.SaveShader(code); |
| 581 | vk::ShaderModule spv_module{BuildShader(device, code)}; | 585 | vk::ShaderModule spv_module{BuildShader(device, code)}; |
diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.h b/src/video_core/renderer_vulkan/vk_pipeline_cache.h index 167a2ee2e..42da2960b 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.h +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.h | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include "shader_recompiler/frontend/ir/basic_block.h" | 19 | #include "shader_recompiler/frontend/ir/basic_block.h" |
| 20 | #include "shader_recompiler/frontend/ir/value.h" | 20 | #include "shader_recompiler/frontend/ir/value.h" |
| 21 | #include "shader_recompiler/frontend/maxwell/control_flow.h" | 21 | #include "shader_recompiler/frontend/maxwell/control_flow.h" |
| 22 | #include "shader_recompiler/host_translate_info.h" | ||
| 22 | #include "shader_recompiler/object_pool.h" | 23 | #include "shader_recompiler/object_pool.h" |
| 23 | #include "shader_recompiler/profile.h" | 24 | #include "shader_recompiler/profile.h" |
| 24 | #include "video_core/engines/maxwell_3d.h" | 25 | #include "video_core/engines/maxwell_3d.h" |
| @@ -157,6 +158,8 @@ private: | |||
| 157 | ShaderPools main_pools; | 158 | ShaderPools main_pools; |
| 158 | 159 | ||
| 159 | Shader::Profile profile; | 160 | Shader::Profile profile; |
| 161 | Shader::HostTranslateInfo host_info; | ||
| 162 | |||
| 160 | std::filesystem::path pipeline_cache_filename; | 163 | std::filesystem::path pipeline_cache_filename; |
| 161 | 164 | ||
| 162 | Common::ThreadWorker workers; | 165 | Common::ThreadWorker workers; |