#include "stdafx.h" #include "GCM.h" #include "rsx_decode.h" namespace { const std::unordered_map methods_name = { { NV4097_NO_OPERATION, "NV4097_NO_OPERATION" }, { NV4097_NOTIFY, "NV4097_NOTIFY" }, { NV4097_WAIT_FOR_IDLE, "NV4097_WAIT_FOR_IDLE" }, { NV4097_PM_TRIGGER, "NV4097_PM_TRIGGER" }, { NV4097_SET_CONTEXT_DMA_NOTIFIES, "NV4097_SET_CONTEXT_DMA_NOTIFIES" }, { NV4097_SET_CONTEXT_DMA_A, "NV4097_SET_CONTEXT_DMA_A" }, { NV4097_SET_CONTEXT_DMA_B, "NV4097_SET_CONTEXT_DMA_B" }, { NV4097_SET_CONTEXT_DMA_COLOR_B, "NV4097_SET_CONTEXT_DMA_COLOR_B" }, { NV4097_SET_CONTEXT_DMA_STATE, "NV4097_SET_CONTEXT_DMA_STATE" }, { NV4097_SET_CONTEXT_DMA_COLOR_A, "NV4097_SET_CONTEXT_DMA_COLOR_A" }, { NV4097_SET_CONTEXT_DMA_ZETA, "NV4097_SET_CONTEXT_DMA_ZETA" }, { NV4097_SET_CONTEXT_DMA_VERTEX_A, "NV4097_SET_CONTEXT_DMA_VERTEX_A" }, { NV4097_SET_CONTEXT_DMA_VERTEX_B, "NV4097_SET_CONTEXT_DMA_VERTEX_B" }, { NV4097_SET_CONTEXT_DMA_SEMAPHORE, "NV4097_SET_CONTEXT_DMA_SEMAPHORE" }, { NV4097_SET_CONTEXT_DMA_REPORT, "NV4097_SET_CONTEXT_DMA_REPORT" }, { NV4097_SET_CONTEXT_DMA_CLIP_ID, "NV4097_SET_CONTEXT_DMA_CLIP_ID" }, { NV4097_SET_CONTEXT_DMA_CULL_DATA, "NV4097_SET_CONTEXT_DMA_CULL_DATA" }, { NV4097_SET_CONTEXT_DMA_COLOR_C, "NV4097_SET_CONTEXT_DMA_COLOR_C" }, { NV4097_SET_CONTEXT_DMA_COLOR_D, "NV4097_SET_CONTEXT_DMA_COLOR_D" }, { NV4097_SET_SURFACE_CLIP_HORIZONTAL, "NV4097_SET_SURFACE_CLIP_HORIZONTAL" }, { NV4097_SET_SURFACE_CLIP_VERTICAL, "NV4097_SET_SURFACE_CLIP_VERTICAL" }, { NV4097_SET_SURFACE_FORMAT, "NV4097_SET_SURFACE_FORMAT" }, { NV4097_SET_SURFACE_PITCH_A, "NV4097_SET_SURFACE_PITCH_A" }, { NV4097_SET_SURFACE_COLOR_AOFFSET, "NV4097_SET_SURFACE_COLOR_AOFFSET" }, { NV4097_SET_SURFACE_ZETA_OFFSET, "NV4097_SET_SURFACE_ZETA_OFFSET" }, { NV4097_SET_SURFACE_COLOR_BOFFSET, "NV4097_SET_SURFACE_COLOR_BOFFSET" }, { NV4097_SET_SURFACE_PITCH_B, "NV4097_SET_SURFACE_PITCH_B" }, { NV4097_SET_SURFACE_COLOR_TARGET, "NV4097_SET_SURFACE_COLOR_TARGET" }, { NV4097_SET_SURFACE_PITCH_Z, "NV4097_SET_SURFACE_PITCH_Z" }, { NV4097_INVALIDATE_ZCULL, "NV4097_INVALIDATE_ZCULL" }, { NV4097_SET_CYLINDRICAL_WRAP, "NV4097_SET_CYLINDRICAL_WRAP" }, { NV4097_SET_CYLINDRICAL_WRAP1, "NV4097_SET_CYLINDRICAL_WRAP1" }, { NV4097_SET_SURFACE_PITCH_C, "NV4097_SET_SURFACE_PITCH_C" }, { NV4097_SET_SURFACE_PITCH_D, "NV4097_SET_SURFACE_PITCH_D" }, { NV4097_SET_SURFACE_COLOR_COFFSET, "NV4097_SET_SURFACE_COLOR_COFFSET" }, { NV4097_SET_SURFACE_COLOR_DOFFSET, "NV4097_SET_SURFACE_COLOR_DOFFSET" }, { NV4097_SET_WINDOW_OFFSET, "NV4097_SET_WINDOW_OFFSET" }, { NV4097_SET_DITHER_ENABLE, "NV4097_SET_DITHER_ENABLE" }, { NV4097_SET_ALPHA_TEST_ENABLE, "NV4097_SET_ALPHA_TEST_ENABLE" }, { NV4097_SET_ALPHA_FUNC, "NV4097_SET_ALPHA_FUNC" }, { NV4097_SET_ALPHA_REF, "NV4097_SET_ALPHA_REF" }, { NV4097_SET_BLEND_ENABLE, "NV4097_SET_BLEND_ENABLE" }, { NV4097_SET_BLEND_FUNC_SFACTOR, "NV4097_SET_BLEND_FUNC_SFACTOR" }, { NV4097_SET_BLEND_FUNC_DFACTOR, "NV4097_SET_BLEND_FUNC_DFACTOR" }, { NV4097_SET_BLEND_COLOR, "NV4097_SET_BLEND_COLOR" }, { NV4097_SET_BLEND_EQUATION, "NV4097_SET_BLEND_EQUATION" }, { NV4097_SET_COLOR_MASK, "NV4097_SET_COLOR_MASK" }, { NV4097_SET_STENCIL_TEST_ENABLE, "NV4097_SET_STENCIL_TEST_ENABLE" }, { NV4097_SET_STENCIL_MASK, "NV4097_SET_STENCIL_MASK" }, { NV4097_SET_STENCIL_FUNC, "NV4097_SET_STENCIL_FUNC" }, { NV4097_SET_STENCIL_FUNC_REF, "NV4097_SET_STENCIL_FUNC_REF" }, { NV4097_SET_STENCIL_FUNC_MASK, "NV4097_SET_STENCIL_FUNC_MASK" }, { NV4097_SET_STENCIL_OP_FAIL, "NV4097_SET_STENCIL_OP_FAIL" }, { NV4097_SET_STENCIL_OP_ZFAIL, "NV4097_SET_STENCIL_OP_ZFAIL" }, { NV4097_SET_STENCIL_OP_ZPASS, "NV4097_SET_STENCIL_OP_ZPASS" }, { NV4097_SET_TWO_SIDED_STENCIL_TEST_ENABLE, "NV4097_SET_TWO_SIDED_STENCIL_TEST_ENABLE" }, { NV4097_SET_BACK_STENCIL_MASK, "NV4097_SET_BACK_STENCIL_MASK" }, { NV4097_SET_BACK_STENCIL_FUNC, "NV4097_SET_BACK_STENCIL_FUNC" }, { NV4097_SET_BACK_STENCIL_FUNC_REF, "NV4097_SET_BACK_STENCIL_FUNC_REF" }, { NV4097_SET_BACK_STENCIL_FUNC_MASK, "NV4097_SET_BACK_STENCIL_FUNC_MASK" }, { NV4097_SET_BACK_STENCIL_OP_FAIL, "NV4097_SET_BACK_STENCIL_OP_FAIL" }, { NV4097_SET_BACK_STENCIL_OP_ZFAIL, "NV4097_SET_BACK_STENCIL_OP_ZFAIL" }, { NV4097_SET_BACK_STENCIL_OP_ZPASS, "NV4097_SET_BACK_STENCIL_OP_ZPASS" }, { NV4097_SET_SHADE_MODE, "NV4097_SET_SHADE_MODE" }, { NV4097_SET_BLEND_ENABLE_MRT, "NV4097_SET_BLEND_ENABLE_MRT" }, { NV4097_SET_COLOR_MASK_MRT, "NV4097_SET_COLOR_MASK_MRT" }, { NV4097_SET_LOGIC_OP_ENABLE, "NV4097_SET_LOGIC_OP_ENABLE" }, { NV4097_SET_LOGIC_OP, "NV4097_SET_LOGIC_OP" }, { NV4097_SET_BLEND_COLOR2, "NV4097_SET_BLEND_COLOR2" }, { NV4097_SET_DEPTH_BOUNDS_TEST_ENABLE, "NV4097_SET_DEPTH_BOUNDS_TEST_ENABLE" }, { NV4097_SET_DEPTH_BOUNDS_MIN, "NV4097_SET_DEPTH_BOUNDS_MIN" }, { NV4097_SET_DEPTH_BOUNDS_MAX, "NV4097_SET_DEPTH_BOUNDS_MAX" }, { NV4097_SET_CLIP_MIN, "NV4097_SET_CLIP_MIN" }, { NV4097_SET_CLIP_MAX, "NV4097_SET_CLIP_MAX" }, { NV4097_SET_CONTROL0, "NV4097_SET_CONTROL0" }, { NV4097_SET_LINE_WIDTH, "NV4097_SET_LINE_WIDTH" }, { NV4097_SET_LINE_SMOOTH_ENABLE, "NV4097_SET_LINE_SMOOTH_ENABLE" }, { NV4097_SET_ANISO_SPREAD, "NV4097_SET_ANISO_SPREAD" }, { NV4097_SET_ANISO_SPREAD + 4 / 4, "NV4097_SET_ANISO_SPREAD + 4" }, { NV4097_SET_ANISO_SPREAD + 8 / 4, "NV4097_SET_ANISO_SPREAD + 8" }, { NV4097_SET_ANISO_SPREAD + 12 / 4, "NV4097_SET_ANISO_SPREAD + 12" }, { NV4097_SET_ANISO_SPREAD + 16 / 4, "NV4097_SET_ANISO_SPREAD + 16" }, { NV4097_SET_ANISO_SPREAD + 20 / 4, "NV4097_SET_ANISO_SPREAD + 20" }, { NV4097_SET_ANISO_SPREAD + 24 / 4, "NV4097_SET_ANISO_SPREAD + 24" }, { NV4097_SET_ANISO_SPREAD + 28 / 4, "NV4097_SET_ANISO_SPREAD + 28" }, { NV4097_SET_ANISO_SPREAD + 32 / 4, "NV4097_SET_ANISO_SPREAD + 32" }, { NV4097_SET_ANISO_SPREAD + 36 / 4, "NV4097_SET_ANISO_SPREAD + 36" }, { NV4097_SET_ANISO_SPREAD + 40 / 4, "NV4097_SET_ANISO_SPREAD + 40" }, { NV4097_SET_ANISO_SPREAD + 44 / 4, "NV4097_SET_ANISO_SPREAD + 44" }, { NV4097_SET_ANISO_SPREAD + 48 / 4, "NV4097_SET_ANISO_SPREAD + 48" }, { NV4097_SET_ANISO_SPREAD + 52 / 4, "NV4097_SET_ANISO_SPREAD + 52" }, { NV4097_SET_ANISO_SPREAD + 56 / 4, "NV4097_SET_ANISO_SPREAD + 56" }, { NV4097_SET_ANISO_SPREAD + 60 / 4, "NV4097_SET_ANISO_SPREAD + 60" }, { NV4097_SET_SCISSOR_HORIZONTAL, "NV4097_SET_SCISSOR_HORIZONTAL" }, { NV4097_SET_SCISSOR_VERTICAL, "NV4097_SET_SCISSOR_VERTICAL" }, { NV4097_SET_FOG_MODE, "NV4097_SET_FOG_MODE" }, { NV4097_SET_FOG_PARAMS, "NV4097_SET_FOG_PARAMS" }, { NV4097_SET_FOG_PARAMS + 4 / 4, "NV4097_SET_FOG_PARAMS + 4" }, { NV4097_SET_FOG_PARAMS + 8 / 4, "NV4097_SET_FOG_PARAMS + 8" }, { NV4097_SET_SHADER_PROGRAM, "NV4097_SET_SHADER_PROGRAM" }, { NV4097_SET_VERTEX_TEXTURE_OFFSET, "NV4097_SET_VERTEX_TEXTURE_OFFSET" }, { NV4097_SET_VERTEX_TEXTURE_FORMAT, "NV4097_SET_VERTEX_TEXTURE_FORMAT" }, { NV4097_SET_VERTEX_TEXTURE_ADDRESS, "NV4097_SET_VERTEX_TEXTURE_ADDRESS" }, { NV4097_SET_VERTEX_TEXTURE_CONTROL0, "NV4097_SET_VERTEX_TEXTURE_CONTROL0" }, { NV4097_SET_VERTEX_TEXTURE_CONTROL3, "NV4097_SET_VERTEX_TEXTURE_CONTROL3" }, { NV4097_SET_VERTEX_TEXTURE_FILTER, "NV4097_SET_VERTEX_TEXTURE_FILTER" }, { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT, "NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT" }, { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR, "NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR" }, { NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x20 / 4, "NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x20" }, { NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x20 / 4, "NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x20" }, { NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x20 / 4, "NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x20" }, { NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x20 / 4, "NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x20" }, { NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x20 / 4, "NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x20" }, { NV4097_SET_VERTEX_TEXTURE_FILTER + 0x20 / 4, "NV4097_SET_VERTEX_TEXTURE_FILTER + 0x20" }, { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x20 / 4, "NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x20" }, { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x20 / 4, "NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x20" }, { NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x40 / 4, "NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x40" }, { NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x40 / 4, "NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x40" }, { NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x40 / 4, "NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x40" }, { NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x40 / 4, "NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x40" }, { NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x40 / 4, "NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x40" }, { NV4097_SET_VERTEX_TEXTURE_FILTER + 0x40 / 4, "NV4097_SET_VERTEX_TEXTURE_FILTER + 0x40" }, { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x40 / 4, "NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x40" }, { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x40 / 4, "NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x40" }, { NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x60 / 4, "NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x60" }, { NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x60 / 4, "NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x60" }, { NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x60 / 4, "NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x60" }, { NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x60 / 4, "NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x60" }, { NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x60 / 4, "NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x60" }, { NV4097_SET_VERTEX_TEXTURE_FILTER + 0x60 / 4, "NV4097_SET_VERTEX_TEXTURE_FILTER + 0x60" }, { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x60 / 4, "NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x60" }, { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x60 / 4, "NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x60" }, { NV4097_SET_VIEWPORT_HORIZONTAL, "NV4097_SET_VIEWPORT_HORIZONTAL" }, { NV4097_SET_VIEWPORT_VERTICAL, "NV4097_SET_VIEWPORT_VERTICAL" }, { NV4097_SET_VIEWPORT_OFFSET, "NV4097_SET_VIEWPORT_OFFSET" }, { NV4097_SET_VIEWPORT_SCALE, "NV4097_SET_VIEWPORT_SCALE" }, { NV4097_SET_POLY_OFFSET_LINE_ENABLE, "NV4097_SET_POLY_OFFSET_LINE_ENABLE" }, { NV4097_SET_POLY_OFFSET_FILL_ENABLE, "NV4097_SET_POLY_OFFSET_FILL_ENABLE" }, { NV4097_SET_DEPTH_FUNC, "NV4097_SET_DEPTH_FUNC" }, { NV4097_SET_DEPTH_MASK, "NV4097_SET_DEPTH_MASK" }, { NV4097_SET_DEPTH_TEST_ENABLE, "NV4097_SET_DEPTH_TEST_ENABLE" }, { NV4097_SET_POLYGON_OFFSET_SCALE_FACTOR, "NV4097_SET_POLYGON_OFFSET_SCALE_FACTOR" }, { NV4097_SET_POLYGON_OFFSET_BIAS, "NV4097_SET_POLYGON_OFFSET_BIAS" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M, "NV4097_SET_VERTEX_DATA_SCALED4S_M" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 4 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 4" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 8 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 8" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 12 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 12" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 16 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 16" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 20 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 20" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 24 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 24" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 28 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 28" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 32 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 32" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 36 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 36" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 40, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 40" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 44 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 44" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 48 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 48" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 52 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 52" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 56 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 56" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 60 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 60" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 64 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 64" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 68 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 68" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 72 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 72" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 76 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 76" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 80 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 80" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 84 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 84" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 88 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 88" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 92 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 92" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 96 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 96" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 100 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 100" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 104 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 104" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 108 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 108" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 112 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 112" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 116 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 116" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 120 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 120" }, { NV4097_SET_VERTEX_DATA_SCALED4S_M + 124 / 4, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 124" }, { NV4097_SET_TEXTURE_CONTROL2, "NV4097_SET_TEXTURE_CONTROL2" }, { NV4097_SET_TEXTURE_CONTROL2 + 4 / 4, "NV4097_SET_TEXTURE_CONTROL2 + 4" }, { NV4097_SET_TEXTURE_CONTROL2 + 8 / 4, "NV4097_SET_TEXTURE_CONTROL2 + 8" }, { NV4097_SET_TEXTURE_CONTROL2 + 12 / 4, "NV4097_SET_TEXTURE_CONTROL2 + 12" }, { NV4097_SET_TEXTURE_CONTROL2 + 16 / 4, "NV4097_SET_TEXTURE_CONTROL2 + 16" }, { NV4097_SET_TEXTURE_CONTROL2 + 20 / 4, "NV4097_SET_TEXTURE_CONTROL2 + 20" }, { NV4097_SET_TEXTURE_CONTROL2 + 24 / 4, "NV4097_SET_TEXTURE_CONTROL2 + 24" }, { NV4097_SET_TEXTURE_CONTROL2 + 28 / 4, "NV4097_SET_TEXTURE_CONTROL2 + 28" }, { NV4097_SET_TEXTURE_CONTROL2 + 32 / 4, "NV4097_SET_TEXTURE_CONTROL2 + 32" }, { NV4097_SET_TEXTURE_CONTROL2 + 36 / 4, "NV4097_SET_TEXTURE_CONTROL2 + 36" }, { NV4097_SET_TEXTURE_CONTROL2 + 40 / 4, "NV4097_SET_TEXTURE_CONTROL2 + 40" }, { NV4097_SET_TEXTURE_CONTROL2 + 44 / 4, "NV4097_SET_TEXTURE_CONTROL2 + 44" }, { NV4097_SET_TEXTURE_CONTROL2 + 48 / 4, "NV4097_SET_TEXTURE_CONTROL2 + 48" }, { NV4097_SET_TEXTURE_CONTROL2 + 52 / 4, "NV4097_SET_TEXTURE_CONTROL2 + 52" }, { NV4097_SET_TEXTURE_CONTROL2 + 56 / 4, "NV4097_SET_TEXTURE_CONTROL2 + 56" }, { NV4097_SET_TEXTURE_CONTROL2 + 60 / 4, "NV4097_SET_TEXTURE_CONTROL2 + 60" }, { NV4097_SET_TEX_COORD_CONTROL, "NV4097_SET_TEX_COORD_CONTROL" }, { NV4097_SET_TEX_COORD_CONTROL + 4 / 4, "NV4097_SET_TEX_COORD_CONTROL + 4" }, { NV4097_SET_TEX_COORD_CONTROL + 8 / 4, "NV4097_SET_TEX_COORD_CONTROL + 8" }, { NV4097_SET_TEX_COORD_CONTROL + 12 / 4, "NV4097_SET_TEX_COORD_CONTROL + 12" }, { NV4097_SET_TEX_COORD_CONTROL + 16 / 4, "NV4097_SET_TEX_COORD_CONTROL + 16" }, { NV4097_SET_TEX_COORD_CONTROL + 20 / 4, "NV4097_SET_TEX_COORD_CONTROL + 20" }, { NV4097_SET_TEX_COORD_CONTROL + 24 / 4, "NV4097_SET_TEX_COORD_CONTROL + 24" }, { NV4097_SET_TEX_COORD_CONTROL + 28 / 4, "NV4097_SET_TEX_COORD_CONTROL + 28" }, { NV4097_SET_TEX_COORD_CONTROL + 32 / 4, "NV4097_SET_TEX_COORD_CONTROL + 32" }, { NV4097_SET_TEX_COORD_CONTROL + 36 / 4, "NV4097_SET_TEX_COORD_CONTROL + 36" }, { NV4097_SET_TRANSFORM_PROGRAM, "NV4097_SET_TRANSFORM_PROGRAM" }, { NV4097_SET_TRANSFORM_PROGRAM + 4 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 4" }, { NV4097_SET_TRANSFORM_PROGRAM + 8 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 8" }, { NV4097_SET_TRANSFORM_PROGRAM + 12 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 12" }, { NV4097_SET_TRANSFORM_PROGRAM + 16 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 16" }, { NV4097_SET_TRANSFORM_PROGRAM + 20 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 20" }, { NV4097_SET_TRANSFORM_PROGRAM + 24 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 24" }, { NV4097_SET_TRANSFORM_PROGRAM + 28 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 28" }, { NV4097_SET_TRANSFORM_PROGRAM + 32 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 32" }, { NV4097_SET_TRANSFORM_PROGRAM + 36 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 36" }, { NV4097_SET_TRANSFORM_PROGRAM + 40 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 40" }, { NV4097_SET_TRANSFORM_PROGRAM + 44 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 44" }, { NV4097_SET_TRANSFORM_PROGRAM + 48 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 48" }, { NV4097_SET_TRANSFORM_PROGRAM + 52 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 52" }, { NV4097_SET_TRANSFORM_PROGRAM + 56 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 56" }, { NV4097_SET_TRANSFORM_PROGRAM + 60 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 60" }, { NV4097_SET_TRANSFORM_PROGRAM + 64 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 64" }, { NV4097_SET_TRANSFORM_PROGRAM + 68 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 68" }, { NV4097_SET_TRANSFORM_PROGRAM + 72 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 72" }, { NV4097_SET_TRANSFORM_PROGRAM + 76 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 76" }, { NV4097_SET_TRANSFORM_PROGRAM + 80 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 80" }, { NV4097_SET_TRANSFORM_PROGRAM + 84 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 84" }, { NV4097_SET_TRANSFORM_PROGRAM + 88 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 88" }, { NV4097_SET_TRANSFORM_PROGRAM + 92 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 92" }, { NV4097_SET_TRANSFORM_PROGRAM + 96 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 96" }, { NV4097_SET_TRANSFORM_PROGRAM + 100 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 100" }, { NV4097_SET_TRANSFORM_PROGRAM + 104 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 104" }, { NV4097_SET_TRANSFORM_PROGRAM + 108 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 108" }, { NV4097_SET_TRANSFORM_PROGRAM + 112 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 112" }, { NV4097_SET_TRANSFORM_PROGRAM + 116 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 116" }, { NV4097_SET_TRANSFORM_PROGRAM + 120 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 120" }, { NV4097_SET_TRANSFORM_PROGRAM + 124 / 4, "NV4097_SET_TRANSFORM_PROGRAM + 124" }, { NV4097_SET_TWO_SIDE_LIGHT_EN, "NV4097_SET_TWO_SIDE_LIGHT_EN" }, { NV4097_CLEAR_ZCULL_SURFACE, "NV4097_CLEAR_ZCULL_SURFACE" }, { NV4097_SET_USER_CLIP_PLANE_CONTROL, "NV4097_SET_USER_CLIP_PLANE_CONTROL" }, { NV4097_SET_POLYGON_STIPPLE, "NV4097_SET_POLYGON_STIPPLE" }, { NV4097_SET_POLYGON_STIPPLE_PATTERN, "NV4097_SET_POLYGON_STIPPLE_PATTERN" }, { NV4097_SET_VERTEX_DATA3F_M, "NV4097_SET_VERTEX_DATA3F_M" }, { NV4097_SET_VERTEX_DATA3F_M + 4 / 4, "NV4097_SET_VERTEX_DATA3F_M + 4" }, { NV4097_SET_VERTEX_DATA3F_M + 8 / 4, "NV4097_SET_VERTEX_DATA3F_M + 8" }, { NV4097_SET_VERTEX_DATA3F_M + 12 / 4, "NV4097_SET_VERTEX_DATA3F_M + 12" }, { NV4097_SET_VERTEX_DATA3F_M + 16 / 4, "NV4097_SET_VERTEX_DATA3F_M + 16" }, { NV4097_SET_VERTEX_DATA3F_M + 20 / 4, "NV4097_SET_VERTEX_DATA3F_M + 20" }, { NV4097_SET_VERTEX_DATA3F_M + 24 / 4, "NV4097_SET_VERTEX_DATA3F_M + 24" }, { NV4097_SET_VERTEX_DATA3F_M + 28 / 4, "NV4097_SET_VERTEX_DATA3F_M + 28" }, { NV4097_SET_VERTEX_DATA3F_M + 32 / 4, "NV4097_SET_VERTEX_DATA3F_M + 32" }, { NV4097_SET_VERTEX_DATA3F_M + 36 / 4, "NV4097_SET_VERTEX_DATA3F_M + 36" }, { NV4097_SET_VERTEX_DATA3F_M + 40 / 4, "NV4097_SET_VERTEX_DATA3F_M + 40" }, { NV4097_SET_VERTEX_DATA3F_M + 44 / 4, "NV4097_SET_VERTEX_DATA3F_M + 44" }, { NV4097_SET_VERTEX_DATA3F_M + 48 / 4, "NV4097_SET_VERTEX_DATA3F_M + 48" }, { NV4097_SET_VERTEX_DATA3F_M + 52 / 4, "NV4097_SET_VERTEX_DATA3F_M + 52" }, { NV4097_SET_VERTEX_DATA3F_M + 56 / 4, "NV4097_SET_VERTEX_DATA3F_M + 56" }, { NV4097_SET_VERTEX_DATA3F_M + 60 / 4, "NV4097_SET_VERTEX_DATA3F_M + 60" }, { NV4097_SET_VERTEX_DATA3F_M + 64 / 4, "NV4097_SET_VERTEX_DATA3F_M + 64" }, { NV4097_SET_VERTEX_DATA3F_M + 68 / 4, "NV4097_SET_VERTEX_DATA3F_M + 68" }, { NV4097_SET_VERTEX_DATA3F_M + 72 / 4, "NV4097_SET_VERTEX_DATA3F_M + 72" }, { NV4097_SET_VERTEX_DATA3F_M + 76 / 4, "NV4097_SET_VERTEX_DATA3F_M + 76" }, { NV4097_SET_VERTEX_DATA3F_M + 80 / 4, "NV4097_SET_VERTEX_DATA3F_M + 80" }, { NV4097_SET_VERTEX_DATA3F_M + 84 / 4, "NV4097_SET_VERTEX_DATA3F_M + 84" }, { NV4097_SET_VERTEX_DATA3F_M + 88 / 4, "NV4097_SET_VERTEX_DATA3F_M + 88" }, { NV4097_SET_VERTEX_DATA3F_M + 92 / 4, "NV4097_SET_VERTEX_DATA3F_M + 92" }, { NV4097_SET_VERTEX_DATA3F_M + 96 / 4, "NV4097_SET_VERTEX_DATA3F_M + 96" }, { NV4097_SET_VERTEX_DATA3F_M + 100 / 4, "NV4097_SET_VERTEX_DATA3F_M + 100" }, { NV4097_SET_VERTEX_DATA3F_M + 104 / 4, "NV4097_SET_VERTEX_DATA3F_M + 104" }, { NV4097_SET_VERTEX_DATA3F_M + 108 / 4, "NV4097_SET_VERTEX_DATA3F_M + 108" }, { NV4097_SET_VERTEX_DATA3F_M + 112 / 4, "NV4097_SET_VERTEX_DATA3F_M + 112" }, { NV4097_SET_VERTEX_DATA3F_M + 116 / 4, "NV4097_SET_VERTEX_DATA3F_M + 116" }, { NV4097_SET_VERTEX_DATA3F_M + 120 / 4, "NV4097_SET_VERTEX_DATA3F_M + 120" }, { NV4097_SET_VERTEX_DATA3F_M + 124 / 4, "NV4097_SET_VERTEX_DATA3F_M + 124" }, { NV4097_SET_VERTEX_DATA3F_M + 128 / 4, "NV4097_SET_VERTEX_DATA3F_M + 128" }, { NV4097_SET_VERTEX_DATA3F_M + 132 / 4, "NV4097_SET_VERTEX_DATA3F_M + 132" }, { NV4097_SET_VERTEX_DATA3F_M + 136 / 4, "NV4097_SET_VERTEX_DATA3F_M + 136" }, { NV4097_SET_VERTEX_DATA3F_M + 140 / 4, "NV4097_SET_VERTEX_DATA3F_M + 140" }, { NV4097_SET_VERTEX_DATA3F_M + 144 / 4, "NV4097_SET_VERTEX_DATA3F_M + 144" }, { NV4097_SET_VERTEX_DATA3F_M + 148 / 4, "NV4097_SET_VERTEX_DATA3F_M + 148" }, { NV4097_SET_VERTEX_DATA3F_M + 152 / 4, "NV4097_SET_VERTEX_DATA3F_M + 152" }, { NV4097_SET_VERTEX_DATA3F_M + 156 / 4, "NV4097_SET_VERTEX_DATA3F_M + 156" }, { NV4097_SET_VERTEX_DATA3F_M + 160 / 4, "NV4097_SET_VERTEX_DATA3F_M + 160" }, { NV4097_SET_VERTEX_DATA3F_M + 164 / 4, "NV4097_SET_VERTEX_DATA3F_M + 164" }, { NV4097_SET_VERTEX_DATA3F_M + 168 / 4, "NV4097_SET_VERTEX_DATA3F_M + 168" }, { NV4097_SET_VERTEX_DATA3F_M + 172 / 4, "NV4097_SET_VERTEX_DATA3F_M + 172" }, { NV4097_SET_VERTEX_DATA3F_M + 176 / 4, "NV4097_SET_VERTEX_DATA3F_M + 176" }, { NV4097_SET_VERTEX_DATA3F_M + 180 / 4, "NV4097_SET_VERTEX_DATA3F_M + 180" }, { NV4097_SET_VERTEX_DATA3F_M + 184 / 4, "NV4097_SET_VERTEX_DATA3F_M + 184" }, { NV4097_SET_VERTEX_DATA3F_M + 188 / 4, "NV4097_SET_VERTEX_DATA3F_M + 188" }, { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET, "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET" }, { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 4 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 4" }, { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 8 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 8" }, { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 12 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 12" }, { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 16 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 16" }, { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 20 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 20" }, { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 24 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 24" }, { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 28 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 28" }, { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 32 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 32" }, { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 36 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 36" }, { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 40 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 40" }, { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 44 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 44" }, { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 48 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 48" }, { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 52 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 52" }, { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 56 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 56" }, { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 60 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 60" }, { NV4097_INVALIDATE_VERTEX_CACHE_FILE, "NV4097_INVALIDATE_VERTEX_CACHE_FILE" }, { NV4097_INVALIDATE_VERTEX_FILE, "NV4097_INVALIDATE_VERTEX_FILE" }, { NV4097_SET_VERTEX_DATA_BASE_OFFSET, "NV4097_SET_VERTEX_DATA_BASE_OFFSET" }, { NV4097_SET_VERTEX_DATA_BASE_INDEX, "NV4097_SET_VERTEX_DATA_BASE_INDEX" }, { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT" }, { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 4 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 4" }, { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 8 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 8" }, { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 12 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 12" }, { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 16 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 16" }, { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 20 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 20" }, { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 24 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 24" }, { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 28 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 28" }, { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 32 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 32" }, { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 36 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 36" }, { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 40 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 40" }, { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 44 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 44" }, { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 48 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 48" }, { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 52 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 52" }, { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 56 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 56" }, { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 60 / 4, "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 60" }, { NV4097_CLEAR_REPORT_VALUE, "NV4097_CLEAR_REPORT_VALUE" }, { NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE, "NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE" }, { NV4097_GET_REPORT, "NV4097_GET_REPORT" }, { NV4097_SET_ZCULL_STATS_ENABLE, "NV4097_SET_ZCULL_STATS_ENABLE" }, { NV4097_SET_BEGIN_END, "NV4097_SET_BEGIN_END" }, { NV4097_ARRAY_ELEMENT16, "NV4097_ARRAY_ELEMENT16" }, { NV4097_ARRAY_ELEMENT32, "NV4097_ARRAY_ELEMENT32" }, { NV4097_DRAW_ARRAYS, "NV4097_DRAW_ARRAYS" }, { NV4097_INLINE_ARRAY, "NV4097_INLINE_ARRAY" }, { NV4097_SET_INDEX_ARRAY_ADDRESS, "NV4097_SET_INDEX_ARRAY_ADDRESS" }, { NV4097_SET_INDEX_ARRAY_DMA, "NV4097_SET_INDEX_ARRAY_DMA" }, { NV4097_DRAW_INDEX_ARRAY, "NV4097_DRAW_INDEX_ARRAY" }, { NV4097_SET_FRONT_POLYGON_MODE, "NV4097_SET_FRONT_POLYGON_MODE" }, { NV4097_SET_BACK_POLYGON_MODE, "NV4097_SET_BACK_POLYGON_MODE" }, { NV4097_SET_CULL_FACE, "NV4097_SET_CULL_FACE" }, { NV4097_SET_FRONT_FACE, "NV4097_SET_FRONT_FACE" }, { NV4097_SET_POLY_SMOOTH_ENABLE, "NV4097_SET_POLY_SMOOTH_ENABLE" }, { NV4097_SET_CULL_FACE_ENABLE, "NV4097_SET_CULL_FACE_ENABLE" }, { NV4097_SET_TEXTURE_CONTROL3, "NV4097_SET_TEXTURE_CONTROL3" }, { NV4097_SET_TEXTURE_CONTROL3 + 4 / 4, "NV4097_SET_TEXTURE_CONTROL3 + 4" }, { NV4097_SET_TEXTURE_CONTROL3 + 8 / 4, "NV4097_SET_TEXTURE_CONTROL3 + 8" }, { NV4097_SET_TEXTURE_CONTROL3 + 12 / 4, "NV4097_SET_TEXTURE_CONTROL3 + 12" }, { NV4097_SET_TEXTURE_CONTROL3 + 16 / 4, "NV4097_SET_TEXTURE_CONTROL3 + 16" }, { NV4097_SET_TEXTURE_CONTROL3 + 20 / 4, "NV4097_SET_TEXTURE_CONTROL3 + 20" }, { NV4097_SET_TEXTURE_CONTROL3 + 24 / 4, "NV4097_SET_TEXTURE_CONTROL3 + 24" }, { NV4097_SET_TEXTURE_CONTROL3 + 28 / 4, "NV4097_SET_TEXTURE_CONTROL3 + 28" }, { NV4097_SET_TEXTURE_CONTROL3 + 32 / 4, "NV4097_SET_TEXTURE_CONTROL3 + 32" }, { NV4097_SET_TEXTURE_CONTROL3 + 36 / 4, "NV4097_SET_TEXTURE_CONTROL3 + 36" }, { NV4097_SET_TEXTURE_CONTROL3 + 40 / 4, "NV4097_SET_TEXTURE_CONTROL3 + 40" }, { NV4097_SET_TEXTURE_CONTROL3 + 44 / 4, "NV4097_SET_TEXTURE_CONTROL3 + 44" }, { NV4097_SET_TEXTURE_CONTROL3 + 48 / 4, "NV4097_SET_TEXTURE_CONTROL3 + 48" }, { NV4097_SET_TEXTURE_CONTROL3 + 52 / 4, "NV4097_SET_TEXTURE_CONTROL3 + 52" }, { NV4097_SET_TEXTURE_CONTROL3 + 56 / 4, "NV4097_SET_TEXTURE_CONTROL3 + 56" }, { NV4097_SET_TEXTURE_CONTROL3 + 60 / 4, "NV4097_SET_TEXTURE_CONTROL3 + 60" }, { NV4097_SET_VERTEX_DATA2F_M, "NV4097_SET_VERTEX_DATA2F_M" }, { NV4097_SET_VERTEX_DATA2F_M + 4 / 4, "NV4097_SET_VERTEX_DATA2F_M + 4" }, { NV4097_SET_VERTEX_DATA2F_M + 8 / 4, "NV4097_SET_VERTEX_DATA2F_M + 8" }, { NV4097_SET_VERTEX_DATA2F_M + 12 / 4, "NV4097_SET_VERTEX_DATA2F_M + 12" }, { NV4097_SET_VERTEX_DATA2F_M + 16 / 4, "NV4097_SET_VERTEX_DATA2F_M + 16" }, { NV4097_SET_VERTEX_DATA2F_M + 20 / 4, "NV4097_SET_VERTEX_DATA2F_M + 20" }, { NV4097_SET_VERTEX_DATA2F_M + 24 / 4, "NV4097_SET_VERTEX_DATA2F_M + 24" }, { NV4097_SET_VERTEX_DATA2F_M + 28 / 4, "NV4097_SET_VERTEX_DATA2F_M + 28" }, { NV4097_SET_VERTEX_DATA2F_M + 32 / 4, "NV4097_SET_VERTEX_DATA2F_M + 32" }, { NV4097_SET_VERTEX_DATA2F_M + 36 / 4, "NV4097_SET_VERTEX_DATA2F_M + 36" }, { NV4097_SET_VERTEX_DATA2F_M + 40 / 4, "NV4097_SET_VERTEX_DATA2F_M + 40" }, { NV4097_SET_VERTEX_DATA2F_M + 44 / 4, "NV4097_SET_VERTEX_DATA2F_M + 44" }, { NV4097_SET_VERTEX_DATA2F_M + 48 / 4, "NV4097_SET_VERTEX_DATA2F_M + 48" }, { NV4097_SET_VERTEX_DATA2F_M + 52 / 4, "NV4097_SET_VERTEX_DATA2F_M + 52" }, { NV4097_SET_VERTEX_DATA2F_M + 56 / 4, "NV4097_SET_VERTEX_DATA2F_M + 56" }, { NV4097_SET_VERTEX_DATA2F_M + 60 / 4, "NV4097_SET_VERTEX_DATA2F_M + 60" }, { NV4097_SET_VERTEX_DATA2F_M + 64 / 4, "NV4097_SET_VERTEX_DATA2F_M + 64" }, { NV4097_SET_VERTEX_DATA2F_M + 68 / 4, "NV4097_SET_VERTEX_DATA2F_M + 68" }, { NV4097_SET_VERTEX_DATA2F_M + 72 / 4, "NV4097_SET_VERTEX_DATA2F_M + 72" }, { NV4097_SET_VERTEX_DATA2F_M + 76 / 4, "NV4097_SET_VERTEX_DATA2F_M + 76" }, { NV4097_SET_VERTEX_DATA2F_M + 80 / 4, "NV4097_SET_VERTEX_DATA2F_M + 80" }, { NV4097_SET_VERTEX_DATA2F_M + 84 / 4, "NV4097_SET_VERTEX_DATA2F_M + 84" }, { NV4097_SET_VERTEX_DATA2F_M + 88 / 4, "NV4097_SET_VERTEX_DATA2F_M + 88" }, { NV4097_SET_VERTEX_DATA2F_M + 92 / 4, "NV4097_SET_VERTEX_DATA2F_M + 92" }, { NV4097_SET_VERTEX_DATA2F_M + 96 / 4, "NV4097_SET_VERTEX_DATA2F_M + 96" }, { NV4097_SET_VERTEX_DATA2F_M + 100 / 4, "NV4097_SET_VERTEX_DATA2F_M + 100" }, { NV4097_SET_VERTEX_DATA2F_M + 104 / 4, "NV4097_SET_VERTEX_DATA2F_M + 104" }, { NV4097_SET_VERTEX_DATA2F_M + 108 / 4, "NV4097_SET_VERTEX_DATA2F_M + 108" }, { NV4097_SET_VERTEX_DATA2F_M + 112 / 4, "NV4097_SET_VERTEX_DATA2F_M + 112" }, { NV4097_SET_VERTEX_DATA2F_M + 116 / 4, "NV4097_SET_VERTEX_DATA2F_M + 116" }, { NV4097_SET_VERTEX_DATA2F_M + 120 / 4, "NV4097_SET_VERTEX_DATA2F_M + 120" }, { NV4097_SET_VERTEX_DATA2F_M + 124 / 4, "NV4097_SET_VERTEX_DATA2F_M + 124" }, { NV4097_SET_VERTEX_DATA2S_M, "NV4097_SET_VERTEX_DATA2S_M" }, { NV4097_SET_VERTEX_DATA2S_M + 4 / 4, "NV4097_SET_VERTEX_DATA2S_M + 4" }, { NV4097_SET_VERTEX_DATA2S_M + 8 / 4, "NV4097_SET_VERTEX_DATA2S_M + 8" }, { NV4097_SET_VERTEX_DATA2S_M + 12 / 4, "NV4097_SET_VERTEX_DATA2S_M + 12" }, { NV4097_SET_VERTEX_DATA2S_M + 16 / 4, "NV4097_SET_VERTEX_DATA2S_M + 16" }, { NV4097_SET_VERTEX_DATA2S_M + 20 / 4, "NV4097_SET_VERTEX_DATA2S_M + 20" }, { NV4097_SET_VERTEX_DATA2S_M + 24 / 4, "NV4097_SET_VERTEX_DATA2S_M + 24" }, { NV4097_SET_VERTEX_DATA2S_M + 28 / 4, "NV4097_SET_VERTEX_DATA2S_M + 28" }, { NV4097_SET_VERTEX_DATA2S_M + 32 / 4, "NV4097_SET_VERTEX_DATA2S_M + 32" }, { NV4097_SET_VERTEX_DATA2S_M + 36 / 4, "NV4097_SET_VERTEX_DATA2S_M + 36" }, { NV4097_SET_VERTEX_DATA2S_M + 40 / 4, "NV4097_SET_VERTEX_DATA2S_M + 40" }, { NV4097_SET_VERTEX_DATA2S_M + 44 / 4, "NV4097_SET_VERTEX_DATA2S_M + 44" }, { NV4097_SET_VERTEX_DATA2S_M + 48 / 4, "NV4097_SET_VERTEX_DATA2S_M + 48" }, { NV4097_SET_VERTEX_DATA2S_M + 52 / 4, "NV4097_SET_VERTEX_DATA2S_M + 52" }, { NV4097_SET_VERTEX_DATA2S_M + 56 / 4, "NV4097_SET_VERTEX_DATA2S_M + 56" }, { NV4097_SET_VERTEX_DATA2S_M + 60 / 4, "NV4097_SET_VERTEX_DATA2S_M + 60" }, { NV4097_SET_VERTEX_DATA4UB_M, "NV4097_SET_VERTEX_DATA4UB_M" }, { NV4097_SET_VERTEX_DATA4UB_M + 4 / 4, "NV4097_SET_VERTEX_DATA4UB_M + 4" }, { NV4097_SET_VERTEX_DATA4UB_M + 8 / 4, "NV4097_SET_VERTEX_DATA4UB_M + 8" }, { NV4097_SET_VERTEX_DATA4UB_M + 12 / 4, "NV4097_SET_VERTEX_DATA4UB_M + 12" }, { NV4097_SET_VERTEX_DATA4UB_M + 16 / 4, "NV4097_SET_VERTEX_DATA4UB_M + 16" }, { NV4097_SET_VERTEX_DATA4UB_M + 20 / 4, "NV4097_SET_VERTEX_DATA4UB_M + 20" }, { NV4097_SET_VERTEX_DATA4UB_M + 24 / 4, "NV4097_SET_VERTEX_DATA4UB_M + 24" }, { NV4097_SET_VERTEX_DATA4UB_M + 28 / 4, "NV4097_SET_VERTEX_DATA4UB_M + 28" }, { NV4097_SET_VERTEX_DATA4UB_M + 32 / 4, "NV4097_SET_VERTEX_DATA4UB_M + 32" }, { NV4097_SET_VERTEX_DATA4UB_M + 36 / 4, "NV4097_SET_VERTEX_DATA4UB_M + 36" }, { NV4097_SET_VERTEX_DATA4UB_M + 40 / 4, "NV4097_SET_VERTEX_DATA4UB_M + 40" }, { NV4097_SET_VERTEX_DATA4UB_M + 44 / 4, "NV4097_SET_VERTEX_DATA4UB_M + 44" }, { NV4097_SET_VERTEX_DATA4UB_M + 48 / 4, "NV4097_SET_VERTEX_DATA4UB_M + 48" }, { NV4097_SET_VERTEX_DATA4UB_M + 52 / 4, "NV4097_SET_VERTEX_DATA4UB_M + 52" }, { NV4097_SET_VERTEX_DATA4UB_M + 56 / 4, "NV4097_SET_VERTEX_DATA4UB_M + 56" }, { NV4097_SET_VERTEX_DATA4UB_M + 60 / 4, "NV4097_SET_VERTEX_DATA4UB_M + 60" }, { NV4097_SET_VERTEX_DATA4S_M, "NV4097_SET_VERTEX_DATA4S_M" }, { NV4097_SET_VERTEX_DATA4S_M + 4 / 4, "NV4097_SET_VERTEX_DATA4S_M + 4" }, { NV4097_SET_VERTEX_DATA4S_M + 8 / 4, "NV4097_SET_VERTEX_DATA4S_M + 8" }, { NV4097_SET_VERTEX_DATA4S_M + 12 / 4, "NV4097_SET_VERTEX_DATA4S_M + 12" }, { NV4097_SET_VERTEX_DATA4S_M + 16 / 4, "NV4097_SET_VERTEX_DATA4S_M + 16" }, { NV4097_SET_VERTEX_DATA4S_M + 20 / 4, "NV4097_SET_VERTEX_DATA4S_M + 20" }, { NV4097_SET_VERTEX_DATA4S_M + 24 / 4, "NV4097_SET_VERTEX_DATA4S_M + 24" }, { NV4097_SET_VERTEX_DATA4S_M + 28 / 4, "NV4097_SET_VERTEX_DATA4S_M + 28" }, { NV4097_SET_VERTEX_DATA4S_M + 32 / 4, "NV4097_SET_VERTEX_DATA4S_M + 32" }, { NV4097_SET_VERTEX_DATA4S_M + 36 / 4, "NV4097_SET_VERTEX_DATA4S_M + 36" }, { NV4097_SET_VERTEX_DATA4S_M + 40 / 4, "NV4097_SET_VERTEX_DATA4S_M + 40" }, { NV4097_SET_VERTEX_DATA4S_M + 44 / 4, "NV4097_SET_VERTEX_DATA4S_M + 44" }, { NV4097_SET_VERTEX_DATA4S_M + 48 / 4, "NV4097_SET_VERTEX_DATA4S_M + 48" }, { NV4097_SET_VERTEX_DATA4S_M + 52 / 4, "NV4097_SET_VERTEX_DATA4S_M + 52" }, { NV4097_SET_VERTEX_DATA4S_M + 56 / 4, "NV4097_SET_VERTEX_DATA4S_M + 56" }, { NV4097_SET_VERTEX_DATA4S_M + 60 / 4, "NV4097_SET_VERTEX_DATA4S_M + 60" }, { NV4097_SET_VERTEX_DATA4S_M + 64 / 4, "NV4097_SET_VERTEX_DATA4S_M + 64" }, { NV4097_SET_VERTEX_DATA4S_M + 68 / 4, "NV4097_SET_VERTEX_DATA4S_M + 68" }, { NV4097_SET_VERTEX_DATA4S_M + 72 / 4, "NV4097_SET_VERTEX_DATA4S_M + 72" }, { NV4097_SET_VERTEX_DATA4S_M + 76 / 4, "NV4097_SET_VERTEX_DATA4S_M + 76" }, { NV4097_SET_VERTEX_DATA4S_M + 80 / 4, "NV4097_SET_VERTEX_DATA4S_M + 80" }, { NV4097_SET_VERTEX_DATA4S_M + 84 / 4, "NV4097_SET_VERTEX_DATA4S_M + 84" }, { NV4097_SET_VERTEX_DATA4S_M + 88 / 4, "NV4097_SET_VERTEX_DATA4S_M + 88" }, { NV4097_SET_VERTEX_DATA4S_M + 92 / 4, "NV4097_SET_VERTEX_DATA4S_M + 92" }, { NV4097_SET_VERTEX_DATA4S_M + 96 / 4, "NV4097_SET_VERTEX_DATA4S_M + 96" }, { NV4097_SET_VERTEX_DATA4S_M + 100 / 4, "NV4097_SET_VERTEX_DATA4S_M + 100" }, { NV4097_SET_VERTEX_DATA4S_M + 104 / 4, "NV4097_SET_VERTEX_DATA4S_M + 104" }, { NV4097_SET_VERTEX_DATA4S_M + 108 / 4, "NV4097_SET_VERTEX_DATA4S_M + 108" }, { NV4097_SET_VERTEX_DATA4S_M + 112 / 4, "NV4097_SET_VERTEX_DATA4S_M + 112" }, { NV4097_SET_VERTEX_DATA4S_M + 116 / 4, "NV4097_SET_VERTEX_DATA4S_M + 116" }, { NV4097_SET_VERTEX_DATA4S_M + 120 / 4, "NV4097_SET_VERTEX_DATA4S_M + 120" }, { NV4097_SET_VERTEX_DATA4S_M + 124 / 4, "NV4097_SET_VERTEX_DATA4S_M + 124" }, { NV4097_SET_TEXTURE_OFFSET, "NV4097_SET_TEXTURE_OFFSET" }, { NV4097_SET_TEXTURE_FORMAT, "NV4097_SET_TEXTURE_FORMAT" }, { NV4097_SET_TEXTURE_ADDRESS, "NV4097_SET_TEXTURE_ADDRESS" }, { NV4097_SET_TEXTURE_CONTROL0, "NV4097_SET_TEXTURE_CONTROL0" }, { NV4097_SET_TEXTURE_CONTROL1, "NV4097_SET_TEXTURE_CONTROL1" }, { NV4097_SET_TEXTURE_FILTER, "NV4097_SET_TEXTURE_FILTER" }, { NV4097_SET_TEXTURE_IMAGE_RECT, "NV4097_SET_TEXTURE_IMAGE_RECT" }, { NV4097_SET_TEXTURE_BORDER_COLOR, "NV4097_SET_TEXTURE_BORDER_COLOR" }, { NV4097_SET_TEXTURE_OFFSET + 0x20 / 4, "NV4097_SET_TEXTURE_OFFSET + 0x20" }, { NV4097_SET_TEXTURE_FORMAT + 0x20 / 4, "NV4097_SET_TEXTURE_FORMAT + 0x20" }, { NV4097_SET_TEXTURE_ADDRESS + 0x20 / 4, "NV4097_SET_TEXTURE_ADDRESS + 0x20" }, { NV4097_SET_TEXTURE_CONTROL0 + 0x20 / 4, "NV4097_SET_TEXTURE_CONTROL0 + 0x20" }, { NV4097_SET_TEXTURE_CONTROL1 + 0x20 / 4, "NV4097_SET_TEXTURE_CONTROL1 + 0x20" }, { NV4097_SET_TEXTURE_FILTER + 0x20 / 4, "NV4097_SET_TEXTURE_FILTER + 0x20" }, { NV4097_SET_TEXTURE_IMAGE_RECT + 0x20 / 4, "NV4097_SET_TEXTURE_IMAGE_RECT + 0x20" }, { NV4097_SET_TEXTURE_BORDER_COLOR + 0x20 / 4, "NV4097_SET_TEXTURE_BORDER_COLOR + 0x20" }, { NV4097_SET_TEXTURE_OFFSET + 0x40 / 4, "NV4097_SET_TEXTURE_OFFSET + 0x40" }, { NV4097_SET_TEXTURE_FORMAT + 0x40 / 4, "NV4097_SET_TEXTURE_FORMAT + 0x40" }, { NV4097_SET_TEXTURE_ADDRESS + 0x40 / 4, "NV4097_SET_TEXTURE_ADDRESS + 0x40" }, { NV4097_SET_TEXTURE_CONTROL0 + 0x40 / 4, "NV4097_SET_TEXTURE_CONTROL0 + 0x40" }, { NV4097_SET_TEXTURE_CONTROL1 + 0x40 / 4, "NV4097_SET_TEXTURE_CONTROL1 + 0x40" }, { NV4097_SET_TEXTURE_FILTER + 0x40 / 4, "NV4097_SET_TEXTURE_FILTER + 0x40" }, { NV4097_SET_TEXTURE_IMAGE_RECT + 0x40 / 4, "NV4097_SET_TEXTURE_IMAGE_RECT + 0x40" }, { NV4097_SET_TEXTURE_BORDER_COLOR + 0x40 / 4, "NV4097_SET_TEXTURE_BORDER_COLOR + 0x40" }, { NV4097_SET_TEXTURE_OFFSET + 0x60 / 4, "NV4097_SET_TEXTURE_OFFSET + 0x60" }, { NV4097_SET_TEXTURE_FORMAT + 0x60 / 4, "NV4097_SET_TEXTURE_FORMAT + 0x60" }, { NV4097_SET_TEXTURE_ADDRESS + 0x60 / 4, "NV4097_SET_TEXTURE_ADDRESS + 0x60" }, { NV4097_SET_TEXTURE_CONTROL0 + 0x60 / 4, "NV4097_SET_TEXTURE_CONTROL0 + 0x60" }, { NV4097_SET_TEXTURE_CONTROL1 + 0x60 / 4, "NV4097_SET_TEXTURE_CONTROL1 + 0x60" }, { NV4097_SET_TEXTURE_FILTER + 0x60 / 4, "NV4097_SET_TEXTURE_FILTER + 0x60" }, { NV4097_SET_TEXTURE_IMAGE_RECT + 0x60 / 4, "NV4097_SET_TEXTURE_IMAGE_RECT + 0x60" }, { NV4097_SET_TEXTURE_BORDER_COLOR + 0x60 / 4, "NV4097_SET_TEXTURE_BORDER_COLOR + 0x60" }, { NV4097_SET_TEXTURE_OFFSET + 0x80 / 4, "NV4097_SET_TEXTURE_OFFSET + 0x80" }, { NV4097_SET_TEXTURE_FORMAT + 0x80 / 4, "NV4097_SET_TEXTURE_FORMAT + 0x80" }, { NV4097_SET_TEXTURE_ADDRESS + 0x80 / 4, "NV4097_SET_TEXTURE_ADDRESS + 0x80" }, { NV4097_SET_TEXTURE_CONTROL0 + 0x80 / 4, "NV4097_SET_TEXTURE_CONTROL0 + 0x80" }, { NV4097_SET_TEXTURE_CONTROL1 + 0x80 / 4, "NV4097_SET_TEXTURE_CONTROL1 + 0x80" }, { NV4097_SET_TEXTURE_FILTER + 0x80 / 4, "NV4097_SET_TEXTURE_FILTER + 0x80" }, { NV4097_SET_TEXTURE_IMAGE_RECT + 0x80 / 4, "NV4097_SET_TEXTURE_IMAGE_RECT + 0x80" }, { NV4097_SET_TEXTURE_BORDER_COLOR + 0x80 / 4, "NV4097_SET_TEXTURE_BORDER_COLOR + 0x80" }, { NV4097_SET_TEXTURE_OFFSET + 0xa0 / 4, "NV4097_SET_TEXTURE_OFFSET + 0xa0" }, { NV4097_SET_TEXTURE_FORMAT + 0xa0 / 4, "NV4097_SET_TEXTURE_FORMAT + 0xa0" }, { NV4097_SET_TEXTURE_ADDRESS + 0xa0 / 4, "NV4097_SET_TEXTURE_ADDRESS + 0xa0" }, { NV4097_SET_TEXTURE_CONTROL0 + 0xa0 / 4, "NV4097_SET_TEXTURE_CONTROL0 + 0xa0" }, { NV4097_SET_TEXTURE_CONTROL1 + 0xa0 / 4, "NV4097_SET_TEXTURE_CONTROL1 + 0xa0" }, { NV4097_SET_TEXTURE_FILTER + 0xa0 / 4, "NV4097_SET_TEXTURE_FILTER + 0xa0" }, { NV4097_SET_TEXTURE_IMAGE_RECT + 0xa0 / 4, "NV4097_SET_TEXTURE_IMAGE_RECT + 0xa0" }, { NV4097_SET_TEXTURE_BORDER_COLOR + 0xa0 / 4, "NV4097_SET_TEXTURE_BORDER_COLOR + 0xa0" }, { NV4097_SET_TEXTURE_OFFSET + 0xc0 / 4, "NV4097_SET_TEXTURE_OFFSET + 0xc0" }, { NV4097_SET_TEXTURE_FORMAT + 0xc0 / 4, "NV4097_SET_TEXTURE_FORMAT + 0xc0" }, { NV4097_SET_TEXTURE_ADDRESS + 0xc0 / 4, "NV4097_SET_TEXTURE_ADDRESS + 0xc0" }, { NV4097_SET_TEXTURE_CONTROL0 + 0xc0 / 4, "NV4097_SET_TEXTURE_CONTROL0 + 0xc0" }, { NV4097_SET_TEXTURE_CONTROL1 + 0xc0 / 4, "NV4097_SET_TEXTURE_CONTROL1 + 0xc0" }, { NV4097_SET_TEXTURE_FILTER + 0xc0 / 4, "NV4097_SET_TEXTURE_FILTER + 0xc0" }, { NV4097_SET_TEXTURE_IMAGE_RECT + 0xc0 / 4, "NV4097_SET_TEXTURE_IMAGE_RECT + 0xc0" }, { NV4097_SET_TEXTURE_BORDER_COLOR + 0xc0 / 4, "NV4097_SET_TEXTURE_BORDER_COLOR + 0xc0" }, { NV4097_SET_TEXTURE_OFFSET + 0xe0 / 4, "NV4097_SET_TEXTURE_OFFSET + 0xe0" }, { NV4097_SET_TEXTURE_FORMAT + 0xe0 / 4, "NV4097_SET_TEXTURE_FORMAT + 0xe0" }, { NV4097_SET_TEXTURE_ADDRESS + 0xe0 / 4, "NV4097_SET_TEXTURE_ADDRESS + 0xe0" }, { NV4097_SET_TEXTURE_CONTROL0 + 0xe0 / 4, "NV4097_SET_TEXTURE_CONTROL0 + 0xe0" }, { NV4097_SET_TEXTURE_CONTROL1 + 0xe0 / 4, "NV4097_SET_TEXTURE_CONTROL1 + 0xe0" }, { NV4097_SET_TEXTURE_FILTER + 0xe0 / 4, "NV4097_SET_TEXTURE_FILTER + 0xe0" }, { NV4097_SET_TEXTURE_IMAGE_RECT + 0xe0 / 4, "NV4097_SET_TEXTURE_IMAGE_RECT + 0xe0" }, { NV4097_SET_TEXTURE_BORDER_COLOR + 0xe0 / 4, "NV4097_SET_TEXTURE_BORDER_COLOR + 0xe0" }, { NV4097_SET_TEXTURE_OFFSET + 0x100 / 4, "NV4097_SET_TEXTURE_OFFSET + 0x100" }, { NV4097_SET_TEXTURE_FORMAT + 0x100 / 4, "NV4097_SET_TEXTURE_FORMAT + 0x100" }, { NV4097_SET_TEXTURE_ADDRESS + 0x100 / 4, "NV4097_SET_TEXTURE_ADDRESS + 0x100" }, { NV4097_SET_TEXTURE_CONTROL0 + 0x100 / 4, "NV4097_SET_TEXTURE_CONTROL0 + 0x100" }, { NV4097_SET_TEXTURE_CONTROL1 + 0x100 / 4, "NV4097_SET_TEXTURE_CONTROL1 + 0x100" }, { NV4097_SET_TEXTURE_FILTER + 0x100 / 4, "NV4097_SET_TEXTURE_FILTER + 0x100" }, { NV4097_SET_TEXTURE_IMAGE_RECT + 0x100 / 4, "NV4097_SET_TEXTURE_IMAGE_RECT + 0x100" }, { NV4097_SET_TEXTURE_BORDER_COLOR + 0x100 / 4, "NV4097_SET_TEXTURE_BORDER_COLOR + 0x100" }, { NV4097_SET_TEXTURE_OFFSET + 0x120 / 4, "NV4097_SET_TEXTURE_OFFSET + 0x120" }, { NV4097_SET_TEXTURE_FORMAT + 0x120 / 4, "NV4097_SET_TEXTURE_FORMAT + 0x120" }, { NV4097_SET_TEXTURE_ADDRESS + 0x120 / 4, "NV4097_SET_TEXTURE_ADDRESS + 0x120" }, { NV4097_SET_TEXTURE_CONTROL0 + 0x120 / 4, "NV4097_SET_TEXTURE_CONTROL0 + 0x120" }, { NV4097_SET_TEXTURE_CONTROL1 + 0x120 / 4, "NV4097_SET_TEXTURE_CONTROL1 + 0x120" }, { NV4097_SET_TEXTURE_FILTER + 0x120 / 4, "NV4097_SET_TEXTURE_FILTER + 0x120" }, { NV4097_SET_TEXTURE_IMAGE_RECT + 0x120 / 4, "NV4097_SET_TEXTURE_IMAGE_RECT + 0x120" }, { NV4097_SET_TEXTURE_BORDER_COLOR + 0x120 / 4, "NV4097_SET_TEXTURE_BORDER_COLOR + 0x120" }, { NV4097_SET_TEXTURE_OFFSET + 0x140 / 4, "NV4097_SET_TEXTURE_OFFSET + 0x140" }, { NV4097_SET_TEXTURE_FORMAT + 0x140 / 4, "NV4097_SET_TEXTURE_FORMAT + 0x140" }, { NV4097_SET_TEXTURE_ADDRESS + 0x140 / 4, "NV4097_SET_TEXTURE_ADDRESS + 0x140" }, { NV4097_SET_TEXTURE_CONTROL0 + 0x140 / 4, "NV4097_SET_TEXTURE_CONTROL0 + 0x140" }, { NV4097_SET_TEXTURE_CONTROL1 + 0x140 / 4, "NV4097_SET_TEXTURE_CONTROL1 + 0x140" }, { NV4097_SET_TEXTURE_FILTER + 0x140 / 4, "NV4097_SET_TEXTURE_FILTER + 0x140" }, { NV4097_SET_TEXTURE_IMAGE_RECT + 0x140 / 4, "NV4097_SET_TEXTURE_IMAGE_RECT + 0x140" }, { NV4097_SET_TEXTURE_BORDER_COLOR + 0x140 / 4, "NV4097_SET_TEXTURE_BORDER_COLOR + 0x140" }, { NV4097_SET_TEXTURE_OFFSET + 0x160 / 4, "NV4097_SET_TEXTURE_OFFSET + 0x160" }, { NV4097_SET_TEXTURE_FORMAT + 0x160 / 4, "NV4097_SET_TEXTURE_FORMAT + 0x160" }, { NV4097_SET_TEXTURE_ADDRESS + 0x160 / 4, "NV4097_SET_TEXTURE_ADDRESS + 0x160" }, { NV4097_SET_TEXTURE_CONTROL0 + 0x160 / 4, "NV4097_SET_TEXTURE_CONTROL0 + 0x160" }, { NV4097_SET_TEXTURE_CONTROL1 + 0x160 / 4, "NV4097_SET_TEXTURE_CONTROL1 + 0x160" }, { NV4097_SET_TEXTURE_FILTER + 0x160 / 4, "NV4097_SET_TEXTURE_FILTER + 0x160" }, { NV4097_SET_TEXTURE_IMAGE_RECT + 0x160 / 4, "NV4097_SET_TEXTURE_IMAGE_RECT + 0x160" }, { NV4097_SET_TEXTURE_BORDER_COLOR + 0x160 / 4, "NV4097_SET_TEXTURE_BORDER_COLOR + 0x160" }, { NV4097_SET_TEXTURE_OFFSET + 0x180 / 4, "NV4097_SET_TEXTURE_OFFSET + 0x180" }, { NV4097_SET_TEXTURE_FORMAT + 0x180 / 4, "NV4097_SET_TEXTURE_FORMAT + 0x180" }, { NV4097_SET_TEXTURE_ADDRESS + 0x180 / 4, "NV4097_SET_TEXTURE_ADDRESS + 0x180" }, { NV4097_SET_TEXTURE_CONTROL0 + 0x180 / 4, "NV4097_SET_TEXTURE_CONTROL0 + 0x180" }, { NV4097_SET_TEXTURE_CONTROL1 + 0x180 / 4, "NV4097_SET_TEXTURE_CONTROL1 + 0x180" }, { NV4097_SET_TEXTURE_FILTER + 0x180 / 4, "NV4097_SET_TEXTURE_FILTER + 0x180" }, { NV4097_SET_TEXTURE_IMAGE_RECT + 0x180 / 4, "NV4097_SET_TEXTURE_IMAGE_RECT + 0x180" }, { NV4097_SET_TEXTURE_BORDER_COLOR + 0x180 / 4, "NV4097_SET_TEXTURE_BORDER_COLOR + 0x180" }, { NV4097_SET_TEXTURE_OFFSET + 0x1a0 / 4, "NV4097_SET_TEXTURE_OFFSET + 0x1a0" }, { NV4097_SET_TEXTURE_FORMAT + 0x1a0 / 4, "NV4097_SET_TEXTURE_FORMAT + 0x1a0" }, { NV4097_SET_TEXTURE_ADDRESS + 0x1a0 / 4, "NV4097_SET_TEXTURE_ADDRESS + 0x1a0" }, { NV4097_SET_TEXTURE_CONTROL0 + 0x1a0 / 4, "NV4097_SET_TEXTURE_CONTROL0 + 0x1a0" }, { NV4097_SET_TEXTURE_CONTROL1 + 0x1a0 / 4, "NV4097_SET_TEXTURE_CONTROL1 + 0x1a0" }, { NV4097_SET_TEXTURE_FILTER + 0x1a0 / 4, "NV4097_SET_TEXTURE_FILTER + 0x1a0" }, { NV4097_SET_TEXTURE_IMAGE_RECT + 0x1a0 / 4, "NV4097_SET_TEXTURE_IMAGE_RECT + 0x1a0" }, { NV4097_SET_TEXTURE_BORDER_COLOR + 0x1a0 / 4, "NV4097_SET_TEXTURE_BORDER_COLOR + 0x1a0" }, { NV4097_SET_TEXTURE_OFFSET + 0x1c0 / 4, "NV4097_SET_TEXTURE_OFFSET + 0x1c0" }, { NV4097_SET_TEXTURE_FORMAT + 0x1c0 / 4, "NV4097_SET_TEXTURE_FORMAT + 0x1c0" }, { NV4097_SET_TEXTURE_ADDRESS + 0x1c0 / 4, "NV4097_SET_TEXTURE_ADDRESS + 0x1c0" }, { NV4097_SET_TEXTURE_CONTROL0 + 0x1c0 / 4, "NV4097_SET_TEXTURE_CONTROL0 + 0x1c0" }, { NV4097_SET_TEXTURE_CONTROL1 + 0x1c0 / 4, "NV4097_SET_TEXTURE_CONTROL1 + 0x1c0" }, { NV4097_SET_TEXTURE_FILTER + 0x1c0 / 4, "NV4097_SET_TEXTURE_FILTER + 0x1c0" }, { NV4097_SET_TEXTURE_IMAGE_RECT + 0x1c0 / 4, "NV4097_SET_TEXTURE_IMAGE_RECT + 0x1c0" }, { NV4097_SET_TEXTURE_BORDER_COLOR + 0x1c0 / 4, "NV4097_SET_TEXTURE_BORDER_COLOR + 0x1c0" }, { NV4097_SET_TEXTURE_OFFSET + 0x1e0 / 4, "NV4097_SET_TEXTURE_OFFSET + 0x1e0" }, { NV4097_SET_TEXTURE_FORMAT + 0x1e0 / 4, "NV4097_SET_TEXTURE_FORMAT + 0x1e0" }, { NV4097_SET_TEXTURE_ADDRESS + 0x1e0 / 4, "NV4097_SET_TEXTURE_ADDRESS + 0x1e0" }, { NV4097_SET_TEXTURE_CONTROL0 + 0x1e0 / 4, "NV4097_SET_TEXTURE_CONTROL0 + 0x1e0" }, { NV4097_SET_TEXTURE_CONTROL1 + 0x1e0 / 4, "NV4097_SET_TEXTURE_CONTROL1 + 0x1e0" }, { NV4097_SET_TEXTURE_FILTER + 0x1e0 / 4, "NV4097_SET_TEXTURE_FILTER + 0x1e0" }, { NV4097_SET_TEXTURE_IMAGE_RECT + 0x1e0 / 4, "NV4097_SET_TEXTURE_IMAGE_RECT + 0x1e0" }, { NV4097_SET_TEXTURE_BORDER_COLOR + 0x1e0 / 4, "NV4097_SET_TEXTURE_BORDER_COLOR + 0x1e0" }, { NV4097_SET_VERTEX_DATA4F_M, "NV4097_SET_VERTEX_DATA4F_M" }, { NV4097_SET_VERTEX_DATA4F_M + 4 / 4, "NV4097_SET_VERTEX_DATA4F_M + 4" }, { NV4097_SET_VERTEX_DATA4F_M + 8 / 4, "NV4097_SET_VERTEX_DATA4F_M + 8" }, { NV4097_SET_VERTEX_DATA4F_M + 12 / 4, "NV4097_SET_VERTEX_DATA4F_M + 12" }, { NV4097_SET_VERTEX_DATA4F_M + 16 / 4, "NV4097_SET_VERTEX_DATA4F_M + 16" }, { NV4097_SET_VERTEX_DATA4F_M + 20 / 4, "NV4097_SET_VERTEX_DATA4F_M + 20" }, { NV4097_SET_VERTEX_DATA4F_M + 24 / 4, "NV4097_SET_VERTEX_DATA4F_M + 24" }, { NV4097_SET_VERTEX_DATA4F_M + 28 / 4, "NV4097_SET_VERTEX_DATA4F_M + 28" }, { NV4097_SET_VERTEX_DATA4F_M + 32 / 4, "NV4097_SET_VERTEX_DATA4F_M + 32" }, { NV4097_SET_VERTEX_DATA4F_M + 36 / 4, "NV4097_SET_VERTEX_DATA4F_M + 36" }, { NV4097_SET_VERTEX_DATA4F_M + 40 / 4, "NV4097_SET_VERTEX_DATA4F_M + 40" }, { NV4097_SET_VERTEX_DATA4F_M + 44 / 4, "NV4097_SET_VERTEX_DATA4F_M + 44" }, { NV4097_SET_VERTEX_DATA4F_M + 48 / 4, "NV4097_SET_VERTEX_DATA4F_M + 48" }, { NV4097_SET_VERTEX_DATA4F_M + 52 / 4, "NV4097_SET_VERTEX_DATA4F_M + 52" }, { NV4097_SET_VERTEX_DATA4F_M + 56 / 4, "NV4097_SET_VERTEX_DATA4F_M + 56" }, { NV4097_SET_VERTEX_DATA4F_M + 60 / 4, "NV4097_SET_VERTEX_DATA4F_M + 60" }, { NV4097_SET_VERTEX_DATA4F_M + 64 / 4, "NV4097_SET_VERTEX_DATA4F_M + 64" }, { NV4097_SET_VERTEX_DATA4F_M + 68 / 4, "NV4097_SET_VERTEX_DATA4F_M + 68" }, { NV4097_SET_VERTEX_DATA4F_M + 72 / 4, "NV4097_SET_VERTEX_DATA4F_M + 72" }, { NV4097_SET_VERTEX_DATA4F_M + 76 / 4, "NV4097_SET_VERTEX_DATA4F_M + 76" }, { NV4097_SET_VERTEX_DATA4F_M + 80 / 4, "NV4097_SET_VERTEX_DATA4F_M + 80" }, { NV4097_SET_VERTEX_DATA4F_M + 84 / 4, "NV4097_SET_VERTEX_DATA4F_M + 84" }, { NV4097_SET_VERTEX_DATA4F_M + 88 / 4, "NV4097_SET_VERTEX_DATA4F_M + 88" }, { NV4097_SET_VERTEX_DATA4F_M + 92 / 4, "NV4097_SET_VERTEX_DATA4F_M + 92" }, { NV4097_SET_VERTEX_DATA4F_M + 96 / 4, "NV4097_SET_VERTEX_DATA4F_M + 96" }, { NV4097_SET_VERTEX_DATA4F_M + 100 / 4, "NV4097_SET_VERTEX_DATA4F_M + 100" }, { NV4097_SET_VERTEX_DATA4F_M + 104 / 4, "NV4097_SET_VERTEX_DATA4F_M + 104" }, { NV4097_SET_VERTEX_DATA4F_M + 108 / 4, "NV4097_SET_VERTEX_DATA4F_M + 108" }, { NV4097_SET_VERTEX_DATA4F_M + 112 / 4, "NV4097_SET_VERTEX_DATA4F_M + 112" }, { NV4097_SET_VERTEX_DATA4F_M + 116 / 4, "NV4097_SET_VERTEX_DATA4F_M + 116" }, { NV4097_SET_VERTEX_DATA4F_M + 120 / 4, "NV4097_SET_VERTEX_DATA4F_M + 120" }, { NV4097_SET_VERTEX_DATA4F_M + 124 / 4, "NV4097_SET_VERTEX_DATA4F_M + 124" }, { NV4097_SET_VERTEX_DATA4F_M + 128 / 4, "NV4097_SET_VERTEX_DATA4F_M + 128" }, { NV4097_SET_VERTEX_DATA4F_M + 132 / 4, "NV4097_SET_VERTEX_DATA4F_M + 132" }, { NV4097_SET_VERTEX_DATA4F_M + 136 / 4, "NV4097_SET_VERTEX_DATA4F_M + 136" }, { NV4097_SET_VERTEX_DATA4F_M + 140 / 4, "NV4097_SET_VERTEX_DATA4F_M + 140" }, { NV4097_SET_VERTEX_DATA4F_M + 144 / 4, "NV4097_SET_VERTEX_DATA4F_M + 144" }, { NV4097_SET_VERTEX_DATA4F_M + 148 / 4, "NV4097_SET_VERTEX_DATA4F_M + 148" }, { NV4097_SET_VERTEX_DATA4F_M + 152 / 4, "NV4097_SET_VERTEX_DATA4F_M + 152" }, { NV4097_SET_VERTEX_DATA4F_M + 156 / 4, "NV4097_SET_VERTEX_DATA4F_M + 156" }, { NV4097_SET_VERTEX_DATA4F_M + 160 / 4, "NV4097_SET_VERTEX_DATA4F_M + 160" }, { NV4097_SET_VERTEX_DATA4F_M + 164 / 4, "NV4097_SET_VERTEX_DATA4F_M + 164" }, { NV4097_SET_VERTEX_DATA4F_M + 168 / 4, "NV4097_SET_VERTEX_DATA4F_M + 168" }, { NV4097_SET_VERTEX_DATA4F_M + 172 / 4, "NV4097_SET_VERTEX_DATA4F_M + 172" }, { NV4097_SET_VERTEX_DATA4F_M + 176 / 4, "NV4097_SET_VERTEX_DATA4F_M + 176" }, { NV4097_SET_VERTEX_DATA4F_M + 180 / 4, "NV4097_SET_VERTEX_DATA4F_M + 180" }, { NV4097_SET_VERTEX_DATA4F_M + 184 / 4, "NV4097_SET_VERTEX_DATA4F_M + 184" }, { NV4097_SET_VERTEX_DATA4F_M + 188 / 4, "NV4097_SET_VERTEX_DATA4F_M + 188" }, { NV4097_SET_VERTEX_DATA4F_M + 192 / 4, "NV4097_SET_VERTEX_DATA4F_M + 192" }, { NV4097_SET_VERTEX_DATA4F_M + 196 / 4, "NV4097_SET_VERTEX_DATA4F_M + 196" }, { NV4097_SET_VERTEX_DATA4F_M + 200 / 4, "NV4097_SET_VERTEX_DATA4F_M + 200" }, { NV4097_SET_VERTEX_DATA4F_M + 204 / 4, "NV4097_SET_VERTEX_DATA4F_M + 204" }, { NV4097_SET_VERTEX_DATA4F_M + 208 / 4, "NV4097_SET_VERTEX_DATA4F_M + 208" }, { NV4097_SET_VERTEX_DATA4F_M + 212 / 4, "NV4097_SET_VERTEX_DATA4F_M + 212" }, { NV4097_SET_VERTEX_DATA4F_M + 216 / 4, "NV4097_SET_VERTEX_DATA4F_M + 216" }, { NV4097_SET_VERTEX_DATA4F_M + 220 / 4, "NV4097_SET_VERTEX_DATA4F_M + 220" }, { NV4097_SET_VERTEX_DATA4F_M + 224 / 4, "NV4097_SET_VERTEX_DATA4F_M + 224" }, { NV4097_SET_VERTEX_DATA4F_M + 228 / 4, "NV4097_SET_VERTEX_DATA4F_M + 228" }, { NV4097_SET_VERTEX_DATA4F_M + 232 / 4, "NV4097_SET_VERTEX_DATA4F_M + 232" }, { NV4097_SET_VERTEX_DATA4F_M + 236 / 4, "NV4097_SET_VERTEX_DATA4F_M + 236" }, { NV4097_SET_VERTEX_DATA4F_M + 240 / 4, "NV4097_SET_VERTEX_DATA4F_M + 240" }, { NV4097_SET_VERTEX_DATA4F_M + 244 / 4, "NV4097_SET_VERTEX_DATA4F_M + 244" }, { NV4097_SET_VERTEX_DATA4F_M + 248 / 4, "NV4097_SET_VERTEX_DATA4F_M + 248" }, { NV4097_SET_VERTEX_DATA4F_M + 252 / 4, "NV4097_SET_VERTEX_DATA4F_M + 252" }, { NV4097_SET_SHADER_CONTROL, "NV4097_SET_SHADER_CONTROL" }, { NV4097_SET_SEMAPHORE_OFFSET, "NV4097_SET_SEMAPHORE_OFFSET" }, { NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE, "NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE" }, { NV4097_TEXTURE_READ_SEMAPHORE_RELEASE, "NV4097_TEXTURE_READ_SEMAPHORE_RELEASE" }, { NV4097_SET_ZMIN_MAX_CONTROL, "NV4097_SET_ZMIN_MAX_CONTROL" }, { NV4097_SET_ANTI_ALIASING_CONTROL, "NV4097_SET_ANTI_ALIASING_CONTROL" }, { NV4097_SET_ZCULL_EN, "NV4097_SET_ZCULL_EN" }, { NV4097_SET_SHADER_WINDOW, "NV4097_SET_SHADER_WINDOW" }, { NV4097_SET_ZSTENCIL_CLEAR_VALUE, "NV4097_SET_ZSTENCIL_CLEAR_VALUE" }, { NV4097_SET_COLOR_CLEAR_VALUE, "NV4097_SET_COLOR_CLEAR_VALUE" }, { NV4097_CLEAR_SURFACE, "NV4097_CLEAR_SURFACE" }, { NV4097_SET_RESTART_INDEX_ENABLE, "NV4097_SET_RESTART_INDEX_ENABLE" }, { NV4097_SET_RESTART_INDEX, "NV4097_SET_RESTART_INDEX" }, { NV4097_SET_LINE_STIPPLE, "NV4097_SET_LINE_STIPPLE" }, { NV4097_SET_LINE_STIPPLE_PATTERN, "NV4097_SET_LINE_STIPPLE_PATTERN" }, { NV4097_SET_VERTEX_DATA1F_M, "NV4097_SET_VERTEX_DATA1F_M" }, { NV4097_SET_VERTEX_DATA1F_M + 4 / 4, "NV4097_SET_VERTEX_DATA1F_M + 4" }, { NV4097_SET_VERTEX_DATA1F_M + 8 / 4, "NV4097_SET_VERTEX_DATA1F_M + 8" }, { NV4097_SET_VERTEX_DATA1F_M + 12 / 4, "NV4097_SET_VERTEX_DATA1F_M + 12" }, { NV4097_SET_VERTEX_DATA1F_M + 16 / 4, "NV4097_SET_VERTEX_DATA1F_M + 16" }, { NV4097_SET_VERTEX_DATA1F_M + 20 / 4, "NV4097_SET_VERTEX_DATA1F_M + 20" }, { NV4097_SET_VERTEX_DATA1F_M + 24 / 4, "NV4097_SET_VERTEX_DATA1F_M + 24" }, { NV4097_SET_VERTEX_DATA1F_M + 28 / 4, "NV4097_SET_VERTEX_DATA1F_M + 28" }, { NV4097_SET_VERTEX_DATA1F_M + 32 / 4, "NV4097_SET_VERTEX_DATA1F_M + 32" }, { NV4097_SET_VERTEX_DATA1F_M + 36 / 4, "NV4097_SET_VERTEX_DATA1F_M + 36" }, { NV4097_SET_VERTEX_DATA1F_M + 40 / 4, "NV4097_SET_VERTEX_DATA1F_M + 40" }, { NV4097_SET_VERTEX_DATA1F_M + 44 / 4, "NV4097_SET_VERTEX_DATA1F_M + 44" }, { NV4097_SET_VERTEX_DATA1F_M + 48 / 4, "NV4097_SET_VERTEX_DATA1F_M + 48" }, { NV4097_SET_VERTEX_DATA1F_M + 52 / 4, "NV4097_SET_VERTEX_DATA1F_M + 52" }, { NV4097_SET_VERTEX_DATA1F_M + 56 / 4, "NV4097_SET_VERTEX_DATA1F_M + 56" }, { NV4097_SET_VERTEX_DATA1F_M + 60 / 4, "NV4097_SET_VERTEX_DATA1F_M + 60" }, { NV4097_SET_RENDER_ENABLE, "NV4097_SET_RENDER_ENABLE" }, { NV4097_SET_TRANSFORM_PROGRAM_LOAD, "NV4097_SET_TRANSFORM_PROGRAM_LOAD" }, { NV4097_SET_TRANSFORM_PROGRAM_START, "NV4097_SET_TRANSFORM_PROGRAM_START" }, { NV4097_SET_ZCULL_CONTROL0, "NV4097_SET_ZCULL_CONTROL0" }, { NV4097_SET_ZCULL_CONTROL1, "NV4097_SET_ZCULL_CONTROL1" }, { NV4097_SET_SCULL_CONTROL, "NV4097_SET_SCULL_CONTROL" }, { NV4097_SET_POINT_SIZE, "NV4097_SET_POINT_SIZE" }, { NV4097_SET_POINT_PARAMS_ENABLE, "NV4097_SET_POINT_PARAMS_ENABLE" }, { NV4097_SET_POINT_SPRITE_CONTROL, "NV4097_SET_POINT_SPRITE_CONTROL" }, { NV4097_SET_TRANSFORM_TIMEOUT, "NV4097_SET_TRANSFORM_TIMEOUT" }, { NV4097_SET_TRANSFORM_CONSTANT_LOAD, "NV4097_SET_TRANSFORM_CONSTANT_LOAD" }, { NV4097_SET_FREQUENCY_DIVIDER_OPERATION, "NV4097_SET_FREQUENCY_DIVIDER_OPERATION" }, { NV4097_SET_ATTRIB_COLOR, "NV4097_SET_ATTRIB_COLOR" }, { NV4097_SET_ATTRIB_TEX_COORD, "NV4097_SET_ATTRIB_TEX_COORD" }, { NV4097_SET_ATTRIB_TEX_COORD_EX, "NV4097_SET_ATTRIB_TEX_COORD_EX" }, { NV4097_SET_ATTRIB_UCLIP0, "NV4097_SET_ATTRIB_UCLIP0" }, { NV4097_SET_ATTRIB_UCLIP1, "NV4097_SET_ATTRIB_UCLIP1" }, { NV4097_INVALIDATE_L2, "NV4097_INVALIDATE_L2" }, { NV4097_SET_REDUCE_DST_COLOR, "NV4097_SET_REDUCE_DST_COLOR" }, { NV4097_SET_NO_PARANOID_TEXTURE_FETCHES, "NV4097_SET_NO_PARANOID_TEXTURE_FETCHES" }, { NV4097_SET_SHADER_PACKER, "NV4097_SET_SHADER_PACKER" }, { NV4097_SET_VERTEX_ATTRIB_INPUT_MASK, "NV4097_SET_VERTEX_ATTRIB_INPUT_MASK" }, { NV4097_SET_VERTEX_ATTRIB_OUTPUT_MASK, "NV4097_SET_VERTEX_ATTRIB_OUTPUT_MASK" }, { NV4097_SET_TRANSFORM_BRANCH_BITS, "NV4097_SET_TRANSFORM_BRANCH_BITS" }, { NV3062_SET_OBJECT, "NV3062_SET_OBJECT" }, { NV3062_SET_CONTEXT_DMA_NOTIFIES, "NV3062_SET_CONTEXT_DMA_NOTIFIES" }, { NV3062_SET_CONTEXT_DMA_IMAGE_SOURCE, "NV3062_SET_CONTEXT_DMA_IMAGE_SOURCE" }, { NV3062_SET_CONTEXT_DMA_IMAGE_DESTIN, "NV3062_SET_CONTEXT_DMA_IMAGE_DESTIN" }, { NV3062_SET_COLOR_FORMAT, "NV3062_SET_COLOR_FORMAT" }, { NV3062_SET_PITCH, "NV3062_SET_PITCH" }, { NV3062_SET_OFFSET_SOURCE, "NV3062_SET_OFFSET_SOURCE" }, { NV3062_SET_OFFSET_DESTIN, "NV3062_SET_OFFSET_DESTIN" }, { NV308A_POINT, "NV308A_POINT" }, { NV308A_SIZE_OUT, "NV308A_SIZE_OUT" }, { NV308A_SIZE_IN, "NV308A_SIZE_IN" }, { NV308A_COLOR, "NV308A_COLOR" }, }; } rsx::vertex_base_type rsx::to_vertex_base_type(u8 in) { switch (in) { case 1: return rsx::vertex_base_type::s1; case 2: return rsx::vertex_base_type::f; case 3: return rsx::vertex_base_type::sf; case 4: return rsx::vertex_base_type::ub; case 5: return rsx::vertex_base_type::s32k; case 6: return rsx::vertex_base_type::cmp; case 7: return rsx::vertex_base_type::ub256; } throw EXCEPTION("Unknow vertex base type %d", in); } rsx::index_array_type rsx::to_index_array_type(u8 in) { switch (in) { case 0: return rsx::index_array_type::u32; case 1: return rsx::index_array_type::u16; } throw EXCEPTION("Unknown index array type %d", in); } rsx::primitive_type rsx::to_primitive_type(u8 in) { switch (in) { case 0: return rsx::primitive_type::invalid; case 1: return rsx::primitive_type::points; case 2: return rsx::primitive_type::lines; case 3: return rsx::primitive_type::line_loop; case 4: return rsx::primitive_type::line_strip; case 5: return rsx::primitive_type::triangles; case 6: return rsx::primitive_type::triangle_strip; case 7: return rsx::primitive_type::triangle_fan; case 8: return rsx::primitive_type::quads; case 9: return rsx::primitive_type::quad_strip; case 10: return rsx::primitive_type::polygon; } throw EXCEPTION("Unknow primitive type %d", in); } enum { CELL_GCM_WINDOW_ORIGIN_TOP = 0, CELL_GCM_WINDOW_ORIGIN_BOTTOM = 1, CELL_GCM_WINDOW_PIXEL_CENTER_HALF = 0, CELL_GCM_WINDOW_PIXEL_CENTER_INTEGER = 1, }; rsx::window_origin rsx::to_window_origin(u8 in) { switch (in) { case CELL_GCM_WINDOW_ORIGIN_TOP: return rsx::window_origin::top; case CELL_GCM_WINDOW_ORIGIN_BOTTOM: return rsx::window_origin::bottom; } throw EXCEPTION("Unknow window origin modifier %x", in); } rsx::window_pixel_center rsx::to_window_pixel_center(u8 in) { switch (in) { case CELL_GCM_WINDOW_PIXEL_CENTER_HALF: return rsx::window_pixel_center::half; case CELL_GCM_WINDOW_PIXEL_CENTER_INTEGER: return rsx::window_pixel_center::integer; } throw EXCEPTION("Unknow window pixel center %x", in); } rsx::comparaison_function rsx::to_comparaison_function(u16 in) { switch (in) { case CELL_GCM_NEVER: return rsx::comparaison_function::never; case CELL_GCM_LESS: return rsx::comparaison_function::less; case CELL_GCM_EQUAL: return rsx::comparaison_function::equal; case CELL_GCM_LEQUAL: return rsx::comparaison_function::less_or_equal; case CELL_GCM_GREATER: return rsx::comparaison_function::greater; case CELL_GCM_NOTEQUAL: return rsx::comparaison_function::not_equal; case CELL_GCM_GEQUAL: return rsx::comparaison_function::greater_or_equal; case CELL_GCM_ALWAYS: return rsx::comparaison_function::always; } throw EXCEPTION("Wrong comparaison function %x", in); } enum { CELL_GCM_FOG_MODE_LINEAR = 0x2601, CELL_GCM_FOG_MODE_EXP = 0x0800, CELL_GCM_FOG_MODE_EXP2 = 0x0801, CELL_GCM_FOG_MODE_EXP_ABS = 0x0802, CELL_GCM_FOG_MODE_EXP2_ABS = 0x0803, CELL_GCM_FOG_MODE_LINEAR_ABS = 0x0804, }; rsx::fog_mode rsx::to_fog_mode(u32 in) { switch (in) { case CELL_GCM_FOG_MODE_LINEAR: return rsx::fog_mode::linear; case CELL_GCM_FOG_MODE_EXP: return rsx::fog_mode::exponential; case CELL_GCM_FOG_MODE_EXP2: return rsx::fog_mode::exponential2; case CELL_GCM_FOG_MODE_EXP_ABS: return rsx::fog_mode::exponential_abs; case CELL_GCM_FOG_MODE_EXP2_ABS: return rsx::fog_mode::exponential2_abs; case CELL_GCM_FOG_MODE_LINEAR_ABS: return rsx::fog_mode::linear_abs; } throw EXCEPTION("Wrong fog mode %x", in); } rsx::texture_dimension rsx::to_texture_dimension(u8 in) { switch (in) { case 1: return rsx::texture_dimension::dimension1d; case 2: return rsx::texture_dimension::dimension2d; case 3: return rsx::texture_dimension::dimension3d; } throw EXCEPTION("Wrong texture dimension %d", in); } namespace rsx { std::string print_boolean(bool b) { switch (b) { case false: return "disabled"; default: return "enabled"; } } std::string print_comparaison_function(comparaison_function f) { switch (f) { case comparaison_function::never: return "Never"; case comparaison_function::less: return "Less"; case comparaison_function::equal: return "Equal"; case comparaison_function::less_or_equal: return "Less_equal"; case comparaison_function::greater: return "Greater"; case comparaison_function::not_equal: return "Not_equal"; case comparaison_function::greater_or_equal: return "Greater_equal"; case comparaison_function::always: return "Always"; } throw; } std::string print_stencil_op(stencil_op op) { switch (op) { case stencil_op::keep: return "Keep"; case stencil_op::zero: return "Zero"; case stencil_op::replace: return "Replace"; case stencil_op::incr: return "Incr"; case stencil_op::decr: return "Decr"; case stencil_op::incr_wrap: return "Incr_wrap"; case stencil_op::decr_wrap: return "Decr_wrap"; } throw; } std::string print_fog_mode(fog_mode op) { switch (op) { case fog_mode::exponential: return "exponential"; case fog_mode::exponential2: return "exponential2"; case fog_mode::exponential2_abs: return "exponential2(abs)"; case fog_mode::exponential_abs: return "exponential(abs)"; case fog_mode::linear: return "linear"; case fog_mode::linear_abs: return "linear(abs)"; } throw; } std::string print_logic_op(logic_op op) { switch (op) { case logic_op::logic_clear: return "Clear"; case logic_op::logic_and: return "And"; case logic_op::logic_and_reverse: return "And_reverse"; case logic_op::logic_copy: return "Copy"; case logic_op::logic_and_inverted: return "And_inverted"; case logic_op::logic_noop: return "Noop"; case logic_op::logic_xor: return "Xor"; case logic_op::logic_or: return "Or"; case logic_op::logic_nor: return "Nor"; case logic_op::logic_equiv: return "Equiv"; case logic_op::logic_invert: return "Invert"; case logic_op::logic_or_reverse: return "Or_reverse"; case logic_op::logic_copy_inverted: return "Copy_inverted"; case logic_op::logic_or_inverted: return "Or_inverted"; case logic_op::logic_nand: return "Nand"; } throw; } std::string print_front_face(front_face op) { switch (op) { case front_face::ccw: return "counter clock wise"; case front_face::cw: return "clock wise"; } throw; } std::string print_cull_face(cull_face op) { switch (op) { case cull_face::back: return "back"; case cull_face::front: return "front"; case cull_face::front_and_back: return "front and back"; } throw; } std::string print_surface_target(surface_target target) { switch (target) { case surface_target::none: return "none"; case surface_target::surface_a: return "surface A"; case surface_target::surface_b: return "surface B"; case surface_target::surfaces_a_b: return "surfaces A and B"; case surface_target::surfaces_a_b_c: return "surfaces A, B and C"; case surface_target::surfaces_a_b_c_d: return "surfaces A,B, C and D"; } throw; } std::string print_primitive_mode(primitive_type draw_mode) { switch (draw_mode) { case primitive_type::invalid: return ""; case primitive_type::points: return "Points"; case primitive_type::lines: return "Lines"; case primitive_type::line_loop: return "Line_loop"; case primitive_type::line_strip: return "Line_strip"; case primitive_type::triangles: return "Triangles"; case primitive_type::triangle_strip: return "Triangle_strip"; case primitive_type::triangle_fan: return "Triangle_fan"; case primitive_type::quads: return "Quads"; case primitive_type::quad_strip: return "Quad_strip"; case primitive_type::polygon: return "Polygon"; } throw; } std::string print_transfer_operation(blit_engine::transfer_operation op) { switch (op) { case blit_engine::transfer_operation::blend_and: return "blend and"; case blit_engine::transfer_operation::blend_premult: return "blend premult"; case blit_engine::transfer_operation::rop_and: return "rop and"; case blit_engine::transfer_operation::srccopy: return "srccopy"; case blit_engine::transfer_operation::srccopy_and: return "srccopy_and"; case blit_engine::transfer_operation::srccopy_premult: return "srccopy_premult"; } throw; } std::string print_transfer_source_format(blit_engine::transfer_source_format op) { switch (op) { case blit_engine::transfer_source_format::a1r5g5b5: return "a1r5g5b5"; case blit_engine::transfer_source_format::a8b8g8r8: return "a8b8g8r8"; case blit_engine::transfer_source_format::a8r8g8b8: return "a8r8g8b8"; case blit_engine::transfer_source_format::ay8: return "ay8"; case blit_engine::transfer_source_format::cr8yb8cb8ya8: return "cr8yb8cb8ya8"; case blit_engine::transfer_source_format::ecr8eyb8ecb8eya8: return "ecr8eyb8ecb8eya8"; case blit_engine::transfer_source_format::eyb8ecr8eya8ecb8: return "eyb8ecr8eya8ecb8"; case blit_engine::transfer_source_format::r5g6b5: return "r5g6b5"; case blit_engine::transfer_source_format::x1r5g5b5: return "x1r5g5b5"; case blit_engine::transfer_source_format::x8b8g8r8: return "x8b8g8r8"; case blit_engine::transfer_source_format::x8r8g8b8: return "x8r8g8b8"; case blit_engine::transfer_source_format::y8: return "y8"; case blit_engine::transfer_source_format::yb8cr8ya8cb8: return "yb8cr8ya8cb8"; } throw; } std::string print_context_surface(blit_engine::context_surface op) { switch (op) { case blit_engine::context_surface::surface2d: return "surface 2d"; case blit_engine::context_surface::swizzle2d: return "swizzle 2d"; } throw; } std::string print_transfer_destination_format(blit_engine::transfer_destination_format op) { switch (op) { case blit_engine::transfer_destination_format::a8r8g8b8: return "a8r8g8b8"; case blit_engine::transfer_destination_format::r5g6b5: return "r5g6b5"; case blit_engine::transfer_destination_format::y32: return "y32"; } throw; } std::string print_blend_op(blend_equation op) { switch (op) { case blend_equation::add: return "Add"; case blend_equation::substract: return "Substract"; case blend_equation::reverse_substract: return "Reverse_substract"; case blend_equation::min: return "Min"; case blend_equation::max: return "Max"; case blend_equation::add_signed: return "Add_signed"; case blend_equation::reverse_add_signed: return "Reverse_add_signed"; case blend_equation::reverse_substract_signed: return "Reverse_substract_signed"; } throw; } std::string print_blend_factor(blend_factor factor) { switch (factor) { case blend_factor::zero: return "0"; case blend_factor::one: return "1"; case blend_factor::src_color: return "src.rgb"; case blend_factor::one_minus_src_color: return "(1 - src.rgb)"; case blend_factor::src_alpha: return "src.a"; case blend_factor::one_minus_src_alpha: return "(1 - src.a)"; case blend_factor::dst_alpha: return "dst.a"; case blend_factor::one_minus_dst_alpha: return "(1 - dst.a)"; case blend_factor::dst_color: return "dst.rgb"; case blend_factor::one_minus_dst_color: return "(1 - dst.rgb)"; case blend_factor::src_alpha_saturate: return "sat(src.a)"; case blend_factor::constant_color: return "const.rgb"; case blend_factor::one_minus_constant_color: return "(1 - const.rgb)"; case blend_factor::constant_alpha: return "const.a"; case blend_factor::one_minus_constant_alpha: return "(1 - const.a)"; } throw; } std::string print_origin_mode(window_origin origin) { switch (origin) { case window_origin::bottom: return "bottom"; case window_origin::top: return "top"; } throw; } std::string print_pixel_center_mode(window_pixel_center in) { switch (in) { case window_pixel_center::half: return "half"; case window_pixel_center::integer: return "integer"; } throw; } std::string print_user_clip_plane_op(user_clip_plane_op op) { switch (op) { case user_clip_plane_op::disable: return "disabled"; case user_clip_plane_op::greather_or_equal: return "greater or equal"; case user_clip_plane_op::less_than: return "less than"; } throw; } std::string print_depth_stencil_surface_format(surface_depth_format format) { switch (format) { case surface_depth_format::z16: return "CELL_GCM_SURFACE_Z16"; case surface_depth_format::z24s8: return "CELL_GCM_SURFACE_Z24S8"; } throw; } std::string print_surface_antialiasing(surface_antialiasing format) { switch (format) { case surface_antialiasing::center_1_sample: return "1 sample centered"; case surface_antialiasing::diagonal_centered_2_samples: return "2 samples diagonal centered"; case surface_antialiasing::square_centered_4_samples: return "4 samples square centered"; case surface_antialiasing::square_rotated_4_samples: return "4 samples diagonal rotated"; } throw; } std::string print_surface_color_format(surface_color_format format) { switch (format) { case surface_color_format::x1r5g5b5_z1r5g5b5: return "CELL_GCM_SURFACE_X1R5G5B5_Z1R5G5B5"; case surface_color_format::x1r5g5b5_o1r5g5b5: return "CELL_GCM_SURFACE_X1R5G5B5_O1R5G5B5"; case surface_color_format::r5g6b5: return "CELL_GCM_SURFACE_R5G6B5"; case surface_color_format::x8r8g8b8_z8r8g8b8: return "CELL_GCM_SURFACE_X8R8G8B8_Z8R8G8B8"; case surface_color_format::x8r8g8b8_o8r8g8b8: return "CELL_GCM_SURFACE_X8R8G8B8_O8R8G8B8"; case surface_color_format::a8r8g8b8: return "CELL_GCM_SURFACE_A8R8G8B8"; case surface_color_format::b8: return "CELL_GCM_SURFACE_B8"; case surface_color_format::g8b8: return "CELL_GCM_SURFACE_G8B8"; case surface_color_format::w16z16y16x16: return "CELL_GCM_SURFACE_F_W16Z16Y16X16"; case surface_color_format::w32z32y32x32: return "CELL_GCM_SURFACE_F_W32Z32Y32X32"; case surface_color_format::x32: return "CELL_GCM_SURFACE_F_X32"; case surface_color_format::x8b8g8r8_z8b8g8r8: return "CELL_GCM_SURFACE_X8B8G8R8_Z8B8G8R8"; case surface_color_format::x8b8g8r8_o8b8g8r8: return "CELL_GCM_SURFACE_X8B8G8R8_O8B8G8R8"; case surface_color_format::a8b8g8r8: return "CELL_GCM_SURFACE_A8B8G8R8"; } throw; } std::string print_index_type(index_array_type arg) { switch (arg) { case index_array_type::u16: return "unsigned short"; case index_array_type::u32: return "unsigned int"; } throw; } std::string print_context_dma(blit_engine::context_dma op) { switch (op) { case blit_engine::context_dma::report_location_main: return "report location main"; case blit_engine::context_dma::to_memory_get_report: return "to memory get report"; } throw; } std::string print_transfer_origin(blit_engine::transfer_origin op) { switch (op) { case blit_engine::transfer_origin::center: return "center"; case blit_engine::transfer_origin::corner: return "corner"; } throw; } std::string print_transfer_interpolator(blit_engine::transfer_interpolator op) { switch (op) { case blit_engine::transfer_interpolator::foh: return "foh"; case blit_engine::transfer_interpolator::zoh: return "zoh"; } throw; } std::string print_shading_mode(shading_mode op) { switch (op) { case shading_mode::flat: return "flat"; case shading_mode::smooth: return "smooth"; } throw; } std::string print_polygon_mode(polygon_mode op) { switch (op) { case polygon_mode::fill: return "fill"; case polygon_mode::line: return "line"; case polygon_mode::point: return "point"; } throw; } } // end namespace rsx enum { // Surface Target CELL_GCM_SURFACE_TARGET_NONE = 0, CELL_GCM_SURFACE_TARGET_0 = 1, CELL_GCM_SURFACE_TARGET_1 = 2, CELL_GCM_SURFACE_TARGET_MRT1 = 0x13, CELL_GCM_SURFACE_TARGET_MRT2 = 0x17, CELL_GCM_SURFACE_TARGET_MRT3 = 0x1f, // Surface Depth CELL_GCM_SURFACE_Z16 = 1, CELL_GCM_SURFACE_Z24S8 = 2, // Surface Antialias CELL_GCM_SURFACE_CENTER_1 = 0, CELL_GCM_SURFACE_DIAGONAL_CENTERED_2 = 3, CELL_GCM_SURFACE_SQUARE_CENTERED_4 = 4, CELL_GCM_SURFACE_SQUARE_ROTATED_4 = 5, // Surface format CELL_GCM_SURFACE_X1R5G5B5_Z1R5G5B5 = 1, CELL_GCM_SURFACE_X1R5G5B5_O1R5G5B5 = 2, CELL_GCM_SURFACE_R5G6B5 = 3, CELL_GCM_SURFACE_X8R8G8B8_Z8R8G8B8 = 4, CELL_GCM_SURFACE_X8R8G8B8_O8R8G8B8 = 5, CELL_GCM_SURFACE_A8R8G8B8 = 8, CELL_GCM_SURFACE_B8 = 9, CELL_GCM_SURFACE_G8B8 = 10, CELL_GCM_SURFACE_F_W16Z16Y16X16 = 11, CELL_GCM_SURFACE_F_W32Z32Y32X32 = 12, CELL_GCM_SURFACE_F_X32 = 13, CELL_GCM_SURFACE_X8B8G8R8_Z8B8G8R8 = 14, CELL_GCM_SURFACE_X8B8G8R8_O8B8G8R8 = 15, CELL_GCM_SURFACE_A8B8G8R8 = 16, // Wrap CELL_GCM_TEXTURE_WRAP = 1, CELL_GCM_TEXTURE_MIRROR = 2, CELL_GCM_TEXTURE_CLAMP_TO_EDGE = 3, CELL_GCM_TEXTURE_BORDER = 4, CELL_GCM_TEXTURE_CLAMP = 5, CELL_GCM_TEXTURE_MIRROR_ONCE_CLAMP_TO_EDGE = 6, CELL_GCM_TEXTURE_MIRROR_ONCE_BORDER = 7, CELL_GCM_TEXTURE_MIRROR_ONCE_CLAMP = 8, // Max Anisotropy CELL_GCM_TEXTURE_MAX_ANISO_1 = 0, CELL_GCM_TEXTURE_MAX_ANISO_2 = 1, CELL_GCM_TEXTURE_MAX_ANISO_4 = 2, CELL_GCM_TEXTURE_MAX_ANISO_6 = 3, CELL_GCM_TEXTURE_MAX_ANISO_8 = 4, CELL_GCM_TEXTURE_MAX_ANISO_10 = 5, CELL_GCM_TEXTURE_MAX_ANISO_12 = 6, CELL_GCM_TEXTURE_MAX_ANISO_16 = 7, // Texture Filter CELL_GCM_TEXTURE_NEAREST = 1, CELL_GCM_TEXTURE_LINEAR = 2, CELL_GCM_TEXTURE_NEAREST_NEAREST = 3, CELL_GCM_TEXTURE_LINEAR_NEAREST = 4, CELL_GCM_TEXTURE_NEAREST_LINEAR = 5, CELL_GCM_TEXTURE_LINEAR_LINEAR = 6, CELL_GCM_TEXTURE_CONVOLUTION_MIN = 7, CELL_GCM_TEXTURE_CONVOLUTION_MAG = 4, }; rsx::texture_wrap_mode rsx::to_texture_wrap_mode(u8 in) { switch (in) { case CELL_GCM_TEXTURE_WRAP: return rsx::texture_wrap_mode::wrap; case CELL_GCM_TEXTURE_MIRROR: return rsx::texture_wrap_mode::mirror; case CELL_GCM_TEXTURE_CLAMP_TO_EDGE: return rsx::texture_wrap_mode::clamp_to_edge; case CELL_GCM_TEXTURE_BORDER: return rsx::texture_wrap_mode::border; case CELL_GCM_TEXTURE_CLAMP: return rsx::texture_wrap_mode::clamp; case CELL_GCM_TEXTURE_MIRROR_ONCE_CLAMP_TO_EDGE: return rsx::texture_wrap_mode::mirror_once_clamp_to_edge; case CELL_GCM_TEXTURE_MIRROR_ONCE_BORDER: return rsx::texture_wrap_mode::mirror_once_border; case CELL_GCM_TEXTURE_MIRROR_ONCE_CLAMP: return rsx::texture_wrap_mode::mirror_once_clamp; } throw EXCEPTION("Unknow wrap mode %x", in); } rsx::texture_max_anisotropy rsx::to_texture_max_anisotropy(u8 in) { switch (in) { case CELL_GCM_TEXTURE_MAX_ANISO_1: return rsx::texture_max_anisotropy::x1; case CELL_GCM_TEXTURE_MAX_ANISO_2: return rsx::texture_max_anisotropy::x2; case CELL_GCM_TEXTURE_MAX_ANISO_4: return rsx::texture_max_anisotropy::x4; case CELL_GCM_TEXTURE_MAX_ANISO_6: return rsx::texture_max_anisotropy::x6; case CELL_GCM_TEXTURE_MAX_ANISO_8: return rsx::texture_max_anisotropy::x8; case CELL_GCM_TEXTURE_MAX_ANISO_10: return rsx::texture_max_anisotropy::x10; case CELL_GCM_TEXTURE_MAX_ANISO_12: return rsx::texture_max_anisotropy::x12; case CELL_GCM_TEXTURE_MAX_ANISO_16: return rsx::texture_max_anisotropy::x16; } throw EXCEPTION("Unknow anisotropy max mode %x", in); } rsx::texture_minify_filter rsx::to_texture_minify_filter(u8 in) { switch (in) { case CELL_GCM_TEXTURE_NEAREST: return rsx::texture_minify_filter::nearest; case CELL_GCM_TEXTURE_LINEAR: return rsx::texture_minify_filter::linear; case CELL_GCM_TEXTURE_NEAREST_NEAREST: return rsx::texture_minify_filter::nearest_nearest; case CELL_GCM_TEXTURE_LINEAR_NEAREST: return rsx::texture_minify_filter::linear_nearest; case CELL_GCM_TEXTURE_NEAREST_LINEAR: return rsx::texture_minify_filter::nearest_linear; case CELL_GCM_TEXTURE_LINEAR_LINEAR: return rsx::texture_minify_filter::linear_linear; case CELL_GCM_TEXTURE_CONVOLUTION_MIN: return rsx::texture_minify_filter::linear_linear; } throw EXCEPTION("Unknow minify filter %x", in); } rsx::texture_magnify_filter rsx::to_texture_magnify_filter(u8 in) { switch (in) { case CELL_GCM_TEXTURE_NEAREST: return rsx::texture_magnify_filter::nearest; case CELL_GCM_TEXTURE_LINEAR: return rsx::texture_magnify_filter::linear; case CELL_GCM_TEXTURE_CONVOLUTION_MAG: return rsx::texture_magnify_filter::convolution_mag; } throw EXCEPTION("Unknow magnify filter %x", in); } rsx::surface_target rsx::to_surface_target(u8 in) { switch (in) { case CELL_GCM_SURFACE_TARGET_NONE: return rsx::surface_target::none; case CELL_GCM_SURFACE_TARGET_0: return rsx::surface_target::surface_a; case CELL_GCM_SURFACE_TARGET_1: return rsx::surface_target::surface_b; case CELL_GCM_SURFACE_TARGET_MRT1: return rsx::surface_target::surfaces_a_b; case CELL_GCM_SURFACE_TARGET_MRT2: return rsx::surface_target::surfaces_a_b_c; case CELL_GCM_SURFACE_TARGET_MRT3: return rsx::surface_target::surfaces_a_b_c_d; } throw EXCEPTION("Unknow surface target %x", in); } rsx::surface_depth_format rsx::to_surface_depth_format(u8 in) { switch (in) { case CELL_GCM_SURFACE_Z16: return rsx::surface_depth_format::z16; case CELL_GCM_SURFACE_Z24S8: return rsx::surface_depth_format::z24s8; } throw EXCEPTION("Unknow surface depth format %x", in); } std::string rsx::get_method_name(const u32 id) { auto found = methods_name.find(id); if (found != methods_name.end()) { return "CELL_GCM_"s + found->second; } return fmt::format("unknown/illegal method [0x%08x]", id); } rsx::surface_antialiasing rsx::to_surface_antialiasing(u8 in) { switch (in) { case CELL_GCM_SURFACE_CENTER_1: return rsx::surface_antialiasing::center_1_sample; case CELL_GCM_SURFACE_DIAGONAL_CENTERED_2: return rsx::surface_antialiasing::diagonal_centered_2_samples; case CELL_GCM_SURFACE_SQUARE_CENTERED_4: return rsx::surface_antialiasing::square_centered_4_samples; case CELL_GCM_SURFACE_SQUARE_ROTATED_4: return rsx::surface_antialiasing::square_rotated_4_samples; } throw EXCEPTION("unknow surface antialiasing format %x", in); } rsx::surface_color_format rsx::to_surface_color_format(u8 in) { switch (in) { case CELL_GCM_SURFACE_X1R5G5B5_Z1R5G5B5: return rsx::surface_color_format::x1r5g5b5_z1r5g5b5; case CELL_GCM_SURFACE_X1R5G5B5_O1R5G5B5: return rsx::surface_color_format::x1r5g5b5_o1r5g5b5; case CELL_GCM_SURFACE_R5G6B5: return rsx::surface_color_format::r5g6b5; case CELL_GCM_SURFACE_X8R8G8B8_Z8R8G8B8: return rsx::surface_color_format::x8r8g8b8_z8r8g8b8; case CELL_GCM_SURFACE_X8R8G8B8_O8R8G8B8: return rsx::surface_color_format::x8r8g8b8_o8r8g8b8; case CELL_GCM_SURFACE_A8R8G8B8: return rsx::surface_color_format::a8r8g8b8; case CELL_GCM_SURFACE_B8: return rsx::surface_color_format::b8; case CELL_GCM_SURFACE_G8B8: return rsx::surface_color_format::g8b8; case CELL_GCM_SURFACE_F_W16Z16Y16X16: return rsx::surface_color_format::w16z16y16x16; case CELL_GCM_SURFACE_F_W32Z32Y32X32: return rsx::surface_color_format::w32z32y32x32; case CELL_GCM_SURFACE_F_X32: return rsx::surface_color_format::x32; case CELL_GCM_SURFACE_X8B8G8R8_Z8B8G8R8: return rsx::surface_color_format::x8b8g8r8_z8b8g8r8; case CELL_GCM_SURFACE_X8B8G8R8_O8B8G8R8: return rsx::surface_color_format::x8b8g8r8_o8b8g8r8; case CELL_GCM_SURFACE_A8B8G8R8: return rsx::surface_color_format::a8b8g8r8; } throw EXCEPTION("unknow surface color format %x", in); } enum { CELL_GCM_KEEP = 0x1E00, CELL_GCM_REPLACE = 0x1E01, CELL_GCM_INCR = 0x1E02, CELL_GCM_DECR = 0x1E03, CELL_GCM_INCR_WRAP = 0x8507, CELL_GCM_DECR_WRAP = 0x8508, }; rsx::stencil_op rsx::to_stencil_op(u16 in) { switch (in) { case CELL_GCM_KEEP: return rsx::stencil_op::keep; case CELL_GCM_REPLACE: return rsx::stencil_op::replace; case CELL_GCM_INCR: return rsx::stencil_op::incr; case CELL_GCM_DECR: return rsx::stencil_op::decr; case CELL_GCM_INCR_WRAP: return rsx::stencil_op::incr_wrap; case CELL_GCM_DECR_WRAP: return rsx::stencil_op::decr_wrap; case CELL_GCM_ZERO: return rsx::stencil_op::zero; } throw EXCEPTION("unknow stencil op %x", in); } enum { CELL_GCM_FUNC_ADD = 0x8006, CELL_GCM_MIN = 0x8007, CELL_GCM_MAX = 0x8008, CELL_GCM_FUNC_SUBTRACT = 0x800A, CELL_GCM_FUNC_REVERSE_SUBTRACT = 0x800B, CELL_GCM_FUNC_REVERSE_SUBTRACT_SIGNED = 0x0000F005, CELL_GCM_FUNC_ADD_SIGNED = 0x0000F006, CELL_GCM_FUNC_REVERSE_ADD_SIGNED = 0x0000F007, }; rsx::blend_equation rsx::to_blend_equation(u16 in) { switch (in) { case CELL_GCM_FUNC_ADD: return rsx::blend_equation::add; case CELL_GCM_MIN: return rsx::blend_equation::min; case CELL_GCM_MAX: return rsx::blend_equation::max; case CELL_GCM_FUNC_SUBTRACT: return rsx::blend_equation::substract; case CELL_GCM_FUNC_REVERSE_SUBTRACT: return rsx::blend_equation::reverse_substract; case CELL_GCM_FUNC_REVERSE_SUBTRACT_SIGNED: return rsx::blend_equation::reverse_substract_signed; case CELL_GCM_FUNC_ADD_SIGNED: return rsx::blend_equation::add_signed; case CELL_GCM_FUNC_REVERSE_ADD_SIGNED: return rsx::blend_equation::reverse_add_signed; } throw EXCEPTION("unknow blend eq %x", in); } enum { CELL_GCM_SRC_COLOR = 0x0300, CELL_GCM_ONE_MINUS_SRC_COLOR = 0x0301, CELL_GCM_SRC_ALPHA = 0x0302, CELL_GCM_ONE_MINUS_SRC_ALPHA = 0x0303, CELL_GCM_DST_ALPHA = 0x0304, CELL_GCM_ONE_MINUS_DST_ALPHA = 0x0305, CELL_GCM_DST_COLOR = 0x0306, CELL_GCM_ONE_MINUS_DST_COLOR = 0x0307, CELL_GCM_SRC_ALPHA_SATURATE = 0x0308, CELL_GCM_CONSTANT_COLOR = 0x8001, CELL_GCM_ONE_MINUS_CONSTANT_COLOR = 0x8002, CELL_GCM_CONSTANT_ALPHA = 0x8003, CELL_GCM_ONE_MINUS_CONSTANT_ALPHA = 0x8004, }; rsx::blend_factor rsx::to_blend_factor(u16 in) { switch (in) { case CELL_GCM_ZERO: return rsx::blend_factor::zero; case CELL_GCM_ONE: return rsx::blend_factor::one; case CELL_GCM_SRC_COLOR: return rsx::blend_factor::src_color; case CELL_GCM_ONE_MINUS_SRC_COLOR: return rsx::blend_factor::one_minus_src_color; case CELL_GCM_SRC_ALPHA: return rsx::blend_factor::src_alpha; case CELL_GCM_ONE_MINUS_SRC_ALPHA: return rsx::blend_factor::one_minus_src_alpha; case CELL_GCM_DST_ALPHA: return rsx::blend_factor::dst_alpha; case CELL_GCM_ONE_MINUS_DST_ALPHA: return rsx::blend_factor::one_minus_dst_alpha; case CELL_GCM_DST_COLOR: return rsx::blend_factor::dst_color; case CELL_GCM_ONE_MINUS_DST_COLOR: return rsx::blend_factor::one_minus_dst_color; case CELL_GCM_SRC_ALPHA_SATURATE: return rsx::blend_factor::src_alpha_saturate; case CELL_GCM_CONSTANT_COLOR: return rsx::blend_factor::constant_color; case CELL_GCM_ONE_MINUS_CONSTANT_COLOR: return rsx::blend_factor::one_minus_constant_color; case CELL_GCM_CONSTANT_ALPHA: return rsx::blend_factor::constant_alpha; case CELL_GCM_ONE_MINUS_CONSTANT_ALPHA: return rsx::blend_factor::one_minus_constant_alpha; } throw EXCEPTION("unknow blend factor %x", in); } enum { CELL_GCM_CLEAR = 0x1500, CELL_GCM_AND = 0x1501, CELL_GCM_AND_REVERSE = 0x1502, CELL_GCM_COPY = 0x1503, CELL_GCM_AND_INVERTED = 0x1504, CELL_GCM_NOOP = 0x1505, CELL_GCM_XOR = 0x1506, CELL_GCM_OR = 0x1507, CELL_GCM_NOR = 0x1508, CELL_GCM_EQUIV = 0x1509, CELL_GCM_INVERT = 0x150A, CELL_GCM_OR_REVERSE = 0x150B, CELL_GCM_COPY_INVERTED = 0x150C, CELL_GCM_OR_INVERTED = 0x150D, CELL_GCM_NAND = 0x150E, CELL_GCM_SET = 0x150F, }; rsx::logic_op rsx::to_logic_op(u16 in) { switch (in) { case CELL_GCM_CLEAR: return rsx::logic_op::logic_clear; case CELL_GCM_AND: return rsx::logic_op::logic_and; case CELL_GCM_AND_REVERSE: return rsx::logic_op::logic_and_reverse; case CELL_GCM_COPY: return rsx::logic_op::logic_copy; case CELL_GCM_AND_INVERTED: return rsx::logic_op::logic_and_inverted; case CELL_GCM_NOOP: return rsx::logic_op::logic_noop; case CELL_GCM_XOR: return rsx::logic_op::logic_xor; case CELL_GCM_OR: return rsx::logic_op::logic_or; case CELL_GCM_NOR: return rsx::logic_op::logic_nor; case CELL_GCM_EQUIV: return rsx::logic_op::logic_equiv; case CELL_GCM_INVERT: return rsx::logic_op::logic_invert; case CELL_GCM_OR_REVERSE: return rsx::logic_op::logic_or_reverse; case CELL_GCM_COPY_INVERTED: return rsx::logic_op::logic_copy_inverted; case CELL_GCM_OR_INVERTED: return rsx::logic_op::logic_or_inverted; case CELL_GCM_NAND: return rsx::logic_op::logic_nand; case CELL_GCM_SET: return rsx::logic_op::logic_set; } throw EXCEPTION("unknow logic op %x", in); } rsx::front_face rsx::to_front_face(u16 in) { switch (in) { default: // Disgaea 3 pass some garbage value at startup, this is needed to survive. case CELL_GCM_CW: return rsx::front_face::cw; case CELL_GCM_CCW: return rsx::front_face::ccw; } throw EXCEPTION("unknow front face %x", in); } rsx::cull_face rsx::to_cull_face(u16 in) { switch (in) { case CELL_GCM_FRONT_AND_BACK: return rsx::cull_face::front_and_back; case CELL_GCM_FRONT: return rsx::cull_face::front; case CELL_GCM_BACK: return rsx::cull_face::back; } throw EXCEPTION("unknow cull face %x", in); } enum { CELL_GCM_TRANSFER_ORIGIN_CENTER = 1, CELL_GCM_TRANSFER_ORIGIN_CORNER = 2, CELL_GCM_TRANSFER_INTERPOLATOR_ZOH = 0, CELL_GCM_TRANSFER_INTERPOLATOR_FOH = 1, }; rsx::blit_engine::transfer_origin rsx::blit_engine::to_transfer_origin(u8 in) { switch (in) { case CELL_GCM_TRANSFER_ORIGIN_CENTER: return rsx::blit_engine::transfer_origin::center; case CELL_GCM_TRANSFER_ORIGIN_CORNER: return rsx::blit_engine::transfer_origin::corner; } throw EXCEPTION("unknow tranfer origin %x", in); } rsx::blit_engine::transfer_interpolator rsx::blit_engine::to_transfer_interpolator(u8 in) { switch (in) { case CELL_GCM_TRANSFER_INTERPOLATOR_ZOH: return rsx::blit_engine::transfer_interpolator::zoh; case CELL_GCM_TRANSFER_INTERPOLATOR_FOH: return rsx::blit_engine::transfer_interpolator::foh; } throw EXCEPTION("unknow tranfer interpolator %x", in); } enum { CELL_GCM_TRANSFER_OPERATION_SRCCOPY_AND = 0, CELL_GCM_TRANSFER_OPERATION_ROP_AND = 1, CELL_GCM_TRANSFER_OPERATION_BLEND_AND = 2, CELL_GCM_TRANSFER_OPERATION_SRCCOPY = 3, CELL_GCM_TRANSFER_OPERATION_SRCCOPY_PREMULT = 4, CELL_GCM_TRANSFER_OPERATION_BLEND_PREMULT = 5, }; rsx::blit_engine::transfer_operation rsx::blit_engine::to_transfer_operation(u8 in) { switch (in) { case CELL_GCM_TRANSFER_OPERATION_SRCCOPY_AND: return rsx::blit_engine::transfer_operation::srccopy_and; case CELL_GCM_TRANSFER_OPERATION_ROP_AND: return rsx::blit_engine::transfer_operation::rop_and; case CELL_GCM_TRANSFER_OPERATION_BLEND_AND: return rsx::blit_engine::transfer_operation::blend_and; case CELL_GCM_TRANSFER_OPERATION_SRCCOPY: return rsx::blit_engine::transfer_operation::srccopy; case CELL_GCM_TRANSFER_OPERATION_SRCCOPY_PREMULT: return rsx::blit_engine::transfer_operation::srccopy_premult; case CELL_GCM_TRANSFER_OPERATION_BLEND_PREMULT: return rsx::blit_engine::transfer_operation::blend_premult; } throw EXCEPTION("unknow tranfer operation %x", in); } enum { CELL_GCM_TRANSFER_SCALE_FORMAT_A1R5G5B5 = 1, CELL_GCM_TRANSFER_SCALE_FORMAT_X1R5G5B5 = 2, CELL_GCM_TRANSFER_SCALE_FORMAT_A8R8G8B8 = 3, CELL_GCM_TRANSFER_SCALE_FORMAT_X8R8G8B8 = 4, CELL_GCM_TRANSFER_SCALE_FORMAT_CR8YB8CB8YA8 = 5, CELL_GCM_TRANSFER_SCALE_FORMAT_YB8CR8YA8CB8 = 6, CELL_GCM_TRANSFER_SCALE_FORMAT_R5G6B5 = 7, CELL_GCM_TRANSFER_SCALE_FORMAT_Y8 = 8, CELL_GCM_TRANSFER_SCALE_FORMAT_AY8 = 9, CELL_GCM_TRANSFER_SCALE_FORMAT_EYB8ECR8EYA8ECB8 = 10, CELL_GCM_TRANSFER_SCALE_FORMAT_ECR8EYB8ECB8EYA8 = 11, CELL_GCM_TRANSFER_SCALE_FORMAT_A8B8G8R8 = 12, CELL_GCM_TRANSFER_SCALE_FORMAT_X8B8G8R8 = 13, }; rsx::blit_engine::transfer_source_format rsx::blit_engine::to_transfer_source_format(u8 in) { switch (in) { case CELL_GCM_TRANSFER_SCALE_FORMAT_A1R5G5B5: return rsx::blit_engine::transfer_source_format::a1r5g5b5; case CELL_GCM_TRANSFER_SCALE_FORMAT_X1R5G5B5: return rsx::blit_engine::transfer_source_format::x1r5g5b5; case CELL_GCM_TRANSFER_SCALE_FORMAT_A8R8G8B8: return rsx::blit_engine::transfer_source_format::a8r8g8b8; case CELL_GCM_TRANSFER_SCALE_FORMAT_X8R8G8B8: return rsx::blit_engine::transfer_source_format::x8r8g8b8; case CELL_GCM_TRANSFER_SCALE_FORMAT_CR8YB8CB8YA8: return rsx::blit_engine::transfer_source_format::cr8yb8cb8ya8; case CELL_GCM_TRANSFER_SCALE_FORMAT_YB8CR8YA8CB8: return rsx::blit_engine::transfer_source_format::yb8cr8ya8cb8; case CELL_GCM_TRANSFER_SCALE_FORMAT_R5G6B5: return rsx::blit_engine::transfer_source_format::r5g6b5; case CELL_GCM_TRANSFER_SCALE_FORMAT_Y8: return rsx::blit_engine::transfer_source_format::y8; case CELL_GCM_TRANSFER_SCALE_FORMAT_AY8: return rsx::blit_engine::transfer_source_format::ay8; case CELL_GCM_TRANSFER_SCALE_FORMAT_EYB8ECR8EYA8ECB8: return rsx::blit_engine::transfer_source_format::eyb8ecr8eya8ecb8; case CELL_GCM_TRANSFER_SCALE_FORMAT_ECR8EYB8ECB8EYA8: return rsx::blit_engine::transfer_source_format::ecr8eyb8ecb8eya8; case CELL_GCM_TRANSFER_SCALE_FORMAT_A8B8G8R8: return rsx::blit_engine::transfer_source_format::a8b8g8r8; case CELL_GCM_TRANSFER_SCALE_FORMAT_X8B8G8R8: return rsx::blit_engine::transfer_source_format::x8b8g8r8; } throw EXCEPTION("unknow transfer source format %x", in); } enum { // Destination Format conversions CELL_GCM_TRANSFER_SURFACE_FORMAT_R5G6B5 = 4, CELL_GCM_TRANSFER_SURFACE_FORMAT_A8R8G8B8 = 10, CELL_GCM_TRANSFER_SURFACE_FORMAT_Y32 = 11, }; rsx::blit_engine::transfer_destination_format rsx::blit_engine::to_transfer_destination_format(u8 in) { switch (in) { case CELL_GCM_TRANSFER_SURFACE_FORMAT_R5G6B5: return rsx::blit_engine::transfer_destination_format::r5g6b5; case CELL_GCM_TRANSFER_SURFACE_FORMAT_A8R8G8B8: return rsx::blit_engine::transfer_destination_format::a8r8g8b8; case CELL_GCM_TRANSFER_SURFACE_FORMAT_Y32: return rsx::blit_engine::transfer_destination_format::y32; } throw EXCEPTION("unknow transfer destination format %x", in); } enum { CELL_GCM_CONTEXT_SURFACE2D = 0x313371C3, CELL_GCM_CONTEXT_SWIZZLE2D = 0x31337A73, }; rsx::blit_engine::context_surface rsx::blit_engine::to_context_surface(u32 in) { switch (in) { case CELL_GCM_CONTEXT_SURFACE2D: return rsx::blit_engine::context_surface::surface2d; case CELL_GCM_CONTEXT_SWIZZLE2D: return rsx::blit_engine::context_surface::swizzle2d; } throw EXCEPTION("unknow context surface %x", in); } rsx::blit_engine::context_dma rsx::blit_engine::to_context_dma(u32 in) { switch (in) { case CELL_GCM_CONTEXT_DMA_TO_MEMORY_GET_REPORT: return rsx::blit_engine::context_dma::to_memory_get_report; case CELL_GCM_CONTEXT_DMA_REPORT_LOCATION_MAIN: return rsx::blit_engine::context_dma::report_location_main; } throw EXCEPTION("unknow context dma %x", in); } enum { CELL_GCM_USER_CLIP_PLANE_DISABLE = 0, CELL_GCM_USER_CLIP_PLANE_ENABLE_LT = 1, CELL_GCM_USER_CLIP_PLANE_ENABLE_GE = 2, }; rsx::user_clip_plane_op rsx::to_user_clip_plane_op(u8 in) { switch (in) { case CELL_GCM_USER_CLIP_PLANE_DISABLE: return rsx::user_clip_plane_op::disable; case CELL_GCM_USER_CLIP_PLANE_ENABLE_LT: return rsx::user_clip_plane_op::less_than; case CELL_GCM_USER_CLIP_PLANE_ENABLE_GE: return rsx::user_clip_plane_op::greather_or_equal; } throw EXCEPTION("unknow user clip plane %x", in); } enum { CELL_GCM_FLAT = 0x1D00, CELL_GCM_SMOOTH = 0x1D01, }; rsx::shading_mode rsx::to_shading_mode(u32 in) { switch (in) { case CELL_GCM_FLAT: return rsx::shading_mode::flat; case CELL_GCM_SMOOTH: return rsx::shading_mode::smooth; } throw EXCEPTION("unknow shading mode %x", in); } enum { CELL_GCM_POLYGON_MODE_POINT = 0x1B00, CELL_GCM_POLYGON_MODE_LINE = 0x1B01, CELL_GCM_POLYGON_MODE_FILL = 0x1B02, }; rsx::polygon_mode rsx::to_polygon_mode(u32 in) { switch (in) { case CELL_GCM_POLYGON_MODE_POINT: return rsx::polygon_mode::point; case CELL_GCM_POLYGON_MODE_LINE: return rsx::polygon_mode::line; case CELL_GCM_POLYGON_MODE_FILL: return rsx::polygon_mode::fill; } throw EXCEPTION("unknow polygon mode %x", in); } // Various parameter pretty printing function namespace { std::string ptr_to_string(u32 ptr) { return fmt::format("0x%08x", ptr); } std::string dma_mode(u32 arg) { switch (arg) { case CELL_GCM_LOCATION_LOCAL: case CELL_GCM_CONTEXT_DMA_MEMORY_FRAME_BUFFER: return "Local memory"; case CELL_GCM_LOCATION_MAIN: case CELL_GCM_CONTEXT_DMA_MEMORY_HOST_BUFFER: return "Main memory"; } return "Error"; } std::string texture_dimension(u8 dim) { switch (rsx::to_texture_dimension(dim)) { case rsx::texture_dimension::dimension1d: return "1D"; case rsx::texture_dimension::dimension2d: return "2D"; case rsx::texture_dimension::dimension3d: return "3D"; } return ""; } std::string get_vertex_attribute_format(u8 type) { switch (rsx::to_vertex_base_type(type)) { case rsx::vertex_base_type::s1: return "Signed short normalized"; case rsx::vertex_base_type::f: return "Float"; case rsx::vertex_base_type::sf: return "Half float"; case rsx::vertex_base_type::ub: return "Unsigned byte normalized"; case rsx::vertex_base_type::s32k: return "Signed short unormalized"; case rsx::vertex_base_type::cmp: return "CMP"; case rsx::vertex_base_type::ub256: return "Unsigned byte unormalized"; } } std::string unpack_vertex_format(u32 arg) { u32 frequency = arg >> 16; u32 stride = (arg >> 8) & 0xff; u32 size = (arg >> 4) & 0xf; u32 type = arg & 0xf; if (size == 0) return "(disabled)"; return "Type = " + get_vertex_attribute_format(type) + " size = " + std::to_string(size) + " stride = " + std::to_string(stride) + " frequency = " + std::to_string(frequency); } std::string transform_constant(size_t index, u32 arg) { return "Transform constant " + std::to_string(index) + ": " + std::to_string(arg) + "/" + std::to_string((float&)arg); } std::string texture_offset(size_t index, u32 arg) { return "Texture " + std::to_string(index) + ": Offset @" + ptr_to_string(arg); } std::string texture_size(size_t index, u32 arg) { return "Texture " + std::to_string(index) + ": width = " + std::to_string(arg & 0xffff) + " height = " + std::to_string(arg >> 16); } static std::string get_texture_format_name(u32 format) { switch (format) { case CELL_GCM_TEXTURE_COMPRESSED_HILO8: return "CELL_GCM_TEXTURE_COMPRESSED_HILO8"; case CELL_GCM_TEXTURE_COMPRESSED_HILO_S8: return "CELL_GCM_TEXTURE_COMPRESSED_HILO_S8"; case CELL_GCM_TEXTURE_B8: return "CELL_GCM_TEXTURE_B8"; case CELL_GCM_TEXTURE_A1R5G5B5: return "CELL_GCM_TEXTURE_A1R5G5B5"; case CELL_GCM_TEXTURE_A4R4G4B4: return "CELL_GCM_TEXTURE_A4R4G4B4"; case CELL_GCM_TEXTURE_R5G6B5: return "CELL_GCM_TEXTURE_R5G6B5"; case CELL_GCM_TEXTURE_A8R8G8B8: return "CELL_GCM_TEXTURE_A8R8G8B8"; case CELL_GCM_TEXTURE_COMPRESSED_DXT1: return "CELL_GCM_TEXTURE_COMPRESSED_DXT1"; case CELL_GCM_TEXTURE_COMPRESSED_DXT23: return "CELL_GCM_TEXTURE_COMPRESSED_DXT23"; case CELL_GCM_TEXTURE_COMPRESSED_DXT45: return "CELL_GCM_TEXTURE_COMPRESSED_DXT45"; case CELL_GCM_TEXTURE_G8B8: return "CELL_GCM_TEXTURE_G8B8"; case CELL_GCM_TEXTURE_R6G5B5: return "CELL_GCM_TEXTURE_R6G5B5"; case CELL_GCM_TEXTURE_DEPTH24_D8: return "CELL_GCM_TEXTURE_DEPTH24_D8"; case CELL_GCM_TEXTURE_DEPTH24_D8_FLOAT: return "CELL_GCM_TEXTURE_DEPTH24_D8_FLOAT"; case CELL_GCM_TEXTURE_DEPTH16: return "CELL_GCM_TEXTURE_DEPTH16"; case CELL_GCM_TEXTURE_DEPTH16_FLOAT: return "CELL_GCM_TEXTURE_DEPTH16_FLOAT"; case CELL_GCM_TEXTURE_X16: return "CELL_GCM_TEXTURE_X16"; case CELL_GCM_TEXTURE_Y16_X16: return "CELL_GCM_TEXTURE_Y16_X16"; case CELL_GCM_TEXTURE_R5G5B5A1: return "CELL_GCM_TEXTURE_R5G5B5A1"; case CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT: return "CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT"; case CELL_GCM_TEXTURE_W32_Z32_Y32_X32_FLOAT: return "CELL_GCM_TEXTURE_W32_Z32_Y32_X32_FLOAT"; case CELL_GCM_TEXTURE_X32_FLOAT: return "CELL_GCM_TEXTURE_X32_FLOAT"; case CELL_GCM_TEXTURE_D1R5G5B5: return "CELL_GCM_TEXTURE_D1R5G5B5"; case CELL_GCM_TEXTURE_D8R8G8B8: return "CELL_GCM_TEXTURE_D8R8G8B8"; case CELL_GCM_TEXTURE_Y16_X16_FLOAT: return "CELL_GCM_TEXTURE_Y16_X16_FLOAT"; case CELL_GCM_TEXTURE_COMPRESSED_B8R8_G8R8: return "CELL_GCM_TEXTURE_COMPRESSED_B8R8_G8R8"; case CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8: return "CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8"; } return "Error"; } std::string texture_format(size_t index, u32 arg) { int format = ((arg >> 8) & 0xFF); return "Texture " + std::to_string(index) + ": location = " + ptr_to_string((arg & 0x3) - 1) + (((arg >> 2) & 0x1) ? " cubemap " : "") + " border type = " + std::to_string((arg >> 3) & 0x1) + " dimension = " + std::to_string((arg >> 4) & 0xF) + " format = " + get_texture_format_name(format & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN)) + ((format & CELL_GCM_TEXTURE_LN) ? "" : " swizzled") + ((format & CELL_GCM_TEXTURE_UN) ? " unormalized coordinates" : "") + " mipmap levels = " + std::to_string((arg >> 16) & 0xFFFF); } std::string get_texture_wrap_mode(u8 wrap) { switch (rsx::to_texture_wrap_mode(wrap)) { case rsx::texture_wrap_mode::wrap: return "WRAP"; case rsx::texture_wrap_mode::mirror: return "MIRROR"; case rsx::texture_wrap_mode::clamp_to_edge: return "CLAMP_TO_EDGE"; case rsx::texture_wrap_mode::border: return "BORDER"; case rsx::texture_wrap_mode::clamp: return "CLAMP"; case rsx::texture_wrap_mode::mirror_once_clamp_to_edge: return "MIRROR_ONCE_CLAMP_TO_EDGE"; case rsx::texture_wrap_mode::mirror_once_border: return "MIRROR_ONCE_BORDER"; case rsx::texture_wrap_mode::mirror_once_clamp: return "MIRROR_ONCE_CLAMP"; } return "Error"; } std::string get_zfunc_name(u8 op) { switch (op) { case 0: return "Never"; case 1: return "Less"; case 2: return "Equal"; case 3: return "LEqual"; case 4: return "Greater"; case 5: return "NotEqual"; case 6: return "GreaterOrEqual"; case 7: return "Always"; } return "Error"; } std::string texture_address(size_t index, u32 arg) { return "Texture " + std::to_string(index) + ": wrap_s = " + get_texture_wrap_mode(arg & 0xF) + " wrap_t = " + get_texture_wrap_mode((arg >> 8) & 0xF) + " wrap_r = " + get_texture_wrap_mode((arg >> 16) & 0xF) + " unsigned remap = " + std::to_string((arg >> 12) & 0xF) + " zfunc = " + get_zfunc_name((arg >> 28) & 0xF) + " gamma = " + std::to_string((arg >> 20) & 0xF) + " aniso bias = " + std::to_string((arg >> 4) & 0xF) + " signed remap = " + std::to_string((arg >> 24) & 0xF); } std::string get_texture_max_aniso_name(u8 aniso) { switch (rsx::to_texture_max_anisotropy(aniso)) { case rsx::texture_max_anisotropy::x1: return "1"; case rsx::texture_max_anisotropy::x2: return "2"; case rsx::texture_max_anisotropy::x4: return "4"; case rsx::texture_max_anisotropy::x6: return "6"; case rsx::texture_max_anisotropy::x8: return "8"; case rsx::texture_max_anisotropy::x10: return "10"; case rsx::texture_max_anisotropy::x12: return "12"; case rsx::texture_max_anisotropy::x16: return "16"; } return "Error"; } std::string texture_control0(size_t index, u32 arg) { std::string result = "Texture " + std::to_string(index); if ((arg >> 31) & 0x1) { result += " min lod = " + std::to_string((arg >> 19) & 0xFFF) + " max lod = " + std::to_string((arg >> 7) & 0xFFF) + " max aniso = " + get_texture_max_aniso_name((arg >> 4) & 0x7) + " alpha kill = " + (((arg >> 2) & 0x1) ? "true" : "false"); } else result += " (disabled)"; return result; } std::string get_remap_channel(u8 op) noexcept { switch (op) { case 0: return "A"; case 1: return "R"; case 2: return "G"; case 3: return "B"; } return "Error"; } std::string texture_control1(size_t index, u32 arg) noexcept { return "Texture " + std::to_string(index) + " Component 0 = " + get_remap_channel(arg & 0x3) + " Component 1 = " + get_remap_channel((arg >> 2) & 0x3) + " Component 2 = " + get_remap_channel((arg >> 4) & 0x3) + " Component 3 = " + get_remap_channel((arg >> 6) & 0x3); } std::string texture_control3(size_t index, u32 arg) { return "Texture " + std::to_string(index) + " depth = " + std::to_string(arg >> 20) + " pitch = " + std::to_string(arg & 0xFFFFF); } std::string texture_border_color(size_t index, u32 arg) { return "Texture " + std::to_string(index) + " border color = " + std::to_string(arg); } std::string texture_filter(size_t index, u32 arg) { return "Texture " + std::to_string(index) + " bias = " + std::to_string(arg & 0x1fff) + " min_filter = " + std::to_string((arg >> 16) & 0x7) + " mag_filter = " + std::to_string((arg >> 24) & 0x7) + " convolution_filter = " + std::to_string((arg >> 13) & 0xF) + " a_signed = " + std::to_string((arg >> 28) & 0x1) + " r_signed = " + std::to_string((arg >> 29) & 0x1) + " g_signed = " + std::to_string((arg >> 30) & 0x1) + " b_signed = " + std::to_string((arg >> 31) & 0x1); } namespace { template auto create_printing_table(const std::integer_sequence &) { return std::unordered_map{ {opcode, rsx::print_register_value}... }; } } const std::unordered_map printing_functions = create_printing_table(rsx::opcode_list); /* { { NV4097_DRAW_ARRAYS, [](u32 arg) -> std::string { return "Draw " + std::to_string((arg >> 24) + 1) + " vertex starting from " + std::to_string(arg & 0xFFFFFF); } }, { NV4097_DRAW_INDEX_ARRAY, [](u32 arg) -> std::string { return "Draw " + std::to_string((arg >> 24) + 1) + " index starting from " + std::to_string(arg & 0xFFFFFF); } }, { NV4097_SET_SEMAPHORE_OFFSET, [](u32 arg) -> std::string { return "Semaphore: @ " + ptr_to_string(arg); } }, { NV4097_TEXTURE_READ_SEMAPHORE_RELEASE, [](u32 arg) -> std::string { return "Write semaphore value " + std::to_string(arg); } }, { NV4097_CLEAR_SURFACE, [](u32 arg) -> std::string { return "Clear surface " + std::string(arg & 0x1 ? "Depth " : "") + std::string(arg & 0x2 ? "Stencil " : "") + std::string(arg & 0xF0 ? "Color " : ""); } }, };*/ } std::function rsx::get_pretty_printing_function(u32 id) { auto found = printing_functions.find(id); if (found != printing_functions.end()) { return found->second; } return [=](u32 v) { return fmt::format("%s : 0x%08x", rsx::get_method_name(id), v); }; }