Jelajahi Sumber

VideoCore/Shader: Use only entry_point as ShaderSetup param

This removes all implicit dependency of ShaderState on global PICA
state.
Yuri Kunde Schlesner 9 tahun lalu
induk
melakukan
1e1f939817

+ 1 - 1
src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp

@@ -518,7 +518,7 @@ void GraphicsVertexShaderWidget::Reload(bool replace_vertex_data, void* vertex_d
     info.labels.insert({entry_point, "main"});
 
     // Generate debug information
-    debug_data = shader_setup.ProduceDebugInfo(input_vertex, num_attributes, shader_config);
+    debug_data = shader_setup.ProduceDebugInfo(input_vertex, num_attributes, entry_point);
 
     // Reload widget state
     for (int attr = 0; attr < num_attributes; ++attr) {

+ 2 - 2
src/video_core/command_processor.cpp

@@ -150,7 +150,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
                         g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation,
                                                  static_cast<void*>(&immediate_input));
                     shader_unit.LoadInputVertex(immediate_input, regs.vs.num_input_attributes + 1);
-                    g_state.vs.Run(shader_unit);
+                    g_state.vs.Run(shader_unit, regs.vs.main_offset);
                     Shader::OutputVertex output_vertex =
                         shader_unit.output_registers.ToVertex(regs.vs);
 
@@ -285,7 +285,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
                     g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation,
                                              (void*)&input);
                 shader_unit.LoadInputVertex(input, loader.GetNumTotalAttributes());
-                g_state.vs.Run(shader_unit);
+                g_state.vs.Run(shader_unit, regs.vs.main_offset);
 
                 // Retrieve vertex from register data
                 output_vertex = shader_unit.output_registers.ToVertex(regs.vs);

+ 9 - 7
src/video_core/shader/shader.cpp

@@ -120,33 +120,35 @@ void ShaderSetup::Setup() {
 
 MICROPROFILE_DEFINE(GPU_Shader, "GPU", "Shader", MP_RGB(50, 50, 240));
 
-void ShaderSetup::Run(UnitState& state) {
-    auto& config = g_state.regs.vs;
+void ShaderSetup::Run(UnitState& state, unsigned int entry_point) {
+    ASSERT(entry_point < 1024);
 
     MICROPROFILE_SCOPE(GPU_Shader);
 
 #ifdef ARCHITECTURE_x86_64
     if (VideoCore::g_shader_jit_enabled) {
-        jit_shader->Run(*this, state, config.main_offset);
+        jit_shader->Run(*this, state, entry_point);
     } else {
         DebugData<false> dummy_debug_data;
-        RunInterpreter(*this, state, dummy_debug_data, config.main_offset);
+        RunInterpreter(*this, state, dummy_debug_data, entry_point);
     }
 #else
     DebugData<false> dummy_debug_data;
-    RunInterpreter(*this, state, dummy_debug_data, config.main_offset);
+    RunInterpreter(*this, state, dummy_debug_data, entry_point);
 #endif // ARCHITECTURE_x86_64
 }
 
 DebugData<true> ShaderSetup::ProduceDebugInfo(const InputVertex& input, int num_attributes,
-                                              const Regs::ShaderConfig& config) {
+                                              unsigned int entry_point) {
+    ASSERT(entry_point < 1024);
+
     UnitState state;
     DebugData<true> debug_data;
 
     // Setup input register table
     boost::fill(state.registers.input, Math::Vec4<float24>::AssignToAll(float24::Zero()));
     state.LoadInputVertex(input, num_attributes);
-    RunInterpreter(*this, state, debug_data, config.main_offset);
+    RunInterpreter(*this, state, debug_data, entry_point);
     return debug_data;
 }
 

+ 2 - 2
src/video_core/shader/shader.h

@@ -191,7 +191,7 @@ struct ShaderSetup {
      * Runs the currently setup shader
      * @param state Shader unit state, must be setup per shader and per shader unit
      */
-    void Run(UnitState& state);
+    void Run(UnitState& state, unsigned int entry_point);
 
     /**
      * Produce debug information based on the given shader and input vertex
@@ -201,7 +201,7 @@ struct ShaderSetup {
      * @return Debug information for this shader with regards to the given vertex
      */
     DebugData<true> ProduceDebugInfo(const InputVertex& input, int num_attributes,
-                                     const Regs::ShaderConfig& config);
+                                     unsigned int entry_point);
 };
 
 } // namespace Shader