summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-06-16 03:03:08 -0300
committerGravatar ameerj2021-07-22 21:51:38 -0400
commitcbbca26d182991abf68d9b2e1b1e5935bf4eb476 (patch)
tree09662bca5ff6bfa688e409294562ed1cdd8754b2 /src/video_core/renderer_vulkan
parentshader: Rename maxwell/program.h to translate_program.h (diff)
downloadyuzu-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.cpp12
-rw-r--r--src/video_core/renderer_vulkan/vk_pipeline_cache.h3
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
312PipelineCache::~PipelineCache() = default; 316PipelineCache::~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;