summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar namkazy2020-03-22 20:13:05 +0700
committerGravatar namkazy2020-04-05 10:31:29 +0700
commit58bcb86af54bb00e3a01db02c7ed1945b68ea44c (patch)
tree75ecff0623f988497c959d0bc2a0102ade9ad63f /src
parentclang-fix (diff)
downloadyuzu-58bcb86af54bb00e3a01db02c7ed1945b68ea44c.tar.gz
yuzu-58bcb86af54bb00e3a01db02c7ed1945b68ea44c.tar.xz
yuzu-58bcb86af54bb00e3a01db02c7ed1945b68ea44c.zip
add shader stage when init shader ir
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_cache.cpp6
-rw-r--r--src/video_core/renderer_vulkan/vk_pipeline_cache.cpp3
-rw-r--r--src/video_core/shader/shader_ir.cpp7
-rw-r--r--src/video_core/shader/shader_ir.h5
4 files changed, 12 insertions, 9 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp
index 046ee55a5..dc6825a00 100644
--- a/src/video_core/renderer_opengl/gl_shader_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp
@@ -234,7 +234,7 @@ Shader CachedShader::CreateStageFromMemory(const ShaderParameters& params,
234 const std::size_t size_in_bytes = code.size() * sizeof(u64); 234 const std::size_t size_in_bytes = code.size() * sizeof(u64);
235 235
236 auto registry = std::make_shared<Registry>(shader_type, params.system.GPU().Maxwell3D()); 236 auto registry = std::make_shared<Registry>(shader_type, params.system.GPU().Maxwell3D());
237 const ShaderIR ir(code, STAGE_MAIN_OFFSET, COMPILER_SETTINGS, *registry); 237 const ShaderIR ir(code, shader_type, STAGE_MAIN_OFFSET, COMPILER_SETTINGS, *registry);
238 // TODO(Rodrigo): Handle VertexA shaders 238 // TODO(Rodrigo): Handle VertexA shaders
239 // std::optional<ShaderIR> ir_b; 239 // std::optional<ShaderIR> ir_b;
240 // if (!code_b.empty()) { 240 // if (!code_b.empty()) {
@@ -264,7 +264,7 @@ Shader CachedShader::CreateKernelFromMemory(const ShaderParameters& params, Prog
264 264
265 auto& engine = params.system.GPU().KeplerCompute(); 265 auto& engine = params.system.GPU().KeplerCompute();
266 auto registry = std::make_shared<Registry>(ShaderType::Compute, engine); 266 auto registry = std::make_shared<Registry>(ShaderType::Compute, engine);
267 const ShaderIR ir(code, KERNEL_MAIN_OFFSET, COMPILER_SETTINGS, *registry); 267 const ShaderIR ir(code, ShaderType::Compute, KERNEL_MAIN_OFFSET, COMPILER_SETTINGS, *registry);
268 const u64 uid = params.unique_identifier; 268 const u64 uid = params.unique_identifier;
269 auto program = BuildShader(params.device, ShaderType::Compute, uid, ir, *registry); 269 auto program = BuildShader(params.device, ShaderType::Compute, uid, ir, *registry);
270 270
@@ -341,7 +341,7 @@ void ShaderCacheOpenGL::LoadDiskCache(const std::atomic_bool& stop_loading,
341 const bool is_compute = entry.type == ShaderType::Compute; 341 const bool is_compute = entry.type == ShaderType::Compute;
342 const u32 main_offset = is_compute ? KERNEL_MAIN_OFFSET : STAGE_MAIN_OFFSET; 342 const u32 main_offset = is_compute ? KERNEL_MAIN_OFFSET : STAGE_MAIN_OFFSET;
343 auto registry = MakeRegistry(entry); 343 auto registry = MakeRegistry(entry);
344 const ShaderIR ir(entry.code, main_offset, COMPILER_SETTINGS, *registry); 344 const ShaderIR ir(entry.code, entry.type, main_offset, COMPILER_SETTINGS, *registry);
345 345
346 std::shared_ptr<OGLProgram> program; 346 std::shared_ptr<OGLProgram> program;
347 if (precompiled_entry) { 347 if (precompiled_entry) {
diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
index 557b9d662..c3e3884be 100644
--- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
@@ -162,7 +162,8 @@ CachedShader::CachedShader(Core::System& system, Tegra::Engines::ShaderType stag
162 ProgramCode program_code, u32 main_offset) 162 ProgramCode program_code, u32 main_offset)
163 : RasterizerCacheObject{host_ptr}, gpu_addr{gpu_addr}, cpu_addr{cpu_addr}, 163 : RasterizerCacheObject{host_ptr}, gpu_addr{gpu_addr}, cpu_addr{cpu_addr},
164 program_code{std::move(program_code)}, registry{stage, GetEngine(system, stage)}, 164 program_code{std::move(program_code)}, registry{stage, GetEngine(system, stage)},
165 shader_ir{this->program_code, main_offset, compiler_settings, registry}, 165 shader_ir{this->program_code, stage, main_offset, compiler_settings,
166 registry},
166 entries{GenerateShaderEntries(shader_ir)} {} 167 entries{GenerateShaderEntries(shader_ir)} {}
167 168
168CachedShader::~CachedShader() = default; 169CachedShader::~CachedShader() = default;
diff --git a/src/video_core/shader/shader_ir.cpp b/src/video_core/shader/shader_ir.cpp
index baf7188d2..bbd86a2c5 100644
--- a/src/video_core/shader/shader_ir.cpp
+++ b/src/video_core/shader/shader_ir.cpp
@@ -24,9 +24,10 @@ using Tegra::Shader::PredCondition;
24using Tegra::Shader::PredOperation; 24using Tegra::Shader::PredOperation;
25using Tegra::Shader::Register; 25using Tegra::Shader::Register;
26 26
27ShaderIR::ShaderIR(const ProgramCode& program_code, u32 main_offset, CompilerSettings settings, 27ShaderIR::ShaderIR(const ProgramCode& program_code, Tegra::Engines::ShaderType shader_stage,
28 Registry& registry) 28 u32 main_offset, CompilerSettings settings, Registry& registry)
29 : program_code{program_code}, main_offset{main_offset}, settings{settings}, registry{registry} { 29 : program_code{program_code}, shader_stage{shader_stage},
30 main_offset{main_offset}, settings{settings}, registry{registry} {
30 Decode(); 31 Decode();
31 PostDecode(); 32 PostDecode();
32} 33}
diff --git a/src/video_core/shader/shader_ir.h b/src/video_core/shader/shader_ir.h
index 80fc9b82c..e531181cd 100644
--- a/src/video_core/shader/shader_ir.h
+++ b/src/video_core/shader/shader_ir.h
@@ -68,8 +68,8 @@ struct GlobalMemoryUsage {
68 68
69class ShaderIR final { 69class ShaderIR final {
70public: 70public:
71 explicit ShaderIR(const ProgramCode& program_code, u32 main_offset, CompilerSettings settings, 71 explicit ShaderIR(const ProgramCode& program_code, Tegra::Engines::ShaderType shader_stage,
72 Registry& registry); 72 u32 main_offset, CompilerSettings settings, Registry& registry);
73 ~ShaderIR(); 73 ~ShaderIR();
74 74
75 const std::map<u32, NodeBlock>& GetBasicBlocks() const { 75 const std::map<u32, NodeBlock>& GetBasicBlocks() const {
@@ -419,6 +419,7 @@ private:
419 u32 NewCustomVariable(); 419 u32 NewCustomVariable();
420 420
421 const ProgramCode& program_code; 421 const ProgramCode& program_code;
422 const Tegra::Engines::ShaderType shader_stage;
422 const u32 main_offset; 423 const u32 main_offset;
423 const CompilerSettings settings; 424 const CompilerSettings settings;
424 Registry& registry; 425 Registry& registry;