diff options
| author | 2020-03-22 20:13:05 +0700 | |
|---|---|---|
| committer | 2020-04-05 10:31:29 +0700 | |
| commit | 58bcb86af54bb00e3a01db02c7ed1945b68ea44c (patch) | |
| tree | 75ecff0623f988497c959d0bc2a0102ade9ad63f /src | |
| parent | clang-fix (diff) | |
| download | yuzu-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.cpp | 6 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | 3 | ||||
| -rw-r--r-- | src/video_core/shader/shader_ir.cpp | 7 | ||||
| -rw-r--r-- | src/video_core/shader/shader_ir.h | 5 |
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 | ||
| 168 | CachedShader::~CachedShader() = default; | 169 | CachedShader::~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; | |||
| 24 | using Tegra::Shader::PredOperation; | 24 | using Tegra::Shader::PredOperation; |
| 25 | using Tegra::Shader::Register; | 25 | using Tegra::Shader::Register; |
| 26 | 26 | ||
| 27 | ShaderIR::ShaderIR(const ProgramCode& program_code, u32 main_offset, CompilerSettings settings, | 27 | ShaderIR::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 | ||
| 69 | class ShaderIR final { | 69 | class ShaderIR final { |
| 70 | public: | 70 | public: |
| 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; |