Merge pull request #379 from raven02/patch-7

Cross-check and validate all NV0406E/4097/3089/3062/308A functions with ...
This commit is contained in:
B1ackDaemon 2014-07-01 03:31:35 +03:00
commit 2037068428

View File

@ -193,6 +193,60 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
switch(cmd)
{
// NV406E
case NV406E_SET_REFERENCE:
{
m_ctrl->ref = ARGS(0);
}
break;
case NV406E_SET_CONTEXT_DMA_SEMAPHORE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV406E_SET_CONTEXT_DMA_SEMAPHORE: %x", ARGS(0));
}
break;
case NV4097_SET_SEMAPHORE_OFFSET:
case NV406E_SEMAPHORE_OFFSET:
{
m_set_semaphore_offset = true;
m_semaphore_offset = ARGS(0);
}
break;
case NV406E_SEMAPHORE_ACQUIRE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV406E_SEMAPHORE_ACQUIRE: %x", ARGS(0));
}
break;
case NV406E_SEMAPHORE_RELEASE:
case NV4097_TEXTURE_READ_SEMAPHORE_RELEASE:
{
if(m_set_semaphore_offset)
{
m_set_semaphore_offset = false;
Memory.Write32(Memory.RSXCMDMem.GetStartAddr() + m_semaphore_offset, ARGS(0));
}
}
break;
case NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE:
{
if(m_set_semaphore_offset)
{
m_set_semaphore_offset = false;
u32 value = ARGS(0);
value = (value & 0xff00ff00) | ((value & 0xff) << 16) | ((value >> 16) & 0xff);
Memory.Write32(Memory.RSXCMDMem.GetStartAddr() + m_semaphore_offset, value);
}
}
break;
// NV4097
case NV4097_SET_FLIP:
//if(cmd == 0xfeadffff)
{
@ -214,13 +268,28 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
case NV4097_NO_OPERATION:
{
LOG_WARNING(RSX, "NV4097_NO_OPERATION");
// Nothing to do here
}
break;
case NV406E_SET_REFERENCE:
case NV4097_NOTIFY:
{
m_ctrl->ref = ARGS(0);
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_NOTIFY: %x", ARGS(0));
}
break;
case NV4097_WAIT_FOR_IDLE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_WAIT_FOR_IDLE: %x", ARGS(0));
}
break;
case NV4097_PM_TRIGGER:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_PM_TRIGGER: %x", ARGS(0));
}
break;
@ -431,10 +500,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
m_set_alpha_func = true;
m_alpha_func = ARGS(0);
if (count >= 2)
if (count == 2)
{
m_set_alpha_ref = true;
const u32 a1 = ARGS(1);
m_alpha_ref = (float&)a1;
}
@ -480,6 +548,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
{
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_SET_BLEND_ENABLE_MRT: %x", ARGS(0));
// TODO:
// (cmd)[1] = CELL_GCM_ENDIAN_SWAP(((mrt1) << 1) | ((mrt2) << 2) | ((mrt3) << 3));
}
break;
@ -489,7 +560,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
m_blend_sfactor_rgb = ARGS(0) & 0xffff;
m_blend_sfactor_alpha = ARGS(0) >> 16;
if (count >= 2)
if (count == 2)
{
m_set_blend_dfactor = true;
m_blend_dfactor_rgb = ARGS(1) & 0xffff;
@ -550,7 +621,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
m_set_depth_bounds = true;
const u32 a0 = ARGS(0);
m_depth_bounds_min = (float&)a0;
if (count > 1)
if (count == 2)
{
const u32 a1 = ARGS(1);
m_depth_bounds_max = (float&)a1;
@ -567,21 +639,13 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
break;
// Viewport
case NV4097_SET_VIEWPORT_VERTICAL:
{
m_set_viewport_vertical = true;
m_viewport_y = ARGS(0) & 0xffff;
m_viewport_h = ARGS(0) >> 16;
}
break;
case NV4097_SET_VIEWPORT_HORIZONTAL:
{
m_set_viewport_horizontal = true;
m_viewport_x = ARGS(0) & 0xffff;
m_viewport_w = ARGS(0) >> 16;
if(count == 2)
if (count == 2)
{
m_set_viewport_vertical = true;
m_viewport_y = ARGS(1) & 0xffff;
@ -592,6 +656,14 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
case NV4097_SET_VIEWPORT_VERTICAL:
{
m_set_viewport_vertical = true;
m_viewport_y = ARGS(0) & 0xffff;
m_viewport_h = ARGS(0) >> 16;
}
break;
case NV4097_SET_VIEWPORT_SCALE:
case NV4097_SET_VIEWPORT_OFFSET:
{
@ -641,7 +713,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
// Polygon
// Polygon mode/offset
case NV4097_SET_FRONT_POLYGON_MODE:
{
m_set_front_polygon_mode = true;
@ -681,6 +753,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
const u32 a0 = ARGS(0);
m_poly_offset_scale_factor = (float&)a0;
if (count == 2)
{
const u32 a1 = ARGS(1);
m_poly_offset_bias = (float&)a1;
}
}
break;
@ -739,6 +817,13 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
case NV4097_CLEAR_REPORT_VALUE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_CLEAR_REPORT_VALUE: %x", ARGS(0));
}
break;
case NV4097_SET_CLEAR_RECT_HORIZONTAL:
{
if (ARGS(0))
@ -766,7 +851,11 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
LoadVertexData(first, _count);
if(first < m_draw_array_first) m_draw_array_first = first;
if (first < m_draw_array_first)
{
m_draw_array_first = first;
}
m_draw_array_count += _count;
}
}
@ -890,19 +979,24 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
m_cur_vertex_prog = &m_vertex_progs[ARGS(0)];
m_cur_vertex_prog->data.clear();
if(count == 2)
if (count == 2)
{
const u32 start = ARGS(1);
if(start)
if (start)
{
LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM_LOAD: start = %d", start);
}
}
}
break;
case NV4097_SET_TRANSFORM_PROGRAM_START:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM_START: 0x%x", ARGS(0));
const u32 start = ARGS(0);
if (start)
{
LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM_START: start = %d", start);
}
}
break;
@ -922,6 +1016,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
case NV4097_SET_TRANSFORM_TIMEOUT:
// TODO:
// (cmd)[1] = CELL_GCM_ENDIAN_SWAP((count) | ((registerCount) << 16)); \
if(!m_cur_vertex_prog)
{
LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_TIMEOUT: m_cur_vertex_prog == NULL");
@ -964,15 +1061,13 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
case NV4097_INVALIDATE_VERTEX_CACHE_FILE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_INVALIDATE_VERTEX_CACHE_FILE: %x", ARGS(0));
// Nothing to do here
}
break;
case NV4097_INVALIDATE_VERTEX_FILE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_INVALIDATE_VERTEX_FILE: %x", ARGS(0));
// Nothing to do here
}
break;
@ -1010,6 +1105,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
case NV4097_SET_TWO_SIDED_STENCIL_TEST_ENABLE:
{
m_set_two_sided_stencil_test_enable = ARGS(0) ? true : false;
}
break;
case NV4097_SET_STENCIL_MASK:
{
m_set_stencil_mask = true;
@ -1021,6 +1122,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
{
m_set_stencil_func = true;
m_stencil_func = ARGS(0);
if(count >= 2)
{
m_set_stencil_func_ref = true;
@ -1053,6 +1155,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
{
m_set_stencil_fail = true;
m_stencil_fail = ARGS(0);
if(count >= 2)
{
m_set_stencil_zfail = true;
@ -1067,12 +1170,6 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
case NV4097_SET_TWO_SIDED_STENCIL_TEST_ENABLE:
{
m_set_two_sided_stencil_test_enable = ARGS(0) ? true : false;
}
break;
case NV4097_SET_BACK_STENCIL_MASK:
{
m_set_back_stencil_mask = true;
@ -1084,6 +1181,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
{
m_set_back_stencil_func = true;
m_back_stencil_func = ARGS(0);
if(count >= 2)
{
m_set_back_stencil_func_ref = true;
@ -1116,6 +1214,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
{
m_set_stencil_fail = true;
m_stencil_fail = ARGS(0);
if(count >= 2)
{
m_set_back_stencil_zfail = true;
@ -1173,6 +1272,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
case NV4097_SET_POINT_SPRITE_CONTROL:
{
m_set_point_sprite_control = ARGS(0) ? true : false;
// TODO:
//(cmd)[1] = CELL_GCM_ENDIAN_SWAP((enable) | ((rmode) << 1) | (texcoordMask));
}
break;
@ -1184,14 +1286,6 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
break;
// Scissor
case NV4097_SET_SCISSOR_VERTICAL:
{
m_set_scissor_vertical = true;
m_scissor_y = ARGS(0) & 0xffff;
m_scissor_h = ARGS(0) >> 16;
}
break;
case NV4097_SET_SCISSOR_HORIZONTAL:
{
m_set_scissor_horizontal = true;
@ -1207,47 +1301,14 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
// Semaphore
case NV4097_SET_SEMAPHORE_OFFSET:
case NV406E_SEMAPHORE_OFFSET:
case NV4097_SET_SCISSOR_VERTICAL:
{
m_set_semaphore_offset = true;
m_semaphore_offset = ARGS(0);
m_set_scissor_vertical = true;
m_scissor_y = ARGS(0) & 0xffff;
m_scissor_h = ARGS(0) >> 16;
}
break;
case NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE:
{
if(m_set_semaphore_offset)
{
m_set_semaphore_offset = false;
u32 value = ARGS(0);
value = (value & 0xff00ff00) | ((value & 0xff) << 16) | ((value >> 16) & 0xff);
Memory.Write32(Memory.RSXCMDMem.GetStartAddr() + m_semaphore_offset, value);
}
}
break;
case NV406E_SEMAPHORE_RELEASE:
case NV4097_TEXTURE_READ_SEMAPHORE_RELEASE:
{
if(m_set_semaphore_offset)
{
m_set_semaphore_offset = false;
Memory.Write32(Memory.RSXCMDMem.GetStartAddr() + m_semaphore_offset, ARGS(0));
}
}
break;
case NV406E_SEMAPHORE_ACQUIRE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV406E_SEMAPHORE_ACQUIRE: %x", ARGS(0));
}
break;
// Depth/ Color buffer usage
case NV4097_SET_SURFACE_FORMAT:
{
@ -1420,12 +1481,17 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
case NV4097_SET_SURFACE_CLIP_VERTICAL:
case NV4097_SET_CONTEXT_DMA_SEMAPHORE:
{
const u32 a0 = ARGS(0);
m_set_surface_clip_vertical = true;
m_surface_clip_y = a0;
m_surface_clip_h = a0 >> 16;
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_SET_CONTEXT_DMA_SEMAPHORE: %x", ARGS(0));
}
break;
case NV4097_SET_CONTEXT_DMA_NOTIFIES:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0));
}
break;
@ -1437,7 +1503,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
m_surface_clip_x = a0;
m_surface_clip_w = a0 >> 16;
if(count >= 2)
if(count == 2)
{
const u32 a1 = ARGS(1);
m_set_surface_clip_vertical = true;
@ -1447,15 +1513,27 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
// Antialiasing
case NV4097_SET_SURFACE_CLIP_VERTICAL:
{
const u32 a0 = ARGS(0);
m_set_surface_clip_vertical = true;
m_surface_clip_y = a0;
m_surface_clip_h = a0 >> 16;
}
break;
// Anti aliasing
case NV4097_SET_ANTI_ALIASING_CONTROL:
{
// TODO:
// (cmd)[1] = CELL_GCM_ENDIAN_SWAP((enable) | ((alphaToCoverage) << 4) | ((alphaToOne) << 8) | ((sampleMask) << 16)); \
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_SET_ANTI_ALIASING_CONTROL: %x", ARGS(0));
}
break;
// Line/Polygon Smoothing
// Line/Polygon smoothing
case NV4097_SET_LINE_SMOOTH_ENABLE:
{
m_set_line_smooth = ARGS(0) ? true : false;
@ -1477,7 +1555,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
// Line/Polygon Stipple
// Line/Polygon stipple
case NV4097_SET_LINE_STIPPLE:
{
m_set_line_stipple = ARGS(0) ? true : false;
@ -1493,6 +1571,20 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
case NV4097_SET_POLYGON_STIPPLE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_SET_POLYGON_STIPPLE: %x", ARGS(0));
}
break;
case NV4097_SET_POLYGON_STIPPLE_PATTERN:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_SET_POLYGON_STIPPLE_PATTERN: %x", ARGS(0));
}
break;
// Zcull
case NV4097_SET_ZCULL_EN:
{
@ -1523,6 +1615,20 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
case NV4097_SET_ZCULL_STATS_ENABLE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_SET_ZCULL_STATS_ENABLE: %x", ARGS(0));
}
break;
case NV4097_ZCULL_SYNC:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_ZCULL_SYNC: %x", ARGS(0));
}
break;
// Reporting
case NV4097_GET_REPORT:
{
@ -1573,6 +1679,13 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
break;
// Fog
case NV4097_SET_FOG_MODE:
{
m_set_fog_mode = true;
m_fog_mode = ARGS(0);
}
break;
case NV4097_SET_FOG_PARAMS:
{
m_set_fog_params = true;
@ -1583,18 +1696,14 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
case NV4097_SET_FOG_MODE:
{
m_set_fog_mode = true;
m_fog_mode = ARGS(0);
}
break;
// Zmin_max
case NV4097_SET_ZMIN_MAX_CONTROL:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_SET_ZMIN_MAX_CONTROL: %x", ARGS(0));
// TODO:
// (cmd)[1] = CELL_GCM_ENDIAN_SWAP((cullNearFarEnable) | ((zclampEnable) << 4) | ((cullIgnoreW)<<8));
}
break;
@ -1633,6 +1742,23 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
case NV4097_SET_RENDER_ENABLE:
{
// TODO:
// (cmd)[1] = CELL_GCM_ENDIAN_SWAP((offset) | ((mode) << 24)); \
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_SET_RENDER_ENABLE: %x", ARGS(0));
}
break;
case NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE: %x", ARGS(0));
}
break;
case 0x000002c8:
case 0x000002d0:
case 0x000002d8:
@ -1642,6 +1768,21 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
case 0x000002f8:
break;
// NV0039
case NV0039_SET_OBJECT:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV0039_SET_OBJECT: %x", ARGS(0));
}
break;
case NV0039_SET_CONTEXT_DMA_NOTIFIES:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV0039_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0));
}
break;
case NV0039_SET_CONTEXT_DMA_BUFFER_IN: // [E : RSXThread]: TODO: unknown/illegal method [0x00002184](0xfeed0000, 0xfeed0000)
{
const u32 srcContext = ARGS(0);
@ -1657,6 +1798,13 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
case NV0039_SET_CONTEXT_DMA_BUFFER_OUT:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV0039_SET_CONTEXT_DMA_BUFFER_OUT: %x", ARGS(0));
}
break;
case NV0039_OFFSET_IN: // [E : RSXThread]: TODO: unknown/illegal method [0x0000230c](0x0, 0xb00400, 0x0, 0x0, 0x384000, 0x1, 0x101, 0x0)
{
const u32 inOffset = ARGS(0);
@ -1696,12 +1844,247 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
case NV0039_PITCH_IN:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV0039_PITCH_IN: %x", ARGS(0));
}
break;
case NV0039_PITCH_OUT:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV0039_PITCH_OUT: %x", ARGS(0));
}
break;
case NV0039_LINE_LENGTH_IN:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV0039_LINE_LENGTH_IN: %x", ARGS(0));
}
break;
case NV0039_LINE_COUNT:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV0039_LINE_COUNT: %x", ARGS(0));
}
break;
case NV0039_FORMAT:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV0039_FORMAT: %x", ARGS(0));
}
break;
case NV0039_BUFFER_NOTIFY:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV0039_BUFFER_NOTIFY: %x", ARGS(0));
}
break;
// NV3062
case NV3062_SET_OBJECT:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3062_SET_OBJECT: %x", ARGS(0));
}
break;
case NV3062_SET_CONTEXT_DMA_NOTIFIES:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3062_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0));
}
break;
case NV3062_SET_CONTEXT_DMA_IMAGE_SOURCE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3062_SET_CONTEXT_DMA_IMAGE_SOURCE: %x", ARGS(0));
}
break;
case NV3062_SET_CONTEXT_DMA_IMAGE_DESTIN:
{
m_context_dma_img_dst = ARGS(0);
}
break;
case NV3062_SET_COLOR_FORMAT:
{
m_color_format = ARGS(0);
m_color_format_src_pitch = ARGS(1);
m_color_format_dst_pitch = ARGS(1) >> 16;
}
break;
case NV3062_SET_PITCH:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3062_SET_PITCH: %x", ARGS(0));
}
break;
case NV3062_SET_OFFSET_SOURCE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3062_SET_OFFSET_SOURCE: %x", ARGS(0));
}
break;
case NV3062_SET_OFFSET_DESTIN:
{
m_dst_offset = ARGS(0);
}
break;
// NV309E
case NV309E_SET_OBJECT:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV309E_SET_OBJECT: %x", ARGS(0));
}
break;
case NV309E_SET_CONTEXT_DMA_NOTIFIES:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV309E_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0));
}
break;
case NV309E_SET_CONTEXT_DMA_IMAGE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV309E_SET_CONTEXT_DMA_IMAGE: %x", ARGS(0));
}
break;
case NV309E_SET_FORMAT:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV309E_SET_FORMAT: %x", ARGS(0));
}
break;
case NV309E_SET_OFFSET:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV309E_SET_OFFSET: %x", ARGS(0));
}
break;
// NV308A
case NV308A_SET_OBJECT:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV308A_SET_OBJECT: %x", ARGS(0));
}
break;
case NV308A_SET_CONTEXT_DMA_NOTIFIES:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV308A_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0));
}
break;
case NV308A_SET_CONTEXT_COLOR_KEY:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV308A_SET_CONTEXT_COLOR_KEY: %x", ARGS(0));
}
break;
case NV308A_SET_CONTEXT_CLIP_RECTANGLE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV308A_SET_CONTEXT_CLIP_RECTANGLE: %x", ARGS(0));
}
break;
case NV308A_SET_CONTEXT_PATTERN:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV308A_SET_CONTEXT_PATTERN: %x", ARGS(0));
}
break;
case NV308A_SET_CONTEXT_ROP:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV308A_SET_CONTEXT_ROP: %x", ARGS(0));
}
break;
case NV308A_SET_CONTEXT_BETA1:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV308A_SET_CONTEXT_BETA1: %x", ARGS(0));
}
break;
case NV308A_SET_CONTEXT_BETA4:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV308A_SET_CONTEXT_BETA4: %x", ARGS(0));
}
break;
case NV308A_SET_CONTEXT_SURFACE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_SET_CONTEXT_SURFACE: %x", ARGS(0));
}
break;
case NV308A_SET_COLOR_CONVERSION:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV308A_SET_COLOR_CONVERSION: %x", ARGS(0));
}
break;
case NV308A_SET_OPERATION:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV308A_SET_OPERATION: %x", ARGS(0));
}
break;
case NV308A_SET_COLOR_FORMAT:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV308A_SET_COLOR_FORMAT: %x", ARGS(0));
}
break;
case NV308A_POINT:
{
const u32 a0 = ARGS(0);
m_point_x = a0 & 0xffff;
m_point_y = a0 >> 16;
}
break;
case NV308A_SIZE_OUT:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV308A_SIZE_OUT: %x", ARGS(0));
}
break;
case NV308A_SIZE_IN:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV308A_SIZE_IN: %x", ARGS(0));
}
break;
case NV308A_COLOR:
{
RSXTransformConstant c;
@ -1745,19 +2128,61 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
case NV308A_POINT:
// NV3089
case NV3089_SET_OBJECT:
{
const u32 a0 = ARGS(0);
m_point_x = a0 & 0xffff;
m_point_y = a0 >> 16;
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_SET_OBJECT: %x", ARGS(0));
}
break;
case NV3062_SET_COLOR_FORMAT:
case NV3089_SET_CONTEXT_DMA_NOTIFIES:
{
m_color_format = ARGS(0);
m_color_format_src_pitch = ARGS(1);
m_color_format_dst_pitch = ARGS(1) >> 16;
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0));
}
break;
case NV3089_SET_CONTEXT_DMA_IMAGE:
{
m_context_dma_img_src = ARGS(0);
}
break;
case NV3089_SET_CONTEXT_PATTERN:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_SET_CONTEXT_PATTERN: %x", ARGS(0));
}
break;
case NV3089_SET_CONTEXT_ROP:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_SET_CONTEXT_ROP: %x", ARGS(0));
}
break;
case NV3089_SET_CONTEXT_BETA1:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_SET_CONTEXT_BETA1: %x", ARGS(0));
}
break;
case NV3089_SET_CONTEXT_BETA4:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_SET_CONTEXT_BETA4: %x", ARGS(0));
}
break;
case NV3089_SET_CONTEXT_SURFACE:
{
if (ARGS(0) != CELL_GCM_CONTEXT_SURFACE2D)
{
LOG_WARNING(RSX, "NV3089_SET_CONTEXT_SURFACE: Unsupported surface (0x%x)", ARGS(0));
}
}
break;
@ -1779,6 +2204,62 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
case NV3089_SET_COLOR_FORMAT:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_SET_COLOR_FORMAT: %x", ARGS(0));
}
break;
case NV3089_SET_OPERATION:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_SET_OPERATION: %x", ARGS(0));
}
break;
case NV3089_CLIP_POINT:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_CLIP_POINT: %x", ARGS(0));
}
break;
case NV3089_CLIP_SIZE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_CLIP_SIZE: %x", ARGS(0));
}
break;
case NV3089_IMAGE_OUT_POINT:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_IMAGE_OUT_POINT: %x", ARGS(0));
}
break;
case NV3089_IMAGE_OUT_SIZE:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_IMAGE_OUT_SIZE: %x", ARGS(0));
}
break;
case NV3089_DS_DX:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_DS_DX: %x", ARGS(0));
}
break;
case NV3089_DT_DY:
{
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_DT_DY: %x", ARGS(0));
}
break;
case NV3089_IMAGE_IN_SIZE:
{
u16 width = ARGS(0);
@ -1808,24 +2289,24 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
}
break;
case NV3089_SET_CONTEXT_DMA_IMAGE:
case NV3089_IMAGE_IN_FORMAT:
{
m_context_dma_img_src = ARGS(0);
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_IMAGE_IN_FORMAT: %x", ARGS(0));
}
break;
case NV3062_SET_CONTEXT_DMA_IMAGE_DESTIN:
case NV3089_IMAGE_IN_OFFSET:
{
m_context_dma_img_dst = ARGS(0);
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_IMAGE_IN_OFFSET: %x", ARGS(0));
}
break;
case NV3089_SET_CONTEXT_SURFACE:
case NV3089_IMAGE_IN:
{
if (ARGS(0) != CELL_GCM_CONTEXT_SURFACE2D)
{
LOG_WARNING(RSX, "NV3089_SET_CONTEXT_SURFACE: Unsupported surface (0x%x)", ARGS(0));
}
if (ARGS(0))
LOG_WARNING(RSX, "NV3089_IMAGE_IN: %x", ARGS(0));
}
break;