mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-08-11 02:29:29 +00:00
Conflicts fixed
This commit is contained in:
commit
1636531d4a
2 changed files with 296 additions and 232 deletions
|
@ -451,18 +451,21 @@ void GLFragmentDecompilerThread::Task()
|
||||||
case RSX_FP_OPCODE_DP4: SetDst("vec4(dot($0, $1))"); break;
|
case RSX_FP_OPCODE_DP4: SetDst("vec4(dot($0, $1))"); break;
|
||||||
case RSX_FP_OPCODE_DP2A: SetDst("vec4($0.x * $1.x + $0.y * $1.y + $2.x)"); break;
|
case RSX_FP_OPCODE_DP2A: SetDst("vec4($0.x * $1.x + $0.y * $1.y + $2.x)"); break;
|
||||||
case RSX_FP_OPCODE_DST: SetDst("vec4(distance($0, $1))"); break;
|
case RSX_FP_OPCODE_DST: SetDst("vec4(distance($0, $1))"); break;
|
||||||
|
case RSX_FP_OPCODE_REFL: LOG_ERROR(RSX, "Unimplemented SCB instruction: REFL"); break; // TODO: Is this in the right category?
|
||||||
case RSX_FP_OPCODE_EX2: SetDst("exp2($0)"); break;
|
case RSX_FP_OPCODE_EX2: SetDst("exp2($0)"); break;
|
||||||
case RSX_FP_OPCODE_FLR: SetDst("floor($0)"); break;
|
case RSX_FP_OPCODE_FLR: SetDst("floor($0)"); break;
|
||||||
case RSX_FP_OPCODE_FRC: SetDst("fract($0)"); break;
|
case RSX_FP_OPCODE_FRC: SetDst("fract($0)"); break;
|
||||||
|
case RSX_FP_OPCODE_LIT: LOG_ERROR(RSX, "Unimplemented SCB instruction: LIT"); break;
|
||||||
case RSX_FP_OPCODE_LIF: SetDst("vec4(1.0, $0.y, ($0.y > 0 ? pow(2.0, $0.w) : 0.0), 1.0)"); break;
|
case RSX_FP_OPCODE_LIF: SetDst("vec4(1.0, $0.y, ($0.y > 0 ? pow(2.0, $0.w) : 0.0), 1.0)"); break;
|
||||||
|
case RSX_FP_OPCODE_LRP: LOG_ERROR(RSX, "Unimplemented SCB instruction: LRP"); break; // TODO: Is this in the right category?
|
||||||
case RSX_FP_OPCODE_LG2: SetDst("log2($0)"); break;
|
case RSX_FP_OPCODE_LG2: SetDst("log2($0)"); break;
|
||||||
case RSX_FP_OPCODE_MAD: SetDst("($0 * $1 + $2)"); break;
|
case RSX_FP_OPCODE_MAD: SetDst("($0 * $1 + $2)"); break;
|
||||||
case RSX_FP_OPCODE_MAX: SetDst("max($0, $1)"); break;
|
case RSX_FP_OPCODE_MAX: SetDst("max($0, $1)"); break;
|
||||||
case RSX_FP_OPCODE_MIN: SetDst("min($0, $1)"); break;
|
case RSX_FP_OPCODE_MIN: SetDst("min($0, $1)"); break;
|
||||||
case RSX_FP_OPCODE_MOV: SetDst("$0"); break;
|
case RSX_FP_OPCODE_MOV: SetDst("$0"); break;
|
||||||
case RSX_FP_OPCODE_MUL: SetDst("($0 * $1)"); break;
|
case RSX_FP_OPCODE_MUL: SetDst("($0 * $1)"); break;
|
||||||
case RSX_FP_OPCODE_PK2: LOG_ERROR(RSX, "Unimplemented SCB instruction: PK2"); break;
|
case RSX_FP_OPCODE_PK2: SetDst("packSnorm2x16($0)"); break; // TODO: More testing (Sonic The Hedgehog (NPUB-30442/NPEB-00478))
|
||||||
case RSX_FP_OPCODE_PK4: LOG_ERROR(RSX, "Unimplemented SCB instruction: PK4"); break;
|
case RSX_FP_OPCODE_PK4: SetDst("packSnorm4x8($0)"); break; // TODO: More testing (Sonic The Hedgehog (NPUB-30442/NPEB-00478))
|
||||||
case RSX_FP_OPCODE_PK16: LOG_ERROR(RSX, "Unimplemented SCB instruction: PK16"); break;
|
case RSX_FP_OPCODE_PK16: LOG_ERROR(RSX, "Unimplemented SCB instruction: PK16"); break;
|
||||||
case RSX_FP_OPCODE_PKB: LOG_ERROR(RSX, "Unimplemented SCB instruction: PKB"); break;
|
case RSX_FP_OPCODE_PKB: LOG_ERROR(RSX, "Unimplemented SCB instruction: PKB"); break;
|
||||||
case RSX_FP_OPCODE_PKG: LOG_ERROR(RSX, "Unimplemented SCB instruction: PKG"); break;
|
case RSX_FP_OPCODE_PKG: LOG_ERROR(RSX, "Unimplemented SCB instruction: PKG"); break;
|
||||||
|
@ -490,13 +493,16 @@ void GLFragmentDecompilerThread::Task()
|
||||||
case RSX_FP_OPCODE_DDX: SetDst("dFdx($0)"); break;
|
case RSX_FP_OPCODE_DDX: SetDst("dFdx($0)"); break;
|
||||||
case RSX_FP_OPCODE_DDY: SetDst("dFdy($0)"); break;
|
case RSX_FP_OPCODE_DDY: SetDst("dFdy($0)"); break;
|
||||||
case RSX_FP_OPCODE_NRM: SetDst("normalize($0)"); break;
|
case RSX_FP_OPCODE_NRM: SetDst("normalize($0)"); break;
|
||||||
|
case RSX_FP_OPCODE_BEM: LOG_ERROR(RSX, "Unimplemented TEX_SRB instruction: BEM"); break;
|
||||||
case RSX_FP_OPCODE_TEX: SetDst("texture($t, $0.xy)"); break;
|
case RSX_FP_OPCODE_TEX: SetDst("texture($t, $0.xy)"); break;
|
||||||
case RSX_FP_OPCODE_TXP: LOG_ERROR(RSX, "TEX_SRB texture projection used. Please report this to a RPCS3 developer!"); SetDst("textureProj($t, $0.xy, $1)"); break; //TODO: Test this
|
case RSX_FP_OPCODE_TEXBEM: LOG_ERROR(RSX, "Unimplemented TEX_SRB instruction: TEXBEM"); break;
|
||||||
|
case RSX_FP_OPCODE_TXP: SetDst("textureProj($t, $0.xy, $1)"); break; //TODO: More testing (Sonic The Hedgehog (NPUB-30442/NPEB-00478) and The Simpsons Arcade Game (NPUB30563))
|
||||||
|
case RSX_FP_OPCODE_TXPBEM: LOG_ERROR(RSX, "Unimplemented TEX_SRB instruction: TXPBEM"); break;
|
||||||
case RSX_FP_OPCODE_TXD: LOG_ERROR(RSX, "Unimplemented TEX_SRB instruction: TXD"); break;
|
case RSX_FP_OPCODE_TXD: LOG_ERROR(RSX, "Unimplemented TEX_SRB instruction: TXD"); break;
|
||||||
case RSX_FP_OPCODE_TXB: SetDst("texture($t, $0.xy, $1.x)"); break;
|
case RSX_FP_OPCODE_TXB: SetDst("texture($t, $0.xy, $1.x)"); break;
|
||||||
case RSX_FP_OPCODE_TXL: SetDst("textureLod($t, $0.xy, $1.x)"); break;
|
case RSX_FP_OPCODE_TXL: SetDst("textureLod($t, $0.xy, $1.x)"); break;
|
||||||
case RSX_FP_OPCODE_UP2: LOG_ERROR(RSX, "Unimplemented TEX_SRB instruction: UP2"); break;
|
case RSX_FP_OPCODE_UP2: SetDst("unpackSnorm2x16($0)"); break; // TODO: More testing (Sonic The Hedgehog (NPUB-30442/NPEB-00478))
|
||||||
case RSX_FP_OPCODE_UP4: LOG_ERROR(RSX, "Unimplemented TEX_SRB instruction: UP4"); break;
|
case RSX_FP_OPCODE_UP4: SetDst("unpackSnorm4x8($0)"); break; // TODO: More testing (Sonic The Hedgehog (NPUB-30442/NPEB-00478))
|
||||||
case RSX_FP_OPCODE_UP16: LOG_ERROR(RSX, "Unimplemented TEX_SRB instruction: UP16"); break;
|
case RSX_FP_OPCODE_UP16: LOG_ERROR(RSX, "Unimplemented TEX_SRB instruction: UP16"); break;
|
||||||
case RSX_FP_OPCODE_UPB: LOG_ERROR(RSX, "Unimplemented TEX_SRB instruction: UPB"); break;
|
case RSX_FP_OPCODE_UPB: LOG_ERROR(RSX, "Unimplemented TEX_SRB instruction: UPB"); break;
|
||||||
case RSX_FP_OPCODE_UPG: LOG_ERROR(RSX, "Unimplemented TEX_SRB instruction: UPG"); break;
|
case RSX_FP_OPCODE_UPG: LOG_ERROR(RSX, "Unimplemented TEX_SRB instruction: UPG"); break;
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "Emu/SysCalls/lv2/sys_time.h"
|
#include "Emu/SysCalls/lv2/sys_time.h"
|
||||||
|
|
||||||
#define ARGS(x) (x >= count ? OutOfArgsCount(x, cmd, count, args.addr()) : args[x].ToLE())
|
#define ARGS(x) (x >= count ? OutOfArgsCount(x, cmd, count, args.addr()) : args[x].ToLE())
|
||||||
|
#define CMD_DEBUG 0
|
||||||
|
|
||||||
u32 methodRegisters[0xffff];
|
u32 methodRegisters[0xffff];
|
||||||
|
|
||||||
|
@ -161,14 +162,6 @@ u32 RSXVertexData::GetTypeSize()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define CMD_DEBUG 0
|
|
||||||
|
|
||||||
#if CMD_DEBUG
|
|
||||||
#define CMD_LOG(...) LOG_NOTICE(RSX, __VA_ARGS__)
|
|
||||||
#else
|
|
||||||
#define CMD_LOG(...)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
u32 RSXThread::OutOfArgsCount(const uint x, const u32 cmd, const u32 count, const u32 args_addr)
|
u32 RSXThread::OutOfArgsCount(const uint x, const u32 cmd, const u32 count, const u32 args_addr)
|
||||||
{
|
{
|
||||||
auto args = vm::ptr<u32>::make(args_addr);
|
auto args = vm::ptr<u32>::make(args_addr);
|
||||||
|
@ -181,77 +174,43 @@ u32 RSXThread::OutOfArgsCount(const uint x, const u32 cmd, const u32 count, cons
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define case_4(a, m) \
|
#define case_2(offset, step) \
|
||||||
case a + m: \
|
case offset: \
|
||||||
case a + m * 2: \
|
case offset + step:
|
||||||
case a + m * 3: \
|
#define case_4(offset, step) \
|
||||||
index = (cmd - a) / m; \
|
case_2(offset, step) \
|
||||||
case a \
|
case_2(offset + 2*step, step)
|
||||||
|
#define case_8(offset, step) \
|
||||||
#define case_16(a, m) \
|
case_4(offset, step) \
|
||||||
case a + m: \
|
case_4(offset + 4*step, step)
|
||||||
case a + m * 2: \
|
#define case_16(offset, step) \
|
||||||
case a + m * 3: \
|
case_8(offset, step) \
|
||||||
case a + m * 4: \
|
case_8(offset + 8*step, step)
|
||||||
case a + m * 5: \
|
#define case_32(offset, step) \
|
||||||
case a + m * 6: \
|
case_16(offset, step) \
|
||||||
case a + m * 7: \
|
case_16(offset + 16*step, step)
|
||||||
case a + m * 8: \
|
#define case_range(n, offset, step) \
|
||||||
case a + m * 9: \
|
case_##n(offset, step) \
|
||||||
case a + m * 10: \
|
index = (cmd - offset) / step;
|
||||||
case a + m * 11: \
|
|
||||||
case a + m * 12: \
|
|
||||||
case a + m * 13: \
|
|
||||||
case a + m * 14: \
|
|
||||||
case a + m * 15: \
|
|
||||||
index = (cmd - a) / m; \
|
|
||||||
case a \
|
|
||||||
|
|
||||||
#define case_32(a, m) \
|
|
||||||
case a + m: \
|
|
||||||
case a + m * 2: \
|
|
||||||
case a + m * 3: \
|
|
||||||
case a + m * 4: \
|
|
||||||
case a + m * 5: \
|
|
||||||
case a + m * 6: \
|
|
||||||
case a + m * 7: \
|
|
||||||
case a + m * 8: \
|
|
||||||
case a + m * 9: \
|
|
||||||
case a + m * 10: \
|
|
||||||
case a + m * 11: \
|
|
||||||
case a + m * 12: \
|
|
||||||
case a + m * 13: \
|
|
||||||
case a + m * 14: \
|
|
||||||
case a + m * 15: \
|
|
||||||
case a + m * 16: \
|
|
||||||
case a + m * 17: \
|
|
||||||
case a + m * 18: \
|
|
||||||
case a + m * 19: \
|
|
||||||
case a + m * 20: \
|
|
||||||
case a + m * 21: \
|
|
||||||
case a + m * 22: \
|
|
||||||
case a + m * 23: \
|
|
||||||
case a + m * 24: \
|
|
||||||
case a + m * 25: \
|
|
||||||
case a + m * 26: \
|
|
||||||
case a + m * 27: \
|
|
||||||
case a + m * 28: \
|
|
||||||
case a + m * 29: \
|
|
||||||
case a + m * 30: \
|
|
||||||
case a + m * 31: \
|
|
||||||
index = (cmd - a) / m; \
|
|
||||||
case a \
|
|
||||||
|
|
||||||
void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const u32 count)
|
void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const u32 count)
|
||||||
{
|
{
|
||||||
auto args = vm::ptr<u32>::make(args_addr);
|
auto args = vm::ptr<u32>::make(args_addr);
|
||||||
|
|
||||||
#if CMD_DEBUG
|
#if CMD_DEBUG
|
||||||
|
<<<<<<< HEAD
|
||||||
std::string debug = GetMethodName(cmd);
|
std::string debug = GetMethodName(cmd);
|
||||||
debug += "(";
|
debug += "(";
|
||||||
for(u32 i=0; i<count; ++i) debug += (i ? ", " : "") + fmt::Format("0x%x", ARGS(i));
|
for(u32 i=0; i<count; ++i) debug += (i ? ", " : "") + fmt::Format("0x%x", ARGS(i));
|
||||||
debug += ")";
|
debug += ")";
|
||||||
LOG_NOTICE(RSX, debug);
|
LOG_NOTICE(RSX, debug);
|
||||||
|
=======
|
||||||
|
std::string debug = GetMethodName(cmd);
|
||||||
|
debug += "(";
|
||||||
|
for (u32 i = 0; i < count; ++i) debug += (i ? ", " : "") + fmt::Format("0x%x", ARGS(i));
|
||||||
|
debug += ")";
|
||||||
|
LOG_NOTICE(RSX, debug);
|
||||||
|
>>>>>>> 4b8d61736460fe75f264c7180bd7d9d898b540f5
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
u32 index = 0;
|
u32 index = 0;
|
||||||
|
@ -270,7 +229,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
case NV406E_SET_CONTEXT_DMA_SEMAPHORE:
|
case NV406E_SET_CONTEXT_DMA_SEMAPHORE:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV406E_SET_CONTEXT_DMA_SEMAPHORE: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV406E_SET_CONTEXT_DMA_SEMAPHORE: 0x%x", ARGS(0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -285,7 +246,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
case NV406E_SEMAPHORE_ACQUIRE:
|
case NV406E_SEMAPHORE_ACQUIRE:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV406E_SEMAPHORE_ACQUIRE: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV406E_SEMAPHORE_ACQUIRE: 0x%x", ARGS(0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -315,18 +278,15 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
|
|
||||||
// NV4097
|
// NV4097
|
||||||
case 0x0003fead:
|
case 0x0003fead:
|
||||||
//if(cmd == 0xfeadffff)
|
|
||||||
{
|
{
|
||||||
//LOG_WARNING(RSX, "Flip()");
|
|
||||||
Flip();
|
Flip();
|
||||||
|
|
||||||
m_last_flip_time = get_system_time();
|
m_last_flip_time = get_system_time();
|
||||||
|
|
||||||
m_gcm_current_buffer = ARGS(0);
|
m_gcm_current_buffer = ARGS(0);
|
||||||
m_read_buffer = true;
|
m_read_buffer = true;
|
||||||
m_flip_status = 0;
|
m_flip_status = 0;
|
||||||
|
|
||||||
if(m_flip_handler)
|
if (m_flip_handler)
|
||||||
{
|
{
|
||||||
auto cb = m_flip_handler;
|
auto cb = m_flip_handler;
|
||||||
Emu.GetCallbackManager().Async([cb]()
|
Emu.GetCallbackManager().Async([cb]()
|
||||||
|
@ -367,48 +327,63 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NV4097_SET_CONTEXT_DMA_REPORT:
|
||||||
|
{
|
||||||
|
if (ARGS(0))
|
||||||
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_CONTEXT_DMA_REPORT: 0x%x", ARGS(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case NV4097_NOTIFY:
|
case NV4097_NOTIFY:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_NOTIFY: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_NOTIFY: 0x%x", ARGS(0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NV4097_WAIT_FOR_IDLE:
|
case NV4097_WAIT_FOR_IDLE:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_WAIT_FOR_IDLE: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_WAIT_FOR_IDLE: 0x%x", ARGS(0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NV4097_PM_TRIGGER:
|
case NV4097_PM_TRIGGER:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_PM_TRIGGER: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_PM_TRIGGER: 0x%x", ARGS(0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Texture
|
// Texture
|
||||||
case_16(NV4097_SET_TEXTURE_FORMAT, 0x20):
|
case_range(16, NV4097_SET_TEXTURE_FORMAT, 0x20)
|
||||||
case_16(NV4097_SET_TEXTURE_OFFSET, 0x20):
|
case_range(16, NV4097_SET_TEXTURE_OFFSET, 0x20)
|
||||||
case_16(NV4097_SET_TEXTURE_FILTER, 0x20):
|
case_range(16, NV4097_SET_TEXTURE_FILTER, 0x20)
|
||||||
case_16(NV4097_SET_TEXTURE_ADDRESS, 0x20):
|
case_range(16, NV4097_SET_TEXTURE_ADDRESS, 0x20)
|
||||||
case_16(NV4097_SET_TEXTURE_IMAGE_RECT, 32):
|
case_range(16, NV4097_SET_TEXTURE_IMAGE_RECT, 32)
|
||||||
case_16(NV4097_SET_TEXTURE_BORDER_COLOR, 0x20):
|
case_range(16, NV4097_SET_TEXTURE_BORDER_COLOR, 0x20)
|
||||||
case_16(NV4097_SET_TEXTURE_CONTROL0, 0x20):
|
case_range(16, NV4097_SET_TEXTURE_CONTROL0, 0x20)
|
||||||
case_16(NV4097_SET_TEXTURE_CONTROL1, 0x20):
|
case_range(16, NV4097_SET_TEXTURE_CONTROL1, 0x20)
|
||||||
{
|
{
|
||||||
// Done using methodRegisters in RSXTexture.cpp
|
// Done using methodRegisters in RSXTexture.cpp
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case_16(NV4097_SET_TEX_COORD_CONTROL, 4):
|
case_range(16, NV4097_SET_TEX_COORD_CONTROL, 4)
|
||||||
{
|
{
|
||||||
LOG_WARNING(RSX, "NV4097_SET_TEX_COORD_CONTROL");
|
LOG_WARNING(RSX, "TODO: NV4097_SET_TEX_COORD_CONTROL");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case_16(NV4097_SET_TEXTURE_CONTROL3, 4):
|
case_range(16, NV4097_SET_TEXTURE_CONTROL3, 4)
|
||||||
{
|
{
|
||||||
RSXTexture& tex = m_textures[index];
|
RSXTexture& tex = m_textures[index];
|
||||||
const u32 a0 = ARGS(0);
|
const u32 a0 = ARGS(0);
|
||||||
|
@ -419,19 +394,19 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Vertex Texture
|
// Vertex Texture
|
||||||
case_4(NV4097_SET_VERTEX_TEXTURE_FORMAT, 0x20):
|
case_range(4, NV4097_SET_VERTEX_TEXTURE_FORMAT, 0x20)
|
||||||
case_4(NV4097_SET_VERTEX_TEXTURE_OFFSET, 0x20):
|
case_range(4, NV4097_SET_VERTEX_TEXTURE_OFFSET, 0x20)
|
||||||
case_4(NV4097_SET_VERTEX_TEXTURE_FILTER, 0x20):
|
case_range(4, NV4097_SET_VERTEX_TEXTURE_FILTER, 0x20)
|
||||||
case_4(NV4097_SET_VERTEX_TEXTURE_ADDRESS, 0x20):
|
case_range(4, NV4097_SET_VERTEX_TEXTURE_ADDRESS, 0x20)
|
||||||
case_4(NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT, 0x20):
|
case_range(4, NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT, 0x20)
|
||||||
case_4(NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR, 0x20):
|
case_range(4, NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR, 0x20)
|
||||||
case_4(NV4097_SET_VERTEX_TEXTURE_CONTROL0, 0x20):
|
case_range(4, NV4097_SET_VERTEX_TEXTURE_CONTROL0, 0x20)
|
||||||
{
|
{
|
||||||
// Done using methodRegisters in RSXTexture.cpp
|
// Done using methodRegisters in RSXTexture.cpp
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case_4(NV4097_SET_VERTEX_TEXTURE_CONTROL3, 0x20) :
|
case_range(4, NV4097_SET_VERTEX_TEXTURE_CONTROL3, 0x20)
|
||||||
{
|
{
|
||||||
RSXVertexTexture& tex = m_vertex_textures[index];
|
RSXVertexTexture& tex = m_vertex_textures[index];
|
||||||
const u32 a0 = ARGS(0);
|
const u32 a0 = ARGS(0);
|
||||||
|
@ -442,7 +417,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Vertex data
|
// Vertex data
|
||||||
case_16(NV4097_SET_VERTEX_DATA4UB_M, 4):
|
case_range(16, NV4097_SET_VERTEX_DATA4UB_M, 4)
|
||||||
{
|
{
|
||||||
const u32 a0 = ARGS(0);
|
const u32 a0 = ARGS(0);
|
||||||
u8 v0 = a0;
|
u8 v0 = a0;
|
||||||
|
@ -457,11 +432,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
m_vertex_data[index].data.push_back(v1);
|
m_vertex_data[index].data.push_back(v1);
|
||||||
m_vertex_data[index].data.push_back(v2);
|
m_vertex_data[index].data.push_back(v2);
|
||||||
m_vertex_data[index].data.push_back(v3);
|
m_vertex_data[index].data.push_back(v3);
|
||||||
|
|
||||||
//LOG_WARNING(RSX, "NV4097_SET_VERTEX_DATA4UB_M: index = %d, v0 = 0x%x, v1 = 0x%x, v2 = 0x%x, v3 = 0x%x", index, v0, v1, v2, v3);
|
//LOG_WARNING(RSX, "NV4097_SET_VERTEX_DATA4UB_M: index = %d, v0 = 0x%x, v1 = 0x%x, v2 = 0x%x, v3 = 0x%x", index, v0, v1, v2, v3);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case_16(NV4097_SET_VERTEX_DATA2F_M, 8):
|
case_range(16, NV4097_SET_VERTEX_DATA2F_M, 8)
|
||||||
{
|
{
|
||||||
const u32 a0 = ARGS(0);
|
const u32 a0 = ARGS(0);
|
||||||
const u32 a1 = ARGS(1);
|
const u32 a1 = ARGS(1);
|
||||||
|
@ -481,7 +457,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case_16(NV4097_SET_VERTEX_DATA4F_M, 16):
|
case_range(16, NV4097_SET_VERTEX_DATA4F_M, 16)
|
||||||
{
|
{
|
||||||
const u32 a0 = ARGS(0);
|
const u32 a0 = ARGS(0);
|
||||||
const u32 a1 = ARGS(1);
|
const u32 a1 = ARGS(1);
|
||||||
|
@ -507,10 +483,10 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case_16(NV4097_SET_VERTEX_DATA_ARRAY_OFFSET, 4):
|
case_range(16, NV4097_SET_VERTEX_DATA_ARRAY_OFFSET, 4)
|
||||||
{
|
{
|
||||||
const u32 addr = GetAddress(ARGS(0) & 0x7fffffff, ARGS(0) >> 31);
|
const u32 addr = GetAddress(ARGS(0) & 0x7fffffff, ARGS(0) >> 31);
|
||||||
CMD_LOG("num=%d, addr=0x%x", index, addr);
|
|
||||||
m_vertex_data[index].addr = addr;
|
m_vertex_data[index].addr = addr;
|
||||||
m_vertex_data[index].data.clear();
|
m_vertex_data[index].data.clear();
|
||||||
|
|
||||||
|
@ -518,7 +494,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case_16(NV4097_SET_VERTEX_DATA_ARRAY_FORMAT, 4):
|
case_range(16, NV4097_SET_VERTEX_DATA_ARRAY_FORMAT, 4)
|
||||||
{
|
{
|
||||||
const u32 a0 = ARGS(0);
|
const u32 a0 = ARGS(0);
|
||||||
u16 frequency = a0 >> 16;
|
u16 frequency = a0 >> 16;
|
||||||
|
@ -526,8 +502,6 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
u8 size = (a0 >> 4) & 0xf;
|
u8 size = (a0 >> 4) & 0xf;
|
||||||
u8 type = a0 & 0xf;
|
u8 type = a0 & 0xf;
|
||||||
|
|
||||||
CMD_LOG("index=%d, frequency=%d, stride=%d, size=%d, type=%d", index, frequency, stride, size, type);
|
|
||||||
|
|
||||||
RSXVertexData& cv = m_vertex_data[index];
|
RSXVertexData& cv = m_vertex_data[index];
|
||||||
cv.frequency = frequency;
|
cv.frequency = frequency;
|
||||||
cv.stride = stride;
|
cv.stride = stride;
|
||||||
|
@ -535,14 +509,17 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
cv.type = type;
|
cv.type = type;
|
||||||
|
|
||||||
//LOG_WARNING(RSX, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT: index=%d, frequency=%d, stride=%d, size=%d, type=%d", index, frequency, stride, size, type);
|
//LOG_WARNING(RSX, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT: index=%d, frequency=%d, stride=%d, size=%d, type=%d", index, frequency, stride, size, type);
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Vertex Attribute
|
// Vertex Attribute
|
||||||
case NV4097_SET_VERTEX_ATTRIB_INPUT_MASK:
|
case NV4097_SET_VERTEX_ATTRIB_INPUT_MASK:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 mask = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_SET_VERTEX_ATTRIB_INPUT_MASK: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_VERTEX_ATTRIB_INPUT_MASK: 0x%x", mask);
|
||||||
|
}
|
||||||
|
|
||||||
//VertexData[0].prog.attributeInputMask = ARGS(0);
|
//VertexData[0].prog.attributeInputMask = ARGS(0);
|
||||||
}
|
}
|
||||||
|
@ -550,8 +527,10 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
|
|
||||||
case NV4097_SET_VERTEX_ATTRIB_OUTPUT_MASK:
|
case NV4097_SET_VERTEX_ATTRIB_OUTPUT_MASK:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 mask = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_SET_VERTEX_ATTRIB_OUTPUT_MASK: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_VERTEX_ATTRIB_OUTPUT_MASK: 0x%x", mask);
|
||||||
|
}
|
||||||
|
|
||||||
//VertexData[0].prog.attributeOutputMask = ARGS(0);
|
//VertexData[0].prog.attributeOutputMask = ARGS(0);
|
||||||
//FragmentData.prog.attributeInputMask = ARGS(0)/* & ~0x20*/;
|
//FragmentData.prog.attributeInputMask = ARGS(0)/* & ~0x20*/;
|
||||||
|
@ -573,8 +552,10 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
|
|
||||||
case NV4097_SET_COLOR_MASK_MRT:
|
case NV4097_SET_COLOR_MASK_MRT:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 mask = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_SET_COLOR_MASK_MRT: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_COLOR_MASK_MRT: 0x%x", mask);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -677,8 +658,10 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
|
|
||||||
case NV4097_SET_BLEND_COLOR2:
|
case NV4097_SET_BLEND_COLOR2:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_SET_BLEND_COLOR2: 0x % x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO : NV4097_SET_BLEND_COLOR2: 0x%x", value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -692,8 +675,10 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
|
|
||||||
case NV4097_SET_REDUCE_DST_COLOR:
|
case NV4097_SET_REDUCE_DST_COLOR:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_SET_REDUCE_DST_COLOR: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_REDUCE_DST_COLOR: 0x%x", value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -740,7 +725,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
m_viewport_h = ARGS(1) >> 16;
|
m_viewport_h = ARGS(1) >> 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
CMD_LOG("x=%d, y=%d, w=%d, h=%d", m_viewport_x, m_viewport_y, m_viewport_w, m_viewport_h);
|
//LOG_NOTICE(RSX, "NV4097_SET_VIEWPORT_HORIZONTAL: x=%d, y=%d, w=%d, h=%d", m_viewport_x, m_viewport_y, m_viewport_w, m_viewport_h);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -749,6 +734,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
m_set_viewport_vertical = true;
|
m_set_viewport_vertical = true;
|
||||||
m_viewport_y = ARGS(0) & 0xffff;
|
m_viewport_y = ARGS(0) & 0xffff;
|
||||||
m_viewport_h = ARGS(0) >> 16;
|
m_viewport_h = ARGS(0) >> 16;
|
||||||
|
|
||||||
|
//LOG_NOTICE(RSX, "NV4097_SET_VIEWPORT_VERTICAL: y=%d, h=%d", m_viewport_y, m_viewport_h);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -769,7 +756,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
m_clip_min = (float&)a0;
|
m_clip_min = (float&)a0;
|
||||||
m_clip_max = (float&)a1;
|
m_clip_max = (float&)a1;
|
||||||
|
|
||||||
CMD_LOG("clip_min=%.01f, clip_max=%.01f", m_clip_min, m_clip_max);
|
//LOG_NOTICE(RSX, "NV4097_SET_CLIP_MIN: clip_min=%.01f, clip_max=%.01f", m_clip_min, m_clip_max);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -780,7 +767,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
m_set_clip = true;
|
m_set_clip = true;
|
||||||
m_clip_max = (float&)a0;
|
m_clip_max = (float&)a0;
|
||||||
|
|
||||||
CMD_LOG("clip_max=%.01f", m_clip_max);
|
//LOG_NOTICE(RSX, "NV4097_SET_CLIP_MAX: clip_max=%.01f", m_clip_max);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -864,6 +851,15 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NV4097_SET_CYLINDRICAL_WRAP:
|
||||||
|
{
|
||||||
|
if (ARGS(0))
|
||||||
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_CYLINDRICAL_WRAP: 0x%x", ARGS(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
// Clearing
|
// Clearing
|
||||||
case NV4097_CLEAR_ZCULL_SURFACE:
|
case NV4097_CLEAR_ZCULL_SURFACE:
|
||||||
{
|
{
|
||||||
|
@ -912,19 +908,32 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
|
|
||||||
case NV4097_SET_CLEAR_RECT_HORIZONTAL:
|
case NV4097_SET_CLEAR_RECT_HORIZONTAL:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_SET_CLEAR_RECT_HORIZONTAL: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_CLEAR_RECT_HORIZONTAL: 0x%x", value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NV4097_SET_CLEAR_RECT_VERTICAL:
|
case NV4097_SET_CLEAR_RECT_VERTICAL:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_SET_CLEAR_RECT_VERTICAL: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_CLEAR_RECT_VERTICAL: 0x%x", value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Arrays
|
// Arrays
|
||||||
|
case NV4097_INLINE_ARRAY:
|
||||||
|
{
|
||||||
|
if (u32 value = ARGS(0))
|
||||||
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NNV4097_INLINE_ARRAY: 0x%x", value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case NV4097_DRAW_ARRAYS:
|
case NV4097_DRAW_ARRAYS:
|
||||||
{
|
{
|
||||||
for(u32 c=0; c<count; ++c)
|
for(u32 c=0; c<count; ++c)
|
||||||
|
@ -1001,11 +1010,13 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
case NV4097_SET_VERTEX_DATA_BASE_OFFSET:
|
case NV4097_SET_VERTEX_DATA_BASE_OFFSET:
|
||||||
{
|
{
|
||||||
m_vertex_data_base_offset = ARGS(0);
|
m_vertex_data_base_offset = ARGS(0);
|
||||||
if (count >= 2) {
|
|
||||||
|
if (count >= 2)
|
||||||
|
{
|
||||||
m_vertex_data_base_index = ARGS(1);
|
m_vertex_data_base_index = ARGS(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//LOG_ERROR(RSX, "NV4097_SET_VERTEX_DATA_BASE_OFFSET: 0x%x", m_vertex_data_base_offset);
|
//LOG_WARNING(RSX, "NV4097_SET_VERTEX_DATA_BASE_OFFSET: 0x%x", m_vertex_data_base_offset);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1020,6 +1031,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
const u32 a0 = ARGS(0);
|
const u32 a0 = ARGS(0);
|
||||||
|
|
||||||
//LOG_WARNING(RSX, "NV4097_SET_BEGIN_END: 0x%x", a0);
|
//LOG_WARNING(RSX, "NV4097_SET_BEGIN_END: 0x%x", a0);
|
||||||
|
|
||||||
if (!m_indexed_array.m_count && !m_draw_array_count)
|
if (!m_indexed_array.m_count && !m_draw_array_count)
|
||||||
{
|
{
|
||||||
u32 min_vertex_size = ~0;
|
u32 min_vertex_size = ~0;
|
||||||
|
@ -1055,7 +1067,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
case NV4097_SET_SHADER_PROGRAM:
|
case NV4097_SET_SHADER_PROGRAM:
|
||||||
{
|
{
|
||||||
m_cur_shader_prog = &m_shader_progs[m_cur_shader_prog_num];
|
m_cur_shader_prog = &m_shader_progs[m_cur_shader_prog_num];
|
||||||
//m_cur_shader_prog_num = (m_cur_shader_prog_num + 1) % 16;
|
|
||||||
const u32 a0 = ARGS(0);
|
const u32 a0 = ARGS(0);
|
||||||
m_cur_shader_prog->offset = a0 & ~0x3;
|
m_cur_shader_prog->offset = a0 & ~0x3;
|
||||||
m_cur_shader_prog->addr = GetAddress(m_cur_shader_prog->offset, (a0 & 0x3) - 1);
|
m_cur_shader_prog->addr = GetAddress(m_cur_shader_prog->offset, (a0 & 0x3) - 1);
|
||||||
|
@ -1076,6 +1088,14 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NV4097_SET_SHADER_PACKER:
|
||||||
|
{
|
||||||
|
if (ARGS(0))
|
||||||
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_SHADER_PACKER: 0x%x", ARGS(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
case NV4097_SET_SHADER_WINDOW:
|
case NV4097_SET_SHADER_WINDOW:
|
||||||
{
|
{
|
||||||
const u32 a0 = ARGS(0);
|
const u32 a0 = ARGS(0);
|
||||||
|
@ -1114,17 +1134,20 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case_32(NV4097_SET_TRANSFORM_PROGRAM, 4):
|
case_range(32, NV4097_SET_TRANSFORM_PROGRAM, 4)
|
||||||
{
|
{
|
||||||
//LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM[%d](%d)", index, count);
|
//LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM[%d](%d)", index, count);
|
||||||
|
|
||||||
if(!m_cur_vertex_prog)
|
if(!m_cur_vertex_prog)
|
||||||
{
|
{
|
||||||
LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM: m_cur_vertex_prog == NULL");
|
LOG_ERROR(RSX, "NV4097_SET_TRANSFORM_PROGRAM: m_cur_vertex_prog is null");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(u32 i=0; i<count; ++i) m_cur_vertex_prog->data.push_back(ARGS(i));
|
for (u32 i = 0; i < count; ++i)
|
||||||
|
{
|
||||||
|
m_cur_vertex_prog->data.push_back(ARGS(i));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1135,18 +1158,27 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
|
|
||||||
if(!m_cur_vertex_prog)
|
if(!m_cur_vertex_prog)
|
||||||
{
|
{
|
||||||
LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_TIMEOUT: m_cur_vertex_prog == NULL");
|
LOG_ERROR(RSX, "NV4097_SET_TRANSFORM_TIMEOUT: m_cur_vertex_prog is null");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//m_cur_vertex_prog->Decompile();
|
//m_cur_vertex_prog->Decompile();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NV4097_SET_TRANSFORM_BRANCH_BITS:
|
||||||
|
{
|
||||||
|
if (u32 value = ARGS(0))
|
||||||
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_TRANSFORM_BRANCH_BITS: 0x%x", value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case NV4097_SET_TRANSFORM_CONSTANT_LOAD:
|
case NV4097_SET_TRANSFORM_CONSTANT_LOAD:
|
||||||
{
|
{
|
||||||
if((count - 1) % 4)
|
if((count - 1) % 4)
|
||||||
{
|
{
|
||||||
CMD_LOG("NV4097_SET_TRANSFORM_CONSTANT_LOAD [%d]", count);
|
LOG_ERROR(RSX, "NV4097_SET_TRANSFORM_CONSTANT_LOAD: bad count %d", count);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1159,8 +1191,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
|
|
||||||
RSXTransformConstant c(id, (float&)x, (float&)y, (float&)z, (float&)w);
|
RSXTransformConstant c(id, (float&)x, (float&)y, (float&)z, (float&)w);
|
||||||
|
|
||||||
CMD_LOG("SET_TRANSFORM_CONSTANT_LOAD[%d : %d] = (%f, %f, %f, %f)", i, id, c.x, c.y, c.z, c.w);
|
|
||||||
m_transform_constants.push_back(c);
|
m_transform_constants.push_back(c);
|
||||||
|
|
||||||
|
//LOG_NOTICE(RSX, "NV4097_SET_TRANSFORM_CONSTANT_LOAD: [%d : %d] = (%f, %f, %f, %f)", i, id, c.x, c.y, c.z, c.w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1168,8 +1201,10 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
// Invalidation
|
// Invalidation
|
||||||
case NV4097_INVALIDATE_L2:
|
case NV4097_INVALIDATE_L2:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_INVALIDATE_L2: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_INVALIDATE_L2: 0x%x", value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1187,8 +1222,10 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
|
|
||||||
case NV4097_INVALIDATE_ZCULL:
|
case NV4097_INVALIDATE_ZCULL:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_INVALIDATE_ZCULL: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_INVALIDATE_ZCULL: 0x%x", value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1351,16 +1388,10 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
|
|
||||||
case NV4097_SET_SCULL_CONTROL:
|
case NV4097_SET_SCULL_CONTROL:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_SET_SCULL_CONTROL: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_SCULL_CONTROL: 0x%x", value);
|
||||||
//This is stencil culling , nothing to do with stencil masking on regular color or depth buffer
|
}
|
||||||
//const u32 a0 = ARGS(0);
|
|
||||||
//m_set_stencil_func = m_set_stencil_func_ref = m_set_stencil_func_mask = true;
|
|
||||||
|
|
||||||
//m_stencil_func = a0 & 0xffff;
|
|
||||||
//m_stencil_func_ref = (a0 >> 16) & 0xff;
|
|
||||||
//m_stencil_func_mask = (a0 >> 24) & 0xff;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1389,8 +1420,10 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
// Point sprite
|
// Point sprite
|
||||||
case NV4097_SET_POINT_PARAMS_ENABLE:
|
case NV4097_SET_POINT_PARAMS_ENABLE:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_ERROR(RSX, "NV4097_SET_POINT_PARAMS_ENABLE: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_POINT_PARAMS_ENABLE: 0x%x", value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1459,7 +1492,6 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
m_width = buffers[m_gcm_current_buffer].width;
|
m_width = buffers[m_gcm_current_buffer].width;
|
||||||
m_height = buffers[m_gcm_current_buffer].height;
|
m_height = buffers[m_gcm_current_buffer].height;
|
||||||
|
|
||||||
// Rescale native resolution to fit 1080p/720p/480p/576p window size
|
|
||||||
nativeRescale((float)m_width, (float)m_height);
|
nativeRescale((float)m_width, (float)m_height);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1516,7 +1548,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
{
|
{
|
||||||
if (count != 4)
|
if (count != 4)
|
||||||
{
|
{
|
||||||
LOG_WARNING(RSX, "NV4097_SET_SURFACE_PITCH_C: Bad count (%d)", count);
|
LOG_ERROR(RSX, "NV4097_SET_SURFACE_PITCH_C: Bad count (%d)", count);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1533,7 +1565,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
|
|
||||||
if (count != 1)
|
if (count != 1)
|
||||||
{
|
{
|
||||||
LOG_WARNING(RSX, "NV4097_SET_SURFACE_PITCH_D: Bad count (%d)", count);
|
LOG_ERROR(RSX, "NV4097_SET_SURFACE_PITCH_D: Bad count (%d)", count);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1542,9 +1574,10 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
case NV4097_SET_SURFACE_PITCH_Z:
|
case NV4097_SET_SURFACE_PITCH_Z:
|
||||||
{
|
{
|
||||||
m_surface_pitch_z = ARGS(0);
|
m_surface_pitch_z = ARGS(0);
|
||||||
|
|
||||||
if (count != 1)
|
if (count != 1)
|
||||||
{
|
{
|
||||||
LOG_WARNING(RSX, "NV4097_SET_SURFACE_PITCH_Z: Bad count (%d)", count);
|
LOG_ERROR(RSX, "NV4097_SET_SURFACE_PITCH_Z: Bad count (%d)", count);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1557,7 +1590,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
|
|
||||||
if (count != 1)
|
if (count != 1)
|
||||||
{
|
{
|
||||||
LOG_WARNING(RSX, "NV4097_SET_CONTEXT_DMA_COLOR_A: Bad count (%d)", count);
|
LOG_ERROR(RSX, "NV4097_SET_CONTEXT_DMA_COLOR_A: Bad count (%d)", count);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1587,7 +1620,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (ARGS(0))
|
||||||
{
|
{
|
||||||
LOG_WARNING(RSX, "NV4097_SET_CONTEXT_DMA_COLOR_D: 0x%x", ARGS(0));
|
LOG_WARNING(RSX, "TODO: NV4097_SET_CONTEXT_DMA_COLOR_D: 0x%x", ARGS(0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1601,15 +1634,19 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
|
|
||||||
case NV4097_SET_CONTEXT_DMA_SEMAPHORE:
|
case NV4097_SET_CONTEXT_DMA_SEMAPHORE:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_SET_CONTEXT_DMA_SEMAPHORE: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_CONTEXT_DMA_SEMAPHORE: 0x%x", value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NV4097_SET_CONTEXT_DMA_NOTIFIES:
|
case NV4097_SET_CONTEXT_DMA_NOTIFIES:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_SET_CONTEXT_DMA_NOTIFIES: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_CONTEXT_DMA_NOTIFIES: 0x%x", value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1650,8 +1687,11 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
const u8 alphaToOne = (a0 >> 8) & 0xf;
|
const u8 alphaToOne = (a0 >> 8) & 0xf;
|
||||||
const u16 sampleMask = a0 >> 16;
|
const u16 sampleMask = a0 >> 16;
|
||||||
|
|
||||||
|
if (a0)
|
||||||
|
{
|
||||||
LOG_WARNING(RSX, "TODO: NV4097_SET_ANTI_ALIASING_CONTROL: 0x%x", a0);
|
LOG_WARNING(RSX, "TODO: NV4097_SET_ANTI_ALIASING_CONTROL: 0x%x", a0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Line/Polygon smoothing
|
// Line/Polygon smoothing
|
||||||
|
@ -1719,35 +1759,37 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
|
|
||||||
case NV4097_SET_ZCULL_CONTROL0:
|
case NV4097_SET_ZCULL_CONTROL0:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_SET_ZCULL_CONTROL0: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_ZCULL_CONTROL0: 0x%x", value);
|
||||||
//m_set_depth_func = true;
|
}
|
||||||
//m_depth_func = ARGS(0) >> 4;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NV4097_SET_ZCULL_CONTROL1:
|
case NV4097_SET_ZCULL_CONTROL1:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_SET_ZCULL_CONTROL1: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_ZCULL_CONTROL1: 0x%x", value);
|
||||||
//m_set_depth_func = true;
|
}
|
||||||
//m_depth_func = ARGS(0) >> 4;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NV4097_SET_ZCULL_STATS_ENABLE:
|
case NV4097_SET_ZCULL_STATS_ENABLE:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_SET_ZCULL_STATS_ENABLE: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_ZCULL_STATS_ENABLE: 0x%x", value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NV4097_ZCULL_SYNC:
|
case NV4097_ZCULL_SYNC:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV4097_ZCULL_SYNC: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_ZCULL_SYNC: 0x%x", value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1767,12 +1809,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
case CELL_GCM_ZCULL_STATS2:
|
case CELL_GCM_ZCULL_STATS2:
|
||||||
case CELL_GCM_ZCULL_STATS3:
|
case CELL_GCM_ZCULL_STATS3:
|
||||||
value = 0;
|
value = 0;
|
||||||
LOG_WARNING(RSX, "NV4097_GET_REPORT: Unimplemented type %d", type);
|
LOG_ERROR(RSX, "NV4097_GET_REPORT: Unimplemented type %d", type);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
value = 0;
|
value = 0;
|
||||||
LOG_WARNING(RSX, "NV4097_GET_REPORT: Bad type %d", type);
|
LOG_ERROR(RSX, "NV4097_GET_REPORT: Bad type %d", type);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1800,6 +1842,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
LOG_ERROR(RSX, "NV4097_CLEAR_REPORT_VALUE: Bad type: %d", type);
|
LOG_ERROR(RSX, "NV4097_CLEAR_REPORT_VALUE: Bad type: %d", type);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1842,23 +1885,25 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
const u8 cullNearFarEnable = ARGS(0) & 0xf;
|
const u8 cullNearFarEnable = ARGS(0) & 0xf;
|
||||||
const u8 zclampEnable = (ARGS(0) >> 4) & 0xf;
|
const u8 zclampEnable = (ARGS(0) >> 4) & 0xf;
|
||||||
const u8 cullIgnoreW = (ARGS(0) >> 8) & 0xf;
|
const u8 cullIgnoreW = (ARGS(0) >> 8) & 0xf;
|
||||||
LOG_WARNING(RSX, "TODO: NV4097_SET_ZMIN_MAX_CONTROL: cullNearFarEnable=%d, zclampEnable=%d, cullIgnoreW=%d",
|
|
||||||
cullNearFarEnable, zclampEnable, cullIgnoreW);
|
LOG_WARNING(RSX, "TODO: NV4097_SET_ZMIN_MAX_CONTROL: cullNearFarEnable=%d, zclampEnable=%d, cullIgnoreW=%d", cullNearFarEnable, zclampEnable, cullIgnoreW);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Windows Clipping (Doesn't seem to be relevant?)
|
|
||||||
case NV4097_SET_WINDOW_OFFSET:
|
case NV4097_SET_WINDOW_OFFSET:
|
||||||
{
|
{
|
||||||
const u16 x = ARGS(0);
|
const u16 x = ARGS(0);
|
||||||
const u16 y = ARGS(0) >> 16;
|
const u16 y = ARGS(0) >> 16;
|
||||||
//LOG_WARNING(RSX, "TODO: NV4097_SET_WINDOW_OFFSET: x=%d, y=%d", x, y);
|
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_WINDOW_OFFSET: x=%d, y=%d", x, y);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NV4097_SET_FREQUENCY_DIVIDER_OPERATION:
|
case NV4097_SET_FREQUENCY_DIVIDER_OPERATION:
|
||||||
{
|
{
|
||||||
m_set_frequency_divider_operation = ARGS(0);
|
m_set_frequency_divider_operation = ARGS(0);
|
||||||
|
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_FREQUENCY_DIVIDER_OPERATION: %d", m_set_frequency_divider_operation);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1866,13 +1911,15 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
{
|
{
|
||||||
const u32 offset = ARGS(0) & 0xffffff;
|
const u32 offset = ARGS(0) & 0xffffff;
|
||||||
const u8 mode = ARGS(0) >> 24;
|
const u8 mode = ARGS(0) >> 24;
|
||||||
LOG_WARNING(RSX, "NV4097_SET_RENDER_ENABLE: Offset=0x%06x, Mode=0x%x", offset, mode);
|
|
||||||
|
LOG_WARNING(RSX, "TODO: NV4097_SET_RENDER_ENABLE: Offset=0x%06x, Mode=0x%x", offset, mode);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE:
|
case NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE:
|
||||||
{
|
{
|
||||||
const u32 enable = ARGS(0);
|
const u32 enable = ARGS(0);
|
||||||
|
|
||||||
LOG_WARNING(RSX, "TODO: NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE: %d", enable);
|
LOG_WARNING(RSX, "TODO: NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE: %d", enable);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1900,7 +1947,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
const u32 notify = ARGS(7);
|
const u32 notify = ARGS(7);
|
||||||
|
|
||||||
// The existing GCM commands use only the value 0x1 for inFormat and outFormat
|
// The existing GCM commands use only the value 0x1 for inFormat and outFormat
|
||||||
if (inFormat != 0x01 || outFormat != 0x01) {
|
if (inFormat != 0x01 || outFormat != 0x01)
|
||||||
|
{
|
||||||
LOG_ERROR(RSX, "NV0039_OFFSET_IN: Unsupported format: inFormat=%d, outFormat=%d", inFormat, outFormat);
|
LOG_ERROR(RSX, "NV0039_OFFSET_IN: Unsupported format: inFormat=%d, outFormat=%d", inFormat, outFormat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1910,7 +1958,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG_ERROR(RSX, "NV0039_OFFSET_IN: TODO: offset(in=0x%x, out=0x%x), pitch(in=0x%x, out=0x%x), line(len=0x%x, cnt=0x%x), fmt(in=0x%x, out=0x%x), notify=0x%x",
|
LOG_ERROR(RSX, "NV0039_OFFSET_IN: bad offset(in=0x%x, out=0x%x), pitch(in=0x%x, out=0x%x), line(len=0x%x, cnt=0x%x), fmt(in=0x%x, out=0x%x), notify=0x%x",
|
||||||
inOffset, outOffset, inPitch, outPitch, lineLength, lineCount, inFormat, outFormat, notify);
|
inOffset, outOffset, inPitch, outPitch, lineLength, lineCount, inFormat, outFormat, notify);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1925,22 +1973,26 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG_ERROR(RSX, "NV0039_OFFSET_OUT: TODO: offset=0x%x", offset);
|
LOG_ERROR(RSX, "TODO: NV0039_OFFSET_OUT: offset=0x%x", offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NV0039_PITCH_IN:
|
case NV0039_PITCH_IN:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV0039_PITCH_IN: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV0039_PITCH_IN: 0x%x", value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NV0039_BUFFER_NOTIFY:
|
case NV0039_BUFFER_NOTIFY:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV0039_BUFFER_NOTIFY: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV0039_BUFFER_NOTIFY: 0x%x", value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1968,8 +2020,10 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
// NV309E
|
// NV309E
|
||||||
case NV309E_SET_CONTEXT_DMA_IMAGE:
|
case NV309E_SET_CONTEXT_DMA_IMAGE:
|
||||||
{
|
{
|
||||||
if (ARGS(0))
|
if (u32 value = ARGS(0))
|
||||||
LOG_WARNING(RSX, "NV309E_SET_CONTEXT_DMA_IMAGE: 0x%x", ARGS(0));
|
{
|
||||||
|
LOG_WARNING(RSX, "TODO: NV309E_SET_CONTEXT_DMA_IMAGE: 0x%x", value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1979,7 +2033,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
const u8 width = ARGS(0) >> 16;
|
const u8 width = ARGS(0) >> 16;
|
||||||
const u8 format = ARGS(0);
|
const u8 format = ARGS(0);
|
||||||
const u32 offset = ARGS(1);
|
const u32 offset = ARGS(1);
|
||||||
LOG_WARNING(RSX, "NV309E_SET_FORMAT: Format:0x%x, Width:%d, Height:%d, Offset:0x%x", format, width, height, offset);
|
|
||||||
|
LOG_WARNING(RSX, "TODO: NV309E_SET_FORMAT: Format:0x%x, Width:%d, Height:%d, Offset:0x%x", format, width, height, offset);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2030,8 +2085,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
LOG_WARNING(RSX, "NV308A_COLOR: count = %d", count);
|
LOG_WARNING(RSX, "NV308A_COLOR: count = %d", count);
|
||||||
}
|
}
|
||||||
|
|
||||||
//LOG_WARNING(RSX, "NV308A_COLOR: [%d]: %f, %f, %f, %f", c.id, c.x, c.y, c.z, c.w);
|
|
||||||
m_fragment_constants.push_back(c);
|
m_fragment_constants.push_back(c);
|
||||||
|
|
||||||
|
//LOG_WARNING(RSX, "NV308A_COLOR: [%d]: %f, %f, %f, %f", c.id, c.x, c.y, c.z, c.w);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2046,7 +2102,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
{
|
{
|
||||||
if (ARGS(0) != CELL_GCM_CONTEXT_SURFACE2D)
|
if (ARGS(0) != CELL_GCM_CONTEXT_SURFACE2D)
|
||||||
{
|
{
|
||||||
LOG_WARNING(RSX, "NV3089_SET_CONTEXT_SURFACE: Unsupported surface (0x%x)", ARGS(0));
|
LOG_ERROR(RSX, "NV3089_SET_CONTEXT_SURFACE: Unsupported surface (0x%x)", ARGS(0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -2069,7 +2125,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
u8* pixels_dst = vm::get_ptr<u8>(GetAddress(m_dst_offset, m_context_dma_img_dst - 0xfeed0000));
|
u8* pixels_dst = vm::get_ptr<u8>(GetAddress(m_dst_offset, m_context_dma_img_dst - 0xfeed0000));
|
||||||
|
|
||||||
LOG_WARNING(RSX, "NV3089_IMAGE_IN_SIZE: width=%d, height=%d, pitch=%d, origin=%d, inter=%d, offset=0x%x, u=%d, v=%d", width, height, pitch, origin, inter, offset, u, v);
|
LOG_WARNING(RSX, "NV3089_IMAGE_IN_SIZE: width=%d, height=%d, pitch=%d, origin=%d, inter=%d, offset=0x%x, u=%d, v=%d", width, height, pitch, origin, inter, offset, u, v);
|
||||||
LOG_WARNING(RSX, "*** m_dst_offset=0x%x, m_color: conv_in_h=0x%x, format_src_pitch=0x%x, conv_in_x=0x%x, conv_in_y=0x%x, conv_out_x=0x%x, conv_out_y=0x%x",
|
LOG_WARNING(RSX, "NV3089_IMAGE_IN_SIZE: m_dst_offset=0x%x, m_color: conv_in_h=0x%x, format_src_pitch=0x%x, conv_in_x=0x%x, conv_in_y=0x%x, conv_out_x=0x%x, conv_out_y=0x%x",
|
||||||
m_dst_offset, m_color_conv_in_h, m_color_format_src_pitch, m_color_conv_in_x, m_color_conv_in_y, m_color_conv_out_x, m_color_conv_out_y);
|
m_dst_offset, m_color_conv_in_h, m_color_format_src_pitch, m_color_conv_in_x, m_color_conv_in_y, m_color_conv_out_x, m_color_conv_out_y);
|
||||||
|
|
||||||
for(u16 y=0; y<m_color_conv_in_h; ++y)
|
for(u16 y=0; y<m_color_conv_in_h; ++y)
|
||||||
|
@ -2099,6 +2155,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
m_color_conv_out_h = ARGS(6) >> 16;
|
m_color_conv_out_h = ARGS(6) >> 16;
|
||||||
m_color_conv_dsdx = ARGS(7);
|
m_color_conv_dsdx = ARGS(7);
|
||||||
m_color_conv_dtdy = ARGS(8);
|
m_color_conv_dtdy = ARGS(8);
|
||||||
|
|
||||||
|
LOG_WARNING(RSX, "TODO: NV3089_SET_COLOR_CONVERSION");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2199,7 +2257,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||||
case NV3089_IMAGE_IN_OFFSET:
|
case NV3089_IMAGE_IN_OFFSET:
|
||||||
case NV3089_IMAGE_IN:
|
case NV3089_IMAGE_IN:
|
||||||
{
|
{
|
||||||
LOG_WARNING(RSX, "Unused NV3089 method 0x%x detected!", cmd);
|
LOG_WARNING(RSX, "Unused NV3089 methods 0x%x detected!", cmd);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue