mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-15 19:28:43 +12:00
RSX : last few cmd refactoring
This commit is contained in:
parent
3d2aa622f1
commit
12edfeb216
5 changed files with 143 additions and 132 deletions
|
@ -1270,7 +1270,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
|||
|
||||
case NV4097_SET_TWO_SIDED_STENCIL_TEST_ENABLE:
|
||||
{
|
||||
m_set_two_sided_stencil_test_enable = ARGS(0) ? true : false;
|
||||
const u32 value = ARGS(0);
|
||||
Enable(cmd, ARGS(0));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1283,84 +1284,85 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
|||
|
||||
case NV4097_SET_STENCIL_MASK:
|
||||
{
|
||||
const u32 value = ARGS(0);
|
||||
m_set_stencil_mask = true;
|
||||
m_stencil_mask = ARGS(0);
|
||||
StencilMask(value);
|
||||
}
|
||||
break;
|
||||
|
||||
case NV4097_SET_STENCIL_FUNC:
|
||||
{
|
||||
m_set_stencil_func = true;
|
||||
m_stencil_func = ARGS(0);
|
||||
|
||||
if (count >= 2)
|
||||
if (count == 3)
|
||||
{
|
||||
m_set_stencil_func_ref = true;
|
||||
m_set_stencil_func = true;
|
||||
m_stencil_func = ARGS(0);
|
||||
m_stencil_func_ref = ARGS(1);
|
||||
|
||||
if (count >= 3)
|
||||
{
|
||||
m_set_stencil_func_mask = true;
|
||||
m_stencil_func_mask = ARGS(2);
|
||||
}
|
||||
m_stencil_func_mask = ARGS(2);
|
||||
StencilFunc(m_stencil_func, m_stencil_func_ref, m_stencil_func_mask);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case NV4097_SET_STENCIL_FUNC_REF:
|
||||
{
|
||||
m_set_stencil_func_ref = true;
|
||||
m_stencil_func_ref = ARGS(0);
|
||||
|
||||
if (m_set_stencil_func)
|
||||
{
|
||||
StencilFunc(m_stencil_func, m_stencil_func_ref, m_stencil_func_mask);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case NV4097_SET_STENCIL_FUNC_MASK:
|
||||
{
|
||||
m_set_stencil_func_mask = true;
|
||||
m_stencil_func_mask = ARGS(0);
|
||||
|
||||
if (m_set_stencil_func)
|
||||
{
|
||||
StencilFunc(m_stencil_func, m_stencil_func_ref, m_stencil_func_mask);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case NV4097_SET_STENCIL_OP_FAIL:
|
||||
{
|
||||
m_set_stencil_fail = true;
|
||||
m_stencil_fail = ARGS(0);
|
||||
|
||||
if (count >= 2)
|
||||
if (count == 3)
|
||||
{
|
||||
m_set_stencil_zfail = true;
|
||||
m_set_stencil_op_fail = true;
|
||||
m_stencil_fail = ARGS(0);
|
||||
m_stencil_zfail = ARGS(1);
|
||||
|
||||
if (count >= 3)
|
||||
{
|
||||
m_set_stencil_zpass = true;
|
||||
m_stencil_zpass = ARGS(2);
|
||||
}
|
||||
m_stencil_zpass = ARGS(2);
|
||||
StencilOp(m_stencil_fail, m_stencil_zfail, m_stencil_zpass);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case NV4097_SET_BACK_STENCIL_MASK:
|
||||
{
|
||||
m_set_back_stencil_mask = true;
|
||||
m_back_stencil_mask = ARGS(0);
|
||||
|
||||
StencilMaskSeparate(0, m_back_stencil_mask); // GL_BACK
|
||||
|
||||
if (m_set_stencil_mask)
|
||||
{
|
||||
StencilMaskSeparate(1, m_stencil_mask); // GL_FRONT
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case NV4097_SET_BACK_STENCIL_FUNC:
|
||||
{
|
||||
m_set_back_stencil_func = true;
|
||||
m_back_stencil_func = ARGS(0);
|
||||
|
||||
if (count >= 2)
|
||||
if (count == 3)
|
||||
{
|
||||
m_set_back_stencil_func_ref = true;
|
||||
m_set_back_stencil_func = true;
|
||||
m_back_stencil_func = ARGS(0);
|
||||
m_back_stencil_func_ref = ARGS(1);
|
||||
|
||||
if (count >= 3)
|
||||
m_back_stencil_func_mask = ARGS(2);
|
||||
StencilFuncSeparate(0, m_back_stencil_func, m_back_stencil_func_ref, m_back_stencil_func_mask); // GL_BACK
|
||||
if (m_set_stencil_func)
|
||||
{
|
||||
m_set_back_stencil_func_mask = true;
|
||||
m_back_stencil_func_mask = ARGS(2);
|
||||
StencilFuncSeparate(1, m_stencil_func, m_stencil_func_ref, m_stencil_func_mask); // GL_FRONT
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1368,34 +1370,52 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
|||
|
||||
case NV4097_SET_BACK_STENCIL_FUNC_REF:
|
||||
{
|
||||
m_set_back_stencil_func_ref = true;
|
||||
m_back_stencil_func_ref = ARGS(0);
|
||||
|
||||
if (m_set_back_stencil_func)
|
||||
{
|
||||
StencilFuncSeparate(0, m_back_stencil_func, m_back_stencil_func_ref, m_back_stencil_func_mask); // GL_BACK
|
||||
|
||||
if (m_set_stencil_func)
|
||||
{
|
||||
StencilFuncSeparate(1, m_stencil_func, m_stencil_func_ref, m_stencil_func_mask); // GL_FRONT
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case NV4097_SET_BACK_STENCIL_FUNC_MASK:
|
||||
{
|
||||
m_set_back_stencil_func_mask = true;
|
||||
m_back_stencil_func_mask = ARGS(0);
|
||||
|
||||
if (m_set_back_stencil_func)
|
||||
{
|
||||
StencilFuncSeparate(0, m_back_stencil_func, m_back_stencil_func_ref, m_back_stencil_func_mask); // GL_BACK
|
||||
|
||||
if (m_set_stencil_func)
|
||||
{
|
||||
StencilFuncSeparate(1, m_stencil_func, m_stencil_func_ref, m_stencil_func_mask); // GL_FRONT
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case NV4097_SET_BACK_STENCIL_OP_FAIL:
|
||||
{
|
||||
m_set_stencil_fail = true;
|
||||
m_stencil_fail = ARGS(0);
|
||||
|
||||
if (count >= 2)
|
||||
if (count == 3)
|
||||
{
|
||||
m_set_back_stencil_zfail = true;
|
||||
m_back_stencil_fail = ARGS(0);
|
||||
m_back_stencil_zfail = ARGS(1);
|
||||
m_back_stencil_zpass = ARGS(2);
|
||||
StencilOpSeparate(0, m_back_stencil_fail, m_back_stencil_zfail, m_back_stencil_zpass); // GL_BACK
|
||||
|
||||
if (count >= 3)
|
||||
if (m_set_stencil_op_fail)
|
||||
{
|
||||
m_set_back_stencil_zpass = true;
|
||||
m_back_stencil_zpass = ARGS(2);
|
||||
StencilOpSeparate(1, m_stencil_fail, m_stencil_zfail, m_stencil_zpass); // GL_FRONT
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1764,9 +1784,11 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
|||
|
||||
case NV4097_SET_POLYGON_STIPPLE_PATTERN:
|
||||
{
|
||||
u32 pattern[32];
|
||||
for (u32 i = 0; i < 32; i++)
|
||||
{
|
||||
m_polygon_stipple_pattern[i] = ARGS(i);
|
||||
pattern[i] = ARGS(i);
|
||||
PolygonStipple(pattern[i]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue