diff options
| author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2019-07-15 17:28:27 -0300 | 
|---|---|---|
| committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2019-07-15 17:38:25 -0300 | 
| commit | 6b0d017675ea5e4779e43b68df0aa2a9f781039f (patch) | |
| tree | 1f23b67003b851232d816824e0597f7861dd93ab | |
| parent | 56bca83bde9432bbc98b00f3fb3caf31b41f1da1 (diff) | |
gl_shader_decompiler: Stub local memory size
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 22 | 
1 files changed, 14 insertions, 8 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index 6236c5cdd..50b616be4 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp @@ -344,14 +344,16 @@ private:      }      void DeclareLocalMemory() { -        if (stage == ProgramType::Compute) { +        // TODO(Rodrigo): Unstub kernel local memory size and pass it from a register at +        // specialization time. +        const u64 local_memory_size = +            stage == ProgramType::Compute ? 0x400 : header.GetLocalMemorySize(); +        if (local_memory_size == 0) {              return;          } -        if (const u64 local_memory_size = header.GetLocalMemorySize(); local_memory_size > 0) { -            const auto element_count = Common::AlignUp(local_memory_size, 4) / 4; -            code.AddLine("float {}[{}];", GetLocalMemory(), element_count); -            code.AddNewLine(); -        } +        const auto element_count = Common::AlignUp(local_memory_size, 4) / 4; +        code.AddLine("float {}[{}];", GetLocalMemory(), element_count); +        code.AddNewLine();      }      void DeclareInternalFlags() { @@ -703,7 +705,9 @@ private:          }          if (const auto lmem = std::get_if<LmemNode>(&*node)) { -            UNIMPLEMENTED_IF(stage == ProgramType::Compute); +            if (stage == ProgramType::Compute) { +                LOG_WARNING(Render_OpenGL, "Local memory is stubbed on compute shaders"); +            }              return fmt::format("{}[ftou({}) / 4]", GetLocalMemory(), Visit(lmem->GetAddress()));          } @@ -1080,7 +1084,9 @@ private:              target = result->first;              is_integer = result->second;          } else if (const auto lmem = std::get_if<LmemNode>(&*dest)) { -            UNIMPLEMENTED_IF(stage == ProgramType::Compute); +            if (stage == ProgramType::Compute) { +                LOG_WARNING(Render_OpenGL, "Local memory is stubbed on compute shaders"); +            }              target = fmt::format("{}[ftou({}) / 4]", GetLocalMemory(), Visit(lmem->GetAddress()));          } else if (const auto gmem = std::get_if<GmemNode>(&*dest)) {              const std::string real = Visit(gmem->GetRealAddress());  | 
