mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-10 00:41:26 +12:00
RSX: fixed scissor
This commit is contained in:
parent
0fe32fa0d3
commit
8b9a46bb39
5 changed files with 75 additions and 56 deletions
|
@ -441,6 +441,19 @@ bool GLGSRender::LoadProgram()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLGSRender::WriteBuffers()
|
||||||
|
{
|
||||||
|
if (Ini.GSDumpDepthBuffer.GetValue())
|
||||||
|
{
|
||||||
|
WriteDepthBuffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Ini.GSDumpColorBuffers.GetValue())
|
||||||
|
{
|
||||||
|
WriteColorBuffers();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void GLGSRender::WriteDepthBuffer()
|
void GLGSRender::WriteDepthBuffer()
|
||||||
{
|
{
|
||||||
if (!m_set_context_dma_z)
|
if (!m_set_context_dma_z)
|
||||||
|
@ -705,16 +718,8 @@ void GLGSRender::OnReset()
|
||||||
m_vao.Delete();
|
m_vao.Delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLGSRender::ExecCMD()
|
void GLGSRender::InitDrawBuffers()
|
||||||
{
|
{
|
||||||
//return;
|
|
||||||
if(!LoadProgram())
|
|
||||||
{
|
|
||||||
LOG_ERROR(RSX, "LoadProgram failed.");
|
|
||||||
Emu.Pause();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!m_fbo.IsCreated() || RSXThread::m_width != last_width || RSXThread::m_height != last_height || last_depth_format != m_surface_depth_format)
|
if(!m_fbo.IsCreated() || RSXThread::m_width != last_width || RSXThread::m_height != last_height || last_depth_format != m_surface_depth_format)
|
||||||
{
|
{
|
||||||
LOG_WARNING(RSX, "New FBO (%dx%d)", RSXThread::m_width, RSXThread::m_height);
|
LOG_WARNING(RSX, "New FBO (%dx%d)", RSXThread::m_width, RSXThread::m_height);
|
||||||
|
@ -795,11 +800,6 @@ void GLGSRender::ExecCMD()
|
||||||
|
|
||||||
m_fbo.Bind();
|
m_fbo.Bind();
|
||||||
|
|
||||||
if (Ini.GSDumpDepthBuffer.GetValue())
|
|
||||||
{
|
|
||||||
WriteDepthBuffer();
|
|
||||||
}
|
|
||||||
|
|
||||||
static const GLenum draw_buffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3 };
|
static const GLenum draw_buffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3 };
|
||||||
|
|
||||||
switch(m_surface_colour_target)
|
switch(m_surface_colour_target)
|
||||||
|
@ -831,6 +831,13 @@ void GLGSRender::ExecCMD()
|
||||||
LOG_ERROR(RSX, "Bad surface colour target: %d", m_surface_colour_target);
|
LOG_ERROR(RSX, "Bad surface colour target: %d", m_surface_colour_target);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLGSRender::ExecCMD(u32 cmd)
|
||||||
|
{
|
||||||
|
assert(cmd == NV4097_CLEAR_SURFACE);
|
||||||
|
|
||||||
|
InitDrawBuffers();
|
||||||
|
|
||||||
if(m_set_color_mask)
|
if(m_set_color_mask)
|
||||||
{
|
{
|
||||||
|
@ -838,20 +845,12 @@ void GLGSRender::ExecCMD()
|
||||||
checkForGlError("glColorMask");
|
checkForGlError("glColorMask");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_set_viewport_horizontal && m_set_viewport_vertical)
|
|
||||||
{
|
|
||||||
//glViewport(m_viewport_x, m_viewport_y, m_viewport_w, m_viewport_h);
|
|
||||||
//checkForGlError("glViewport");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_set_scissor_horizontal && m_set_scissor_vertical)
|
if (m_set_scissor_horizontal && m_set_scissor_vertical)
|
||||||
{
|
{
|
||||||
glScissor(m_scissor_x, m_scissor_y, m_scissor_w, m_scissor_h);
|
glScissor(m_scissor_x, m_scissor_y, m_scissor_w, m_scissor_h);
|
||||||
checkForGlError("glScissor");
|
checkForGlError("glScissor");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_clear_surface_mask)
|
|
||||||
{
|
|
||||||
GLbitfield f = 0;
|
GLbitfield f = 0;
|
||||||
|
|
||||||
if (m_clear_surface_mask & 0x1)
|
if (m_clear_surface_mask & 0x1)
|
||||||
|
@ -880,8 +879,22 @@ void GLGSRender::ExecCMD()
|
||||||
}
|
}
|
||||||
|
|
||||||
glClear(f);
|
glClear(f);
|
||||||
|
|
||||||
|
WriteBuffers();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLGSRender::ExecCMD()
|
||||||
|
{
|
||||||
|
//return;
|
||||||
|
if(!LoadProgram())
|
||||||
|
{
|
||||||
|
LOG_ERROR(RSX, "LoadProgram failed.");
|
||||||
|
Emu.Pause();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InitDrawBuffers();
|
||||||
|
|
||||||
Enable(m_set_depth_test, GL_DEPTH_TEST);
|
Enable(m_set_depth_test, GL_DEPTH_TEST);
|
||||||
Enable(m_set_alpha_test, GL_ALPHA_TEST);
|
Enable(m_set_alpha_test, GL_ALPHA_TEST);
|
||||||
Enable(m_set_depth_bounds_test, GL_DEPTH_BOUNDS_TEST_EXT);
|
Enable(m_set_depth_bounds_test, GL_DEPTH_BOUNDS_TEST_EXT);
|
||||||
|
@ -1169,10 +1182,7 @@ void GLGSRender::ExecCMD()
|
||||||
DisableVertexData();
|
DisableVertexData();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Ini.GSDumpColorBuffers.GetValue())
|
WriteBuffers();
|
||||||
{
|
|
||||||
WriteColorBuffers();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLGSRender::Flip()
|
void GLGSRender::Flip()
|
||||||
|
|
|
@ -846,6 +846,7 @@ private:
|
||||||
void Enable(bool enable, const u32 cap);
|
void Enable(bool enable, const u32 cap);
|
||||||
virtual void Close();
|
virtual void Close();
|
||||||
bool LoadProgram();
|
bool LoadProgram();
|
||||||
|
void WriteBuffers();
|
||||||
void WriteDepthBuffer();
|
void WriteDepthBuffer();
|
||||||
void WriteColorBuffers();
|
void WriteColorBuffers();
|
||||||
void WriteColourBufferA();
|
void WriteColourBufferA();
|
||||||
|
@ -854,12 +855,14 @@ private:
|
||||||
void WriteColourBufferD();
|
void WriteColourBufferD();
|
||||||
|
|
||||||
void DrawObjects();
|
void DrawObjects();
|
||||||
|
void InitDrawBuffers();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void OnInit();
|
virtual void OnInit();
|
||||||
virtual void OnInitThread();
|
virtual void OnInitThread();
|
||||||
virtual void OnExitThread();
|
virtual void OnExitThread();
|
||||||
virtual void OnReset();
|
virtual void OnReset();
|
||||||
|
virtual void ExecCMD(u32 cmd);
|
||||||
virtual void ExecCMD();
|
virtual void ExecCMD();
|
||||||
virtual void Flip();
|
virtual void Flip();
|
||||||
};
|
};
|
||||||
|
|
|
@ -31,6 +31,10 @@ private:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void ExecCMD(u32 cmd)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
virtual void ExecCMD()
|
virtual void ExecCMD()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -822,7 +822,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32
|
||||||
if(a0 & 0x40) m_clear_surface_color_b = m_clear_color_b;
|
if(a0 & 0x40) m_clear_surface_color_b = m_clear_color_b;
|
||||||
if(a0 & 0x80) m_clear_surface_color_a = m_clear_color_a;
|
if(a0 & 0x80) m_clear_surface_color_a = m_clear_color_a;
|
||||||
|
|
||||||
m_clear_surface_mask |= a0;
|
m_clear_surface_mask = a0;
|
||||||
|
ExecCMD(NV4097_CLEAR_SURFACE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -615,6 +615,7 @@ protected:
|
||||||
virtual void OnExitThread() = 0;
|
virtual void OnExitThread() = 0;
|
||||||
virtual void OnReset() = 0;
|
virtual void OnReset() = 0;
|
||||||
virtual void ExecCMD() = 0;
|
virtual void ExecCMD() = 0;
|
||||||
|
virtual void ExecCMD(u32 cmd) = 0;
|
||||||
virtual void Flip() = 0;
|
virtual void Flip() = 0;
|
||||||
|
|
||||||
void LoadVertexData(u32 first, u32 count)
|
void LoadVertexData(u32 first, u32 count)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue