diff options
Diffstat (limited to 'src/video_core')
| -rw-r--r-- | src/video_core/command_processor.cpp | 28 | ||||
| -rw-r--r-- | src/video_core/pica.h | 2 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 6 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state.cpp | 4 |
4 files changed, 18 insertions, 22 deletions
diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp index fda91e29c..c80c96762 100644 --- a/src/video_core/command_processor.cpp +++ b/src/video_core/command_processor.cpp @@ -52,10 +52,6 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { if (id >= regs.NumIds()) return; - // If we're skipping this frame, only allow trigger IRQ - if (GPU::g_skip_frame && id != PICA_REG_INDEX(trigger_irq)) - return; - // TODO: Figure out how register masking acts on e.g. vs.uniform_setup.set_value u32 old_value = regs[id]; @@ -215,18 +211,17 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { PrimitiveAssembler<Shader::OutputVertex>& primitive_assembler = g_state.primitive_assembler; - if (g_debug_context) { + if (g_debug_context && g_debug_context->recorder) { for (int i = 0; i < 3; ++i) { const auto texture = regs.GetTextures()[i]; if (!texture.enabled) continue; u8* texture_data = Memory::GetPhysicalPointer(texture.config.GetPhysicalAddress()); - if (g_debug_context && Pica::g_debug_context->recorder) - g_debug_context->recorder->MemoryAccessed( - texture_data, Pica::Regs::NibblesPerPixel(texture.format) * - texture.config.width / 2 * texture.config.height, - texture.config.GetPhysicalAddress()); + g_debug_context->recorder->MemoryAccessed( + texture_data, Pica::Regs::NibblesPerPixel(texture.format) * + texture.config.width / 2 * texture.config.height, + texture.config.GetPhysicalAddress()); } } @@ -236,7 +231,8 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { // The size has been tuned for optimal balance between hit-rate and the cost of lookup const size_t VERTEX_CACHE_SIZE = 32; std::array<u16, VERTEX_CACHE_SIZE> vertex_cache_ids; - std::array<Shader::OutputRegisters, VERTEX_CACHE_SIZE> vertex_cache; + std::array<Shader::OutputVertex, VERTEX_CACHE_SIZE> vertex_cache; + Shader::OutputVertex output_vertex; unsigned int vertex_cache_pos = 0; vertex_cache_ids.fill(-1); @@ -266,7 +262,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { for (unsigned int i = 0; i < VERTEX_CACHE_SIZE; ++i) { if (vertex == vertex_cache_ids[i]) { - output_registers = vertex_cache[i]; + output_vertex = vertex_cache[i]; vertex_cache_hit = true; break; } @@ -285,16 +281,16 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { g_state.vs.Run(shader_unit, input, loader.GetNumTotalAttributes()); output_registers = shader_unit.output_registers; + // Retrieve vertex from register data + output_vertex = output_registers.ToVertex(regs.vs); + if (is_indexed) { - vertex_cache[vertex_cache_pos] = output_registers; + vertex_cache[vertex_cache_pos] = output_vertex; vertex_cache_ids[vertex_cache_pos] = vertex; vertex_cache_pos = (vertex_cache_pos + 1) % VERTEX_CACHE_SIZE; } } - // Retrieve vertex from register data - Shader::OutputVertex output_vertex = output_registers.ToVertex(regs.vs); - // Send to renderer using Pica::Shader::OutputVertex; auto AddTriangle = [](const OutputVertex& v0, const OutputVertex& v1, diff --git a/src/video_core/pica.h b/src/video_core/pica.h index b2db609ec..99bd59a69 100644 --- a/src/video_core/pica.h +++ b/src/video_core/pica.h @@ -40,7 +40,7 @@ namespace Pica { // field offset. Otherwise, the compiler will fail to compile this code. #define PICA_REG_INDEX_WORKAROUND(field_name, backup_workaround_index) \ ((typename std::enable_if<backup_workaround_index == PICA_REG_INDEX(field_name), \ - size_t>::type)PICA_REG_INDEX(field_name)) + size_t>::type) PICA_REG_INDEX(field_name)) #endif // _MSC_VER struct Regs { diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 7cc3b407a..d4d5903ce 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -893,7 +893,7 @@ bool RasterizerOpenGL::AccelerateFill(const GPU::Regs::MemoryFillConfig& config) value_float = config.value_32bit / 16777215.0f; // 2^24 - 1 } - cur_state.depth.write_mask = true; + cur_state.depth.write_mask = GL_TRUE; cur_state.Apply(); glClearBufferfv(GL_DEPTH, 0, &value_float); } else if (dst_type == SurfaceType::DepthStencil) { @@ -908,8 +908,8 @@ bool RasterizerOpenGL::AccelerateFill(const GPU::Regs::MemoryFillConfig& config) GLfloat value_float = (config.value_32bit & 0xFFFFFF) / 16777215.0f; // 2^24 - 1 GLint value_int = (config.value_32bit >> 24); - cur_state.depth.write_mask = true; - cur_state.stencil.write_mask = true; + cur_state.depth.write_mask = GL_TRUE; + cur_state.stencil.write_mask = 0xFF; cur_state.Apply(); glClearBufferfi(GL_DEPTH_STENCIL, 0, value_float, value_int); } diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp index ed84cadea..2a731f483 100644 --- a/src/video_core/renderer_opengl/gl_state.cpp +++ b/src/video_core/renderer_opengl/gl_state.cpp @@ -27,8 +27,8 @@ OpenGLState::OpenGLState() { stencil.test_enabled = false; stencil.test_func = GL_ALWAYS; stencil.test_ref = 0; - stencil.test_mask = -1; - stencil.write_mask = -1; + stencil.test_mask = 0xFF; + stencil.write_mask = 0xFF; stencil.action_depth_fail = GL_KEEP; stencil.action_depth_pass = GL_KEEP; stencil.action_stencil_fail = GL_KEEP; |
