From 80df936e9817c1db4cc0a67d270048fc7953b25d Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Mon, 14 Oct 2013 15:31:56 +0000 Subject: current gc2000 replay stuff is gc880 specific Signed-off-by: Christian Gmeiner --- src/replay/Makefile | 16 +- src/replay/companion_cmd_gc2000.h | 803 --------------------------- src/replay/companion_cmd_gc880.h | 803 +++++++++++++++++++++++++++ src/replay/cube_cmd_gc2000.h | 650 ---------------------- src/replay/cube_cmd_gc880.h | 650 ++++++++++++++++++++++ src/replay/cube_companion_gc2000.c | 473 ---------------- src/replay/cube_companion_gc880.c | 473 ++++++++++++++++ src/replay/cube_etna2_gc2000.c | 644 ---------------------- src/replay/cube_etna2_gc880.c | 644 ++++++++++++++++++++++ src/replay/cube_etna_gc2000.c | 1070 ------------------------------------ src/replay/cube_etna_gc880.c | 1070 ++++++++++++++++++++++++++++++++++++ src/replay/cube_gc2000.c | 497 ----------------- src/replay/cube_gc880.c | 497 +++++++++++++++++ src/replay/empty_screen_gc2000.c | 304 ---------- src/replay/empty_screen_gc880.c | 304 ++++++++++ 15 files changed, 4449 insertions(+), 4449 deletions(-) delete mode 100644 src/replay/companion_cmd_gc2000.h create mode 100644 src/replay/companion_cmd_gc880.h delete mode 100644 src/replay/cube_cmd_gc2000.h create mode 100644 src/replay/cube_cmd_gc880.h delete mode 100644 src/replay/cube_companion_gc2000.c create mode 100644 src/replay/cube_companion_gc880.c delete mode 100644 src/replay/cube_etna2_gc2000.c create mode 100644 src/replay/cube_etna2_gc880.c delete mode 100644 src/replay/cube_etna_gc2000.c create mode 100644 src/replay/cube_etna_gc880.c delete mode 100644 src/replay/cube_gc2000.c create mode 100644 src/replay/cube_gc880.c delete mode 100644 src/replay/empty_screen_gc2000.c create mode 100644 src/replay/empty_screen_gc880.c (limited to 'src') diff --git a/src/replay/Makefile b/src/replay/Makefile index d3c5f4c..c50aeb2 100644 --- a/src/replay/Makefile +++ b/src/replay/Makefile @@ -7,7 +7,7 @@ LDFLAGS_ETNA = $(LDFLAGS) -L$(TOP)/etnaviv -letnaviv TARGETS = TARGETS_GC800 = cube cube_companion cube_etna ps_sandbox_etna etna_test cube_etna2 -TARGETS_GC2000 = cube_etna2_gc2000 empty_screen_gc2000 cube_gc2000 cube_companion_gc2000 cube_etna_gc2000 +TARGETS_GC880 = cube_etna2_gc880 empty_screen_gc880 cube_gc880 cube_companion_gc880 cube_etna_gc880 COMPANION_OBJS = ../resources/companion_array.o ../resources/companion_mesh.o ../resources/companion_texture.o ETNA_OBJS = ../lib/etna_bswap.o @@ -20,13 +20,13 @@ clean: # These specifically replay command streams for gc800, don't build them by default gc800: $(TARGETS_GC800) -# These specifically replay command streams for gc2000, don't build them by default -gc2000: $(TARGETS_GC2000) +# These specifically replay command streams for gc880, don't build them by default +gc880: $(TARGETS_GC880) -empty_screen_gc2000: empty_screen_gc2000.o ../lib/write_bmp.o viv_raw.o +empty_screen_gc880: empty_screen_gc880.o ../lib/write_bmp.o viv_raw.o $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) -cube_gc2000: cube_gc2000.o ../lib/write_bmp.o viv_raw.o +cube_gc880: cube_gc880.o ../lib/write_bmp.o viv_raw.o $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) cube: cube.o ../lib/write_bmp.o viv_raw.o @@ -35,19 +35,19 @@ cube: cube.o ../lib/write_bmp.o viv_raw.o cube_companion: cube_companion.o viv_raw.o ../lib/write_bmp.o $(COMPANION_OBJS) $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) -cube_companion_gc2000: cube_companion_gc2000.o ../lib/write_bmp.o viv_raw.o $(COMPANION_OBJS) +cube_companion_gc880: cube_companion_gc880.o ../lib/write_bmp.o viv_raw.o $(COMPANION_OBJS) $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) cube_etna: cube_etna.o ../lib/write_bmp.o ../lib/esTransform.o viv_raw.o $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) -cube_etna_gc2000: cube_etna_gc2000.o ../lib/write_bmp.o ../lib/esTransform.o viv_raw.o +cube_etna_gc880: cube_etna_gc880.o ../lib/write_bmp.o ../lib/esTransform.o viv_raw.o $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) cube_etna2: cube_etna2.o ../lib/write_bmp.o ../lib/esTransform.o $(ETNA_OBJS) $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS_ETNA) -cube_etna2_gc2000: cube_etna2_gc2000.o ../lib/write_bmp.o ../lib/esTransform.o $(ETNA_OBJS) +cube_etna2_gc880: cube_etna2_gc880.o ../lib/write_bmp.o ../lib/esTransform.o $(ETNA_OBJS) $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS_ETNA) ps_sandbox_etna: ps_sandbox_etna.o ../lib/write_bmp.o ../lib/esTransform.o viv_raw.o diff --git a/src/replay/companion_cmd_gc2000.h b/src/replay/companion_cmd_gc2000.h deleted file mode 100644 index 096da72..0000000 --- a/src/replay/companion_cmd_gc2000.h +++ /dev/null @@ -1,803 +0,0 @@ -uint32_t cmdbuf1[] = { /* seq 85 */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x08010e05, /* LOAD_STATE (1) Base: 0x03814 Size: 1 Fixp: 0 */ - 0x00000001, /* [03814] GL.VERTEX_ELEMENT_CONFIG := 0x1 */ - 0x08010380, /* LOAD_STATE (1) Base: 0x00E00 Size: 1 Fixp: 0 */ - 0x00000001, /* [00E00] RA.CONTROL := UNK0=1,LAST_VARYING_2X=0 */ - 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ - 0x34000001, /* [00A2C] PA.W_CLIP_LIMIT := 0x34000001 */ - 0x0801028a, /* LOAD_STATE (1) Base: 0x00A28 Size: 1 Fixp: 0 */ - 0x00000011, /* [00A28] PA.SYSTEM_MODE := UNK0=1,UNK4=1 */ - 0x08010e13, /* LOAD_STATE (1) Base: 0x0384C Size: 1 Fixp: 0 */ - 0x00000000, /* [0384C] GL.API_MODE := OPENGL */ - 0x08010306, /* LOAD_STATE (1) Base: 0x00C18 Size: 1 Fixp: 0 */ - 0x00000000, /* [00C18] SE.CONFIG := LAST_PIXEL_ENABLE=0 */ - 0x08010304, /* LOAD_STATE (1) Base: 0x00C10 Size: 1 Fixp: 0 */ - 0x00000000, /* [00C10] SE.DEPTH_SCALE := 0.000000 */ - 0x08010305, /* LOAD_STATE (1) Base: 0x00C14 Size: 1 Fixp: 0 */ - 0x00000000, /* [00C14] SE.DEPTH_BIAS := 0.000000 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000002, /* [0380C] GL.FLUSH_CACHE := DEPTH=0,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ - 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ - 0x0801059d, /* LOAD_STATE (1) Base: 0x01674 Size: 1 Fixp: 0 */ - 0x00006ac0, /* [01674] TS.DEPTH_AUTO_DISABLE_COUNT := 0x6ac0 */ - 0x08030596, /* LOAD_STATE (1) Base: 0x01658 Size: 3 Fixp: 0 */ - 0x15aab000, /* [01658] TS.COLOR_STATUS_BASE := ADDR_H */ - 0x15900000, /* [0165C] TS.COLOR_SURFACE_BASE := ADDR_G */ - 0x00000000, /* [01660] TS.COLOR_CLEAR_VALUE := 0x0 */ - 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ - 0x00000022, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=0,COLOR_FAST_CLEAR=1,DEPTH_16BPP=0,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=0,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000001, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=0,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ - 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ - 0x08030599, /* LOAD_STATE (1) Base: 0x01664 Size: 3 Fixp: 0 */ - 0x15aacb00, /* [01664] TS.DEPTH_STATUS_BASE := ADDR_J */ - 0x15ab5000, /* [01668] TS.DEPTH_SURFACE_BASE := ADDR_I */ - 0xffffffff, /* [0166C] TS.DEPTH_CLEAR_VALUE := 0xffffffff */ - 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ - 0x0000006b, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=1,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ - 0x08010304, /* LOAD_STATE (1) Base: 0x00C10 Size: 1 Fixp: 0 */ - 0x00000000, /* [00C10] SE.DEPTH_SCALE := 0.000000 */ - 0x08010305, /* LOAD_STATE (1) Base: 0x00C14 Size: 1 Fixp: 0 */ - 0x00000000, /* [00C14] SE.DEPTH_BIAS := 0.000000 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ - 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ - 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ - 0x08010e02, /* LOAD_STATE (1) Base: 0x03808 Size: 1 Fixp: 0 */ - 0x00000705, /* [03808] GL.SEMAPHORE_TOKEN := FROM=RA,TO=PE */ - 0x08010f00, /* LOAD_STATE (1) Base: 0x03C00 Size: 1 Fixp: 0 */ - 0x00000705, /* [03C00] GL.STALL_TOKEN := FROM=RA,TO=PE,FLIP0=0,FLIP1=0 */ - 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ - 0x00000606, /* [01604] RS.CONFIG := SOURCE_FORMAT=A8R8G8B8,DOWNSAMPLE_X=0,DOWNSAMPLE_Y=0,SOURCE_TILED=0,DEST_FORMAT=A8R8G8B8,DEST_TILED=0,SWAP_RB=0,FLIP=0 */ - 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ - 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ - 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ - 0x00000705, /* PAD */ - 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ - 0x15aab000, /* [01610] RS.DEST_ADDR := ADDR_H */ - 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ - 0x00000040, /* [01614] RS.DEST_STRIDE := STRIDE=0x40,MULTI=0,TILING=0 */ - 0x08010590, /* LOAD_STATE (1) Base: 0x01640 Size: 1 Fixp: 0 */ - 0x55555555, /* [01640] RS.FILL_VALUE[0] := 0x55555555 */ - 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ - 0x0001ffff, /* [0163C] RS.CLEAR_CONTROL := BITS=0xffff,MODE=ENABLED1 */ - 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ - 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ - 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ - 0x006c0010, /* [01620] RS.WINDOW_SIZE := HEIGHT=108,WIDTH=16 */ - 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ - 0xbadabeeb, /* [01600] RS.KICKER := 0xbadabeeb */ - 0x08010598, /* LOAD_STATE (1) Base: 0x01660 Size: 1 Fixp: 0 */ - 0xff7f7f7f, /* [01660] TS.COLOR_CLEAR_VALUE := 0xff7f7f7f */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000002, /* [0380C] GL.FLUSH_CACHE := DEPTH=0,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ - 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ - 0x0801059d, /* LOAD_STATE (1) Base: 0x01674 Size: 1 Fixp: 0 */ - 0x00006ac0, /* [01674] TS.DEPTH_AUTO_DISABLE_COUNT := 0x6ac0 */ - 0x08030596, /* LOAD_STATE (1) Base: 0x01658 Size: 3 Fixp: 0 */ - 0x15aab000, /* [01658] TS.COLOR_STATUS_BASE := ADDR_H */ - 0x15900000, /* [0165C] TS.COLOR_SURFACE_BASE := ADDR_G */ - 0xff7f7f7f, /* [01660] TS.COLOR_CLEAR_VALUE := 0xff7f7f7f */ - 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ - 0x0000006b, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=1,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ - 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ - 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ - 0x08010e02, /* LOAD_STATE (1) Base: 0x03808 Size: 1 Fixp: 0 */ - 0x00000705, /* [03808] GL.SEMAPHORE_TOKEN := FROM=RA,TO=PE */ - 0x08010f00, /* LOAD_STATE (1) Base: 0x03C00 Size: 1 Fixp: 0 */ - 0x00000705, /* [03C00] GL.STALL_TOKEN := FROM=RA,TO=PE,FLIP0=0,FLIP1=0 */ - 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ - 0x00000606, /* [01604] RS.CONFIG := SOURCE_FORMAT=A8R8G8B8,DOWNSAMPLE_X=0,DOWNSAMPLE_Y=0,SOURCE_TILED=0,DEST_FORMAT=A8R8G8B8,DEST_TILED=0,SWAP_RB=0,FLIP=0 */ - 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ - 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ - 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ - 0xffffffff, /* PAD */ - 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ - 0x15aacb00, /* [01610] RS.DEST_ADDR := ADDR_J */ - 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ - 0x00000080, /* [01614] RS.DEST_STRIDE := STRIDE=0x80,MULTI=0,TILING=0 */ - 0x08010590, /* LOAD_STATE (1) Base: 0x01640 Size: 1 Fixp: 0 */ - 0x55555555, /* [01640] RS.FILL_VALUE[0] := 0x55555555 */ - 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ - 0x0001ffff, /* [0163C] RS.CLEAR_CONTROL := BITS=0xffff,MODE=ENABLED1 */ - 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ - 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ - 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ - 0x001c0020, /* [01620] RS.WINDOW_SIZE := HEIGHT=28,WIDTH=32 */ - 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ - 0xbadabeeb, /* [01600] RS.KICKER := 0xbadabeeb */ - 0x0801059b, /* LOAD_STATE (1) Base: 0x0166C Size: 1 Fixp: 0 */ - 0xffffffff, /* [0166C] TS.DEPTH_CLEAR_VALUE := 0xffffffff */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000001, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=0,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ - 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ - 0x08030599, /* LOAD_STATE (1) Base: 0x01664 Size: 3 Fixp: 0 */ - 0x15aacb00, /* [01664] TS.DEPTH_STATUS_BASE := ADDR_J */ - 0x15ab5000, /* [01668] TS.DEPTH_SURFACE_BASE := ADDR_I */ - 0xffffffff, /* [0166C] TS.DEPTH_CLEAR_VALUE := 0xffffffff */ - 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ - 0x0000006b, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=1,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ - 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ - 0x00000000, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=0,COLOR_FAST_CLEAR=0,DEPTH_16BPP=0,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=0,DEPTH_COMPRESSION=0,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ - 0x000045e5, /* [01604] RS.CONFIG := SOURCE_FORMAT=X8R8G8B8,DOWNSAMPLE_X=1,DOWNSAMPLE_Y=1,SOURCE_TILED=1,DEST_FORMAT=X8R8G8B8,DEST_TILED=1,SWAP_RB=0,FLIP=0 */ - 0x08010583, /* LOAD_STATE (1) Base: 0x0160C Size: 1 Fixp: 0 */ - 0x00002000, /* [0160C] RS.SOURCE_STRIDE := STRIDE=0x2000,MULTI=0,TILING=0 */ - 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ - 0x00001000, /* [01614] RS.DEST_STRIDE := STRIDE=0x1000,MULTI=0,TILING=0 */ - 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ - 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ - 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ - 0x00000000, /* PAD */ - 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ - 0x00000000, /* [0163C] RS.CLEAR_CONTROL := BITS=0x0,MODE=DISABLED */ - 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ - 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ - 0x08010582, /* LOAD_STATE (1) Base: 0x01608 Size: 1 Fixp: 0 */ - 0x15cfd000, /* [01608] RS.SOURCE_ADDR := ADDR_L */ - 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ - 0x15dfd000, /* [01610] RS.DEST_ADDR := ADDR_M */ - 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ - 0x02000200, /* [01620] RS.WINDOW_SIZE := HEIGHT=512,WIDTH=512 */ - 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ - 0xbadabeeb /* [01600] RS.KICKER := 0xbadabeeb */ -}; -#if 0 - Grouped GPU addresses { - cmdbuf[0x57] = cmdbuf[0x67] = cmdbuf[0x9f] = cmdbuf[0xbb] = cmdbuf[0xd9] = cmdbuf[0xfb] = cmdbuf[0x119] = cmdbuf[0x135] = cmdbuf[0x153] = ADDR_A; /* 0x7f2c8700 */ - cmdbuf[0x65] = cmdbuf[0x9d] = cmdbuf[0xb9] = cmdbuf[0xd7] = cmdbuf[0xe5] = cmdbuf[0xf9] = cmdbuf[0x117] = cmdbuf[0x133] = cmdbuf[0x151] = ADDR_B; /* 0x7a005900 */ - cmdbuf[0x89] = cmdbuf[0x8f] = cmdbuf[0x93] = cmdbuf[0xa5] = cmdbuf[0xab] = cmdbuf[0xaf] = cmdbuf[0xc3] = cmdbuf[0xc9] = cmdbuf[0xcd] = cmdbuf[0x103] = cmdbuf[0x109] = cmdbuf[0x10d] = cmdbuf[0x11f] = cmdbuf[0x125] = cmdbuf[0x129] = cmdbuf[0x13d] = cmdbuf[0x143] = cmdbuf[0x147] = ADDR_F; /* 0x7f284000 */ - cmdbuf[0x7d] = cmdbuf[0x15f] = cmdbuf[0x173] = ADDR_D; /* 0x7a003200 */ - cmdbuf[0x87] = cmdbuf[0xa3] = cmdbuf[0xc1] = cmdbuf[0x101] = cmdbuf[0x11d] = cmdbuf[0x13b] = ADDR_G; /* 0x7a002a00 */ - cmdbuf[0x6d] = cmdbuf[0x7f] = cmdbuf[0x175] = ADDR_C; /* 0x7e6a0000 */ - } -#endif - -uint32_t cmdbuf2[] = { /* seq 101 */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ - 0x0000006b, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=1,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ - 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ - 0x00000000, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=0,COLOR_FAST_CLEAR=0,DEPTH_16BPP=0,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=0,DEPTH_COMPRESSION=0,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ - 0x000045e5, /* [01604] RS.CONFIG := SOURCE_FORMAT=X8R8G8B8,DOWNSAMPLE_X=1,DOWNSAMPLE_Y=1,SOURCE_TILED=1,DEST_FORMAT=X8R8G8B8,DEST_TILED=1,SWAP_RB=0,FLIP=0 */ - 0x08010583, /* LOAD_STATE (1) Base: 0x0160C Size: 1 Fixp: 0 */ - 0x00001000, /* [0160C] RS.SOURCE_STRIDE := STRIDE=0x1000,MULTI=0,TILING=0 */ - 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ - 0x00000800, /* [01614] RS.DEST_STRIDE := STRIDE=0x800,MULTI=0,TILING=0 */ - 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ - 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ - 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ - 0x00000000, /* PAD */ - 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ - 0x00000000, /* [0163C] RS.CLEAR_CONTROL := BITS=0x0,MODE=DISABLED */ - 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ - 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ - 0x08010582, /* LOAD_STATE (1) Base: 0x01608 Size: 1 Fixp: 0 */ - 0x15dfd000, /* [01608] RS.SOURCE_ADDR := ADDR_M */ - 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ - 0x15e3d000, /* [01610] RS.DEST_ADDR := ADDR_N */ - 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ - 0x01000100, /* [01620] RS.WINDOW_SIZE := HEIGHT=256,WIDTH=256 */ - 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ - 0xbadabeeb /* [01600] RS.KICKER := 0xbadabeeb */ -}; -#if 0 -Grouped GPU addresses { - 33 - stride src - 35 - stride dst - 39 - pad but allways different - garbage? - 45 - source addr - 47 - dest addr - 49 - height width -} -#endif - -uint32_t cmdbuf3[] = { - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ - 0x0000006b /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=1,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ -}; - -uint32_t cmdbuf4[] = { /* seq 103 */ - 0x08010584, /* PAD */ - 0x1523a000, /* PAD */ - 0x08010588, /* PAD */ - 0x00f00190, /* PAD */ - 0x08010580, /* PAD */ - 0xbeebbeeb, /* PAD */ - 0x40000006, /* PAD */ - 0x14880010, /* PAD */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08101400, /* LOAD_STATE (1) Base: 0x05000 Size: 16 Fixp: 0 */ - 0x3f3573de, /* [05000] VS.UNIFORMS[0] := 0.708799 (u0.x) */ - 0x3f2084dd, /* [05004] VS.UNIFORMS[1] := 0.627027 (u0.y) */ - 0xbf7e5849, /* [05008] VS.UNIFORMS[2] := -0.993535 (u0.z) */ - 0xbe959d58, /* [0500C] VS.UNIFORMS[3] := -0.292216 (u0.w) */ - 0x3dfff5c0, /* [05010] VS.UNIFORMS[4] := 0.124980 (u1.x) */ - 0x3faa1052, /* [05014] VS.UNIFORMS[5] := 1.328623 (u1.y) */ - 0x3f7c0220, /* [05018] VS.UNIFORMS[6] := 0.984407 (u1.z) */ - 0x3e943d7c, /* [0501C] VS.UNIFORMS[7] := 0.289532 (u1.w) */ - 0xbf384078, /* [05020] VS.UNIFORMS[8] := -0.719734 (u2.x) */ - 0x3f592492, /* [05024] VS.UNIFORMS[9] := 0.848214 (u2.y) */ - 0xbf4eb851, /* [05028] VS.UNIFORMS[10] := -0.807500 (u2.z) */ - 0xbe733332, /* [0502C] VS.UNIFORMS[11] := -0.237500 (u2.w) */ - 0x00000000, /* [05030] VS.UNIFORMS[12] := 0.000000 (u3.x) */ - 0x00000000, /* [05034] VS.UNIFORMS[13] := 0.000000 (u3.y) */ - 0x3f4ccce0, /* [05038] VS.UNIFORMS[14] := 0.800001 (u3.z) */ - 0x41000000, /* [0503C] VS.UNIFORMS[15] := 8.000000 (u3.w) */ - 0x00000000, /* PAD */ - 0x08031410, /* LOAD_STATE (1) Base: 0x05040 Size: 3 Fixp: 0 */ - 0x3ea95b14, /* [05040] VS.UNIFORMS[16] := 0.330773 (u4.x) */ - 0x3e33c802, /* [05044] VS.UNIFORMS[17] := 0.175568 (u4.y) */ - 0x3e959d58, /* [05048] VS.UNIFORMS[18] := 0.292216 (u4.z) */ - 0x08031414, /* LOAD_STATE (1) Base: 0x05050 Size: 3 Fixp: 0 */ - 0x3d6ee55e, /* [05050] VS.UNIFORMS[20] := 0.058324 (u5.x) */ - 0x3ebe78ae, /* [05054] VS.UNIFORMS[21] := 0.372014 (u5.y) */ - 0xbe943d7c, /* [05058] VS.UNIFORMS[22] := -0.289532 (u5.z) */ - 0x08031418, /* LOAD_STATE (1) Base: 0x05060 Size: 3 Fixp: 0 */ - 0xbeabf7e8, /* [05060] VS.UNIFORMS[24] := -0.335876 (u6.x) */ - 0x3e733333, /* [05064] VS.UNIFORMS[25] := 0.237500 (u6.y) */ - 0x3e733332, /* [05068] VS.UNIFORMS[26] := 0.237500 (u6.z) */ - 0x0810141c, /* LOAD_STATE (1) Base: 0x05070 Size: 16 Fixp: 0 */ - 0x3ea95b14, /* [05070] VS.UNIFORMS[28] := 0.330773 (u7.x) */ - 0x3e33c802, /* [05074] VS.UNIFORMS[29] := 0.175568 (u7.y) */ - 0x3e959d58, /* [05078] VS.UNIFORMS[30] := 0.292216 (u7.z) */ - 0x00000000, /* [0507C] VS.UNIFORMS[31] := 0.000000 (u7.w) */ - 0x3d6ee55e, /* [05080] VS.UNIFORMS[32] := 0.058324 (u8.x) */ - 0x3ebe78ae, /* [05084] VS.UNIFORMS[33] := 0.372014 (u8.y) */ - 0xbe943d7c, /* [05088] VS.UNIFORMS[34] := -0.289532 (u8.z) */ - 0x00000000, /* [0508C] VS.UNIFORMS[35] := 0.000000 (u8.w) */ - 0xbeabf7e8, /* [05090] VS.UNIFORMS[36] := -0.335876 (u9.x) */ - 0x3e733333, /* [05094] VS.UNIFORMS[37] := 0.237500 (u9.y) */ - 0x3e733332, /* [05098] VS.UNIFORMS[38] := 0.237500 (u9.z) */ - 0x00000000, /* [0509C] VS.UNIFORMS[39] := 0.000000 (u9.w) */ - 0x00000000, /* [050A0] VS.UNIFORMS[40] := 0.000000 (u10.x) */ - 0x00000000, /* [050A4] VS.UNIFORMS[41] := 0.000000 (u10.y) */ - 0xc1000000, /* [050A8] VS.UNIFORMS[42] := -8.000000 (u10.z) */ - 0x3f800000, /* [050AC] VS.UNIFORMS[43] := 1.000000 (u10.w) */ - 0x00000000, /* PAD */ - 0x08030180, /* LOAD_STATE (1) Base: 0x00600 Size: 3 Fixp: 0 */ - 0x0c003088, /* [00600] FE.VERTEX_ELEMENT_CONFIG[0] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x0,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x0c003188, /* [00604] FE.VERTEX_ELEMENT_CONFIG[1] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x1,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x08002288, /* [00608] FE.VERTEX_ELEMENT_CONFIG[2] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x2,NUM=0x2,NORMALIZE=OFF,START=0x0,END=0x8 */ - 0x08010208, /* LOAD_STATE (1) Base: 0x00820 Size: 1 Fixp: 0 */ - 0x00020100, /* [00820] VS.INPUT[0] := I0=0,I1=1,I2=2,I3=0 */ - 0x080301a0, /* LOAD_STATE (1) Base: 0x00680 Size: 3 Fixp: 0 */ - 0x15000000, /* [00680] FE.VERTEX_STREAMS[0].BASE_ADDR := ADDR_A */ - 0x150239d0, /* [00684] FE.VERTEX_STREAMS[1].BASE_ADDR := ADDR_V */ - 0x150473a0, /* [00688] FE.VERTEX_STREAMS[2].BASE_ADDR := ADDR_W */ - 0x080301a8, /* LOAD_STATE (1) Base: 0x006A0 Size: 3 Fixp: 0 */ - 0x0000000c, /* [006A0] FE.VERTEX_STREAMS[0].CONTROL := 0xc */ - 0x0000000c, /* [006A4] FE.VERTEX_STREAMS[1].CONTROL := 0xc */ - 0x00000008, /* [006A8] FE.VERTEX_STREAMS[2].CONTROL := 0x8 */ - 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ - 0x00000000, /* [00A2C] PA.W_CLIP_LIMIT := 0x0 */ - 0x08010800, /* LOAD_STATE (1) Base: 0x02000 Size: 1 Fixp: 0 */ - 0x00091552, /* [02000] TE.SAMPLER[0].CONFIG0 := TYPE=2D,UWRAP=CLAMP_TO_EDGE,VWRAP=CLAMP_TO_EDGE,MIN=LINEAR,MIP=LINEAR,MAG=LINEAR,FORMAT=X8R8G8B8,ROUND_UV=1,ENDIAN=NO_SWAP,ANISOTROPY=0.000000 */ - 0x08010870, /* LOAD_STATE (1) Base: 0x021C0 Size: 1 Fixp: 0 */ - 0x04521000, /* [021C0] TE.SAMPLER[0].CONFIG1 := FORMAT_EXT=NONE,SWIZZLE_R=RED,SWIZZLE_G=GREEN,SWIZZLE_B=BLUE,SWIZZLE_A=ONE(residue:0x04000000) */ - 0x08010810, /* LOAD_STATE (1) Base: 0x02040 Size: 1 Fixp: 0 */ - 0x02000200, /* [02040] TE.SAMPLER[0].SIZE := WIDTH=512,HEIGHT=512 */ - 0x08010820, /* LOAD_STATE (1) Base: 0x02080 Size: 1 Fixp: 0 */ - 0x00048120, /* [02080] TE.SAMPLER[0].LOG_SIZE := WIDTH=9.000000,HEIGHT=9.000000 */ - 0x08010830, /* LOAD_STATE (1) Base: 0x020C0 Size: 1 Fixp: 0 */ - 0x00000240, /* [020C0] TE.SAMPLER[0].LOD_CONFIG := BIAS_ENABLE=0,MAX=9.000000,MIN=0.000000,BIAS=0.000000 */ - 0x08010900, /* LOAD_STATE (1) Base: 0x02400 Size: 1 Fixp: 0 */ - 0x15cfd000, /* [02400] TE.SAMPLER[0].LOD_ADDR[0] := ADDR_L */ - 0x08010910, /* LOAD_STATE (1) Base: 0x02440 Size: 1 Fixp: 0 */ - 0x15dfd000, /* [02440] TE.SAMPLER[0].LOD_ADDR[1] := ADDR_M */ - 0x08010920, /* LOAD_STATE (1) Base: 0x02480 Size: 1 Fixp: 0 */ - 0x15e3d000, /* [02480] TE.SAMPLER[0].LOD_ADDR[2] := ADDR_N */ - 0x08010930, /* LOAD_STATE (1) Base: 0x024C0 Size: 1 Fixp: 0 */ - 0x15aad900, /* [024C0] TE.SAMPLER[0].LOD_ADDR[3] := ADDR_O */ - 0x08010940, /* LOAD_STATE (1) Base: 0x02500 Size: 1 Fixp: 0 */ - 0x15ab1900, /* [02500] TE.SAMPLER[0].LOD_ADDR[4] := ADDR_P */ - 0x08010950, /* LOAD_STATE (1) Base: 0x02540 Size: 1 Fixp: 0 */ - 0x15ab2900, /* [02540] TE.SAMPLER[0].LOD_ADDR[5] := ADDR_Q */ - 0x08010960, /* LOAD_STATE (1) Base: 0x02580 Size: 1 Fixp: 0 */ - 0x15ab2d00, /* [02580] TE.SAMPLER[0].LOD_ADDR[6] := ADDR_R */ - 0x08010970, /* LOAD_STATE (1) Base: 0x025C0 Size: 1 Fixp: 0 */ - 0x15ab2f00, /* [025C0] TE.SAMPLER[0].LOD_ADDR[7] := ADDR_S */ - 0x08010980, /* LOAD_STATE (1) Base: 0x02600 Size: 1 Fixp: 0 */ - 0x15ab3000, /* [02600] TE.SAMPLER[0].LOD_ADDR[8] := ADDR_T */ - 0x08010990, /* LOAD_STATE (1) Base: 0x02640 Size: 1 Fixp: 0 */ - 0x15ab3100, /* [02640] TE.SAMPLER[0].LOD_ADDR[9] := ADDR_U */ - 0x080105c8, /* LOAD_STATE (1) Base: 0x01720 Size: 1 Fixp: 0 */ - 0x00000000, /* [01720] TS.SAMPLER[0].CONFIG := ENABLE=0x0,FORMAT=0x0 */ - 0x080105d0, /* LOAD_STATE (1) Base: 0x01740 Size: 1 Fixp: 0 */ - 0x00c0ffee, /* [01740] TS.SAMPLER[0].STATUS_BASE := ADDR_X */ - 0x080105d8, /* LOAD_STATE (1) Base: 0x01760 Size: 1 Fixp: 0 */ - 0x00000000, /* [01760] TS.SAMPLER[0].CLEAR_VALUE := 0x0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000007, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=1,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e02, /* LOAD_STATE (1) Base: 0x03808 Size: 1 Fixp: 0 */ - 0x00000701, /* [03808] GL.SEMAPHORE_TOKEN := FROM=FE,TO=PE */ - 0x48000000, /* STALL (9) */ - 0x00000701, /* */ - 0x0c020280, /* LOAD_STATE (1) Base: 0x00A00 Size: 2 Fixp: 1 */ - 0x01900000, /* [00A00] PA.VIEWPORT_SCALE_X = 400.000000 */ - 0x00f00000, /* [00A04] PA.VIEWPORT_SCALE_Y = 240.000000 */ - 0x00000000, /* PAD */ - 0x0c020283, /* LOAD_STATE (1) Base: 0x00A0C Size: 2 Fixp: 1 */ - 0x01900000, /* [00A0C] PA.VIEWPORT_OFFSET_X = 400.000000 */ - 0x00f00000, /* [00A10] PA.VIEWPORT_OFFSET_Y = 240.000000 */ - 0x00000000, /* PAD */ - 0x080102a0, /* LOAD_STATE (1) Base: 0x00A80 Size: 1 Fixp: 0 */ - 0x38481905, /* [00A80] PA.VIEWPORT_UNK00A80 := 0.000048 */ - 0x0c0102a1, /* LOAD_STATE (1) Base: 0x00A84 Size: 1 Fixp: 1 */ - 0x20000000, /* [00A84] PA.VIEWPORT_UNK00A84 = 8192.000000 */ - 0x080102a3, /* LOAD_STATE (1) Base: 0x00A8C Size: 1 Fixp: 0 */ - 0x38000000, /* [00A8C] PA.VIEWPORT_UNK00A8C := 0.000031 */ - 0x0c040300, /* LOAD_STATE (1) Base: 0x00C00 Size: 4 Fixp: 1 */ - 0x00000000, /* [00C00] SE.SCISSOR_LEFT = 0.000000 */ - 0x00000000, /* [00C04] SE.SCISSOR_TOP = 0.000000 */ - 0x03201000, /* [00C08] SE.SCISSOR_RIGHT = 800.062500 */ - 0x01e01000, /* [00C0C] SE.SCISSOR_BOTTOM = 480.062500 */ - 0x00000000, /* PAD */ - 0x0c010308, /* LOAD_STATE (1) Base: 0x00C20 Size: 1 Fixp: 1 */ - 0x0320ffff, /* [00C20] SE.CLIP_RIGHT = 800.999985 */ - 0x0c010309, /* LOAD_STATE (1) Base: 0x00C24 Size: 1 Fixp: 1 */ - 0x01e0ffff, /* [00C24] SE.CLIP_BOTTOM = 480.999985 */ - 0x08030508, /* LOAD_STATE (1) Base: 0x01420 Size: 3 Fixp: 0 */ - 0x00000000, /* [01420] PE.ALPHA_OP := ALPHA_TEST=0,ALPHA_FUNC=NEVER(residue:0xfffeff0c) */ - 0x00000000, /* [01424] PE.ALPHA_BLEND_COLOR := B=0x0,G=0x0,R=0x0,A=0x0 */ - 0x00100010, /* [01428] PE.ALPHA_CONFIG := BLEND_ENABLE_COLOR=0,SRC_FUNC_COLOR=ONE,DST_FUNC_COLOR=ZERO,EQ_COLOR=ADD,BLEND_SEPARATE_ALPHA=0,SRC_FUNC_ALPHA=ONE,DST_FUNC_ALPHA=ZERO,EQ_ALPHA=ADD */ - 0x08010528, /* LOAD_STATE (1) Base: 0x014A0 Size: 1 Fixp: 0 */ - 0x0000fdff, /* [014A0] PE.STENCIL_CONFIG_EXT := UNK16=0x0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000002, /* [0380C] GL.FLUSH_CACHE := DEPTH=0,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x0801050b, /* LOAD_STATE (1) Base: 0x0142C Size: 1 Fixp: 0 */ - 0x00110f06, /* [0142C] PE.COLOR_FORMAT := FORMAT=A8R8G8B8,COMPONENTS=R=1,G=1,B=1,A=1,OVERWRITE=1,SUPER_TILED=1(residue:0xffcce0e0) */ - 0x08010518, /* LOAD_STATE (1) Base: 0x01460 Size: 1 Fixp: 0 */ - 0x15900000, /* [01460] PE.PIPE[0].COLOR_ADDR := ADDR_G */ - 0x0801050c, /* LOAD_STATE (1) Base: 0x01430 Size: 1 Fixp: 0 */ - 0x15900000, /* [01430] PE.COLOR_ADDR := ADDR_G */ - 0x0801050d, /* LOAD_STATE (1) Base: 0x01434 Size: 1 Fixp: 0 */ - 0x00000d00, /* [01434] PE.COLOR_STRIDE := 0xd00 */ - 0x08040500, /* LOAD_STATE (1) Base: 0x01400 Size: 4 Fixp: 0 */ - 0x04011101, /* [01400] PE.DEPTH_CONFIG := DEPTH_MODE=Z,DEPTH_FORMAT=D16,DEPTH_FUNC=LESS,WRITE_ENABLE=1,EARLY_Z=1,ONLY_DEPTH=0,SUPER_TILED=1(residue:0xf3ccc0c4) */ - 0x00000000, /* [01404] PE.DEPTH_NEAR := 0.000000 */ - 0x3f800000, /* [01408] PE.DEPTH_FAR := 1.000000 */ - 0x477fff00, /* [0140C] PE.DEPTH_NORMALIZE := 65535.000000 */ - 0x00000000, /* PAD */ - 0x08010520, /* LOAD_STATE (1) Base: 0x01480 Size: 1 Fixp: 0 */ - 0x15ab5000, /* [01480] PE.PIPE[0].DEPTH_ADDR := ADDR_I */ - 0x08010504, /* LOAD_STATE (1) Base: 0x01410 Size: 1 Fixp: 0 */ - 0x15ab5000, /* [01410] PE.DEPTH_ADDR := ADDR_I */ - 0x08010505, /* LOAD_STATE (1) Base: 0x01414 Size: 1 Fixp: 0 */ - 0x00000680, /* [01414] PE.DEPTH_STRIDE := 0x680 */ - 0x08010515, /* LOAD_STATE (1) Base: 0x01454 Size: 1 Fixp: 0 */ - 0x00000000, /* [01454] PE.HDEPTH_CONTROL := FORMAT=DISABLED */ - 0x08010282, /* LOAD_STATE (1) Base: 0x00A08 Size: 1 Fixp: 0 */ - 0x3f800000, /* [00A08] PA.VIEWPORT_SCALE_Z := 1.000000 */ - 0x08010285, /* LOAD_STATE (1) Base: 0x00A14 Size: 1 Fixp: 0 */ - 0x00000000, /* [00A14] PA.VIEWPORT_OFFSET_Z := 0.000000 */ - 0x08010507, /* LOAD_STATE (1) Base: 0x0141C Size: 1 Fixp: 0 */ - 0x00000000, /* [0141C] PE.STENCIL_CONFIG := MODE=DISABLED,REF_FRONT=0x0,MASK_FRONT=0x0,WRITE_MASK=0x0(residue:0x0000000c) */ - 0x08010e06, /* LOAD_STATE (1) Base: 0x03818 Size: 1 Fixp: 0 */ - 0x00000000, /* [03818] GL.MULTI_SAMPLE_CONFIG := MSAA_SAMPLES=NONE,MSAA_ENABLES=0x0,UNK12=0x0,UNK16=0x0(residue:0xfff40e04) */ - 0x08010286, /* LOAD_STATE (1) Base: 0x00A18 Size: 1 Fixp: 0 */ - 0x3f000000, /* [00A18] PA.LINE_WIDTH := 0.500000 */ - 0x0803028d, /* LOAD_STATE (1) Base: 0x00A34 Size: 3 Fixp: 0 */ - 0x00412200, /* [00A34] PA.CONFIG := POINT_SIZE_ENABLE=0,POINT_SPRITE_ENABLE=0,CULL_FACE_MODE=CCW,FILL_MODE=SOLID,SHADE_MODEL=SMOOTH,UNK22=1(residue:0xff3888c3) */ - 0x3f000000, /* [00A38] PA.LINE_UNK00A38 := 0.500000 */ - 0x3f000000, /* [00A3C] PA.LINE_UNK00A3C := 0.500000 */ - 0x08010e02, /* LOAD_STATE (1) Base: 0x03808 Size: 1 Fixp: 0 */ - 0x00000701, /* [03808] GL.SEMAPHORE_TOKEN := FROM=FE,TO=PE */ - 0x48000000, /* STALL (9) */ - 0x00000701, /* */ - 0x08030202, /* LOAD_STATE (1) Base: 0x00808 Size: 3 Fixp: 0 */ - 0x00000103, /* [00808] VS.INPUT_COUNT := COUNT=3,UNK8=1 */ - 0x00000006, /* [0080C] VS.TEMP_REGISTER_CONTROL := NUM_TEMPS=6 */ - 0x00010004, /* [00810] VS.OUTPUT[0] := O0=4,O1=0,O2=1,O3=0 */ - 0x08010217, /* LOAD_STATE (1) Base: 0x0085C Size: 1 Fixp: 0 */ - 0x00150000, /* [0085C] VS.RANGE := LOW=0x0,HIGH=0x15 */ - 0x0801020e, /* LOAD_STATE (1) Base: 0x00838 Size: 1 Fixp: 0 */ - 0x00000000, /* [00838] VS.START_PC := 0x0 */ - 0x08010200, /* LOAD_STATE (1) Base: 0x00800 Size: 1 Fixp: 0 */ - 0x00000016, /* [00800] VS.END_PC := 0x16 */ - 0x0801142c, /* LOAD_STATE (1) Base: 0x050B0 Size: 1 Fixp: 0 */ - 0x3f800000, /* [050B0] VS.UNIFORMS[44] := 1.000000 (u11.x) */ - 0x0801141b, /* LOAD_STATE (1) Base: 0x0506C Size: 1 Fixp: 0 */ - 0x00000000, /* [0506C] VS.UNIFORMS[27] := 0.000000 (u6.w) */ - 0x08011417, /* LOAD_STATE (1) Base: 0x0505C Size: 1 Fixp: 0 */ - 0x41a00000, /* [0505C] VS.UNIFORMS[23] := 20.000000 (u5.w) */ - 0x08011413, /* LOAD_STATE (1) Base: 0x0504C Size: 1 Fixp: 0 */ - 0x40000000, /* [0504C] VS.UNIFORMS[19] := 2.000000 (u4.w) */ - 0x08583000, /* LOAD_STATE (1) Base: 0x0C000 Size: 88 Fixp: 0 */ - 0x01831009, /* [0C000] SH.UNK0C000[0] := 0x1831009 */ - 0x00000000, /* [0C004] SH.UNK0C000[1] := 0x0 */ - 0x00000000, /* [0C008] SH.UNK0C000[2] := 0x0 */ - 0x203fc048, /* [0C00C] SH.UNK0C000[3] := 0x203fc048 */ - 0x02031009, /* [0C010] SH.UNK0C000[4] := 0x2031009 */ - 0x00000000, /* [0C014] SH.UNK0C000[5] := 0x0 */ - 0x00000000, /* [0C018] SH.UNK0C000[6] := 0x0 */ - 0x203fc058, /* [0C01C] SH.UNK0C000[7] := 0x203fc058 */ - 0x07841003, /* [0C020] SH.UNK0C000[8] := 0x7841003 */ - 0x39000800, /* [0C024] SH.UNK0C000[9] := 0x39000800 */ - 0x00000050, /* [0C028] SH.UNK0C000[10] := 0x50 */ - 0x00000000, /* [0C02C] SH.UNK0C000[11] := 0x0 */ - 0x07841002, /* [0C030] SH.UNK0C000[12] := 0x7841002 */ - 0x39001800, /* [0C034] SH.UNK0C000[13] := 0x39001800 */ - 0x00aa0050, /* [0C038] SH.UNK0C000[14] := 0xaa0050 */ - 0x00390048, /* [0C03C] SH.UNK0C000[15] := 0x390048 */ - 0x07841002, /* [0C040] SH.UNK0C000[16] := 0x7841002 */ - 0x39002800, /* [0C044] SH.UNK0C000[17] := 0x39002800 */ - 0x01540050, /* [0C048] SH.UNK0C000[18] := 0x1540050 */ - 0x00390048, /* [0C04C] SH.UNK0C000[19] := 0x390048 */ - 0x07841002, /* [0C050] SH.UNK0C000[20] := 0x7841002 */ - 0x39003800, /* [0C054] SH.UNK0C000[21] := 0x39003800 */ - 0x01fe0050, /* [0C058] SH.UNK0C000[22] := 0x1fe0050 */ - 0x00390048, /* [0C05C] SH.UNK0C000[23] := 0x390048 */ - 0x03851003, /* [0C060] SH.UNK0C000[24] := 0x3851003 */ - 0x29004800, /* [0C064] SH.UNK0C000[25] := 0x29004800 */ - 0x000000d0, /* [0C068] SH.UNK0C000[26] := 0xd0 */ - 0x00000000, /* [0C06C] SH.UNK0C000[27] := 0x0 */ - 0x03851002, /* [0C070] SH.UNK0C000[28] := 0x3851002 */ - 0x29005800, /* [0C074] SH.UNK0C000[29] := 0x29005800 */ - 0x00aa00d0, /* [0C078] SH.UNK0C000[30] := 0xaa00d0 */ - 0x00290058, /* [0C07C] SH.UNK0C000[31] := 0x290058 */ - 0x03811002, /* [0C080] SH.UNK0C000[32] := 0x3811002 */ - 0x29006800, /* [0C084] SH.UNK0C000[33] := 0x29006800 */ - 0x015400d0, /* [0C088] SH.UNK0C000[34] := 0x15400d0 */ - 0x00290058, /* [0C08C] SH.UNK0C000[35] := 0x290058 */ - 0x07851003, /* [0C090] SH.UNK0C000[36] := 0x7851003 */ - 0x39007800, /* [0C094] SH.UNK0C000[37] := 0x39007800 */ - 0x00000050, /* [0C098] SH.UNK0C000[38] := 0x50 */ - 0x00000000, /* [0C09C] SH.UNK0C000[39] := 0x0 */ - 0x07851002, /* [0C0A0] SH.UNK0C000[40] := 0x7851002 */ - 0x39008800, /* [0C0A4] SH.UNK0C000[41] := 0x39008800 */ - 0x00aa0050, /* [0C0A8] SH.UNK0C000[42] := 0xaa0050 */ - 0x00390058, /* [0C0AC] SH.UNK0C000[43] := 0x390058 */ - 0x07851002, /* [0C0B0] SH.UNK0C000[44] := 0x7851002 */ - 0x39009800, /* [0C0B4] SH.UNK0C000[45] := 0x39009800 */ - 0x01540050, /* [0C0B8] SH.UNK0C000[46] := 0x1540050 */ - 0x00390058, /* [0C0BC] SH.UNK0C000[47] := 0x390058 */ - 0x07801002, /* [0C0C0] SH.UNK0C000[48] := 0x7801002 */ - 0x3900a800, /* [0C0C4] SH.UNK0C000[49] := 0x3900a800 */ - 0x01fe0050, /* [0C0C8] SH.UNK0C000[50] := 0x1fe0050 */ - 0x00390058, /* [0C0CC] SH.UNK0C000[51] := 0x390058 */ - 0x0401100c, /* [0C0D0] SH.UNK0C000[52] := 0x401100c */ - 0x00000000, /* [0C0D4] SH.UNK0C000[53] := 0x0 */ - 0x00000000, /* [0C0D8] SH.UNK0C000[54] := 0x0 */ - 0x003fc008, /* [0C0DC] SH.UNK0C000[55] := 0x3fc008 */ - 0x03801002, /* [0C0E0] SH.UNK0C000[56] := 0x3801002 */ - 0x69000800, /* [0C0E4] SH.UNK0C000[57] := 0x69000800 */ - 0x01fe00c0, /* [0C0E8] SH.UNK0C000[58] := 0x1fe00c0 */ - 0x00290038, /* [0C0EC] SH.UNK0C000[59] := 0x290038 */ - 0x03831005, /* [0C0F0] SH.UNK0C000[60] := 0x3831005 */ - 0x29000800, /* [0C0F4] SH.UNK0C000[61] := 0x29000800 */ - 0x01480040, /* [0C0F8] SH.UNK0C000[62] := 0x1480040 */ - 0x00000000, /* [0C0FC] SH.UNK0C000[63] := 0x0 */ - 0x0383100d, /* [0C100] SH.UNK0C000[64] := 0x383100d */ - 0x00000000, /* [0C104] SH.UNK0C000[65] := 0x0 */ - 0x00000000, /* [0C108] SH.UNK0C000[66] := 0x0 */ - 0x00000038, /* [0C10C] SH.UNK0C000[67] := 0x38 */ - 0x03801003, /* [0C110] SH.UNK0C000[68] := 0x3801003 */ - 0x29000800, /* [0C114] SH.UNK0C000[69] := 0x29000800 */ - 0x014801c0, /* [0C118] SH.UNK0C000[70] := 0x14801c0 */ - 0x00000000, /* [0C11C] SH.UNK0C000[71] := 0x0 */ - 0x00801005, /* [0C120] SH.UNK0C000[72] := 0x801005 */ - 0x29001800, /* [0C124] SH.UNK0C000[73] := 0x29001800 */ - 0x01480040, /* [0C128] SH.UNK0C000[74] := 0x1480040 */ - 0x00000000, /* [0C12C] SH.UNK0C000[75] := 0x0 */ - 0x0380108f, /* [0C130] SH.UNK0C000[76] := 0x380108f */ - 0x3fc06800, /* [0C134] SH.UNK0C000[77] := 0x3fc06800 */ - 0x00000050, /* [0C138] SH.UNK0C000[78] := 0x50 */ - 0x203fc068, /* [0C13C] SH.UNK0C000[79] := 0x203fc068 */ - 0x04001009, /* [0C140] SH.UNK0C000[80] := 0x4001009 */ - 0x00000000, /* [0C144] SH.UNK0C000[81] := 0x0 */ - 0x00000000, /* [0C148] SH.UNK0C000[82] := 0x0 */ - 0x200000b8, /* [0C14C] SH.UNK0C000[83] := 0x200000b8 */ - 0x01811009, /* [0C150] SH.UNK0C000[84] := 0x1811009 */ - 0x00000000, /* [0C154] SH.UNK0C000[85] := 0x0 */ - 0x00000000, /* [0C158] SH.UNK0C000[86] := 0x0 */ - 0x00150028, /* [0C15C] SH.UNK0C000[87] := 0x150028 */ - 0x00000000, /* PAD */ - 0x08010380, /* LOAD_STATE (1) Base: 0x00E00 Size: 1 Fixp: 0 */ - 0x00000003, /* [00E00] RA.CONTROL := UNK0=1,LAST_VARYING_2X=1 */ - 0x08010401, /* LOAD_STATE (1) Base: 0x01004 Size: 1 Fixp: 0 */ - 0x00000001, /* [01004] PS.OUTPUT_REG := 0x1 */ - 0x08020290, /* LOAD_STATE (1) Base: 0x00A40 Size: 2 Fixp: 0 */ - 0x00000200, /* [00A40] PA.SHADER_ATTRIBUTES[0] := UNK0=0x0,UNK8=0x2 */ - 0x00000200, /* [00A44] PA.SHADER_ATTRIBUTES[1] := UNK0=0x0,UNK8=0x2 */ - 0x00000000, /* PAD */ - 0x08010e08, /* LOAD_STATE (1) Base: 0x03820 Size: 1 Fixp: 0 */ - 0x00000044, /* [03820] GL.VARYING_NUM_COMPONENTS := VAR0=0x4,VAR1=0x4,VAR2=0x0,VAR3=0x0,VAR4=0x0,VAR5=0x0,VAR6=0x0,VAR7=0x0 */ - 0x08010e0d, /* LOAD_STATE (1) Base: 0x03834 Size: 1 Fixp: 0 */ - 0x00040000, /* [03834] GL.UNK03834 := 0x40000 */ - 0x08020e0a, /* LOAD_STATE (1) Base: 0x03828 Size: 2 Fixp: 0 */ - 0x00005555, /* [03828] GL.VARYING_COMPONENT_USE[0] := COMP0=USED,COMP1=USED,COMP2=USED,COMP3=USED,COMP4=USED,COMP5=USED,COMP6=USED,COMP7=USED,COMP8=UNUSED,COMP9=UNUSED,COMP10=UNUSED,COMP11=UNUSED,COMP12=UNUSED,COMP13=UNUSED,COMP14=UNUSED,COMP15=UNUSED */ - 0x00000000, /* [0382C] GL.VARYING_COMPONENT_USE[1] := COMP0=UNUSED,COMP1=UNUSED,COMP2=UNUSED,COMP3=UNUSED,COMP4=UNUSED,COMP5=UNUSED,COMP6=UNUSED,COMP7=UNUSED,COMP8=UNUSED,COMP9=UNUSED,COMP10=UNUSED,COMP11=UNUSED,COMP12=UNUSED,COMP13=UNUSED,COMP14=UNUSED,COMP15=UNUSED */ - 0x00000000, /* PAD */ - 0x08010e0e, /* LOAD_STATE (1) Base: 0x03838 Size: 1 Fixp: 0 */ - 0x00000000, /* [03838] GL.UNK03838 := 0x0 */ - 0x08010407, /* LOAD_STATE (1) Base: 0x0101C Size: 1 Fixp: 0 */ - 0x01020100, /* [0101C] PS.RANGE := LOW=0x100,HIGH=0x102 */ - 0x08010406, /* LOAD_STATE (1) Base: 0x01018 Size: 1 Fixp: 0 */ - 0x00000000, /* [01018] PS.START_PC := 0x0 */ - 0x08010400, /* LOAD_STATE (1) Base: 0x01000 Size: 1 Fixp: 0 */ - 0x00000003, /* [01000] PS.END_PC := 0x3 */ - 0x08011c00, /* LOAD_STATE (1) Base: 0x07000 Size: 1 Fixp: 0 */ - 0x40400000, /* [07000] PS.UNIFORMS[0] := 3.000000 (u0.x) */ - 0x080c3400, /* LOAD_STATE (1) Base: 0x0D000 Size: 12 Fixp: 0 */ - 0x07811003, /* [0D000] SH.UNK0C000[1024] := 0x7811003 */ - 0x00000800, /* [0D004] SH.UNK0C000[1025] := 0x800 */ - 0x01c800d0, /* [0D008] SH.UNK0C000[1026] := 0x1c800d0 */ - 0x00000000, /* [0D00C] SH.UNK0C000[1027] := 0x0 */ - 0x07821018, /* [0D010] SH.UNK0C000[1028] := 0x7821018 */ - 0x15002f20, /* [0D014] SH.UNK0C000[1029] := 0x15002f20 */ - 0x00000000, /* [0D018] SH.UNK0C000[1030] := 0x0 */ - 0x00000000, /* [0D01C] SH.UNK0C000[1031] := 0x0 */ - 0x07811003, /* [0D020] SH.UNK0C000[1032] := 0x7811003 */ - 0x39001800, /* [0D024] SH.UNK0C000[1033] := 0x39001800 */ - 0x01c80140, /* [0D028] SH.UNK0C000[1034] := 0x1c80140 */ - 0x00000000, /* [0D02C] SH.UNK0C000[1035] := 0x0 */ - 0x00000000, /* PAD */ - 0x08030402, /* LOAD_STATE (1) Base: 0x01008 Size: 3 Fixp: 0 */ - 0x00001f03, /* [01008] PS.INPUT_COUNT := COUNT=3,UNK8=31 */ - 0x00000003, /* [0100C] PS.TEMP_REGISTER_CONTROL := NUM_TEMPS=3 */ - 0x00000002, /* [01010] PS.CONTROL := BYPASS=0,UNK1=1 */ - 0x0801028c, /* LOAD_STATE (1) Base: 0x00A30 Size: 1 Fixp: 0 */ - 0x00000200, /* [00A30] PA.ATTRIBUTE_ELEMENT_COUNT := UNK0=0x0,COUNT=0x2 */ - 0x08010e07, /* LOAD_STATE (1) Base: 0x0381C Size: 1 Fixp: 0 */ - 0x00000008, /* [0381C] GL.VARYING_TOTAL_COMPONENTS := NUM=0x8 */ - 0x0801020c, /* LOAD_STATE (1) Base: 0x00830 Size: 1 Fixp: 0 */ - 0x0f3f0542, /* [00830] VS.LOAD_BALANCING := A=0x42,B=0x5,C=0x3f,D=0xf */ - 0x08010201, /* LOAD_STATE (1) Base: 0x00804 Size: 1 Fixp: 0 */ - 0x00000003, /* [00804] VS.OUTPUT_COUNT := 3 */ - 0x08010e02, /* LOAD_STATE (1) Base: 0x03808 Size: 1 Fixp: 0 */ - 0x00000705, /* [03808] GL.SEMAPHORE_TOKEN := FROM=RA,TO=PE */ - 0x08010f00, /* LOAD_STATE (1) Base: 0x03C00 Size: 1 Fixp: 0 */ - 0x00000705, /* [03C00] GL.STALL_TOKEN := FROM=RA,TO=PE,FLIP0=0,FLIP1=0 */ - 0x28000000, /* DRAW_PRIMITIVES (5) */ - 0x00000004, /* */ - 0x00000000, /* */ - 0x00000fd4, /* 0xfd4 = 4052 = triangle count*/ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003 /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ -}; -#if 0 -Grouped GPU addresses { - cmdbuf[0x1d] = cmdbuf[0x1f] = ADDR_A; /* 0x7f2c8700 */ -} -#endif - -uint32_t cmdbuf5[] = { /* seq 105 */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ - 0x00004686, /* [01604] RS.CONFIG := SOURCE_FORMAT=A8R8G8B8,DOWNSAMPLE_X=0,DOWNSAMPLE_Y=0,SOURCE_TILED=1,DEST_FORMAT=A8R8G8B8,DEST_TILED=1,SWAP_RB=0,FLIP=0 */ - 0x08010583, /* LOAD_STATE (1) Base: 0x0160C Size: 1 Fixp: 0 */ - 0x80003400, /* [0160C] RS.SOURCE_STRIDE := STRIDE=0x3400,MULTI=0,TILING=1 */ - 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ - 0x80003400, /* [01614] RS.DEST_STRIDE := STRIDE=0x3400,MULTI=0,TILING=1 */ - 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ - 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ - 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ - 0x00000000, /* PAD */ - 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ - 0x00000000, /* [0163C] RS.CLEAR_CONTROL := BITS=0x0,MODE=DISABLED */ - 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ - 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ - 0x08010582, /* LOAD_STATE (1) Base: 0x01608 Size: 1 Fixp: 0 */ - 0x15900000, /* [01608] RS.SOURCE_ADDR := ADDR_G */ - 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ - 0x15900000, /* [01610] RS.DEST_ADDR := ADDR_G */ - 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ - 0x02000340, /* [01620] RS.WINDOW_SIZE := HEIGHT=512,WIDTH=832 */ - 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ - 0xbadabeeb /* [01600] RS.KICKER := 0xbadabeeb */ -}; -#if 0 -Grouped GPU addresses { - cmdbuf[0x9] = ADDR_G; /* 0x7a002a00 */ - cmdbuf[0xb] = cmdbuf[0x11] = cmdbuf[0x15] = ADDR_F; /* 0x7f284000 */ - cmdbuf[0x21] = ADDR_A; /* 0x7f2c8700 */ - cmdbuf[0x1f] = ADDR_B; /* 0x7a005900 */ -} -#endif - -uint32_t cmdbuf6[] = { - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ - 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000002, /* [0380C] GL.FLUSH_CACHE := DEPTH=0,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ - 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ - 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ - 0x00000049, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=0,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=0,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ - 0x20000686, /* [01604] RS.CONFIG := SOURCE_FORMAT=A8R8G8B8,DOWNSAMPLE_X=0,DOWNSAMPLE_Y=0,SOURCE_TILED=1,DEST_FORMAT=A8R8G8B8,DEST_TILED=0,SWAP_RB=1,FLIP=0 */ - 0x08010583, /* LOAD_STATE (1) Base: 0x0160C Size: 1 Fixp: 0 */ - 0x80003400, /* [0160C] RS.SOURCE_STRIDE := STRIDE=0x3400,MULTI=0,TILING=1 */ - 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ - 0x00000d00, /* [01614] RS.DEST_STRIDE := STRIDE=0xd00,MULTI=0,TILING=0 */ - 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ - 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ - 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ - 0x00000000, /* PAD */ - 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ - 0x00000000, /* [0163C] RS.CLEAR_CONTROL := BITS=0x0,MODE=DISABLED */ - 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ - 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ - 0x08010582, /* LOAD_STATE (1) Base: 0x01608 Size: 1 Fixp: 0 */ - 0x15900000, /* [01608] RS.SOURCE_ADDR := ADDR_G */ - 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ - 0x15e4d000, /* [01610] RS.DEST_ADDR := ADDR_Y */ - 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ - 0x02000340, /* [01620] RS.WINDOW_SIZE := HEIGHT=512,WIDTH=832 */ - 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ - 0xbadabeeb /* [01600] RS.KICKER := 0xbadabeeb */ -}; - -uint32_t cmdbuf7[] = { /* seq 115 */ - 0x08010581, /* PAD */ - 0x00000585, /* PAD */ - 0x08010583, /* PAD */ - 0x80001c00, /* PAD */ - 0x08010585, /* PAD */ - 0x00000640, /* PAD */ - 0x0801058c, /* PAD */ - 0xffffffff, /* PAD */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* GLOBAL.FLUSH_CACHE := DEPTH=1,COLOR=1,3D_TEXTURE=0,2D=0,UNK4=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ - 0x20000505, /* RS.CONFIG := SOURCE_FORMAT=X8R8G8B8,UNK7=1,DEST_FORMAT=X8R8G8B8,UNK14=0,SWAP_RB=0,FLIP=0 */ - 0x08010583, /* LOAD_STATE (1) Base: 0x0160C Size: 1 Fixp: 0 */ - 0x00000d00, /* RS.SOURCE_STRIDE := STRIDE=0xd00,TILING=0 */ - 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ - 0x00000c80, /* RS.DEST_STRIDE := STRIDE=0xc80,TILING=0 */ - 0x0801058c, /* LOAD_STATE (1) Base: 0x01630 Size: 1 Fixp: 0 */ - 0xffffffff, /* RS.DITHER[0] := 0xffffffff */ - 0x0801058d, /* LOAD_STATE (1) Base: 0x01634 Size: 1 Fixp: 0 */ - 0xffffffff, /* RS.DITHER[1] := 0xffffffff */ - 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ - 0x00000000, /* RS.CLEAR_CONTROL := BITS=0x0,MODE=0x0 */ - 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ - 0x00000000, /* RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ - 0x08010582, /* LOAD_STATE (1) Base: 0x01608 Size: 1 Fixp: 0 */ - 0x7f2c8700, /* RS.SOURCE_ADDR := ADDR_A */ - 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ - 0x7fc20000, /* RS.DEST_ADDR := ADDR_J */ - 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ - 0x01e00320, /* RS.WINDOW_SIZE := HEIGHT=480,WIDTH=800 */ - 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ - 0xbeebbeeb /* RS.KICKER := 0xbeebbeeb */ -}; - -#if 0 -Grouped GPU addresses { - cmdbuf[0x19] = ADDR_A; /* 0x7f2c8700 */ - cmdbuf[0x1b] = ADDR_J; /* 0x7fc20000 */ -} -#endif - diff --git a/src/replay/companion_cmd_gc880.h b/src/replay/companion_cmd_gc880.h new file mode 100644 index 0000000..096da72 --- /dev/null +++ b/src/replay/companion_cmd_gc880.h @@ -0,0 +1,803 @@ +uint32_t cmdbuf1[] = { /* seq 85 */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x08010e05, /* LOAD_STATE (1) Base: 0x03814 Size: 1 Fixp: 0 */ + 0x00000001, /* [03814] GL.VERTEX_ELEMENT_CONFIG := 0x1 */ + 0x08010380, /* LOAD_STATE (1) Base: 0x00E00 Size: 1 Fixp: 0 */ + 0x00000001, /* [00E00] RA.CONTROL := UNK0=1,LAST_VARYING_2X=0 */ + 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ + 0x34000001, /* [00A2C] PA.W_CLIP_LIMIT := 0x34000001 */ + 0x0801028a, /* LOAD_STATE (1) Base: 0x00A28 Size: 1 Fixp: 0 */ + 0x00000011, /* [00A28] PA.SYSTEM_MODE := UNK0=1,UNK4=1 */ + 0x08010e13, /* LOAD_STATE (1) Base: 0x0384C Size: 1 Fixp: 0 */ + 0x00000000, /* [0384C] GL.API_MODE := OPENGL */ + 0x08010306, /* LOAD_STATE (1) Base: 0x00C18 Size: 1 Fixp: 0 */ + 0x00000000, /* [00C18] SE.CONFIG := LAST_PIXEL_ENABLE=0 */ + 0x08010304, /* LOAD_STATE (1) Base: 0x00C10 Size: 1 Fixp: 0 */ + 0x00000000, /* [00C10] SE.DEPTH_SCALE := 0.000000 */ + 0x08010305, /* LOAD_STATE (1) Base: 0x00C14 Size: 1 Fixp: 0 */ + 0x00000000, /* [00C14] SE.DEPTH_BIAS := 0.000000 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000002, /* [0380C] GL.FLUSH_CACHE := DEPTH=0,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ + 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ + 0x0801059d, /* LOAD_STATE (1) Base: 0x01674 Size: 1 Fixp: 0 */ + 0x00006ac0, /* [01674] TS.DEPTH_AUTO_DISABLE_COUNT := 0x6ac0 */ + 0x08030596, /* LOAD_STATE (1) Base: 0x01658 Size: 3 Fixp: 0 */ + 0x15aab000, /* [01658] TS.COLOR_STATUS_BASE := ADDR_H */ + 0x15900000, /* [0165C] TS.COLOR_SURFACE_BASE := ADDR_G */ + 0x00000000, /* [01660] TS.COLOR_CLEAR_VALUE := 0x0 */ + 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ + 0x00000022, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=0,COLOR_FAST_CLEAR=1,DEPTH_16BPP=0,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=0,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000001, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=0,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ + 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ + 0x08030599, /* LOAD_STATE (1) Base: 0x01664 Size: 3 Fixp: 0 */ + 0x15aacb00, /* [01664] TS.DEPTH_STATUS_BASE := ADDR_J */ + 0x15ab5000, /* [01668] TS.DEPTH_SURFACE_BASE := ADDR_I */ + 0xffffffff, /* [0166C] TS.DEPTH_CLEAR_VALUE := 0xffffffff */ + 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ + 0x0000006b, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=1,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ + 0x08010304, /* LOAD_STATE (1) Base: 0x00C10 Size: 1 Fixp: 0 */ + 0x00000000, /* [00C10] SE.DEPTH_SCALE := 0.000000 */ + 0x08010305, /* LOAD_STATE (1) Base: 0x00C14 Size: 1 Fixp: 0 */ + 0x00000000, /* [00C14] SE.DEPTH_BIAS := 0.000000 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ + 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ + 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ + 0x08010e02, /* LOAD_STATE (1) Base: 0x03808 Size: 1 Fixp: 0 */ + 0x00000705, /* [03808] GL.SEMAPHORE_TOKEN := FROM=RA,TO=PE */ + 0x08010f00, /* LOAD_STATE (1) Base: 0x03C00 Size: 1 Fixp: 0 */ + 0x00000705, /* [03C00] GL.STALL_TOKEN := FROM=RA,TO=PE,FLIP0=0,FLIP1=0 */ + 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ + 0x00000606, /* [01604] RS.CONFIG := SOURCE_FORMAT=A8R8G8B8,DOWNSAMPLE_X=0,DOWNSAMPLE_Y=0,SOURCE_TILED=0,DEST_FORMAT=A8R8G8B8,DEST_TILED=0,SWAP_RB=0,FLIP=0 */ + 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ + 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ + 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ + 0x00000705, /* PAD */ + 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ + 0x15aab000, /* [01610] RS.DEST_ADDR := ADDR_H */ + 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ + 0x00000040, /* [01614] RS.DEST_STRIDE := STRIDE=0x40,MULTI=0,TILING=0 */ + 0x08010590, /* LOAD_STATE (1) Base: 0x01640 Size: 1 Fixp: 0 */ + 0x55555555, /* [01640] RS.FILL_VALUE[0] := 0x55555555 */ + 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ + 0x0001ffff, /* [0163C] RS.CLEAR_CONTROL := BITS=0xffff,MODE=ENABLED1 */ + 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ + 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ + 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ + 0x006c0010, /* [01620] RS.WINDOW_SIZE := HEIGHT=108,WIDTH=16 */ + 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ + 0xbadabeeb, /* [01600] RS.KICKER := 0xbadabeeb */ + 0x08010598, /* LOAD_STATE (1) Base: 0x01660 Size: 1 Fixp: 0 */ + 0xff7f7f7f, /* [01660] TS.COLOR_CLEAR_VALUE := 0xff7f7f7f */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000002, /* [0380C] GL.FLUSH_CACHE := DEPTH=0,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ + 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ + 0x0801059d, /* LOAD_STATE (1) Base: 0x01674 Size: 1 Fixp: 0 */ + 0x00006ac0, /* [01674] TS.DEPTH_AUTO_DISABLE_COUNT := 0x6ac0 */ + 0x08030596, /* LOAD_STATE (1) Base: 0x01658 Size: 3 Fixp: 0 */ + 0x15aab000, /* [01658] TS.COLOR_STATUS_BASE := ADDR_H */ + 0x15900000, /* [0165C] TS.COLOR_SURFACE_BASE := ADDR_G */ + 0xff7f7f7f, /* [01660] TS.COLOR_CLEAR_VALUE := 0xff7f7f7f */ + 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ + 0x0000006b, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=1,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ + 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ + 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ + 0x08010e02, /* LOAD_STATE (1) Base: 0x03808 Size: 1 Fixp: 0 */ + 0x00000705, /* [03808] GL.SEMAPHORE_TOKEN := FROM=RA,TO=PE */ + 0x08010f00, /* LOAD_STATE (1) Base: 0x03C00 Size: 1 Fixp: 0 */ + 0x00000705, /* [03C00] GL.STALL_TOKEN := FROM=RA,TO=PE,FLIP0=0,FLIP1=0 */ + 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ + 0x00000606, /* [01604] RS.CONFIG := SOURCE_FORMAT=A8R8G8B8,DOWNSAMPLE_X=0,DOWNSAMPLE_Y=0,SOURCE_TILED=0,DEST_FORMAT=A8R8G8B8,DEST_TILED=0,SWAP_RB=0,FLIP=0 */ + 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ + 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ + 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ + 0xffffffff, /* PAD */ + 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ + 0x15aacb00, /* [01610] RS.DEST_ADDR := ADDR_J */ + 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ + 0x00000080, /* [01614] RS.DEST_STRIDE := STRIDE=0x80,MULTI=0,TILING=0 */ + 0x08010590, /* LOAD_STATE (1) Base: 0x01640 Size: 1 Fixp: 0 */ + 0x55555555, /* [01640] RS.FILL_VALUE[0] := 0x55555555 */ + 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ + 0x0001ffff, /* [0163C] RS.CLEAR_CONTROL := BITS=0xffff,MODE=ENABLED1 */ + 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ + 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ + 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ + 0x001c0020, /* [01620] RS.WINDOW_SIZE := HEIGHT=28,WIDTH=32 */ + 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ + 0xbadabeeb, /* [01600] RS.KICKER := 0xbadabeeb */ + 0x0801059b, /* LOAD_STATE (1) Base: 0x0166C Size: 1 Fixp: 0 */ + 0xffffffff, /* [0166C] TS.DEPTH_CLEAR_VALUE := 0xffffffff */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000001, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=0,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ + 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ + 0x08030599, /* LOAD_STATE (1) Base: 0x01664 Size: 3 Fixp: 0 */ + 0x15aacb00, /* [01664] TS.DEPTH_STATUS_BASE := ADDR_J */ + 0x15ab5000, /* [01668] TS.DEPTH_SURFACE_BASE := ADDR_I */ + 0xffffffff, /* [0166C] TS.DEPTH_CLEAR_VALUE := 0xffffffff */ + 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ + 0x0000006b, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=1,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ + 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ + 0x00000000, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=0,COLOR_FAST_CLEAR=0,DEPTH_16BPP=0,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=0,DEPTH_COMPRESSION=0,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ + 0x000045e5, /* [01604] RS.CONFIG := SOURCE_FORMAT=X8R8G8B8,DOWNSAMPLE_X=1,DOWNSAMPLE_Y=1,SOURCE_TILED=1,DEST_FORMAT=X8R8G8B8,DEST_TILED=1,SWAP_RB=0,FLIP=0 */ + 0x08010583, /* LOAD_STATE (1) Base: 0x0160C Size: 1 Fixp: 0 */ + 0x00002000, /* [0160C] RS.SOURCE_STRIDE := STRIDE=0x2000,MULTI=0,TILING=0 */ + 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ + 0x00001000, /* [01614] RS.DEST_STRIDE := STRIDE=0x1000,MULTI=0,TILING=0 */ + 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ + 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ + 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ + 0x00000000, /* PAD */ + 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ + 0x00000000, /* [0163C] RS.CLEAR_CONTROL := BITS=0x0,MODE=DISABLED */ + 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ + 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ + 0x08010582, /* LOAD_STATE (1) Base: 0x01608 Size: 1 Fixp: 0 */ + 0x15cfd000, /* [01608] RS.SOURCE_ADDR := ADDR_L */ + 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ + 0x15dfd000, /* [01610] RS.DEST_ADDR := ADDR_M */ + 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ + 0x02000200, /* [01620] RS.WINDOW_SIZE := HEIGHT=512,WIDTH=512 */ + 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ + 0xbadabeeb /* [01600] RS.KICKER := 0xbadabeeb */ +}; +#if 0 + Grouped GPU addresses { + cmdbuf[0x57] = cmdbuf[0x67] = cmdbuf[0x9f] = cmdbuf[0xbb] = cmdbuf[0xd9] = cmdbuf[0xfb] = cmdbuf[0x119] = cmdbuf[0x135] = cmdbuf[0x153] = ADDR_A; /* 0x7f2c8700 */ + cmdbuf[0x65] = cmdbuf[0x9d] = cmdbuf[0xb9] = cmdbuf[0xd7] = cmdbuf[0xe5] = cmdbuf[0xf9] = cmdbuf[0x117] = cmdbuf[0x133] = cmdbuf[0x151] = ADDR_B; /* 0x7a005900 */ + cmdbuf[0x89] = cmdbuf[0x8f] = cmdbuf[0x93] = cmdbuf[0xa5] = cmdbuf[0xab] = cmdbuf[0xaf] = cmdbuf[0xc3] = cmdbuf[0xc9] = cmdbuf[0xcd] = cmdbuf[0x103] = cmdbuf[0x109] = cmdbuf[0x10d] = cmdbuf[0x11f] = cmdbuf[0x125] = cmdbuf[0x129] = cmdbuf[0x13d] = cmdbuf[0x143] = cmdbuf[0x147] = ADDR_F; /* 0x7f284000 */ + cmdbuf[0x7d] = cmdbuf[0x15f] = cmdbuf[0x173] = ADDR_D; /* 0x7a003200 */ + cmdbuf[0x87] = cmdbuf[0xa3] = cmdbuf[0xc1] = cmdbuf[0x101] = cmdbuf[0x11d] = cmdbuf[0x13b] = ADDR_G; /* 0x7a002a00 */ + cmdbuf[0x6d] = cmdbuf[0x7f] = cmdbuf[0x175] = ADDR_C; /* 0x7e6a0000 */ + } +#endif + +uint32_t cmdbuf2[] = { /* seq 101 */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ + 0x0000006b, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=1,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ + 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ + 0x00000000, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=0,COLOR_FAST_CLEAR=0,DEPTH_16BPP=0,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=0,DEPTH_COMPRESSION=0,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ + 0x000045e5, /* [01604] RS.CONFIG := SOURCE_FORMAT=X8R8G8B8,DOWNSAMPLE_X=1,DOWNSAMPLE_Y=1,SOURCE_TILED=1,DEST_FORMAT=X8R8G8B8,DEST_TILED=1,SWAP_RB=0,FLIP=0 */ + 0x08010583, /* LOAD_STATE (1) Base: 0x0160C Size: 1 Fixp: 0 */ + 0x00001000, /* [0160C] RS.SOURCE_STRIDE := STRIDE=0x1000,MULTI=0,TILING=0 */ + 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ + 0x00000800, /* [01614] RS.DEST_STRIDE := STRIDE=0x800,MULTI=0,TILING=0 */ + 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ + 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ + 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ + 0x00000000, /* PAD */ + 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ + 0x00000000, /* [0163C] RS.CLEAR_CONTROL := BITS=0x0,MODE=DISABLED */ + 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ + 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ + 0x08010582, /* LOAD_STATE (1) Base: 0x01608 Size: 1 Fixp: 0 */ + 0x15dfd000, /* [01608] RS.SOURCE_ADDR := ADDR_M */ + 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ + 0x15e3d000, /* [01610] RS.DEST_ADDR := ADDR_N */ + 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ + 0x01000100, /* [01620] RS.WINDOW_SIZE := HEIGHT=256,WIDTH=256 */ + 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ + 0xbadabeeb /* [01600] RS.KICKER := 0xbadabeeb */ +}; +#if 0 +Grouped GPU addresses { + 33 - stride src + 35 - stride dst + 39 - pad but allways different - garbage? + 45 - source addr + 47 - dest addr + 49 - height width +} +#endif + +uint32_t cmdbuf3[] = { + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ + 0x0000006b /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=1,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ +}; + +uint32_t cmdbuf4[] = { /* seq 103 */ + 0x08010584, /* PAD */ + 0x1523a000, /* PAD */ + 0x08010588, /* PAD */ + 0x00f00190, /* PAD */ + 0x08010580, /* PAD */ + 0xbeebbeeb, /* PAD */ + 0x40000006, /* PAD */ + 0x14880010, /* PAD */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08101400, /* LOAD_STATE (1) Base: 0x05000 Size: 16 Fixp: 0 */ + 0x3f3573de, /* [05000] VS.UNIFORMS[0] := 0.708799 (u0.x) */ + 0x3f2084dd, /* [05004] VS.UNIFORMS[1] := 0.627027 (u0.y) */ + 0xbf7e5849, /* [05008] VS.UNIFORMS[2] := -0.993535 (u0.z) */ + 0xbe959d58, /* [0500C] VS.UNIFORMS[3] := -0.292216 (u0.w) */ + 0x3dfff5c0, /* [05010] VS.UNIFORMS[4] := 0.124980 (u1.x) */ + 0x3faa1052, /* [05014] VS.UNIFORMS[5] := 1.328623 (u1.y) */ + 0x3f7c0220, /* [05018] VS.UNIFORMS[6] := 0.984407 (u1.z) */ + 0x3e943d7c, /* [0501C] VS.UNIFORMS[7] := 0.289532 (u1.w) */ + 0xbf384078, /* [05020] VS.UNIFORMS[8] := -0.719734 (u2.x) */ + 0x3f592492, /* [05024] VS.UNIFORMS[9] := 0.848214 (u2.y) */ + 0xbf4eb851, /* [05028] VS.UNIFORMS[10] := -0.807500 (u2.z) */ + 0xbe733332, /* [0502C] VS.UNIFORMS[11] := -0.237500 (u2.w) */ + 0x00000000, /* [05030] VS.UNIFORMS[12] := 0.000000 (u3.x) */ + 0x00000000, /* [05034] VS.UNIFORMS[13] := 0.000000 (u3.y) */ + 0x3f4ccce0, /* [05038] VS.UNIFORMS[14] := 0.800001 (u3.z) */ + 0x41000000, /* [0503C] VS.UNIFORMS[15] := 8.000000 (u3.w) */ + 0x00000000, /* PAD */ + 0x08031410, /* LOAD_STATE (1) Base: 0x05040 Size: 3 Fixp: 0 */ + 0x3ea95b14, /* [05040] VS.UNIFORMS[16] := 0.330773 (u4.x) */ + 0x3e33c802, /* [05044] VS.UNIFORMS[17] := 0.175568 (u4.y) */ + 0x3e959d58, /* [05048] VS.UNIFORMS[18] := 0.292216 (u4.z) */ + 0x08031414, /* LOAD_STATE (1) Base: 0x05050 Size: 3 Fixp: 0 */ + 0x3d6ee55e, /* [05050] VS.UNIFORMS[20] := 0.058324 (u5.x) */ + 0x3ebe78ae, /* [05054] VS.UNIFORMS[21] := 0.372014 (u5.y) */ + 0xbe943d7c, /* [05058] VS.UNIFORMS[22] := -0.289532 (u5.z) */ + 0x08031418, /* LOAD_STATE (1) Base: 0x05060 Size: 3 Fixp: 0 */ + 0xbeabf7e8, /* [05060] VS.UNIFORMS[24] := -0.335876 (u6.x) */ + 0x3e733333, /* [05064] VS.UNIFORMS[25] := 0.237500 (u6.y) */ + 0x3e733332, /* [05068] VS.UNIFORMS[26] := 0.237500 (u6.z) */ + 0x0810141c, /* LOAD_STATE (1) Base: 0x05070 Size: 16 Fixp: 0 */ + 0x3ea95b14, /* [05070] VS.UNIFORMS[28] := 0.330773 (u7.x) */ + 0x3e33c802, /* [05074] VS.UNIFORMS[29] := 0.175568 (u7.y) */ + 0x3e959d58, /* [05078] VS.UNIFORMS[30] := 0.292216 (u7.z) */ + 0x00000000, /* [0507C] VS.UNIFORMS[31] := 0.000000 (u7.w) */ + 0x3d6ee55e, /* [05080] VS.UNIFORMS[32] := 0.058324 (u8.x) */ + 0x3ebe78ae, /* [05084] VS.UNIFORMS[33] := 0.372014 (u8.y) */ + 0xbe943d7c, /* [05088] VS.UNIFORMS[34] := -0.289532 (u8.z) */ + 0x00000000, /* [0508C] VS.UNIFORMS[35] := 0.000000 (u8.w) */ + 0xbeabf7e8, /* [05090] VS.UNIFORMS[36] := -0.335876 (u9.x) */ + 0x3e733333, /* [05094] VS.UNIFORMS[37] := 0.237500 (u9.y) */ + 0x3e733332, /* [05098] VS.UNIFORMS[38] := 0.237500 (u9.z) */ + 0x00000000, /* [0509C] VS.UNIFORMS[39] := 0.000000 (u9.w) */ + 0x00000000, /* [050A0] VS.UNIFORMS[40] := 0.000000 (u10.x) */ + 0x00000000, /* [050A4] VS.UNIFORMS[41] := 0.000000 (u10.y) */ + 0xc1000000, /* [050A8] VS.UNIFORMS[42] := -8.000000 (u10.z) */ + 0x3f800000, /* [050AC] VS.UNIFORMS[43] := 1.000000 (u10.w) */ + 0x00000000, /* PAD */ + 0x08030180, /* LOAD_STATE (1) Base: 0x00600 Size: 3 Fixp: 0 */ + 0x0c003088, /* [00600] FE.VERTEX_ELEMENT_CONFIG[0] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x0,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x0c003188, /* [00604] FE.VERTEX_ELEMENT_CONFIG[1] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x1,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x08002288, /* [00608] FE.VERTEX_ELEMENT_CONFIG[2] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x2,NUM=0x2,NORMALIZE=OFF,START=0x0,END=0x8 */ + 0x08010208, /* LOAD_STATE (1) Base: 0x00820 Size: 1 Fixp: 0 */ + 0x00020100, /* [00820] VS.INPUT[0] := I0=0,I1=1,I2=2,I3=0 */ + 0x080301a0, /* LOAD_STATE (1) Base: 0x00680 Size: 3 Fixp: 0 */ + 0x15000000, /* [00680] FE.VERTEX_STREAMS[0].BASE_ADDR := ADDR_A */ + 0x150239d0, /* [00684] FE.VERTEX_STREAMS[1].BASE_ADDR := ADDR_V */ + 0x150473a0, /* [00688] FE.VERTEX_STREAMS[2].BASE_ADDR := ADDR_W */ + 0x080301a8, /* LOAD_STATE (1) Base: 0x006A0 Size: 3 Fixp: 0 */ + 0x0000000c, /* [006A0] FE.VERTEX_STREAMS[0].CONTROL := 0xc */ + 0x0000000c, /* [006A4] FE.VERTEX_STREAMS[1].CONTROL := 0xc */ + 0x00000008, /* [006A8] FE.VERTEX_STREAMS[2].CONTROL := 0x8 */ + 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ + 0x00000000, /* [00A2C] PA.W_CLIP_LIMIT := 0x0 */ + 0x08010800, /* LOAD_STATE (1) Base: 0x02000 Size: 1 Fixp: 0 */ + 0x00091552, /* [02000] TE.SAMPLER[0].CONFIG0 := TYPE=2D,UWRAP=CLAMP_TO_EDGE,VWRAP=CLAMP_TO_EDGE,MIN=LINEAR,MIP=LINEAR,MAG=LINEAR,FORMAT=X8R8G8B8,ROUND_UV=1,ENDIAN=NO_SWAP,ANISOTROPY=0.000000 */ + 0x08010870, /* LOAD_STATE (1) Base: 0x021C0 Size: 1 Fixp: 0 */ + 0x04521000, /* [021C0] TE.SAMPLER[0].CONFIG1 := FORMAT_EXT=NONE,SWIZZLE_R=RED,SWIZZLE_G=GREEN,SWIZZLE_B=BLUE,SWIZZLE_A=ONE(residue:0x04000000) */ + 0x08010810, /* LOAD_STATE (1) Base: 0x02040 Size: 1 Fixp: 0 */ + 0x02000200, /* [02040] TE.SAMPLER[0].SIZE := WIDTH=512,HEIGHT=512 */ + 0x08010820, /* LOAD_STATE (1) Base: 0x02080 Size: 1 Fixp: 0 */ + 0x00048120, /* [02080] TE.SAMPLER[0].LOG_SIZE := WIDTH=9.000000,HEIGHT=9.000000 */ + 0x08010830, /* LOAD_STATE (1) Base: 0x020C0 Size: 1 Fixp: 0 */ + 0x00000240, /* [020C0] TE.SAMPLER[0].LOD_CONFIG := BIAS_ENABLE=0,MAX=9.000000,MIN=0.000000,BIAS=0.000000 */ + 0x08010900, /* LOAD_STATE (1) Base: 0x02400 Size: 1 Fixp: 0 */ + 0x15cfd000, /* [02400] TE.SAMPLER[0].LOD_ADDR[0] := ADDR_L */ + 0x08010910, /* LOAD_STATE (1) Base: 0x02440 Size: 1 Fixp: 0 */ + 0x15dfd000, /* [02440] TE.SAMPLER[0].LOD_ADDR[1] := ADDR_M */ + 0x08010920, /* LOAD_STATE (1) Base: 0x02480 Size: 1 Fixp: 0 */ + 0x15e3d000, /* [02480] TE.SAMPLER[0].LOD_ADDR[2] := ADDR_N */ + 0x08010930, /* LOAD_STATE (1) Base: 0x024C0 Size: 1 Fixp: 0 */ + 0x15aad900, /* [024C0] TE.SAMPLER[0].LOD_ADDR[3] := ADDR_O */ + 0x08010940, /* LOAD_STATE (1) Base: 0x02500 Size: 1 Fixp: 0 */ + 0x15ab1900, /* [02500] TE.SAMPLER[0].LOD_ADDR[4] := ADDR_P */ + 0x08010950, /* LOAD_STATE (1) Base: 0x02540 Size: 1 Fixp: 0 */ + 0x15ab2900, /* [02540] TE.SAMPLER[0].LOD_ADDR[5] := ADDR_Q */ + 0x08010960, /* LOAD_STATE (1) Base: 0x02580 Size: 1 Fixp: 0 */ + 0x15ab2d00, /* [02580] TE.SAMPLER[0].LOD_ADDR[6] := ADDR_R */ + 0x08010970, /* LOAD_STATE (1) Base: 0x025C0 Size: 1 Fixp: 0 */ + 0x15ab2f00, /* [025C0] TE.SAMPLER[0].LOD_ADDR[7] := ADDR_S */ + 0x08010980, /* LOAD_STATE (1) Base: 0x02600 Size: 1 Fixp: 0 */ + 0x15ab3000, /* [02600] TE.SAMPLER[0].LOD_ADDR[8] := ADDR_T */ + 0x08010990, /* LOAD_STATE (1) Base: 0x02640 Size: 1 Fixp: 0 */ + 0x15ab3100, /* [02640] TE.SAMPLER[0].LOD_ADDR[9] := ADDR_U */ + 0x080105c8, /* LOAD_STATE (1) Base: 0x01720 Size: 1 Fixp: 0 */ + 0x00000000, /* [01720] TS.SAMPLER[0].CONFIG := ENABLE=0x0,FORMAT=0x0 */ + 0x080105d0, /* LOAD_STATE (1) Base: 0x01740 Size: 1 Fixp: 0 */ + 0x00c0ffee, /* [01740] TS.SAMPLER[0].STATUS_BASE := ADDR_X */ + 0x080105d8, /* LOAD_STATE (1) Base: 0x01760 Size: 1 Fixp: 0 */ + 0x00000000, /* [01760] TS.SAMPLER[0].CLEAR_VALUE := 0x0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000007, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=1,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e02, /* LOAD_STATE (1) Base: 0x03808 Size: 1 Fixp: 0 */ + 0x00000701, /* [03808] GL.SEMAPHORE_TOKEN := FROM=FE,TO=PE */ + 0x48000000, /* STALL (9) */ + 0x00000701, /* */ + 0x0c020280, /* LOAD_STATE (1) Base: 0x00A00 Size: 2 Fixp: 1 */ + 0x01900000, /* [00A00] PA.VIEWPORT_SCALE_X = 400.000000 */ + 0x00f00000, /* [00A04] PA.VIEWPORT_SCALE_Y = 240.000000 */ + 0x00000000, /* PAD */ + 0x0c020283, /* LOAD_STATE (1) Base: 0x00A0C Size: 2 Fixp: 1 */ + 0x01900000, /* [00A0C] PA.VIEWPORT_OFFSET_X = 400.000000 */ + 0x00f00000, /* [00A10] PA.VIEWPORT_OFFSET_Y = 240.000000 */ + 0x00000000, /* PAD */ + 0x080102a0, /* LOAD_STATE (1) Base: 0x00A80 Size: 1 Fixp: 0 */ + 0x38481905, /* [00A80] PA.VIEWPORT_UNK00A80 := 0.000048 */ + 0x0c0102a1, /* LOAD_STATE (1) Base: 0x00A84 Size: 1 Fixp: 1 */ + 0x20000000, /* [00A84] PA.VIEWPORT_UNK00A84 = 8192.000000 */ + 0x080102a3, /* LOAD_STATE (1) Base: 0x00A8C Size: 1 Fixp: 0 */ + 0x38000000, /* [00A8C] PA.VIEWPORT_UNK00A8C := 0.000031 */ + 0x0c040300, /* LOAD_STATE (1) Base: 0x00C00 Size: 4 Fixp: 1 */ + 0x00000000, /* [00C00] SE.SCISSOR_LEFT = 0.000000 */ + 0x00000000, /* [00C04] SE.SCISSOR_TOP = 0.000000 */ + 0x03201000, /* [00C08] SE.SCISSOR_RIGHT = 800.062500 */ + 0x01e01000, /* [00C0C] SE.SCISSOR_BOTTOM = 480.062500 */ + 0x00000000, /* PAD */ + 0x0c010308, /* LOAD_STATE (1) Base: 0x00C20 Size: 1 Fixp: 1 */ + 0x0320ffff, /* [00C20] SE.CLIP_RIGHT = 800.999985 */ + 0x0c010309, /* LOAD_STATE (1) Base: 0x00C24 Size: 1 Fixp: 1 */ + 0x01e0ffff, /* [00C24] SE.CLIP_BOTTOM = 480.999985 */ + 0x08030508, /* LOAD_STATE (1) Base: 0x01420 Size: 3 Fixp: 0 */ + 0x00000000, /* [01420] PE.ALPHA_OP := ALPHA_TEST=0,ALPHA_FUNC=NEVER(residue:0xfffeff0c) */ + 0x00000000, /* [01424] PE.ALPHA_BLEND_COLOR := B=0x0,G=0x0,R=0x0,A=0x0 */ + 0x00100010, /* [01428] PE.ALPHA_CONFIG := BLEND_ENABLE_COLOR=0,SRC_FUNC_COLOR=ONE,DST_FUNC_COLOR=ZERO,EQ_COLOR=ADD,BLEND_SEPARATE_ALPHA=0,SRC_FUNC_ALPHA=ONE,DST_FUNC_ALPHA=ZERO,EQ_ALPHA=ADD */ + 0x08010528, /* LOAD_STATE (1) Base: 0x014A0 Size: 1 Fixp: 0 */ + 0x0000fdff, /* [014A0] PE.STENCIL_CONFIG_EXT := UNK16=0x0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000002, /* [0380C] GL.FLUSH_CACHE := DEPTH=0,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x0801050b, /* LOAD_STATE (1) Base: 0x0142C Size: 1 Fixp: 0 */ + 0x00110f06, /* [0142C] PE.COLOR_FORMAT := FORMAT=A8R8G8B8,COMPONENTS=R=1,G=1,B=1,A=1,OVERWRITE=1,SUPER_TILED=1(residue:0xffcce0e0) */ + 0x08010518, /* LOAD_STATE (1) Base: 0x01460 Size: 1 Fixp: 0 */ + 0x15900000, /* [01460] PE.PIPE[0].COLOR_ADDR := ADDR_G */ + 0x0801050c, /* LOAD_STATE (1) Base: 0x01430 Size: 1 Fixp: 0 */ + 0x15900000, /* [01430] PE.COLOR_ADDR := ADDR_G */ + 0x0801050d, /* LOAD_STATE (1) Base: 0x01434 Size: 1 Fixp: 0 */ + 0x00000d00, /* [01434] PE.COLOR_STRIDE := 0xd00 */ + 0x08040500, /* LOAD_STATE (1) Base: 0x01400 Size: 4 Fixp: 0 */ + 0x04011101, /* [01400] PE.DEPTH_CONFIG := DEPTH_MODE=Z,DEPTH_FORMAT=D16,DEPTH_FUNC=LESS,WRITE_ENABLE=1,EARLY_Z=1,ONLY_DEPTH=0,SUPER_TILED=1(residue:0xf3ccc0c4) */ + 0x00000000, /* [01404] PE.DEPTH_NEAR := 0.000000 */ + 0x3f800000, /* [01408] PE.DEPTH_FAR := 1.000000 */ + 0x477fff00, /* [0140C] PE.DEPTH_NORMALIZE := 65535.000000 */ + 0x00000000, /* PAD */ + 0x08010520, /* LOAD_STATE (1) Base: 0x01480 Size: 1 Fixp: 0 */ + 0x15ab5000, /* [01480] PE.PIPE[0].DEPTH_ADDR := ADDR_I */ + 0x08010504, /* LOAD_STATE (1) Base: 0x01410 Size: 1 Fixp: 0 */ + 0x15ab5000, /* [01410] PE.DEPTH_ADDR := ADDR_I */ + 0x08010505, /* LOAD_STATE (1) Base: 0x01414 Size: 1 Fixp: 0 */ + 0x00000680, /* [01414] PE.DEPTH_STRIDE := 0x680 */ + 0x08010515, /* LOAD_STATE (1) Base: 0x01454 Size: 1 Fixp: 0 */ + 0x00000000, /* [01454] PE.HDEPTH_CONTROL := FORMAT=DISABLED */ + 0x08010282, /* LOAD_STATE (1) Base: 0x00A08 Size: 1 Fixp: 0 */ + 0x3f800000, /* [00A08] PA.VIEWPORT_SCALE_Z := 1.000000 */ + 0x08010285, /* LOAD_STATE (1) Base: 0x00A14 Size: 1 Fixp: 0 */ + 0x00000000, /* [00A14] PA.VIEWPORT_OFFSET_Z := 0.000000 */ + 0x08010507, /* LOAD_STATE (1) Base: 0x0141C Size: 1 Fixp: 0 */ + 0x00000000, /* [0141C] PE.STENCIL_CONFIG := MODE=DISABLED,REF_FRONT=0x0,MASK_FRONT=0x0,WRITE_MASK=0x0(residue:0x0000000c) */ + 0x08010e06, /* LOAD_STATE (1) Base: 0x03818 Size: 1 Fixp: 0 */ + 0x00000000, /* [03818] GL.MULTI_SAMPLE_CONFIG := MSAA_SAMPLES=NONE,MSAA_ENABLES=0x0,UNK12=0x0,UNK16=0x0(residue:0xfff40e04) */ + 0x08010286, /* LOAD_STATE (1) Base: 0x00A18 Size: 1 Fixp: 0 */ + 0x3f000000, /* [00A18] PA.LINE_WIDTH := 0.500000 */ + 0x0803028d, /* LOAD_STATE (1) Base: 0x00A34 Size: 3 Fixp: 0 */ + 0x00412200, /* [00A34] PA.CONFIG := POINT_SIZE_ENABLE=0,POINT_SPRITE_ENABLE=0,CULL_FACE_MODE=CCW,FILL_MODE=SOLID,SHADE_MODEL=SMOOTH,UNK22=1(residue:0xff3888c3) */ + 0x3f000000, /* [00A38] PA.LINE_UNK00A38 := 0.500000 */ + 0x3f000000, /* [00A3C] PA.LINE_UNK00A3C := 0.500000 */ + 0x08010e02, /* LOAD_STATE (1) Base: 0x03808 Size: 1 Fixp: 0 */ + 0x00000701, /* [03808] GL.SEMAPHORE_TOKEN := FROM=FE,TO=PE */ + 0x48000000, /* STALL (9) */ + 0x00000701, /* */ + 0x08030202, /* LOAD_STATE (1) Base: 0x00808 Size: 3 Fixp: 0 */ + 0x00000103, /* [00808] VS.INPUT_COUNT := COUNT=3,UNK8=1 */ + 0x00000006, /* [0080C] VS.TEMP_REGISTER_CONTROL := NUM_TEMPS=6 */ + 0x00010004, /* [00810] VS.OUTPUT[0] := O0=4,O1=0,O2=1,O3=0 */ + 0x08010217, /* LOAD_STATE (1) Base: 0x0085C Size: 1 Fixp: 0 */ + 0x00150000, /* [0085C] VS.RANGE := LOW=0x0,HIGH=0x15 */ + 0x0801020e, /* LOAD_STATE (1) Base: 0x00838 Size: 1 Fixp: 0 */ + 0x00000000, /* [00838] VS.START_PC := 0x0 */ + 0x08010200, /* LOAD_STATE (1) Base: 0x00800 Size: 1 Fixp: 0 */ + 0x00000016, /* [00800] VS.END_PC := 0x16 */ + 0x0801142c, /* LOAD_STATE (1) Base: 0x050B0 Size: 1 Fixp: 0 */ + 0x3f800000, /* [050B0] VS.UNIFORMS[44] := 1.000000 (u11.x) */ + 0x0801141b, /* LOAD_STATE (1) Base: 0x0506C Size: 1 Fixp: 0 */ + 0x00000000, /* [0506C] VS.UNIFORMS[27] := 0.000000 (u6.w) */ + 0x08011417, /* LOAD_STATE (1) Base: 0x0505C Size: 1 Fixp: 0 */ + 0x41a00000, /* [0505C] VS.UNIFORMS[23] := 20.000000 (u5.w) */ + 0x08011413, /* LOAD_STATE (1) Base: 0x0504C Size: 1 Fixp: 0 */ + 0x40000000, /* [0504C] VS.UNIFORMS[19] := 2.000000 (u4.w) */ + 0x08583000, /* LOAD_STATE (1) Base: 0x0C000 Size: 88 Fixp: 0 */ + 0x01831009, /* [0C000] SH.UNK0C000[0] := 0x1831009 */ + 0x00000000, /* [0C004] SH.UNK0C000[1] := 0x0 */ + 0x00000000, /* [0C008] SH.UNK0C000[2] := 0x0 */ + 0x203fc048, /* [0C00C] SH.UNK0C000[3] := 0x203fc048 */ + 0x02031009, /* [0C010] SH.UNK0C000[4] := 0x2031009 */ + 0x00000000, /* [0C014] SH.UNK0C000[5] := 0x0 */ + 0x00000000, /* [0C018] SH.UNK0C000[6] := 0x0 */ + 0x203fc058, /* [0C01C] SH.UNK0C000[7] := 0x203fc058 */ + 0x07841003, /* [0C020] SH.UNK0C000[8] := 0x7841003 */ + 0x39000800, /* [0C024] SH.UNK0C000[9] := 0x39000800 */ + 0x00000050, /* [0C028] SH.UNK0C000[10] := 0x50 */ + 0x00000000, /* [0C02C] SH.UNK0C000[11] := 0x0 */ + 0x07841002, /* [0C030] SH.UNK0C000[12] := 0x7841002 */ + 0x39001800, /* [0C034] SH.UNK0C000[13] := 0x39001800 */ + 0x00aa0050, /* [0C038] SH.UNK0C000[14] := 0xaa0050 */ + 0x00390048, /* [0C03C] SH.UNK0C000[15] := 0x390048 */ + 0x07841002, /* [0C040] SH.UNK0C000[16] := 0x7841002 */ + 0x39002800, /* [0C044] SH.UNK0C000[17] := 0x39002800 */ + 0x01540050, /* [0C048] SH.UNK0C000[18] := 0x1540050 */ + 0x00390048, /* [0C04C] SH.UNK0C000[19] := 0x390048 */ + 0x07841002, /* [0C050] SH.UNK0C000[20] := 0x7841002 */ + 0x39003800, /* [0C054] SH.UNK0C000[21] := 0x39003800 */ + 0x01fe0050, /* [0C058] SH.UNK0C000[22] := 0x1fe0050 */ + 0x00390048, /* [0C05C] SH.UNK0C000[23] := 0x390048 */ + 0x03851003, /* [0C060] SH.UNK0C000[24] := 0x3851003 */ + 0x29004800, /* [0C064] SH.UNK0C000[25] := 0x29004800 */ + 0x000000d0, /* [0C068] SH.UNK0C000[26] := 0xd0 */ + 0x00000000, /* [0C06C] SH.UNK0C000[27] := 0x0 */ + 0x03851002, /* [0C070] SH.UNK0C000[28] := 0x3851002 */ + 0x29005800, /* [0C074] SH.UNK0C000[29] := 0x29005800 */ + 0x00aa00d0, /* [0C078] SH.UNK0C000[30] := 0xaa00d0 */ + 0x00290058, /* [0C07C] SH.UNK0C000[31] := 0x290058 */ + 0x03811002, /* [0C080] SH.UNK0C000[32] := 0x3811002 */ + 0x29006800, /* [0C084] SH.UNK0C000[33] := 0x29006800 */ + 0x015400d0, /* [0C088] SH.UNK0C000[34] := 0x15400d0 */ + 0x00290058, /* [0C08C] SH.UNK0C000[35] := 0x290058 */ + 0x07851003, /* [0C090] SH.UNK0C000[36] := 0x7851003 */ + 0x39007800, /* [0C094] SH.UNK0C000[37] := 0x39007800 */ + 0x00000050, /* [0C098] SH.UNK0C000[38] := 0x50 */ + 0x00000000, /* [0C09C] SH.UNK0C000[39] := 0x0 */ + 0x07851002, /* [0C0A0] SH.UNK0C000[40] := 0x7851002 */ + 0x39008800, /* [0C0A4] SH.UNK0C000[41] := 0x39008800 */ + 0x00aa0050, /* [0C0A8] SH.UNK0C000[42] := 0xaa0050 */ + 0x00390058, /* [0C0AC] SH.UNK0C000[43] := 0x390058 */ + 0x07851002, /* [0C0B0] SH.UNK0C000[44] := 0x7851002 */ + 0x39009800, /* [0C0B4] SH.UNK0C000[45] := 0x39009800 */ + 0x01540050, /* [0C0B8] SH.UNK0C000[46] := 0x1540050 */ + 0x00390058, /* [0C0BC] SH.UNK0C000[47] := 0x390058 */ + 0x07801002, /* [0C0C0] SH.UNK0C000[48] := 0x7801002 */ + 0x3900a800, /* [0C0C4] SH.UNK0C000[49] := 0x3900a800 */ + 0x01fe0050, /* [0C0C8] SH.UNK0C000[50] := 0x1fe0050 */ + 0x00390058, /* [0C0CC] SH.UNK0C000[51] := 0x390058 */ + 0x0401100c, /* [0C0D0] SH.UNK0C000[52] := 0x401100c */ + 0x00000000, /* [0C0D4] SH.UNK0C000[53] := 0x0 */ + 0x00000000, /* [0C0D8] SH.UNK0C000[54] := 0x0 */ + 0x003fc008, /* [0C0DC] SH.UNK0C000[55] := 0x3fc008 */ + 0x03801002, /* [0C0E0] SH.UNK0C000[56] := 0x3801002 */ + 0x69000800, /* [0C0E4] SH.UNK0C000[57] := 0x69000800 */ + 0x01fe00c0, /* [0C0E8] SH.UNK0C000[58] := 0x1fe00c0 */ + 0x00290038, /* [0C0EC] SH.UNK0C000[59] := 0x290038 */ + 0x03831005, /* [0C0F0] SH.UNK0C000[60] := 0x3831005 */ + 0x29000800, /* [0C0F4] SH.UNK0C000[61] := 0x29000800 */ + 0x01480040, /* [0C0F8] SH.UNK0C000[62] := 0x1480040 */ + 0x00000000, /* [0C0FC] SH.UNK0C000[63] := 0x0 */ + 0x0383100d, /* [0C100] SH.UNK0C000[64] := 0x383100d */ + 0x00000000, /* [0C104] SH.UNK0C000[65] := 0x0 */ + 0x00000000, /* [0C108] SH.UNK0C000[66] := 0x0 */ + 0x00000038, /* [0C10C] SH.UNK0C000[67] := 0x38 */ + 0x03801003, /* [0C110] SH.UNK0C000[68] := 0x3801003 */ + 0x29000800, /* [0C114] SH.UNK0C000[69] := 0x29000800 */ + 0x014801c0, /* [0C118] SH.UNK0C000[70] := 0x14801c0 */ + 0x00000000, /* [0C11C] SH.UNK0C000[71] := 0x0 */ + 0x00801005, /* [0C120] SH.UNK0C000[72] := 0x801005 */ + 0x29001800, /* [0C124] SH.UNK0C000[73] := 0x29001800 */ + 0x01480040, /* [0C128] SH.UNK0C000[74] := 0x1480040 */ + 0x00000000, /* [0C12C] SH.UNK0C000[75] := 0x0 */ + 0x0380108f, /* [0C130] SH.UNK0C000[76] := 0x380108f */ + 0x3fc06800, /* [0C134] SH.UNK0C000[77] := 0x3fc06800 */ + 0x00000050, /* [0C138] SH.UNK0C000[78] := 0x50 */ + 0x203fc068, /* [0C13C] SH.UNK0C000[79] := 0x203fc068 */ + 0x04001009, /* [0C140] SH.UNK0C000[80] := 0x4001009 */ + 0x00000000, /* [0C144] SH.UNK0C000[81] := 0x0 */ + 0x00000000, /* [0C148] SH.UNK0C000[82] := 0x0 */ + 0x200000b8, /* [0C14C] SH.UNK0C000[83] := 0x200000b8 */ + 0x01811009, /* [0C150] SH.UNK0C000[84] := 0x1811009 */ + 0x00000000, /* [0C154] SH.UNK0C000[85] := 0x0 */ + 0x00000000, /* [0C158] SH.UNK0C000[86] := 0x0 */ + 0x00150028, /* [0C15C] SH.UNK0C000[87] := 0x150028 */ + 0x00000000, /* PAD */ + 0x08010380, /* LOAD_STATE (1) Base: 0x00E00 Size: 1 Fixp: 0 */ + 0x00000003, /* [00E00] RA.CONTROL := UNK0=1,LAST_VARYING_2X=1 */ + 0x08010401, /* LOAD_STATE (1) Base: 0x01004 Size: 1 Fixp: 0 */ + 0x00000001, /* [01004] PS.OUTPUT_REG := 0x1 */ + 0x08020290, /* LOAD_STATE (1) Base: 0x00A40 Size: 2 Fixp: 0 */ + 0x00000200, /* [00A40] PA.SHADER_ATTRIBUTES[0] := UNK0=0x0,UNK8=0x2 */ + 0x00000200, /* [00A44] PA.SHADER_ATTRIBUTES[1] := UNK0=0x0,UNK8=0x2 */ + 0x00000000, /* PAD */ + 0x08010e08, /* LOAD_STATE (1) Base: 0x03820 Size: 1 Fixp: 0 */ + 0x00000044, /* [03820] GL.VARYING_NUM_COMPONENTS := VAR0=0x4,VAR1=0x4,VAR2=0x0,VAR3=0x0,VAR4=0x0,VAR5=0x0,VAR6=0x0,VAR7=0x0 */ + 0x08010e0d, /* LOAD_STATE (1) Base: 0x03834 Size: 1 Fixp: 0 */ + 0x00040000, /* [03834] GL.UNK03834 := 0x40000 */ + 0x08020e0a, /* LOAD_STATE (1) Base: 0x03828 Size: 2 Fixp: 0 */ + 0x00005555, /* [03828] GL.VARYING_COMPONENT_USE[0] := COMP0=USED,COMP1=USED,COMP2=USED,COMP3=USED,COMP4=USED,COMP5=USED,COMP6=USED,COMP7=USED,COMP8=UNUSED,COMP9=UNUSED,COMP10=UNUSED,COMP11=UNUSED,COMP12=UNUSED,COMP13=UNUSED,COMP14=UNUSED,COMP15=UNUSED */ + 0x00000000, /* [0382C] GL.VARYING_COMPONENT_USE[1] := COMP0=UNUSED,COMP1=UNUSED,COMP2=UNUSED,COMP3=UNUSED,COMP4=UNUSED,COMP5=UNUSED,COMP6=UNUSED,COMP7=UNUSED,COMP8=UNUSED,COMP9=UNUSED,COMP10=UNUSED,COMP11=UNUSED,COMP12=UNUSED,COMP13=UNUSED,COMP14=UNUSED,COMP15=UNUSED */ + 0x00000000, /* PAD */ + 0x08010e0e, /* LOAD_STATE (1) Base: 0x03838 Size: 1 Fixp: 0 */ + 0x00000000, /* [03838] GL.UNK03838 := 0x0 */ + 0x08010407, /* LOAD_STATE (1) Base: 0x0101C Size: 1 Fixp: 0 */ + 0x01020100, /* [0101C] PS.RANGE := LOW=0x100,HIGH=0x102 */ + 0x08010406, /* LOAD_STATE (1) Base: 0x01018 Size: 1 Fixp: 0 */ + 0x00000000, /* [01018] PS.START_PC := 0x0 */ + 0x08010400, /* LOAD_STATE (1) Base: 0x01000 Size: 1 Fixp: 0 */ + 0x00000003, /* [01000] PS.END_PC := 0x3 */ + 0x08011c00, /* LOAD_STATE (1) Base: 0x07000 Size: 1 Fixp: 0 */ + 0x40400000, /* [07000] PS.UNIFORMS[0] := 3.000000 (u0.x) */ + 0x080c3400, /* LOAD_STATE (1) Base: 0x0D000 Size: 12 Fixp: 0 */ + 0x07811003, /* [0D000] SH.UNK0C000[1024] := 0x7811003 */ + 0x00000800, /* [0D004] SH.UNK0C000[1025] := 0x800 */ + 0x01c800d0, /* [0D008] SH.UNK0C000[1026] := 0x1c800d0 */ + 0x00000000, /* [0D00C] SH.UNK0C000[1027] := 0x0 */ + 0x07821018, /* [0D010] SH.UNK0C000[1028] := 0x7821018 */ + 0x15002f20, /* [0D014] SH.UNK0C000[1029] := 0x15002f20 */ + 0x00000000, /* [0D018] SH.UNK0C000[1030] := 0x0 */ + 0x00000000, /* [0D01C] SH.UNK0C000[1031] := 0x0 */ + 0x07811003, /* [0D020] SH.UNK0C000[1032] := 0x7811003 */ + 0x39001800, /* [0D024] SH.UNK0C000[1033] := 0x39001800 */ + 0x01c80140, /* [0D028] SH.UNK0C000[1034] := 0x1c80140 */ + 0x00000000, /* [0D02C] SH.UNK0C000[1035] := 0x0 */ + 0x00000000, /* PAD */ + 0x08030402, /* LOAD_STATE (1) Base: 0x01008 Size: 3 Fixp: 0 */ + 0x00001f03, /* [01008] PS.INPUT_COUNT := COUNT=3,UNK8=31 */ + 0x00000003, /* [0100C] PS.TEMP_REGISTER_CONTROL := NUM_TEMPS=3 */ + 0x00000002, /* [01010] PS.CONTROL := BYPASS=0,UNK1=1 */ + 0x0801028c, /* LOAD_STATE (1) Base: 0x00A30 Size: 1 Fixp: 0 */ + 0x00000200, /* [00A30] PA.ATTRIBUTE_ELEMENT_COUNT := UNK0=0x0,COUNT=0x2 */ + 0x08010e07, /* LOAD_STATE (1) Base: 0x0381C Size: 1 Fixp: 0 */ + 0x00000008, /* [0381C] GL.VARYING_TOTAL_COMPONENTS := NUM=0x8 */ + 0x0801020c, /* LOAD_STATE (1) Base: 0x00830 Size: 1 Fixp: 0 */ + 0x0f3f0542, /* [00830] VS.LOAD_BALANCING := A=0x42,B=0x5,C=0x3f,D=0xf */ + 0x08010201, /* LOAD_STATE (1) Base: 0x00804 Size: 1 Fixp: 0 */ + 0x00000003, /* [00804] VS.OUTPUT_COUNT := 3 */ + 0x08010e02, /* LOAD_STATE (1) Base: 0x03808 Size: 1 Fixp: 0 */ + 0x00000705, /* [03808] GL.SEMAPHORE_TOKEN := FROM=RA,TO=PE */ + 0x08010f00, /* LOAD_STATE (1) Base: 0x03C00 Size: 1 Fixp: 0 */ + 0x00000705, /* [03C00] GL.STALL_TOKEN := FROM=RA,TO=PE,FLIP0=0,FLIP1=0 */ + 0x28000000, /* DRAW_PRIMITIVES (5) */ + 0x00000004, /* */ + 0x00000000, /* */ + 0x00000fd4, /* 0xfd4 = 4052 = triangle count*/ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003 /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ +}; +#if 0 +Grouped GPU addresses { + cmdbuf[0x1d] = cmdbuf[0x1f] = ADDR_A; /* 0x7f2c8700 */ +} +#endif + +uint32_t cmdbuf5[] = { /* seq 105 */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ + 0x00004686, /* [01604] RS.CONFIG := SOURCE_FORMAT=A8R8G8B8,DOWNSAMPLE_X=0,DOWNSAMPLE_Y=0,SOURCE_TILED=1,DEST_FORMAT=A8R8G8B8,DEST_TILED=1,SWAP_RB=0,FLIP=0 */ + 0x08010583, /* LOAD_STATE (1) Base: 0x0160C Size: 1 Fixp: 0 */ + 0x80003400, /* [0160C] RS.SOURCE_STRIDE := STRIDE=0x3400,MULTI=0,TILING=1 */ + 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ + 0x80003400, /* [01614] RS.DEST_STRIDE := STRIDE=0x3400,MULTI=0,TILING=1 */ + 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ + 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ + 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ + 0x00000000, /* PAD */ + 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ + 0x00000000, /* [0163C] RS.CLEAR_CONTROL := BITS=0x0,MODE=DISABLED */ + 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ + 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ + 0x08010582, /* LOAD_STATE (1) Base: 0x01608 Size: 1 Fixp: 0 */ + 0x15900000, /* [01608] RS.SOURCE_ADDR := ADDR_G */ + 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ + 0x15900000, /* [01610] RS.DEST_ADDR := ADDR_G */ + 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ + 0x02000340, /* [01620] RS.WINDOW_SIZE := HEIGHT=512,WIDTH=832 */ + 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ + 0xbadabeeb /* [01600] RS.KICKER := 0xbadabeeb */ +}; +#if 0 +Grouped GPU addresses { + cmdbuf[0x9] = ADDR_G; /* 0x7a002a00 */ + cmdbuf[0xb] = cmdbuf[0x11] = cmdbuf[0x15] = ADDR_F; /* 0x7f284000 */ + cmdbuf[0x21] = ADDR_A; /* 0x7f2c8700 */ + cmdbuf[0x1f] = ADDR_B; /* 0x7a005900 */ +} +#endif + +uint32_t cmdbuf6[] = { + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ + 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000002, /* [0380C] GL.FLUSH_CACHE := DEPTH=0,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ + 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ + 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ + 0x00000049, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=0,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=0,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ + 0x20000686, /* [01604] RS.CONFIG := SOURCE_FORMAT=A8R8G8B8,DOWNSAMPLE_X=0,DOWNSAMPLE_Y=0,SOURCE_TILED=1,DEST_FORMAT=A8R8G8B8,DEST_TILED=0,SWAP_RB=1,FLIP=0 */ + 0x08010583, /* LOAD_STATE (1) Base: 0x0160C Size: 1 Fixp: 0 */ + 0x80003400, /* [0160C] RS.SOURCE_STRIDE := STRIDE=0x3400,MULTI=0,TILING=1 */ + 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ + 0x00000d00, /* [01614] RS.DEST_STRIDE := STRIDE=0xd00,MULTI=0,TILING=0 */ + 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ + 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ + 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ + 0x00000000, /* PAD */ + 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ + 0x00000000, /* [0163C] RS.CLEAR_CONTROL := BITS=0x0,MODE=DISABLED */ + 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ + 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ + 0x08010582, /* LOAD_STATE (1) Base: 0x01608 Size: 1 Fixp: 0 */ + 0x15900000, /* [01608] RS.SOURCE_ADDR := ADDR_G */ + 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ + 0x15e4d000, /* [01610] RS.DEST_ADDR := ADDR_Y */ + 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ + 0x02000340, /* [01620] RS.WINDOW_SIZE := HEIGHT=512,WIDTH=832 */ + 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ + 0xbadabeeb /* [01600] RS.KICKER := 0xbadabeeb */ +}; + +uint32_t cmdbuf7[] = { /* seq 115 */ + 0x08010581, /* PAD */ + 0x00000585, /* PAD */ + 0x08010583, /* PAD */ + 0x80001c00, /* PAD */ + 0x08010585, /* PAD */ + 0x00000640, /* PAD */ + 0x0801058c, /* PAD */ + 0xffffffff, /* PAD */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* GLOBAL.FLUSH_CACHE := DEPTH=1,COLOR=1,3D_TEXTURE=0,2D=0,UNK4=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ + 0x20000505, /* RS.CONFIG := SOURCE_FORMAT=X8R8G8B8,UNK7=1,DEST_FORMAT=X8R8G8B8,UNK14=0,SWAP_RB=0,FLIP=0 */ + 0x08010583, /* LOAD_STATE (1) Base: 0x0160C Size: 1 Fixp: 0 */ + 0x00000d00, /* RS.SOURCE_STRIDE := STRIDE=0xd00,TILING=0 */ + 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ + 0x00000c80, /* RS.DEST_STRIDE := STRIDE=0xc80,TILING=0 */ + 0x0801058c, /* LOAD_STATE (1) Base: 0x01630 Size: 1 Fixp: 0 */ + 0xffffffff, /* RS.DITHER[0] := 0xffffffff */ + 0x0801058d, /* LOAD_STATE (1) Base: 0x01634 Size: 1 Fixp: 0 */ + 0xffffffff, /* RS.DITHER[1] := 0xffffffff */ + 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ + 0x00000000, /* RS.CLEAR_CONTROL := BITS=0x0,MODE=0x0 */ + 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ + 0x00000000, /* RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ + 0x08010582, /* LOAD_STATE (1) Base: 0x01608 Size: 1 Fixp: 0 */ + 0x7f2c8700, /* RS.SOURCE_ADDR := ADDR_A */ + 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ + 0x7fc20000, /* RS.DEST_ADDR := ADDR_J */ + 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ + 0x01e00320, /* RS.WINDOW_SIZE := HEIGHT=480,WIDTH=800 */ + 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ + 0xbeebbeeb /* RS.KICKER := 0xbeebbeeb */ +}; + +#if 0 +Grouped GPU addresses { + cmdbuf[0x19] = ADDR_A; /* 0x7f2c8700 */ + cmdbuf[0x1b] = ADDR_J; /* 0x7fc20000 */ +} +#endif + diff --git a/src/replay/cube_cmd_gc2000.h b/src/replay/cube_cmd_gc2000.h deleted file mode 100644 index 23e887b..0000000 --- a/src/replay/cube_cmd_gc2000.h +++ /dev/null @@ -1,650 +0,0 @@ - -uint32_t cmdbuf1[] = { /* seq 85 */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x08010e05, /* LOAD_STATE (1) Base: 0x03814 Size: 1 Fixp: 0 */ - 0x00000001, /* [03814] GL.VERTEX_ELEMENT_CONFIG := 0x1 */ - 0x08010380, /* LOAD_STATE (1) Base: 0x00E00 Size: 1 Fixp: 0 */ - 0x00000001, /* [00E00] RA.CONTROL := UNK0=1,LAST_VARYING_2X=0 */ - 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ - 0x34000001, /* [00A2C] PA.W_CLIP_LIMIT := 0x34000001 */ - 0x0801028a, /* LOAD_STATE (1) Base: 0x00A28 Size: 1 Fixp: 0 */ - 0x00000011, /* [00A28] PA.SYSTEM_MODE := UNK0=1,UNK4=1 */ - 0x08010e13, /* LOAD_STATE (1) Base: 0x0384C Size: 1 Fixp: 0 */ - 0x00000000, /* [0384C] GL.API_MODE := OPENGL */ - 0x08010306, /* LOAD_STATE (1) Base: 0x00C18 Size: 1 Fixp: 0 */ - 0x00000000, /* [00C18] SE.CONFIG := LAST_PIXEL_ENABLE=0 */ - 0x08010304, /* LOAD_STATE (1) Base: 0x00C10 Size: 1 Fixp: 0 */ - 0x00000000, /* [00C10] SE.DEPTH_SCALE := 0.000000 */ - 0x08010305, /* LOAD_STATE (1) Base: 0x00C14 Size: 1 Fixp: 0 */ - 0x00000000, /* [00C14] SE.DEPTH_BIAS := 0.000000 */ - 0x08010306, /* LOAD_STATE (1) Base: 0x00C18 Size: 1 Fixp: 0 */ - 0x00000000, /* [00C18] SE.CONFIG := LAST_PIXEL_ENABLE=0 */ - 0x08010304, /* LOAD_STATE (1) Base: 0x00C10 Size: 1 Fixp: 0 */ - 0x00000000, /* [00C10] SE.DEPTH_SCALE := 0.000000 */ - 0x08010305, /* LOAD_STATE (1) Base: 0x00C14 Size: 1 Fixp: 0 */ - 0x00000000, /* [00C14] SE.DEPTH_BIAS := 0.000000 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000002, /* [0380C] GL.FLUSH_CACHE := DEPTH=0,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ - 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ - 0x0801059d, /* LOAD_STATE (1) Base: 0x01674 Size: 1 Fixp: 0 */ - 0x00001cc0, /* [01674] TS.DEPTH_AUTO_DISABLE_COUNT := 0x1cc0 */ - 0x08030596, /* LOAD_STATE (1) Base: 0x01658 Size: 3 Fixp: 0 */ - 0x15973000, /* [01658] TS.COLOR_STATUS_BASE := ADDR_H */ - 0x15900000, /* [0165C] TS.COLOR_SURFACE_BASE := ADDR_G */ - 0x00000000, /* [01660] TS.COLOR_CLEAR_VALUE := 0x0 */ - 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ - 0x00000022, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=0,COLOR_FAST_CLEAR=1,DEPTH_16BPP=0,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=0,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000001, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=0,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ - 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ - 0x08030599, /* LOAD_STATE (1) Base: 0x01664 Size: 3 Fixp: 0 */ - 0x15973800, /* [01664] TS.DEPTH_STATUS_BASE := ADDR_J */ - 0x15985000, /* [01668] TS.DEPTH_SURFACE_BASE := ADDR_I */ - 0xffffffff, /* [0166C] TS.DEPTH_CLEAR_VALUE := 0xffffffff */ - 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ - 0x0000006b, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=1,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ - 0x08010304, /* LOAD_STATE (1) Base: 0x00C10 Size: 1 Fixp: 0 */ - 0x00000000, /* [00C10] SE.DEPTH_SCALE := 0.000000 */ - 0x08010305, /* LOAD_STATE (1) Base: 0x00C14 Size: 1 Fixp: 0 */ - 0x00000000, /* [00C14] SE.DEPTH_BIAS := 0.000000 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ - 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ - 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ - 0x08010e02, /* LOAD_STATE (1) Base: 0x03808 Size: 1 Fixp: 0 */ - 0x00000705, /* [03808] GL.SEMAPHORE_TOKEN := FROM=RA,TO=PE */ - 0x08010f00, /* LOAD_STATE (1) Base: 0x03C00 Size: 1 Fixp: 0 */ - 0x00000705, /* [03C00] GL.STALL_TOKEN := FROM=RA,TO=PE,FLIP0=0,FLIP1=0 */ - 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ - 0x00000606, /* [01604] RS.CONFIG := SOURCE_FORMAT=A8R8G8B8,DOWNSAMPLE_X=0,DOWNSAMPLE_Y=0,SOURCE_TILED=0,DEST_FORMAT=A8R8G8B8,DEST_TILED=0,SWAP_RB=0,FLIP=0 */ - 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ - 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ - 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ - 0x00000000, /* PAD */ - 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ - 0x15973000, /* [01610] RS.DEST_ADDR := ADDR_H */ - 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ - 0x00000200, /* [01614] RS.DEST_STRIDE := STRIDE=0x200,MULTI=0,TILING=0 */ - 0x08010590, /* LOAD_STATE (1) Base: 0x01640 Size: 1 Fixp: 0 */ - 0x55555555, /* [01640] RS.FILL_VALUE[0] := 0x55555555 */ - 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ - 0x0001ffff, /* [0163C] RS.CLEAR_CONTROL := BITS=0xffff,MODE=ENABLED1 */ - 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ - 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ - 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ - 0x00040080, /* [01620] RS.WINDOW_SIZE := HEIGHT=4,WIDTH=128 */ - 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ - 0xbadabeeb, /* [01600] RS.KICKER := 0xbadabeeb */ - 0x08010598, /* LOAD_STATE (1) Base: 0x01660 Size: 1 Fixp: 0 */ - 0xff7f7f7f, /* [01660] TS.COLOR_CLEAR_VALUE := 0xff7f7f7f */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000002, /* [0380C] GL.FLUSH_CACHE := DEPTH=0,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ - 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ - 0x0801059d, /* LOAD_STATE (1) Base: 0x01674 Size: 1 Fixp: 0 */ - 0x00001cc0, /* [01674] TS.DEPTH_AUTO_DISABLE_COUNT := 0x1cc0 */ - 0x08030596, /* LOAD_STATE (1) Base: 0x01658 Size: 3 Fixp: 0 */ - 0x15973000, /* [01658] TS.COLOR_STATUS_BASE := ADDR_H */ - 0x15900000, /* [0165C] TS.COLOR_SURFACE_BASE := ADDR_G */ - 0xff7f7f7f, /* [01660] TS.COLOR_CLEAR_VALUE := 0xff7f7f7f */ - 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ - 0x0000006b, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=1,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ - 0x08101400, /* LOAD_STATE (1) Base: 0x05000 Size: 16 Fixp: 0 */ - 0x3fbf00b4, /* [05000] VS.UNIFORMS[0] := 1.492209 (u0.x) */ - 0x3fa8f7a5, /* [05004] VS.UNIFORMS[1] := 1.320058 (u0.y) */ - 0xc01d7d34, /* [05008] VS.UNIFORMS[2] := -2.460767 (u0.z) */ - 0xbf1d7d34, /* [0500C] VS.UNIFORMS[3] := -0.615192 (u0.w) */ - 0x3e86b73c, /* [05010] VS.UNIFORMS[4] := 0.263117 (u1.x) */ - 0x403303b5, /* [05014] VS.UNIFORMS[5] := 2.797101 (u1.y) */ - 0x401c0ad3, /* [05018] VS.UNIFORMS[6] := 2.438161 (u1.z) */ - 0x3f1c0ad3, /* [0501C] VS.UNIFORMS[7] := 0.609540 (u1.w) */ - 0xbfc1f305, /* [05020] VS.UNIFORMS[8] := -1.515229 (u2.x) */ - 0x3fe49249, /* [05024] VS.UNIFORMS[9] := 1.785714 (u2.y) */ - 0xbfffffff, /* [05028] VS.UNIFORMS[10] := -2.000000 (u2.z) */ - 0xbeffffff, /* [0502C] VS.UNIFORMS[11] := -0.500000 (u2.w) */ - 0x00000000, /* [05030] VS.UNIFORMS[12] := 0.000000 (u3.x) */ - 0x00000000, /* [05034] VS.UNIFORMS[13] := 0.000000 (u3.y) */ - 0x40000000, /* [05038] VS.UNIFORMS[14] := 2.000000 (u3.z) */ - 0x41000000, /* [0503C] VS.UNIFORMS[15] := 8.000000 (u3.w) */ - 0x80001c00, /* PAD */ - 0x08031410, /* LOAD_STATE (1) Base: 0x05040 Size: 3 Fixp: 0 */ - 0x3f3244ed, /* [05040] VS.UNIFORMS[16] := 0.696364 (u4.x) */ - 0x3ebd3e53, /* [05044] VS.UNIFORMS[17] := 0.369616 (u4.y) */ - 0x3f1d7d34, /* [05048] VS.UNIFORMS[18] := 0.615192 (u4.z) */ - 0x08031414, /* LOAD_STATE (1) Base: 0x05050 Size: 3 Fixp: 0 */ - 0x3dfb782d, /* [05050] VS.UNIFORMS[20] := 0.122788 (u5.x) */ - 0x3f487f08, /* [05054] VS.UNIFORMS[21] := 0.783188 (u5.y) */ - 0xbf1c0ad3, /* [05058] VS.UNIFORMS[22] := -0.609540 (u5.z) */ - 0x08031418, /* LOAD_STATE (1) Base: 0x05060 Size: 3 Fixp: 0 */ - 0xbf3504f4, /* [05060] VS.UNIFORMS[24] := -0.707107 (u6.x) */ - 0x3f000000, /* [05064] VS.UNIFORMS[25] := 0.500000 (u6.y) */ - 0x3effffff, /* [05068] VS.UNIFORMS[26] := 0.500000 (u6.z) */ - 0x0810141c, /* LOAD_STATE (1) Base: 0x05070 Size: 16 Fixp: 0 */ - 0x3f3244ed, /* [05070] VS.UNIFORMS[28] := 0.696364 (u7.x) */ - 0x3ebd3e53, /* [05074] VS.UNIFORMS[29] := 0.369616 (u7.y) */ - 0x3f1d7d34, /* [05078] VS.UNIFORMS[30] := 0.615192 (u7.z) */ - 0x00000000, /* [0507C] VS.UNIFORMS[31] := 0.000000 (u7.w) */ - 0x3dfb782d, /* [05080] VS.UNIFORMS[32] := 0.122788 (u8.x) */ - 0x3f487f08, /* [05084] VS.UNIFORMS[33] := 0.783188 (u8.y) */ - 0xbf1c0ad3, /* [05088] VS.UNIFORMS[34] := -0.609540 (u8.z) */ - 0x00000000, /* [0508C] VS.UNIFORMS[35] := 0.000000 (u8.w) */ - 0xbf3504f4, /* [05090] VS.UNIFORMS[36] := -0.707107 (u9.x) */ - 0x3f000000, /* [05094] VS.UNIFORMS[37] := 0.500000 (u9.y) */ - 0x3effffff, /* [05098] VS.UNIFORMS[38] := 0.500000 (u9.z) */ - 0x00000000, /* [0509C] VS.UNIFORMS[39] := 0.000000 (u9.w) */ - 0x00000000, /* [050A0] VS.UNIFORMS[40] := 0.000000 (u10.x) */ - 0x00000000, /* [050A4] VS.UNIFORMS[41] := 0.000000 (u10.y) */ - 0xc1000000, /* [050A8] VS.UNIFORMS[42] := -8.000000 (u10.z) */ - 0x3f800000, /* [050AC] VS.UNIFORMS[43] := 1.000000 (u10.w) */ - 0x00000002, /* PAD */ - 0x08030180, /* LOAD_STATE (1) Base: 0x00600 Size: 3 Fixp: 0 */ - 0x0c003088, /* [00600] FE.VERTEX_ELEMENT_CONFIG[0] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x0,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x0c003188, /* [00604] FE.VERTEX_ELEMENT_CONFIG[1] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x1,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x0c003288, /* [00608] FE.VERTEX_ELEMENT_CONFIG[2] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x2,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x08010208, /* LOAD_STATE (1) Base: 0x00820 Size: 1 Fixp: 0 */ - 0x00020100, /* [00820] VS.INPUT[0] := I0=0,I1=1,I2=2,I3=0 */ - 0x080301a0, /* LOAD_STATE (1) Base: 0x00680 Size: 3 Fixp: 0 */ - 0x15000000, /* [00680] FE.VERTEX_STREAMS[0].BASE_ADDR := ADDR_A */ - 0x15000030, /* [00684] FE.VERTEX_STREAMS[1].BASE_ADDR := ADDR_R */ - 0x15000060, /* [00688] FE.VERTEX_STREAMS[2].BASE_ADDR := ADDR_S */ - 0x080301a8, /* LOAD_STATE (1) Base: 0x006A0 Size: 3 Fixp: 0 */ - 0x0000000c, /* [006A0] FE.VERTEX_STREAMS[0].CONTROL := 0xc */ - 0x0000000c, /* [006A4] FE.VERTEX_STREAMS[1].CONTROL := 0xc */ - 0x0000000c, /* [006A8] FE.VERTEX_STREAMS[2].CONTROL := 0xc */ - 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ - 0x00000000, /* [00A2C] PA.W_CLIP_LIMIT := 0x0 */ - 0x0c020280, /* LOAD_STATE (1) Base: 0x00A00 Size: 2 Fixp: 1 */ - 0x00c80000, /* [00A00] PA.VIEWPORT_SCALE_X = 200.000000 */ - 0x00780000, /* [00A04] PA.VIEWPORT_SCALE_Y = 120.000000 */ - 0x00000000, /* PAD */ - 0x0c020283, /* LOAD_STATE (1) Base: 0x00A0C Size: 2 Fixp: 1 */ - 0x00c80000, /* [00A0C] PA.VIEWPORT_OFFSET_X = 200.000000 */ - 0x00780000, /* [00A10] PA.VIEWPORT_OFFSET_Y = 120.000000 */ - 0x15000000, /* PAD */ - 0x080102a0, /* LOAD_STATE (1) Base: 0x00A80 Size: 1 Fixp: 0 */ - 0x37c81905, /* [00A80] PA.VIEWPORT_UNK00A80 := 0.000024 */ - 0x0c0102a1, /* LOAD_STATE (1) Base: 0x00A84 Size: 1 Fixp: 1 */ - 0x20000000, /* [00A84] PA.VIEWPORT_UNK00A84 = 8192.000000 */ - 0x080102a3, /* LOAD_STATE (1) Base: 0x00A8C Size: 1 Fixp: 0 */ - 0x38000000, /* [00A8C] PA.VIEWPORT_UNK00A8C := 0.000031 */ - 0x0c040300, /* LOAD_STATE (1) Base: 0x00C00 Size: 4 Fixp: 1 */ - 0x00000000, /* [00C00] SE.SCISSOR_LEFT = 0.000000 */ - 0x00000000, /* [00C04] SE.SCISSOR_TOP = 0.000000 */ - 0x01901000, /* [00C08] SE.SCISSOR_RIGHT = 400.062500 */ - 0x00f01000, /* [00C0C] SE.SCISSOR_BOTTOM = 240.062500 */ - 0x00000000, /* PAD */ - 0x0c010308, /* LOAD_STATE (1) Base: 0x00C20 Size: 1 Fixp: 1 */ - 0x0190ffff, /* [00C20] SE.CLIP_RIGHT = 400.999985 */ - 0x0c010309, /* LOAD_STATE (1) Base: 0x00C24 Size: 1 Fixp: 1 */ - 0x00f0ffff, /* [00C24] SE.CLIP_BOTTOM = 240.999985 */ - 0x08030508, /* LOAD_STATE (1) Base: 0x01420 Size: 3 Fixp: 0 */ - 0x00000000, /* [01420] PE.ALPHA_OP := ALPHA_TEST=0,ALPHA_FUNC=NEVER(residue:0xfffeff0c) */ - 0x00000000, /* [01424] PE.ALPHA_BLEND_COLOR := B=0x0,G=0x0,R=0x0,A=0x0 */ - 0x00100010, /* [01428] PE.ALPHA_CONFIG := BLEND_ENABLE_COLOR=0,SRC_FUNC_COLOR=ONE,DST_FUNC_COLOR=ZERO,EQ_COLOR=ADD,BLEND_SEPARATE_ALPHA=0,SRC_FUNC_ALPHA=ONE,DST_FUNC_ALPHA=ZERO,EQ_ALPHA=ADD */ - 0x08010528, /* LOAD_STATE (1) Base: 0x014A0 Size: 1 Fixp: 0 */ - 0x0000fdff, /* [014A0] PE.STENCIL_CONFIG_EXT := UNK16=0x0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000002, /* [0380C] GL.FLUSH_CACHE := DEPTH=0,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x0801050b, /* LOAD_STATE (1) Base: 0x0142C Size: 1 Fixp: 0 */ - 0x00110f06, /* [0142C] PE.COLOR_FORMAT := FORMAT=A8R8G8B8,COMPONENTS=R=1,G=1,B=1,A=1,OVERWRITE=1,SUPER_TILED=1(residue:0xffcce0e0) */ - 0x08010518, /* LOAD_STATE (1) Base: 0x01460 Size: 1 Fixp: 0 */ - 0x15900000, /* [01460] PE.PIPE[0].COLOR_ADDR := ADDR_G */ - 0x0801050c, /* LOAD_STATE (1) Base: 0x01430 Size: 1 Fixp: 0 */ - 0x15900000, /* [01430] PE.COLOR_ADDR := ADDR_G */ - 0x0801050d, /* LOAD_STATE (1) Base: 0x01434 Size: 1 Fixp: 0 */ - 0x00000700, /* [01434] PE.COLOR_STRIDE := 0x700 */ - 0x08040500, /* LOAD_STATE (1) Base: 0x01400 Size: 4 Fixp: 0 */ - 0x05010701, /* [01400] PE.DEPTH_CONFIG := DEPTH_MODE=Z,DEPTH_FORMAT=D16,DEPTH_FUNC=ALWAYS,WRITE_ENABLE=0,EARLY_Z=1,ONLY_DEPTH=0,SUPER_TILED=1(residue:0xf2ccc0c4) */ - 0x00000000, /* [01404] PE.DEPTH_NEAR := 0.000000 */ - 0x3f800000, /* [01408] PE.DEPTH_FAR := 1.000000 */ - 0x477fff00, /* [0140C] PE.DEPTH_NORMALIZE := 65535.000000 */ - 0x150ca000, /* PAD */ - 0x08010520, /* LOAD_STATE (1) Base: 0x01480 Size: 1 Fixp: 0 */ - 0x15985000, /* [01480] PE.PIPE[0].DEPTH_ADDR := ADDR_I */ - 0x08010504, /* LOAD_STATE (1) Base: 0x01410 Size: 1 Fixp: 0 */ - 0x15985000, /* [01410] PE.DEPTH_ADDR := ADDR_I */ - 0x08010505, /* LOAD_STATE (1) Base: 0x01414 Size: 1 Fixp: 0 */ - 0x00000380, /* [01414] PE.DEPTH_STRIDE := 0x380 */ - 0x08010515, /* LOAD_STATE (1) Base: 0x01454 Size: 1 Fixp: 0 */ - 0x00000000, /* [01454] PE.HDEPTH_CONTROL := FORMAT=DISABLED */ - 0x08010282, /* LOAD_STATE (1) Base: 0x00A08 Size: 1 Fixp: 0 */ - 0x3f800000, /* [00A08] PA.VIEWPORT_SCALE_Z := 1.000000 */ - 0x08010285, /* LOAD_STATE (1) Base: 0x00A14 Size: 1 Fixp: 0 */ - 0x00000000, /* [00A14] PA.VIEWPORT_OFFSET_Z := 0.000000 */ - 0x08010507, /* LOAD_STATE (1) Base: 0x0141C Size: 1 Fixp: 0 */ - 0x00000000, /* [0141C] PE.STENCIL_CONFIG := MODE=DISABLED,REF_FRONT=0x0,MASK_FRONT=0x0,WRITE_MASK=0x0(residue:0x0000000c) */ - 0x08010e06, /* LOAD_STATE (1) Base: 0x03818 Size: 1 Fixp: 0 */ - 0x00000000, /* [03818] GL.MULTI_SAMPLE_CONFIG := MSAA_SAMPLES=NONE,MSAA_ENABLES=0x0,UNK12=0x0,UNK16=0x0(residue:0xfff40e04) */ - 0x08010286, /* LOAD_STATE (1) Base: 0x00A18 Size: 1 Fixp: 0 */ - 0x3f000000, /* [00A18] PA.LINE_WIDTH := 0.500000 */ - 0x0803028d, /* LOAD_STATE (1) Base: 0x00A34 Size: 3 Fixp: 0 */ - 0x00412200, /* [00A34] PA.CONFIG := POINT_SIZE_ENABLE=0,POINT_SPRITE_ENABLE=0,CULL_FACE_MODE=CCW,FILL_MODE=SOLID,SHADE_MODEL=SMOOTH,UNK22=1(residue:0xff3888c3) */ - 0x3f000000, /* [00A38] PA.LINE_UNK00A38 := 0.500000 */ - 0x3f000000, /* [00A3C] PA.LINE_UNK00A3C := 0.500000 */ - 0x08010e02, /* LOAD_STATE (1) Base: 0x03808 Size: 1 Fixp: 0 */ - 0x00000701, /* [03808] GL.SEMAPHORE_TOKEN := FROM=FE,TO=PE */ - 0x48000000, /* STALL (9) */ - 0x00000701, /* */ - 0x08030202, /* LOAD_STATE (1) Base: 0x00808 Size: 3 Fixp: 0 */ - 0x00000103, /* [00808] VS.INPUT_COUNT := COUNT=3,UNK8=1 */ - 0x00000006, /* [0080C] VS.TEMP_REGISTER_CONTROL := NUM_TEMPS=6 */ - 0x00000004, /* [00810] VS.OUTPUT[0] := O0=4,O1=0,O2=0,O3=0 */ - 0x08010217, /* LOAD_STATE (1) Base: 0x0085C Size: 1 Fixp: 0 */ - 0x00150000, /* [0085C] VS.RANGE := LOW=0x0,HIGH=0x15 */ - 0x0801020e, /* LOAD_STATE (1) Base: 0x00838 Size: 1 Fixp: 0 */ - 0x00000000, /* [00838] VS.START_PC := 0x0 */ - 0x08010200, /* LOAD_STATE (1) Base: 0x00800 Size: 1 Fixp: 0 */ - 0x00000016, /* [00800] VS.END_PC := 0x16 */ - 0x0801142c, /* LOAD_STATE (1) Base: 0x050B0 Size: 1 Fixp: 0 */ - 0x3f800000, /* [050B0] VS.UNIFORMS[44] := 1.000000 (u11.x) */ - 0x0801141b, /* LOAD_STATE (1) Base: 0x0506C Size: 1 Fixp: 0 */ - 0x00000000, /* [0506C] VS.UNIFORMS[27] := 0.000000 (u6.w) */ - 0x08011417, /* LOAD_STATE (1) Base: 0x0505C Size: 1 Fixp: 0 */ - 0x41a00000, /* [0505C] VS.UNIFORMS[23] := 20.000000 (u5.w) */ - 0x08011413, /* LOAD_STATE (1) Base: 0x0504C Size: 1 Fixp: 0 */ - 0x40000000, /* [0504C] VS.UNIFORMS[19] := 2.000000 (u4.w) */ - 0x08583000, /* LOAD_STATE (1) Base: 0x0C000 Size: 88 Fixp: 0 */ - 0x01831009, /* [0C000] SH.UNK0C000[0] := 0x1831009 */ - 0x00000000, /* [0C004] SH.UNK0C000[1] := 0x0 */ - 0x00000000, /* [0C008] SH.UNK0C000[2] := 0x0 */ - 0x203fc048, /* [0C00C] SH.UNK0C000[3] := 0x203fc048 */ - 0x02031009, /* [0C010] SH.UNK0C000[4] := 0x2031009 */ - 0x00000000, /* [0C014] SH.UNK0C000[5] := 0x0 */ - 0x00000000, /* [0C018] SH.UNK0C000[6] := 0x0 */ - 0x203fc058, /* [0C01C] SH.UNK0C000[7] := 0x203fc058 */ - 0x07841003, /* [0C020] SH.UNK0C000[8] := 0x7841003 */ - 0x39000800, /* [0C024] SH.UNK0C000[9] := 0x39000800 */ - 0x00000050, /* [0C028] SH.UNK0C000[10] := 0x50 */ - 0x00000000, /* [0C02C] SH.UNK0C000[11] := 0x0 */ - 0x07841002, /* [0C030] SH.UNK0C000[12] := 0x7841002 */ - 0x39001800, /* [0C034] SH.UNK0C000[13] := 0x39001800 */ - 0x00aa0050, /* [0C038] SH.UNK0C000[14] := 0xaa0050 */ - 0x00390048, /* [0C03C] SH.UNK0C000[15] := 0x390048 */ - 0x07841002, /* [0C040] SH.UNK0C000[16] := 0x7841002 */ - 0x39002800, /* [0C044] SH.UNK0C000[17] := 0x39002800 */ - 0x01540050, /* [0C048] SH.UNK0C000[18] := 0x1540050 */ - 0x00390048, /* [0C04C] SH.UNK0C000[19] := 0x390048 */ - 0x07841002, /* [0C050] SH.UNK0C000[20] := 0x7841002 */ - 0x39003800, /* [0C054] SH.UNK0C000[21] := 0x39003800 */ - 0x01fe0050, /* [0C058] SH.UNK0C000[22] := 0x1fe0050 */ - 0x00390048, /* [0C05C] SH.UNK0C000[23] := 0x390048 */ - 0x03851003, /* [0C060] SH.UNK0C000[24] := 0x3851003 */ - 0x29004800, /* [0C064] SH.UNK0C000[25] := 0x29004800 */ - 0x000000d0, /* [0C068] SH.UNK0C000[26] := 0xd0 */ - 0x00000000, /* [0C06C] SH.UNK0C000[27] := 0x0 */ - 0x03851002, /* [0C070] SH.UNK0C000[28] := 0x3851002 */ - 0x29005800, /* [0C074] SH.UNK0C000[29] := 0x29005800 */ - 0x00aa00d0, /* [0C078] SH.UNK0C000[30] := 0xaa00d0 */ - 0x00290058, /* [0C07C] SH.UNK0C000[31] := 0x290058 */ - 0x03811002, /* [0C080] SH.UNK0C000[32] := 0x3811002 */ - 0x29006800, /* [0C084] SH.UNK0C000[33] := 0x29006800 */ - 0x015400d0, /* [0C088] SH.UNK0C000[34] := 0x15400d0 */ - 0x00290058, /* [0C08C] SH.UNK0C000[35] := 0x290058 */ - 0x07851003, /* [0C090] SH.UNK0C000[36] := 0x7851003 */ - 0x39007800, /* [0C094] SH.UNK0C000[37] := 0x39007800 */ - 0x00000050, /* [0C098] SH.UNK0C000[38] := 0x50 */ - 0x00000000, /* [0C09C] SH.UNK0C000[39] := 0x0 */ - 0x07851002, /* [0C0A0] SH.UNK0C000[40] := 0x7851002 */ - 0x39008800, /* [0C0A4] SH.UNK0C000[41] := 0x39008800 */ - 0x00aa0050, /* [0C0A8] SH.UNK0C000[42] := 0xaa0050 */ - 0x00390058, /* [0C0AC] SH.UNK0C000[43] := 0x390058 */ - 0x07851002, /* [0C0B0] SH.UNK0C000[44] := 0x7851002 */ - 0x39009800, /* [0C0B4] SH.UNK0C000[45] := 0x39009800 */ - 0x01540050, /* [0C0B8] SH.UNK0C000[46] := 0x1540050 */ - 0x00390058, /* [0C0BC] SH.UNK0C000[47] := 0x390058 */ - 0x07801002, /* [0C0C0] SH.UNK0C000[48] := 0x7801002 */ - 0x3900a800, /* [0C0C4] SH.UNK0C000[49] := 0x3900a800 */ - 0x01fe0050, /* [0C0C8] SH.UNK0C000[50] := 0x1fe0050 */ - 0x00390058, /* [0C0CC] SH.UNK0C000[51] := 0x390058 */ - 0x0401100c, /* [0C0D0] SH.UNK0C000[52] := 0x401100c */ - 0x00000000, /* [0C0D4] SH.UNK0C000[53] := 0x0 */ - 0x00000000, /* [0C0D8] SH.UNK0C000[54] := 0x0 */ - 0x003fc008, /* [0C0DC] SH.UNK0C000[55] := 0x3fc008 */ - 0x03801002, /* [0C0E0] SH.UNK0C000[56] := 0x3801002 */ - 0x69000800, /* [0C0E4] SH.UNK0C000[57] := 0x69000800 */ - 0x01fe00c0, /* [0C0E8] SH.UNK0C000[58] := 0x1fe00c0 */ - 0x00290038, /* [0C0EC] SH.UNK0C000[59] := 0x290038 */ - 0x03831005, /* [0C0F0] SH.UNK0C000[60] := 0x3831005 */ - 0x29000800, /* [0C0F4] SH.UNK0C000[61] := 0x29000800 */ - 0x01480040, /* [0C0F8] SH.UNK0C000[62] := 0x1480040 */ - 0x00000000, /* [0C0FC] SH.UNK0C000[63] := 0x0 */ - 0x0383100d, /* [0C100] SH.UNK0C000[64] := 0x383100d */ - 0x00000000, /* [0C104] SH.UNK0C000[65] := 0x0 */ - 0x00000000, /* [0C108] SH.UNK0C000[66] := 0x0 */ - 0x00000038, /* [0C10C] SH.UNK0C000[67] := 0x38 */ - 0x03801003, /* [0C110] SH.UNK0C000[68] := 0x3801003 */ - 0x29000800, /* [0C114] SH.UNK0C000[69] := 0x29000800 */ - 0x014801c0, /* [0C118] SH.UNK0C000[70] := 0x14801c0 */ - 0x00000000, /* [0C11C] SH.UNK0C000[71] := 0x0 */ - 0x00801005, /* [0C120] SH.UNK0C000[72] := 0x801005 */ - 0x29001800, /* [0C124] SH.UNK0C000[73] := 0x29001800 */ - 0x01480040, /* [0C128] SH.UNK0C000[74] := 0x1480040 */ - 0x00000000, /* [0C12C] SH.UNK0C000[75] := 0x0 */ - 0x0080108f, /* [0C130] SH.UNK0C000[76] := 0x80108f */ - 0x3fc06800, /* [0C134] SH.UNK0C000[77] := 0x3fc06800 */ - 0x00000050, /* [0C138] SH.UNK0C000[78] := 0x50 */ - 0x203fc068, /* [0C13C] SH.UNK0C000[79] := 0x203fc068 */ - 0x03801003, /* [0C140] SH.UNK0C000[80] := 0x3801003 */ - 0x00000800, /* [0C144] SH.UNK0C000[81] := 0x800 */ - 0x01480140, /* [0C148] SH.UNK0C000[82] := 0x1480140 */ - 0x00000000, /* [0C14C] SH.UNK0C000[83] := 0x0 */ - 0x04001009, /* [0C150] SH.UNK0C000[84] := 0x4001009 */ - 0x00000000, /* [0C154] SH.UNK0C000[85] := 0x0 */ - 0x00000000, /* [0C158] SH.UNK0C000[86] := 0x0 */ - 0x200000b8, /* [0C15C] SH.UNK0C000[87] := 0x200000b8 */ - 0x00000000, /* PAD */ - 0x08010380, /* LOAD_STATE (1) Base: 0x00E00 Size: 1 Fixp: 0 */ - 0x00000001, /* [00E00] RA.CONTROL := UNK0=1,LAST_VARYING_2X=0 */ - 0x08010401, /* LOAD_STATE (1) Base: 0x01004 Size: 1 Fixp: 0 */ - 0x00000001, /* [01004] PS.OUTPUT_REG := 0x1 */ - 0x08010290, /* LOAD_STATE (1) Base: 0x00A40 Size: 1 Fixp: 0 */ - 0x00000200, /* [00A40] PA.SHADER_ATTRIBUTES[0] := UNK0=0x0,UNK8=0x2 */ - 0x08010e08, /* LOAD_STATE (1) Base: 0x03820 Size: 1 Fixp: 0 */ - 0x00000004, /* [03820] GL.VARYING_NUM_COMPONENTS := VAR0=0x4,VAR1=0x0,VAR2=0x0,VAR3=0x0,VAR4=0x0,VAR5=0x0,VAR6=0x0,VAR7=0x0 */ - 0x08010e0d, /* LOAD_STATE (1) Base: 0x03834 Size: 1 Fixp: 0 */ - 0x00040000, /* [03834] GL.UNK03834 := 0x40000 */ - 0x08020e0a, /* LOAD_STATE (1) Base: 0x03828 Size: 2 Fixp: 0 */ - 0x00000055, /* [03828] GL.VARYING_COMPONENT_USE[0] := COMP0=USED,COMP1=USED,COMP2=USED,COMP3=USED,COMP4=UNUSED,COMP5=UNUSED,COMP6=UNUSED,COMP7=UNUSED,COMP8=UNUSED,COMP9=UNUSED,COMP10=UNUSED,COMP11=UNUSED,COMP12=UNUSED,COMP13=UNUSED,COMP14=UNUSED,COMP15=UNUSED */ - 0x00000000, /* [0382C] GL.VARYING_COMPONENT_USE[1] := COMP0=UNUSED,COMP1=UNUSED,COMP2=UNUSED,COMP3=UNUSED,COMP4=UNUSED,COMP5=UNUSED,COMP6=UNUSED,COMP7=UNUSED,COMP8=UNUSED,COMP9=UNUSED,COMP10=UNUSED,COMP11=UNUSED,COMP12=UNUSED,COMP13=UNUSED,COMP14=UNUSED,COMP15=UNUSED */ - 0x00000000, /* PAD */ - 0x08010e0e, /* LOAD_STATE (1) Base: 0x03838 Size: 1 Fixp: 0 */ - 0x00000000, /* [03838] GL.UNK03838 := 0x0 */ - 0x08010407, /* LOAD_STATE (1) Base: 0x0101C Size: 1 Fixp: 0 */ - 0x01000100, /* [0101C] PS.RANGE := LOW=0x100,HIGH=0x100 */ - 0x08010406, /* LOAD_STATE (1) Base: 0x01018 Size: 1 Fixp: 0 */ - 0x00000000, /* [01018] PS.START_PC := 0x0 */ - 0x08010400, /* LOAD_STATE (1) Base: 0x01000 Size: 1 Fixp: 0 */ - 0x00000001, /* [01000] PS.END_PC := 0x1 */ - 0x08043400, /* LOAD_STATE (1) Base: 0x0D000 Size: 4 Fixp: 0 */ - 0x00000000, /* [0D000] SH.UNK0C000[1024] := 0x0 */ - 0x00000000, /* [0D004] SH.UNK0C000[1025] := 0x0 */ - 0x00000000, /* [0D008] SH.UNK0C000[1026] := 0x0 */ - 0x00000000, /* [0D00C] SH.UNK0C000[1027] := 0x0 */ - 0x00000000, /* PAD */ - 0x08030402, /* LOAD_STATE (1) Base: 0x01008 Size: 3 Fixp: 0 */ - 0x00001f02, /* [01008] PS.INPUT_COUNT := COUNT=2,UNK8=31 */ - 0x00000002, /* [0100C] PS.TEMP_REGISTER_CONTROL := NUM_TEMPS=2 */ - 0x00000002, /* [01010] PS.CONTROL := BYPASS=0,UNK1=1 */ - 0x0801028c, /* LOAD_STATE (1) Base: 0x00A30 Size: 1 Fixp: 0 */ - 0x00000100, /* [00A30] PA.ATTRIBUTE_ELEMENT_COUNT := UNK0=0x0,COUNT=0x1 */ - 0x08010e07, /* LOAD_STATE (1) Base: 0x0381C Size: 1 Fixp: 0 */ - 0x00000004, /* [0381C] GL.VARYING_TOTAL_COMPONENTS := NUM=0x4 */ - 0x0801020c, /* LOAD_STATE (1) Base: 0x00830 Size: 1 Fixp: 0 */ - 0x0f3f0582, /* [00830] VS.LOAD_BALANCING := A=0x82,B=0x5,C=0x3f,D=0xf */ - 0x08010201, /* LOAD_STATE (1) Base: 0x00804 Size: 1 Fixp: 0 */ - 0x00000002, /* [00804] VS.OUTPUT_COUNT := 2 */ - 0x08010e02, /* LOAD_STATE (1) Base: 0x03808 Size: 1 Fixp: 0 */ - 0x00000705, /* [03808] GL.SEMAPHORE_TOKEN := FROM=RA,TO=PE */ - 0x08010f00, /* LOAD_STATE (1) Base: 0x03C00 Size: 1 Fixp: 0 */ - 0x00000705, /* [03C00] GL.STALL_TOKEN := FROM=RA,TO=PE,FLIP0=0,FLIP1=0 */ - 0x28000000, /* DRAW_PRIMITIVES (5) */ - 0x00000005, /* */ - 0x00000000, /* */ - 0x00000002, /* */ - 0x08030180, /* LOAD_STATE (1) Base: 0x00600 Size: 3 Fixp: 0 */ - 0x0c003088, /* [00600] FE.VERTEX_ELEMENT_CONFIG[0] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x0,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x0c003188, /* [00604] FE.VERTEX_ELEMENT_CONFIG[1] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x1,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x0c003288, /* [00608] FE.VERTEX_ELEMENT_CONFIG[2] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x2,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x08010208, /* LOAD_STATE (1) Base: 0x00820 Size: 1 Fixp: 0 */ - 0x00020100, /* [00820] VS.INPUT[0] := I0=0,I1=1,I2=2,I3=0 */ - 0x080301a0, /* LOAD_STATE (1) Base: 0x00680 Size: 3 Fixp: 0 */ - 0x15000060, /* [00680] FE.VERTEX_STREAMS[0].BASE_ADDR := ADDR_S */ - 0x15000090, /* [00684] FE.VERTEX_STREAMS[1].BASE_ADDR := ADDR_T */ - 0x150000c0, /* [00688] FE.VERTEX_STREAMS[2].BASE_ADDR := ADDR_U */ - 0x080301a8, /* LOAD_STATE (1) Base: 0x006A0 Size: 3 Fixp: 0 */ - 0x0000000c, /* [006A0] FE.VERTEX_STREAMS[0].CONTROL := 0xc */ - 0x0000000c, /* [006A4] FE.VERTEX_STREAMS[1].CONTROL := 0xc */ - 0x0000000c, /* [006A8] FE.VERTEX_STREAMS[2].CONTROL := 0xc */ - 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ - 0x00000000, /* [00A2C] PA.W_CLIP_LIMIT := 0x0 */ - 0x0801028d, /* LOAD_STATE (1) Base: 0x00A34 Size: 1 Fixp: 0 */ - 0x00412200, /* [00A34] PA.CONFIG := POINT_SIZE_ENABLE=0,POINT_SPRITE_ENABLE=0,CULL_FACE_MODE=CCW,FILL_MODE=SOLID,SHADE_MODEL=SMOOTH,UNK22=1(residue:0xff3888c3) */ - 0x28000000, /* DRAW_PRIMITIVES (5) */ - 0x00000005, /* */ - 0x00000004, /* */ - 0x00000002, /* */ - 0x08030180, /* LOAD_STATE (1) Base: 0x00600 Size: 3 Fixp: 0 */ - 0x0c003088, /* [00600] FE.VERTEX_ELEMENT_CONFIG[0] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x0,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x0c003188, /* [00604] FE.VERTEX_ELEMENT_CONFIG[1] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x1,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x0c003288, /* [00608] FE.VERTEX_ELEMENT_CONFIG[2] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x2,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x08010208, /* LOAD_STATE (1) Base: 0x00820 Size: 1 Fixp: 0 */ - 0x00020100, /* [00820] VS.INPUT[0] := I0=0,I1=1,I2=2,I3=0 */ - 0x080301a0, /* LOAD_STATE (1) Base: 0x00680 Size: 3 Fixp: 0 */ - 0x150000c0, /* [00680] FE.VERTEX_STREAMS[0].BASE_ADDR := ADDR_U */ - 0x150000f0, /* [00684] FE.VERTEX_STREAMS[1].BASE_ADDR := ADDR_V */ - 0x15000120, /* [00688] FE.VERTEX_STREAMS[2].BASE_ADDR := ADDR_W */ - 0x080301a8, /* LOAD_STATE (1) Base: 0x006A0 Size: 3 Fixp: 0 */ - 0x0000000c, /* [006A0] FE.VERTEX_STREAMS[0].CONTROL := 0xc */ - 0x0000000c, /* [006A4] FE.VERTEX_STREAMS[1].CONTROL := 0xc */ - 0x0000000c, /* [006A8] FE.VERTEX_STREAMS[2].CONTROL := 0xc */ - 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ - 0x00000000, /* [00A2C] PA.W_CLIP_LIMIT := 0x0 */ - 0x0801028d, /* LOAD_STATE (1) Base: 0x00A34 Size: 1 Fixp: 0 */ - 0x00412200, /* [00A34] PA.CONFIG := POINT_SIZE_ENABLE=0,POINT_SPRITE_ENABLE=0,CULL_FACE_MODE=CCW,FILL_MODE=SOLID,SHADE_MODEL=SMOOTH,UNK22=1(residue:0xff3888c3) */ - 0x28000000, /* DRAW_PRIMITIVES (5) */ - 0x00000005, /* */ - 0x00000008, /* */ - 0x00000002, /* */ - 0x08030180, /* LOAD_STATE (1) Base: 0x00600 Size: 3 Fixp: 0 */ - 0x0c003088, /* [00600] FE.VERTEX_ELEMENT_CONFIG[0] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x0,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x0c003188, /* [00604] FE.VERTEX_ELEMENT_CONFIG[1] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x1,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x0c003288, /* [00608] FE.VERTEX_ELEMENT_CONFIG[2] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x2,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x08010208, /* LOAD_STATE (1) Base: 0x00820 Size: 1 Fixp: 0 */ - 0x00020100, /* [00820] VS.INPUT[0] := I0=0,I1=1,I2=2,I3=0 */ - 0x080301a0, /* LOAD_STATE (1) Base: 0x00680 Size: 3 Fixp: 0 */ - 0x15000120, /* [00680] FE.VERTEX_STREAMS[0].BASE_ADDR := ADDR_W */ - 0x15000150, /* [00684] FE.VERTEX_STREAMS[1].BASE_ADDR := ADDR_X */ - 0x15000180, /* [00688] FE.VERTEX_STREAMS[2].BASE_ADDR := ADDR_Y */ - 0x080301a8, /* LOAD_STATE (1) Base: 0x006A0 Size: 3 Fixp: 0 */ - 0x0000000c, /* [006A0] FE.VERTEX_STREAMS[0].CONTROL := 0xc */ - 0x0000000c, /* [006A4] FE.VERTEX_STREAMS[1].CONTROL := 0xc */ - 0x0000000c, /* [006A8] FE.VERTEX_STREAMS[2].CONTROL := 0xc */ - 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ - 0x00000000, /* [00A2C] PA.W_CLIP_LIMIT := 0x0 */ - 0x0801028d, /* LOAD_STATE (1) Base: 0x00A34 Size: 1 Fixp: 0 */ - 0x00412200, /* [00A34] PA.CONFIG := POINT_SIZE_ENABLE=0,POINT_SPRITE_ENABLE=0,CULL_FACE_MODE=CCW,FILL_MODE=SOLID,SHADE_MODEL=SMOOTH,UNK22=1(residue:0xff3888c3) */ - 0x28000000, /* DRAW_PRIMITIVES (5) */ - 0x00000005, /* */ - 0x0000000c, /* */ - 0x00000002, /* */ - 0x08030180, /* LOAD_STATE (1) Base: 0x00600 Size: 3 Fixp: 0 */ - 0x0c003088, /* [00600] FE.VERTEX_ELEMENT_CONFIG[0] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x0,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x0c003188, /* [00604] FE.VERTEX_ELEMENT_CONFIG[1] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x1,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x0c003288, /* [00608] FE.VERTEX_ELEMENT_CONFIG[2] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x2,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x08010208, /* LOAD_STATE (1) Base: 0x00820 Size: 1 Fixp: 0 */ - 0x00020100, /* [00820] VS.INPUT[0] := I0=0,I1=1,I2=2,I3=0 */ - 0x080301a0, /* LOAD_STATE (1) Base: 0x00680 Size: 3 Fixp: 0 */ - 0x15000180, /* [00680] FE.VERTEX_STREAMS[0].BASE_ADDR := ADDR_Y */ - 0x150001b0, /* [00684] FE.VERTEX_STREAMS[1].BASE_ADDR := ADDR_Z */ - 0x150001e0, /* [00688] FE.VERTEX_STREAMS[2].BASE_ADDR := ADDR_26 */ - 0x080301a8, /* LOAD_STATE (1) Base: 0x006A0 Size: 3 Fixp: 0 */ - 0x0000000c, /* [006A0] FE.VERTEX_STREAMS[0].CONTROL := 0xc */ - 0x0000000c, /* [006A4] FE.VERTEX_STREAMS[1].CONTROL := 0xc */ - 0x0000000c, /* [006A8] FE.VERTEX_STREAMS[2].CONTROL := 0xc */ - 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ - 0x00000000, /* [00A2C] PA.W_CLIP_LIMIT := 0x0 */ - 0x0801028d, /* LOAD_STATE (1) Base: 0x00A34 Size: 1 Fixp: 0 */ - 0x00412200, /* [00A34] PA.CONFIG := POINT_SIZE_ENABLE=0,POINT_SPRITE_ENABLE=0,CULL_FACE_MODE=CCW,FILL_MODE=SOLID,SHADE_MODEL=SMOOTH,UNK22=1(residue:0xff3888c3) */ - 0x28000000, /* DRAW_PRIMITIVES (5) */ - 0x00000005, /* */ - 0x00000010, /* */ - 0x00000002, /* */ - 0x08030180, /* LOAD_STATE (1) Base: 0x00600 Size: 3 Fixp: 0 */ - 0x0c003088, /* [00600] FE.VERTEX_ELEMENT_CONFIG[0] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x0,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x0c003188, /* [00604] FE.VERTEX_ELEMENT_CONFIG[1] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x1,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x0c003288, /* [00608] FE.VERTEX_ELEMENT_CONFIG[2] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x2,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ - 0x08010208, /* LOAD_STATE (1) Base: 0x00820 Size: 1 Fixp: 0 */ - 0x00020100, /* [00820] VS.INPUT[0] := I0=0,I1=1,I2=2,I3=0 */ - 0x080301a0, /* LOAD_STATE (1) Base: 0x00680 Size: 3 Fixp: 0 */ - 0x150001e0, /* [00680] FE.VERTEX_STREAMS[0].BASE_ADDR := ADDR_26 */ - 0x15000210, /* [00684] FE.VERTEX_STREAMS[1].BASE_ADDR := ADDR_27 */ - 0x15000240, /* [00688] FE.VERTEX_STREAMS[2].BASE_ADDR := ADDR_28 */ - 0x080301a8, /* LOAD_STATE (1) Base: 0x006A0 Size: 3 Fixp: 0 */ - 0x0000000c, /* [006A0] FE.VERTEX_STREAMS[0].CONTROL := 0xc */ - 0x0000000c, /* [006A4] FE.VERTEX_STREAMS[1].CONTROL := 0xc */ - 0x0000000c, /* [006A8] FE.VERTEX_STREAMS[2].CONTROL := 0xc */ - 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ - 0x00000000, /* [00A2C] PA.W_CLIP_LIMIT := 0x0 */ - 0x0801028d, /* LOAD_STATE (1) Base: 0x00A34 Size: 1 Fixp: 0 */ - 0x00412200, /* [00A34] PA.CONFIG := POINT_SIZE_ENABLE=0,POINT_SPRITE_ENABLE=0,CULL_FACE_MODE=CCW,FILL_MODE=SOLID,SHADE_MODEL=SMOOTH,UNK22=1(residue:0xff3888c3) */ - 0x28000000, /* DRAW_PRIMITIVES (5) */ - 0x00000005, /* */ - 0x00000014, /* */ - 0x00000002, /* */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003 /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ -}; - -uint32_t cmdbuf2[] = { /* seq 89 */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ - 0x00004686, /* [01604] RS.CONFIG := SOURCE_FORMAT=A8R8G8B8,DOWNSAMPLE_X=0,DOWNSAMPLE_Y=0,SOURCE_TILED=1,DEST_FORMAT=A8R8G8B8,DEST_TILED=1,SWAP_RB=0,FLIP=0 */ - 0x08010583, /* LOAD_STATE (1) Base: 0x0160C Size: 1 Fixp: 0 */ - 0x80001c00, /* [0160C] RS.SOURCE_STRIDE := STRIDE=0x1c00,MULTI=0,TILING=1 */ - 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ - 0x80001c00, /* [01614] RS.DEST_STRIDE := STRIDE=0x1c00,MULTI=0,TILING=1 */ - 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ - 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ - 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ - 0x00000000, /* PAD */ - 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ - 0x00000000, /* [0163C] RS.CLEAR_CONTROL := BITS=0x0,MODE=DISABLED */ - 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ - 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ - 0x08010582, /* LOAD_STATE (1) Base: 0x01608 Size: 1 Fixp: 0 */ - 0x15900000, /* [01608] RS.SOURCE_ADDR := ADDR_G */ - 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ - 0x15900000, /* [01610] RS.DEST_ADDR := ADDR_G */ - 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ - 0x010001c0, /* [01620] RS.WINDOW_SIZE := HEIGHT=256,WIDTH=448 */ - 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ - 0xbadabeeb /* [01600] RS.KICKER := 0xbadabeeb */ -}; - -uint32_t cmdbuf3[] = { /* seq 91 */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x00000000, /* PAD */ - 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ - 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000002, /* [0380C] GL.FLUSH_CACHE := DEPTH=0,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ - 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ - 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ - 0x00000049, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=0,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=0,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ - 0x20000686, /* [01604] RS.CONFIG := SOURCE_FORMAT=A8R8G8B8,DOWNSAMPLE_X=0,DOWNSAMPLE_Y=0,SOURCE_TILED=1,DEST_FORMAT=A8R8G8B8,DEST_TILED=0,SWAP_RB=1,FLIP=0 */ - 0x08010583, /* LOAD_STATE (1) Base: 0x0160C Size: 1 Fixp: 0 */ - 0x80001c00, /* [0160C] RS.SOURCE_STRIDE := STRIDE=0x1c00,MULTI=0,TILING=1 */ - 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ - 0x00000700, /* [01614] RS.DEST_STRIDE := STRIDE=0x700,MULTI=0,TILING=0 */ - 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ - 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ - 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ - 0x00000000, /* PAD */ - 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ - 0x00000000, /* [0163C] RS.CLEAR_CONTROL := BITS=0x0,MODE=DISABLED */ - 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ - 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ - 0x08010582, /* LOAD_STATE (1) Base: 0x01608 Size: 1 Fixp: 0 */ - 0x15900000, /* [01608] RS.SOURCE_ADDR := ADDR_G */ - 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ - 0x15a27c00, /* [01610] RS.DEST_ADDR := ADDR_L */ - 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ - 0x010001c0, /* [01620] RS.WINDOW_SIZE := HEIGHT=256,WIDTH=448 */ - 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ - 0xbadabeeb /* [01600] RS.KICKER := 0xbadabeeb */ -}; - -uint32_t cmdbuf4[] = { /* seq 101 */ - 0x18000000, /* NOP (make space for PIPE switch) */ - 0x00000000, - 0x18000000, - 0x00000000, - 0x18000000, - 0x00000000, - 0x18000000, - 0x00000000, - - /* copy pixels from render target to output bitmap */ - 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ - 0x00000003, /* GLOBAL.FLUSH_CACHE := DEPTH=1,COLOR=1,3D_TEXTURE=0,2D=0,UNK4=0,SHADER_L1=0,SHADER_L2=0 */ - 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ - 0x00000606, /* RS.CONFIG := SOURCE_FORMAT=A8R8G8B8,UNK7=1,DEST_FORMAT=A8R8G8B8,UNK14=0,SWAP_RB=0 */ - 0x08010583, /* LOAD_STATE (1) Base: 0x0160C Size: 1 Fixp: 0 */ - 0x00000700, /* RS.SOURCE_STRIDE := 0x00000700 */ - 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ - 0x00000640, /* RS.DEST_STRIDE := 0x640 */ - 0x0801058c, /* LOAD_STATE (1) Base: 0x01630 Size: 1 Fixp: 0 */ - 0xffffffff, /* RS.DITHER[0] := 0xffffffff */ - 0x0801058d, /* LOAD_STATE (1) Base: 0x01634 Size: 1 Fixp: 0 */ - 0xffffffff, /* RS.DITHER[1] := 0xffffffff */ - 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ - 0x00000000, /* RS.CLEAR_CONTROL := BITS=0x0,MODE=0x0 */ - 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ - 0x00000000, /* RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ - 0x08010582, /* LOAD_STATE (1) Base: 0x01608 Size: 1 Fixp: 0 */ - 0x7f2c8700, /* RS.SOURCE_ADDR := *rt_physical */ - 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ - 0x7f338700, /* RS.DEST_ADDR := *bmp_physical */ - 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ - 0x00f00190, /* RS.WINDOW_SIZE := HEIGHT=240,WIDTH=400 */ - 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ - 0xbeebbeeb /* RS.KICKER := 0xbeebbeeb */ -}; \ No newline at end of file diff --git a/src/replay/cube_cmd_gc880.h b/src/replay/cube_cmd_gc880.h new file mode 100644 index 0000000..23e887b --- /dev/null +++ b/src/replay/cube_cmd_gc880.h @@ -0,0 +1,650 @@ + +uint32_t cmdbuf1[] = { /* seq 85 */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x08010e05, /* LOAD_STATE (1) Base: 0x03814 Size: 1 Fixp: 0 */ + 0x00000001, /* [03814] GL.VERTEX_ELEMENT_CONFIG := 0x1 */ + 0x08010380, /* LOAD_STATE (1) Base: 0x00E00 Size: 1 Fixp: 0 */ + 0x00000001, /* [00E00] RA.CONTROL := UNK0=1,LAST_VARYING_2X=0 */ + 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ + 0x34000001, /* [00A2C] PA.W_CLIP_LIMIT := 0x34000001 */ + 0x0801028a, /* LOAD_STATE (1) Base: 0x00A28 Size: 1 Fixp: 0 */ + 0x00000011, /* [00A28] PA.SYSTEM_MODE := UNK0=1,UNK4=1 */ + 0x08010e13, /* LOAD_STATE (1) Base: 0x0384C Size: 1 Fixp: 0 */ + 0x00000000, /* [0384C] GL.API_MODE := OPENGL */ + 0x08010306, /* LOAD_STATE (1) Base: 0x00C18 Size: 1 Fixp: 0 */ + 0x00000000, /* [00C18] SE.CONFIG := LAST_PIXEL_ENABLE=0 */ + 0x08010304, /* LOAD_STATE (1) Base: 0x00C10 Size: 1 Fixp: 0 */ + 0x00000000, /* [00C10] SE.DEPTH_SCALE := 0.000000 */ + 0x08010305, /* LOAD_STATE (1) Base: 0x00C14 Size: 1 Fixp: 0 */ + 0x00000000, /* [00C14] SE.DEPTH_BIAS := 0.000000 */ + 0x08010306, /* LOAD_STATE (1) Base: 0x00C18 Size: 1 Fixp: 0 */ + 0x00000000, /* [00C18] SE.CONFIG := LAST_PIXEL_ENABLE=0 */ + 0x08010304, /* LOAD_STATE (1) Base: 0x00C10 Size: 1 Fixp: 0 */ + 0x00000000, /* [00C10] SE.DEPTH_SCALE := 0.000000 */ + 0x08010305, /* LOAD_STATE (1) Base: 0x00C14 Size: 1 Fixp: 0 */ + 0x00000000, /* [00C14] SE.DEPTH_BIAS := 0.000000 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000002, /* [0380C] GL.FLUSH_CACHE := DEPTH=0,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ + 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ + 0x0801059d, /* LOAD_STATE (1) Base: 0x01674 Size: 1 Fixp: 0 */ + 0x00001cc0, /* [01674] TS.DEPTH_AUTO_DISABLE_COUNT := 0x1cc0 */ + 0x08030596, /* LOAD_STATE (1) Base: 0x01658 Size: 3 Fixp: 0 */ + 0x15973000, /* [01658] TS.COLOR_STATUS_BASE := ADDR_H */ + 0x15900000, /* [0165C] TS.COLOR_SURFACE_BASE := ADDR_G */ + 0x00000000, /* [01660] TS.COLOR_CLEAR_VALUE := 0x0 */ + 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ + 0x00000022, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=0,COLOR_FAST_CLEAR=1,DEPTH_16BPP=0,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=0,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000001, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=0,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ + 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ + 0x08030599, /* LOAD_STATE (1) Base: 0x01664 Size: 3 Fixp: 0 */ + 0x15973800, /* [01664] TS.DEPTH_STATUS_BASE := ADDR_J */ + 0x15985000, /* [01668] TS.DEPTH_SURFACE_BASE := ADDR_I */ + 0xffffffff, /* [0166C] TS.DEPTH_CLEAR_VALUE := 0xffffffff */ + 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ + 0x0000006b, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=1,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ + 0x08010304, /* LOAD_STATE (1) Base: 0x00C10 Size: 1 Fixp: 0 */ + 0x00000000, /* [00C10] SE.DEPTH_SCALE := 0.000000 */ + 0x08010305, /* LOAD_STATE (1) Base: 0x00C14 Size: 1 Fixp: 0 */ + 0x00000000, /* [00C14] SE.DEPTH_BIAS := 0.000000 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ + 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ + 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ + 0x08010e02, /* LOAD_STATE (1) Base: 0x03808 Size: 1 Fixp: 0 */ + 0x00000705, /* [03808] GL.SEMAPHORE_TOKEN := FROM=RA,TO=PE */ + 0x08010f00, /* LOAD_STATE (1) Base: 0x03C00 Size: 1 Fixp: 0 */ + 0x00000705, /* [03C00] GL.STALL_TOKEN := FROM=RA,TO=PE,FLIP0=0,FLIP1=0 */ + 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ + 0x00000606, /* [01604] RS.CONFIG := SOURCE_FORMAT=A8R8G8B8,DOWNSAMPLE_X=0,DOWNSAMPLE_Y=0,SOURCE_TILED=0,DEST_FORMAT=A8R8G8B8,DEST_TILED=0,SWAP_RB=0,FLIP=0 */ + 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ + 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ + 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ + 0x00000000, /* PAD */ + 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ + 0x15973000, /* [01610] RS.DEST_ADDR := ADDR_H */ + 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ + 0x00000200, /* [01614] RS.DEST_STRIDE := STRIDE=0x200,MULTI=0,TILING=0 */ + 0x08010590, /* LOAD_STATE (1) Base: 0x01640 Size: 1 Fixp: 0 */ + 0x55555555, /* [01640] RS.FILL_VALUE[0] := 0x55555555 */ + 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ + 0x0001ffff, /* [0163C] RS.CLEAR_CONTROL := BITS=0xffff,MODE=ENABLED1 */ + 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ + 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ + 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ + 0x00040080, /* [01620] RS.WINDOW_SIZE := HEIGHT=4,WIDTH=128 */ + 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ + 0xbadabeeb, /* [01600] RS.KICKER := 0xbadabeeb */ + 0x08010598, /* LOAD_STATE (1) Base: 0x01660 Size: 1 Fixp: 0 */ + 0xff7f7f7f, /* [01660] TS.COLOR_CLEAR_VALUE := 0xff7f7f7f */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000002, /* [0380C] GL.FLUSH_CACHE := DEPTH=0,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ + 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ + 0x0801059d, /* LOAD_STATE (1) Base: 0x01674 Size: 1 Fixp: 0 */ + 0x00001cc0, /* [01674] TS.DEPTH_AUTO_DISABLE_COUNT := 0x1cc0 */ + 0x08030596, /* LOAD_STATE (1) Base: 0x01658 Size: 3 Fixp: 0 */ + 0x15973000, /* [01658] TS.COLOR_STATUS_BASE := ADDR_H */ + 0x15900000, /* [0165C] TS.COLOR_SURFACE_BASE := ADDR_G */ + 0xff7f7f7f, /* [01660] TS.COLOR_CLEAR_VALUE := 0xff7f7f7f */ + 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ + 0x0000006b, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=1,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=1,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ + 0x08101400, /* LOAD_STATE (1) Base: 0x05000 Size: 16 Fixp: 0 */ + 0x3fbf00b4, /* [05000] VS.UNIFORMS[0] := 1.492209 (u0.x) */ + 0x3fa8f7a5, /* [05004] VS.UNIFORMS[1] := 1.320058 (u0.y) */ + 0xc01d7d34, /* [05008] VS.UNIFORMS[2] := -2.460767 (u0.z) */ + 0xbf1d7d34, /* [0500C] VS.UNIFORMS[3] := -0.615192 (u0.w) */ + 0x3e86b73c, /* [05010] VS.UNIFORMS[4] := 0.263117 (u1.x) */ + 0x403303b5, /* [05014] VS.UNIFORMS[5] := 2.797101 (u1.y) */ + 0x401c0ad3, /* [05018] VS.UNIFORMS[6] := 2.438161 (u1.z) */ + 0x3f1c0ad3, /* [0501C] VS.UNIFORMS[7] := 0.609540 (u1.w) */ + 0xbfc1f305, /* [05020] VS.UNIFORMS[8] := -1.515229 (u2.x) */ + 0x3fe49249, /* [05024] VS.UNIFORMS[9] := 1.785714 (u2.y) */ + 0xbfffffff, /* [05028] VS.UNIFORMS[10] := -2.000000 (u2.z) */ + 0xbeffffff, /* [0502C] VS.UNIFORMS[11] := -0.500000 (u2.w) */ + 0x00000000, /* [05030] VS.UNIFORMS[12] := 0.000000 (u3.x) */ + 0x00000000, /* [05034] VS.UNIFORMS[13] := 0.000000 (u3.y) */ + 0x40000000, /* [05038] VS.UNIFORMS[14] := 2.000000 (u3.z) */ + 0x41000000, /* [0503C] VS.UNIFORMS[15] := 8.000000 (u3.w) */ + 0x80001c00, /* PAD */ + 0x08031410, /* LOAD_STATE (1) Base: 0x05040 Size: 3 Fixp: 0 */ + 0x3f3244ed, /* [05040] VS.UNIFORMS[16] := 0.696364 (u4.x) */ + 0x3ebd3e53, /* [05044] VS.UNIFORMS[17] := 0.369616 (u4.y) */ + 0x3f1d7d34, /* [05048] VS.UNIFORMS[18] := 0.615192 (u4.z) */ + 0x08031414, /* LOAD_STATE (1) Base: 0x05050 Size: 3 Fixp: 0 */ + 0x3dfb782d, /* [05050] VS.UNIFORMS[20] := 0.122788 (u5.x) */ + 0x3f487f08, /* [05054] VS.UNIFORMS[21] := 0.783188 (u5.y) */ + 0xbf1c0ad3, /* [05058] VS.UNIFORMS[22] := -0.609540 (u5.z) */ + 0x08031418, /* LOAD_STATE (1) Base: 0x05060 Size: 3 Fixp: 0 */ + 0xbf3504f4, /* [05060] VS.UNIFORMS[24] := -0.707107 (u6.x) */ + 0x3f000000, /* [05064] VS.UNIFORMS[25] := 0.500000 (u6.y) */ + 0x3effffff, /* [05068] VS.UNIFORMS[26] := 0.500000 (u6.z) */ + 0x0810141c, /* LOAD_STATE (1) Base: 0x05070 Size: 16 Fixp: 0 */ + 0x3f3244ed, /* [05070] VS.UNIFORMS[28] := 0.696364 (u7.x) */ + 0x3ebd3e53, /* [05074] VS.UNIFORMS[29] := 0.369616 (u7.y) */ + 0x3f1d7d34, /* [05078] VS.UNIFORMS[30] := 0.615192 (u7.z) */ + 0x00000000, /* [0507C] VS.UNIFORMS[31] := 0.000000 (u7.w) */ + 0x3dfb782d, /* [05080] VS.UNIFORMS[32] := 0.122788 (u8.x) */ + 0x3f487f08, /* [05084] VS.UNIFORMS[33] := 0.783188 (u8.y) */ + 0xbf1c0ad3, /* [05088] VS.UNIFORMS[34] := -0.609540 (u8.z) */ + 0x00000000, /* [0508C] VS.UNIFORMS[35] := 0.000000 (u8.w) */ + 0xbf3504f4, /* [05090] VS.UNIFORMS[36] := -0.707107 (u9.x) */ + 0x3f000000, /* [05094] VS.UNIFORMS[37] := 0.500000 (u9.y) */ + 0x3effffff, /* [05098] VS.UNIFORMS[38] := 0.500000 (u9.z) */ + 0x00000000, /* [0509C] VS.UNIFORMS[39] := 0.000000 (u9.w) */ + 0x00000000, /* [050A0] VS.UNIFORMS[40] := 0.000000 (u10.x) */ + 0x00000000, /* [050A4] VS.UNIFORMS[41] := 0.000000 (u10.y) */ + 0xc1000000, /* [050A8] VS.UNIFORMS[42] := -8.000000 (u10.z) */ + 0x3f800000, /* [050AC] VS.UNIFORMS[43] := 1.000000 (u10.w) */ + 0x00000002, /* PAD */ + 0x08030180, /* LOAD_STATE (1) Base: 0x00600 Size: 3 Fixp: 0 */ + 0x0c003088, /* [00600] FE.VERTEX_ELEMENT_CONFIG[0] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x0,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x0c003188, /* [00604] FE.VERTEX_ELEMENT_CONFIG[1] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x1,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x0c003288, /* [00608] FE.VERTEX_ELEMENT_CONFIG[2] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x2,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x08010208, /* LOAD_STATE (1) Base: 0x00820 Size: 1 Fixp: 0 */ + 0x00020100, /* [00820] VS.INPUT[0] := I0=0,I1=1,I2=2,I3=0 */ + 0x080301a0, /* LOAD_STATE (1) Base: 0x00680 Size: 3 Fixp: 0 */ + 0x15000000, /* [00680] FE.VERTEX_STREAMS[0].BASE_ADDR := ADDR_A */ + 0x15000030, /* [00684] FE.VERTEX_STREAMS[1].BASE_ADDR := ADDR_R */ + 0x15000060, /* [00688] FE.VERTEX_STREAMS[2].BASE_ADDR := ADDR_S */ + 0x080301a8, /* LOAD_STATE (1) Base: 0x006A0 Size: 3 Fixp: 0 */ + 0x0000000c, /* [006A0] FE.VERTEX_STREAMS[0].CONTROL := 0xc */ + 0x0000000c, /* [006A4] FE.VERTEX_STREAMS[1].CONTROL := 0xc */ + 0x0000000c, /* [006A8] FE.VERTEX_STREAMS[2].CONTROL := 0xc */ + 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ + 0x00000000, /* [00A2C] PA.W_CLIP_LIMIT := 0x0 */ + 0x0c020280, /* LOAD_STATE (1) Base: 0x00A00 Size: 2 Fixp: 1 */ + 0x00c80000, /* [00A00] PA.VIEWPORT_SCALE_X = 200.000000 */ + 0x00780000, /* [00A04] PA.VIEWPORT_SCALE_Y = 120.000000 */ + 0x00000000, /* PAD */ + 0x0c020283, /* LOAD_STATE (1) Base: 0x00A0C Size: 2 Fixp: 1 */ + 0x00c80000, /* [00A0C] PA.VIEWPORT_OFFSET_X = 200.000000 */ + 0x00780000, /* [00A10] PA.VIEWPORT_OFFSET_Y = 120.000000 */ + 0x15000000, /* PAD */ + 0x080102a0, /* LOAD_STATE (1) Base: 0x00A80 Size: 1 Fixp: 0 */ + 0x37c81905, /* [00A80] PA.VIEWPORT_UNK00A80 := 0.000024 */ + 0x0c0102a1, /* LOAD_STATE (1) Base: 0x00A84 Size: 1 Fixp: 1 */ + 0x20000000, /* [00A84] PA.VIEWPORT_UNK00A84 = 8192.000000 */ + 0x080102a3, /* LOAD_STATE (1) Base: 0x00A8C Size: 1 Fixp: 0 */ + 0x38000000, /* [00A8C] PA.VIEWPORT_UNK00A8C := 0.000031 */ + 0x0c040300, /* LOAD_STATE (1) Base: 0x00C00 Size: 4 Fixp: 1 */ + 0x00000000, /* [00C00] SE.SCISSOR_LEFT = 0.000000 */ + 0x00000000, /* [00C04] SE.SCISSOR_TOP = 0.000000 */ + 0x01901000, /* [00C08] SE.SCISSOR_RIGHT = 400.062500 */ + 0x00f01000, /* [00C0C] SE.SCISSOR_BOTTOM = 240.062500 */ + 0x00000000, /* PAD */ + 0x0c010308, /* LOAD_STATE (1) Base: 0x00C20 Size: 1 Fixp: 1 */ + 0x0190ffff, /* [00C20] SE.CLIP_RIGHT = 400.999985 */ + 0x0c010309, /* LOAD_STATE (1) Base: 0x00C24 Size: 1 Fixp: 1 */ + 0x00f0ffff, /* [00C24] SE.CLIP_BOTTOM = 240.999985 */ + 0x08030508, /* LOAD_STATE (1) Base: 0x01420 Size: 3 Fixp: 0 */ + 0x00000000, /* [01420] PE.ALPHA_OP := ALPHA_TEST=0,ALPHA_FUNC=NEVER(residue:0xfffeff0c) */ + 0x00000000, /* [01424] PE.ALPHA_BLEND_COLOR := B=0x0,G=0x0,R=0x0,A=0x0 */ + 0x00100010, /* [01428] PE.ALPHA_CONFIG := BLEND_ENABLE_COLOR=0,SRC_FUNC_COLOR=ONE,DST_FUNC_COLOR=ZERO,EQ_COLOR=ADD,BLEND_SEPARATE_ALPHA=0,SRC_FUNC_ALPHA=ONE,DST_FUNC_ALPHA=ZERO,EQ_ALPHA=ADD */ + 0x08010528, /* LOAD_STATE (1) Base: 0x014A0 Size: 1 Fixp: 0 */ + 0x0000fdff, /* [014A0] PE.STENCIL_CONFIG_EXT := UNK16=0x0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000002, /* [0380C] GL.FLUSH_CACHE := DEPTH=0,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x0801050b, /* LOAD_STATE (1) Base: 0x0142C Size: 1 Fixp: 0 */ + 0x00110f06, /* [0142C] PE.COLOR_FORMAT := FORMAT=A8R8G8B8,COMPONENTS=R=1,G=1,B=1,A=1,OVERWRITE=1,SUPER_TILED=1(residue:0xffcce0e0) */ + 0x08010518, /* LOAD_STATE (1) Base: 0x01460 Size: 1 Fixp: 0 */ + 0x15900000, /* [01460] PE.PIPE[0].COLOR_ADDR := ADDR_G */ + 0x0801050c, /* LOAD_STATE (1) Base: 0x01430 Size: 1 Fixp: 0 */ + 0x15900000, /* [01430] PE.COLOR_ADDR := ADDR_G */ + 0x0801050d, /* LOAD_STATE (1) Base: 0x01434 Size: 1 Fixp: 0 */ + 0x00000700, /* [01434] PE.COLOR_STRIDE := 0x700 */ + 0x08040500, /* LOAD_STATE (1) Base: 0x01400 Size: 4 Fixp: 0 */ + 0x05010701, /* [01400] PE.DEPTH_CONFIG := DEPTH_MODE=Z,DEPTH_FORMAT=D16,DEPTH_FUNC=ALWAYS,WRITE_ENABLE=0,EARLY_Z=1,ONLY_DEPTH=0,SUPER_TILED=1(residue:0xf2ccc0c4) */ + 0x00000000, /* [01404] PE.DEPTH_NEAR := 0.000000 */ + 0x3f800000, /* [01408] PE.DEPTH_FAR := 1.000000 */ + 0x477fff00, /* [0140C] PE.DEPTH_NORMALIZE := 65535.000000 */ + 0x150ca000, /* PAD */ + 0x08010520, /* LOAD_STATE (1) Base: 0x01480 Size: 1 Fixp: 0 */ + 0x15985000, /* [01480] PE.PIPE[0].DEPTH_ADDR := ADDR_I */ + 0x08010504, /* LOAD_STATE (1) Base: 0x01410 Size: 1 Fixp: 0 */ + 0x15985000, /* [01410] PE.DEPTH_ADDR := ADDR_I */ + 0x08010505, /* LOAD_STATE (1) Base: 0x01414 Size: 1 Fixp: 0 */ + 0x00000380, /* [01414] PE.DEPTH_STRIDE := 0x380 */ + 0x08010515, /* LOAD_STATE (1) Base: 0x01454 Size: 1 Fixp: 0 */ + 0x00000000, /* [01454] PE.HDEPTH_CONTROL := FORMAT=DISABLED */ + 0x08010282, /* LOAD_STATE (1) Base: 0x00A08 Size: 1 Fixp: 0 */ + 0x3f800000, /* [00A08] PA.VIEWPORT_SCALE_Z := 1.000000 */ + 0x08010285, /* LOAD_STATE (1) Base: 0x00A14 Size: 1 Fixp: 0 */ + 0x00000000, /* [00A14] PA.VIEWPORT_OFFSET_Z := 0.000000 */ + 0x08010507, /* LOAD_STATE (1) Base: 0x0141C Size: 1 Fixp: 0 */ + 0x00000000, /* [0141C] PE.STENCIL_CONFIG := MODE=DISABLED,REF_FRONT=0x0,MASK_FRONT=0x0,WRITE_MASK=0x0(residue:0x0000000c) */ + 0x08010e06, /* LOAD_STATE (1) Base: 0x03818 Size: 1 Fixp: 0 */ + 0x00000000, /* [03818] GL.MULTI_SAMPLE_CONFIG := MSAA_SAMPLES=NONE,MSAA_ENABLES=0x0,UNK12=0x0,UNK16=0x0(residue:0xfff40e04) */ + 0x08010286, /* LOAD_STATE (1) Base: 0x00A18 Size: 1 Fixp: 0 */ + 0x3f000000, /* [00A18] PA.LINE_WIDTH := 0.500000 */ + 0x0803028d, /* LOAD_STATE (1) Base: 0x00A34 Size: 3 Fixp: 0 */ + 0x00412200, /* [00A34] PA.CONFIG := POINT_SIZE_ENABLE=0,POINT_SPRITE_ENABLE=0,CULL_FACE_MODE=CCW,FILL_MODE=SOLID,SHADE_MODEL=SMOOTH,UNK22=1(residue:0xff3888c3) */ + 0x3f000000, /* [00A38] PA.LINE_UNK00A38 := 0.500000 */ + 0x3f000000, /* [00A3C] PA.LINE_UNK00A3C := 0.500000 */ + 0x08010e02, /* LOAD_STATE (1) Base: 0x03808 Size: 1 Fixp: 0 */ + 0x00000701, /* [03808] GL.SEMAPHORE_TOKEN := FROM=FE,TO=PE */ + 0x48000000, /* STALL (9) */ + 0x00000701, /* */ + 0x08030202, /* LOAD_STATE (1) Base: 0x00808 Size: 3 Fixp: 0 */ + 0x00000103, /* [00808] VS.INPUT_COUNT := COUNT=3,UNK8=1 */ + 0x00000006, /* [0080C] VS.TEMP_REGISTER_CONTROL := NUM_TEMPS=6 */ + 0x00000004, /* [00810] VS.OUTPUT[0] := O0=4,O1=0,O2=0,O3=0 */ + 0x08010217, /* LOAD_STATE (1) Base: 0x0085C Size: 1 Fixp: 0 */ + 0x00150000, /* [0085C] VS.RANGE := LOW=0x0,HIGH=0x15 */ + 0x0801020e, /* LOAD_STATE (1) Base: 0x00838 Size: 1 Fixp: 0 */ + 0x00000000, /* [00838] VS.START_PC := 0x0 */ + 0x08010200, /* LOAD_STATE (1) Base: 0x00800 Size: 1 Fixp: 0 */ + 0x00000016, /* [00800] VS.END_PC := 0x16 */ + 0x0801142c, /* LOAD_STATE (1) Base: 0x050B0 Size: 1 Fixp: 0 */ + 0x3f800000, /* [050B0] VS.UNIFORMS[44] := 1.000000 (u11.x) */ + 0x0801141b, /* LOAD_STATE (1) Base: 0x0506C Size: 1 Fixp: 0 */ + 0x00000000, /* [0506C] VS.UNIFORMS[27] := 0.000000 (u6.w) */ + 0x08011417, /* LOAD_STATE (1) Base: 0x0505C Size: 1 Fixp: 0 */ + 0x41a00000, /* [0505C] VS.UNIFORMS[23] := 20.000000 (u5.w) */ + 0x08011413, /* LOAD_STATE (1) Base: 0x0504C Size: 1 Fixp: 0 */ + 0x40000000, /* [0504C] VS.UNIFORMS[19] := 2.000000 (u4.w) */ + 0x08583000, /* LOAD_STATE (1) Base: 0x0C000 Size: 88 Fixp: 0 */ + 0x01831009, /* [0C000] SH.UNK0C000[0] := 0x1831009 */ + 0x00000000, /* [0C004] SH.UNK0C000[1] := 0x0 */ + 0x00000000, /* [0C008] SH.UNK0C000[2] := 0x0 */ + 0x203fc048, /* [0C00C] SH.UNK0C000[3] := 0x203fc048 */ + 0x02031009, /* [0C010] SH.UNK0C000[4] := 0x2031009 */ + 0x00000000, /* [0C014] SH.UNK0C000[5] := 0x0 */ + 0x00000000, /* [0C018] SH.UNK0C000[6] := 0x0 */ + 0x203fc058, /* [0C01C] SH.UNK0C000[7] := 0x203fc058 */ + 0x07841003, /* [0C020] SH.UNK0C000[8] := 0x7841003 */ + 0x39000800, /* [0C024] SH.UNK0C000[9] := 0x39000800 */ + 0x00000050, /* [0C028] SH.UNK0C000[10] := 0x50 */ + 0x00000000, /* [0C02C] SH.UNK0C000[11] := 0x0 */ + 0x07841002, /* [0C030] SH.UNK0C000[12] := 0x7841002 */ + 0x39001800, /* [0C034] SH.UNK0C000[13] := 0x39001800 */ + 0x00aa0050, /* [0C038] SH.UNK0C000[14] := 0xaa0050 */ + 0x00390048, /* [0C03C] SH.UNK0C000[15] := 0x390048 */ + 0x07841002, /* [0C040] SH.UNK0C000[16] := 0x7841002 */ + 0x39002800, /* [0C044] SH.UNK0C000[17] := 0x39002800 */ + 0x01540050, /* [0C048] SH.UNK0C000[18] := 0x1540050 */ + 0x00390048, /* [0C04C] SH.UNK0C000[19] := 0x390048 */ + 0x07841002, /* [0C050] SH.UNK0C000[20] := 0x7841002 */ + 0x39003800, /* [0C054] SH.UNK0C000[21] := 0x39003800 */ + 0x01fe0050, /* [0C058] SH.UNK0C000[22] := 0x1fe0050 */ + 0x00390048, /* [0C05C] SH.UNK0C000[23] := 0x390048 */ + 0x03851003, /* [0C060] SH.UNK0C000[24] := 0x3851003 */ + 0x29004800, /* [0C064] SH.UNK0C000[25] := 0x29004800 */ + 0x000000d0, /* [0C068] SH.UNK0C000[26] := 0xd0 */ + 0x00000000, /* [0C06C] SH.UNK0C000[27] := 0x0 */ + 0x03851002, /* [0C070] SH.UNK0C000[28] := 0x3851002 */ + 0x29005800, /* [0C074] SH.UNK0C000[29] := 0x29005800 */ + 0x00aa00d0, /* [0C078] SH.UNK0C000[30] := 0xaa00d0 */ + 0x00290058, /* [0C07C] SH.UNK0C000[31] := 0x290058 */ + 0x03811002, /* [0C080] SH.UNK0C000[32] := 0x3811002 */ + 0x29006800, /* [0C084] SH.UNK0C000[33] := 0x29006800 */ + 0x015400d0, /* [0C088] SH.UNK0C000[34] := 0x15400d0 */ + 0x00290058, /* [0C08C] SH.UNK0C000[35] := 0x290058 */ + 0x07851003, /* [0C090] SH.UNK0C000[36] := 0x7851003 */ + 0x39007800, /* [0C094] SH.UNK0C000[37] := 0x39007800 */ + 0x00000050, /* [0C098] SH.UNK0C000[38] := 0x50 */ + 0x00000000, /* [0C09C] SH.UNK0C000[39] := 0x0 */ + 0x07851002, /* [0C0A0] SH.UNK0C000[40] := 0x7851002 */ + 0x39008800, /* [0C0A4] SH.UNK0C000[41] := 0x39008800 */ + 0x00aa0050, /* [0C0A8] SH.UNK0C000[42] := 0xaa0050 */ + 0x00390058, /* [0C0AC] SH.UNK0C000[43] := 0x390058 */ + 0x07851002, /* [0C0B0] SH.UNK0C000[44] := 0x7851002 */ + 0x39009800, /* [0C0B4] SH.UNK0C000[45] := 0x39009800 */ + 0x01540050, /* [0C0B8] SH.UNK0C000[46] := 0x1540050 */ + 0x00390058, /* [0C0BC] SH.UNK0C000[47] := 0x390058 */ + 0x07801002, /* [0C0C0] SH.UNK0C000[48] := 0x7801002 */ + 0x3900a800, /* [0C0C4] SH.UNK0C000[49] := 0x3900a800 */ + 0x01fe0050, /* [0C0C8] SH.UNK0C000[50] := 0x1fe0050 */ + 0x00390058, /* [0C0CC] SH.UNK0C000[51] := 0x390058 */ + 0x0401100c, /* [0C0D0] SH.UNK0C000[52] := 0x401100c */ + 0x00000000, /* [0C0D4] SH.UNK0C000[53] := 0x0 */ + 0x00000000, /* [0C0D8] SH.UNK0C000[54] := 0x0 */ + 0x003fc008, /* [0C0DC] SH.UNK0C000[55] := 0x3fc008 */ + 0x03801002, /* [0C0E0] SH.UNK0C000[56] := 0x3801002 */ + 0x69000800, /* [0C0E4] SH.UNK0C000[57] := 0x69000800 */ + 0x01fe00c0, /* [0C0E8] SH.UNK0C000[58] := 0x1fe00c0 */ + 0x00290038, /* [0C0EC] SH.UNK0C000[59] := 0x290038 */ + 0x03831005, /* [0C0F0] SH.UNK0C000[60] := 0x3831005 */ + 0x29000800, /* [0C0F4] SH.UNK0C000[61] := 0x29000800 */ + 0x01480040, /* [0C0F8] SH.UNK0C000[62] := 0x1480040 */ + 0x00000000, /* [0C0FC] SH.UNK0C000[63] := 0x0 */ + 0x0383100d, /* [0C100] SH.UNK0C000[64] := 0x383100d */ + 0x00000000, /* [0C104] SH.UNK0C000[65] := 0x0 */ + 0x00000000, /* [0C108] SH.UNK0C000[66] := 0x0 */ + 0x00000038, /* [0C10C] SH.UNK0C000[67] := 0x38 */ + 0x03801003, /* [0C110] SH.UNK0C000[68] := 0x3801003 */ + 0x29000800, /* [0C114] SH.UNK0C000[69] := 0x29000800 */ + 0x014801c0, /* [0C118] SH.UNK0C000[70] := 0x14801c0 */ + 0x00000000, /* [0C11C] SH.UNK0C000[71] := 0x0 */ + 0x00801005, /* [0C120] SH.UNK0C000[72] := 0x801005 */ + 0x29001800, /* [0C124] SH.UNK0C000[73] := 0x29001800 */ + 0x01480040, /* [0C128] SH.UNK0C000[74] := 0x1480040 */ + 0x00000000, /* [0C12C] SH.UNK0C000[75] := 0x0 */ + 0x0080108f, /* [0C130] SH.UNK0C000[76] := 0x80108f */ + 0x3fc06800, /* [0C134] SH.UNK0C000[77] := 0x3fc06800 */ + 0x00000050, /* [0C138] SH.UNK0C000[78] := 0x50 */ + 0x203fc068, /* [0C13C] SH.UNK0C000[79] := 0x203fc068 */ + 0x03801003, /* [0C140] SH.UNK0C000[80] := 0x3801003 */ + 0x00000800, /* [0C144] SH.UNK0C000[81] := 0x800 */ + 0x01480140, /* [0C148] SH.UNK0C000[82] := 0x1480140 */ + 0x00000000, /* [0C14C] SH.UNK0C000[83] := 0x0 */ + 0x04001009, /* [0C150] SH.UNK0C000[84] := 0x4001009 */ + 0x00000000, /* [0C154] SH.UNK0C000[85] := 0x0 */ + 0x00000000, /* [0C158] SH.UNK0C000[86] := 0x0 */ + 0x200000b8, /* [0C15C] SH.UNK0C000[87] := 0x200000b8 */ + 0x00000000, /* PAD */ + 0x08010380, /* LOAD_STATE (1) Base: 0x00E00 Size: 1 Fixp: 0 */ + 0x00000001, /* [00E00] RA.CONTROL := UNK0=1,LAST_VARYING_2X=0 */ + 0x08010401, /* LOAD_STATE (1) Base: 0x01004 Size: 1 Fixp: 0 */ + 0x00000001, /* [01004] PS.OUTPUT_REG := 0x1 */ + 0x08010290, /* LOAD_STATE (1) Base: 0x00A40 Size: 1 Fixp: 0 */ + 0x00000200, /* [00A40] PA.SHADER_ATTRIBUTES[0] := UNK0=0x0,UNK8=0x2 */ + 0x08010e08, /* LOAD_STATE (1) Base: 0x03820 Size: 1 Fixp: 0 */ + 0x00000004, /* [03820] GL.VARYING_NUM_COMPONENTS := VAR0=0x4,VAR1=0x0,VAR2=0x0,VAR3=0x0,VAR4=0x0,VAR5=0x0,VAR6=0x0,VAR7=0x0 */ + 0x08010e0d, /* LOAD_STATE (1) Base: 0x03834 Size: 1 Fixp: 0 */ + 0x00040000, /* [03834] GL.UNK03834 := 0x40000 */ + 0x08020e0a, /* LOAD_STATE (1) Base: 0x03828 Size: 2 Fixp: 0 */ + 0x00000055, /* [03828] GL.VARYING_COMPONENT_USE[0] := COMP0=USED,COMP1=USED,COMP2=USED,COMP3=USED,COMP4=UNUSED,COMP5=UNUSED,COMP6=UNUSED,COMP7=UNUSED,COMP8=UNUSED,COMP9=UNUSED,COMP10=UNUSED,COMP11=UNUSED,COMP12=UNUSED,COMP13=UNUSED,COMP14=UNUSED,COMP15=UNUSED */ + 0x00000000, /* [0382C] GL.VARYING_COMPONENT_USE[1] := COMP0=UNUSED,COMP1=UNUSED,COMP2=UNUSED,COMP3=UNUSED,COMP4=UNUSED,COMP5=UNUSED,COMP6=UNUSED,COMP7=UNUSED,COMP8=UNUSED,COMP9=UNUSED,COMP10=UNUSED,COMP11=UNUSED,COMP12=UNUSED,COMP13=UNUSED,COMP14=UNUSED,COMP15=UNUSED */ + 0x00000000, /* PAD */ + 0x08010e0e, /* LOAD_STATE (1) Base: 0x03838 Size: 1 Fixp: 0 */ + 0x00000000, /* [03838] GL.UNK03838 := 0x0 */ + 0x08010407, /* LOAD_STATE (1) Base: 0x0101C Size: 1 Fixp: 0 */ + 0x01000100, /* [0101C] PS.RANGE := LOW=0x100,HIGH=0x100 */ + 0x08010406, /* LOAD_STATE (1) Base: 0x01018 Size: 1 Fixp: 0 */ + 0x00000000, /* [01018] PS.START_PC := 0x0 */ + 0x08010400, /* LOAD_STATE (1) Base: 0x01000 Size: 1 Fixp: 0 */ + 0x00000001, /* [01000] PS.END_PC := 0x1 */ + 0x08043400, /* LOAD_STATE (1) Base: 0x0D000 Size: 4 Fixp: 0 */ + 0x00000000, /* [0D000] SH.UNK0C000[1024] := 0x0 */ + 0x00000000, /* [0D004] SH.UNK0C000[1025] := 0x0 */ + 0x00000000, /* [0D008] SH.UNK0C000[1026] := 0x0 */ + 0x00000000, /* [0D00C] SH.UNK0C000[1027] := 0x0 */ + 0x00000000, /* PAD */ + 0x08030402, /* LOAD_STATE (1) Base: 0x01008 Size: 3 Fixp: 0 */ + 0x00001f02, /* [01008] PS.INPUT_COUNT := COUNT=2,UNK8=31 */ + 0x00000002, /* [0100C] PS.TEMP_REGISTER_CONTROL := NUM_TEMPS=2 */ + 0x00000002, /* [01010] PS.CONTROL := BYPASS=0,UNK1=1 */ + 0x0801028c, /* LOAD_STATE (1) Base: 0x00A30 Size: 1 Fixp: 0 */ + 0x00000100, /* [00A30] PA.ATTRIBUTE_ELEMENT_COUNT := UNK0=0x0,COUNT=0x1 */ + 0x08010e07, /* LOAD_STATE (1) Base: 0x0381C Size: 1 Fixp: 0 */ + 0x00000004, /* [0381C] GL.VARYING_TOTAL_COMPONENTS := NUM=0x4 */ + 0x0801020c, /* LOAD_STATE (1) Base: 0x00830 Size: 1 Fixp: 0 */ + 0x0f3f0582, /* [00830] VS.LOAD_BALANCING := A=0x82,B=0x5,C=0x3f,D=0xf */ + 0x08010201, /* LOAD_STATE (1) Base: 0x00804 Size: 1 Fixp: 0 */ + 0x00000002, /* [00804] VS.OUTPUT_COUNT := 2 */ + 0x08010e02, /* LOAD_STATE (1) Base: 0x03808 Size: 1 Fixp: 0 */ + 0x00000705, /* [03808] GL.SEMAPHORE_TOKEN := FROM=RA,TO=PE */ + 0x08010f00, /* LOAD_STATE (1) Base: 0x03C00 Size: 1 Fixp: 0 */ + 0x00000705, /* [03C00] GL.STALL_TOKEN := FROM=RA,TO=PE,FLIP0=0,FLIP1=0 */ + 0x28000000, /* DRAW_PRIMITIVES (5) */ + 0x00000005, /* */ + 0x00000000, /* */ + 0x00000002, /* */ + 0x08030180, /* LOAD_STATE (1) Base: 0x00600 Size: 3 Fixp: 0 */ + 0x0c003088, /* [00600] FE.VERTEX_ELEMENT_CONFIG[0] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x0,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x0c003188, /* [00604] FE.VERTEX_ELEMENT_CONFIG[1] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x1,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x0c003288, /* [00608] FE.VERTEX_ELEMENT_CONFIG[2] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x2,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x08010208, /* LOAD_STATE (1) Base: 0x00820 Size: 1 Fixp: 0 */ + 0x00020100, /* [00820] VS.INPUT[0] := I0=0,I1=1,I2=2,I3=0 */ + 0x080301a0, /* LOAD_STATE (1) Base: 0x00680 Size: 3 Fixp: 0 */ + 0x15000060, /* [00680] FE.VERTEX_STREAMS[0].BASE_ADDR := ADDR_S */ + 0x15000090, /* [00684] FE.VERTEX_STREAMS[1].BASE_ADDR := ADDR_T */ + 0x150000c0, /* [00688] FE.VERTEX_STREAMS[2].BASE_ADDR := ADDR_U */ + 0x080301a8, /* LOAD_STATE (1) Base: 0x006A0 Size: 3 Fixp: 0 */ + 0x0000000c, /* [006A0] FE.VERTEX_STREAMS[0].CONTROL := 0xc */ + 0x0000000c, /* [006A4] FE.VERTEX_STREAMS[1].CONTROL := 0xc */ + 0x0000000c, /* [006A8] FE.VERTEX_STREAMS[2].CONTROL := 0xc */ + 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ + 0x00000000, /* [00A2C] PA.W_CLIP_LIMIT := 0x0 */ + 0x0801028d, /* LOAD_STATE (1) Base: 0x00A34 Size: 1 Fixp: 0 */ + 0x00412200, /* [00A34] PA.CONFIG := POINT_SIZE_ENABLE=0,POINT_SPRITE_ENABLE=0,CULL_FACE_MODE=CCW,FILL_MODE=SOLID,SHADE_MODEL=SMOOTH,UNK22=1(residue:0xff3888c3) */ + 0x28000000, /* DRAW_PRIMITIVES (5) */ + 0x00000005, /* */ + 0x00000004, /* */ + 0x00000002, /* */ + 0x08030180, /* LOAD_STATE (1) Base: 0x00600 Size: 3 Fixp: 0 */ + 0x0c003088, /* [00600] FE.VERTEX_ELEMENT_CONFIG[0] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x0,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x0c003188, /* [00604] FE.VERTEX_ELEMENT_CONFIG[1] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x1,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x0c003288, /* [00608] FE.VERTEX_ELEMENT_CONFIG[2] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x2,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x08010208, /* LOAD_STATE (1) Base: 0x00820 Size: 1 Fixp: 0 */ + 0x00020100, /* [00820] VS.INPUT[0] := I0=0,I1=1,I2=2,I3=0 */ + 0x080301a0, /* LOAD_STATE (1) Base: 0x00680 Size: 3 Fixp: 0 */ + 0x150000c0, /* [00680] FE.VERTEX_STREAMS[0].BASE_ADDR := ADDR_U */ + 0x150000f0, /* [00684] FE.VERTEX_STREAMS[1].BASE_ADDR := ADDR_V */ + 0x15000120, /* [00688] FE.VERTEX_STREAMS[2].BASE_ADDR := ADDR_W */ + 0x080301a8, /* LOAD_STATE (1) Base: 0x006A0 Size: 3 Fixp: 0 */ + 0x0000000c, /* [006A0] FE.VERTEX_STREAMS[0].CONTROL := 0xc */ + 0x0000000c, /* [006A4] FE.VERTEX_STREAMS[1].CONTROL := 0xc */ + 0x0000000c, /* [006A8] FE.VERTEX_STREAMS[2].CONTROL := 0xc */ + 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ + 0x00000000, /* [00A2C] PA.W_CLIP_LIMIT := 0x0 */ + 0x0801028d, /* LOAD_STATE (1) Base: 0x00A34 Size: 1 Fixp: 0 */ + 0x00412200, /* [00A34] PA.CONFIG := POINT_SIZE_ENABLE=0,POINT_SPRITE_ENABLE=0,CULL_FACE_MODE=CCW,FILL_MODE=SOLID,SHADE_MODEL=SMOOTH,UNK22=1(residue:0xff3888c3) */ + 0x28000000, /* DRAW_PRIMITIVES (5) */ + 0x00000005, /* */ + 0x00000008, /* */ + 0x00000002, /* */ + 0x08030180, /* LOAD_STATE (1) Base: 0x00600 Size: 3 Fixp: 0 */ + 0x0c003088, /* [00600] FE.VERTEX_ELEMENT_CONFIG[0] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x0,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x0c003188, /* [00604] FE.VERTEX_ELEMENT_CONFIG[1] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x1,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x0c003288, /* [00608] FE.VERTEX_ELEMENT_CONFIG[2] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x2,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x08010208, /* LOAD_STATE (1) Base: 0x00820 Size: 1 Fixp: 0 */ + 0x00020100, /* [00820] VS.INPUT[0] := I0=0,I1=1,I2=2,I3=0 */ + 0x080301a0, /* LOAD_STATE (1) Base: 0x00680 Size: 3 Fixp: 0 */ + 0x15000120, /* [00680] FE.VERTEX_STREAMS[0].BASE_ADDR := ADDR_W */ + 0x15000150, /* [00684] FE.VERTEX_STREAMS[1].BASE_ADDR := ADDR_X */ + 0x15000180, /* [00688] FE.VERTEX_STREAMS[2].BASE_ADDR := ADDR_Y */ + 0x080301a8, /* LOAD_STATE (1) Base: 0x006A0 Size: 3 Fixp: 0 */ + 0x0000000c, /* [006A0] FE.VERTEX_STREAMS[0].CONTROL := 0xc */ + 0x0000000c, /* [006A4] FE.VERTEX_STREAMS[1].CONTROL := 0xc */ + 0x0000000c, /* [006A8] FE.VERTEX_STREAMS[2].CONTROL := 0xc */ + 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ + 0x00000000, /* [00A2C] PA.W_CLIP_LIMIT := 0x0 */ + 0x0801028d, /* LOAD_STATE (1) Base: 0x00A34 Size: 1 Fixp: 0 */ + 0x00412200, /* [00A34] PA.CONFIG := POINT_SIZE_ENABLE=0,POINT_SPRITE_ENABLE=0,CULL_FACE_MODE=CCW,FILL_MODE=SOLID,SHADE_MODEL=SMOOTH,UNK22=1(residue:0xff3888c3) */ + 0x28000000, /* DRAW_PRIMITIVES (5) */ + 0x00000005, /* */ + 0x0000000c, /* */ + 0x00000002, /* */ + 0x08030180, /* LOAD_STATE (1) Base: 0x00600 Size: 3 Fixp: 0 */ + 0x0c003088, /* [00600] FE.VERTEX_ELEMENT_CONFIG[0] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x0,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x0c003188, /* [00604] FE.VERTEX_ELEMENT_CONFIG[1] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x1,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x0c003288, /* [00608] FE.VERTEX_ELEMENT_CONFIG[2] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x2,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x08010208, /* LOAD_STATE (1) Base: 0x00820 Size: 1 Fixp: 0 */ + 0x00020100, /* [00820] VS.INPUT[0] := I0=0,I1=1,I2=2,I3=0 */ + 0x080301a0, /* LOAD_STATE (1) Base: 0x00680 Size: 3 Fixp: 0 */ + 0x15000180, /* [00680] FE.VERTEX_STREAMS[0].BASE_ADDR := ADDR_Y */ + 0x150001b0, /* [00684] FE.VERTEX_STREAMS[1].BASE_ADDR := ADDR_Z */ + 0x150001e0, /* [00688] FE.VERTEX_STREAMS[2].BASE_ADDR := ADDR_26 */ + 0x080301a8, /* LOAD_STATE (1) Base: 0x006A0 Size: 3 Fixp: 0 */ + 0x0000000c, /* [006A0] FE.VERTEX_STREAMS[0].CONTROL := 0xc */ + 0x0000000c, /* [006A4] FE.VERTEX_STREAMS[1].CONTROL := 0xc */ + 0x0000000c, /* [006A8] FE.VERTEX_STREAMS[2].CONTROL := 0xc */ + 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ + 0x00000000, /* [00A2C] PA.W_CLIP_LIMIT := 0x0 */ + 0x0801028d, /* LOAD_STATE (1) Base: 0x00A34 Size: 1 Fixp: 0 */ + 0x00412200, /* [00A34] PA.CONFIG := POINT_SIZE_ENABLE=0,POINT_SPRITE_ENABLE=0,CULL_FACE_MODE=CCW,FILL_MODE=SOLID,SHADE_MODEL=SMOOTH,UNK22=1(residue:0xff3888c3) */ + 0x28000000, /* DRAW_PRIMITIVES (5) */ + 0x00000005, /* */ + 0x00000010, /* */ + 0x00000002, /* */ + 0x08030180, /* LOAD_STATE (1) Base: 0x00600 Size: 3 Fixp: 0 */ + 0x0c003088, /* [00600] FE.VERTEX_ELEMENT_CONFIG[0] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x0,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x0c003188, /* [00604] FE.VERTEX_ELEMENT_CONFIG[1] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x1,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x0c003288, /* [00608] FE.VERTEX_ELEMENT_CONFIG[2] := TYPE=FLOAT,ENDIAN=NO_SWAP,NONCONSECUTIVE=1,STREAM=0x2,NUM=0x3,NORMALIZE=OFF,START=0x0,END=0xc */ + 0x08010208, /* LOAD_STATE (1) Base: 0x00820 Size: 1 Fixp: 0 */ + 0x00020100, /* [00820] VS.INPUT[0] := I0=0,I1=1,I2=2,I3=0 */ + 0x080301a0, /* LOAD_STATE (1) Base: 0x00680 Size: 3 Fixp: 0 */ + 0x150001e0, /* [00680] FE.VERTEX_STREAMS[0].BASE_ADDR := ADDR_26 */ + 0x15000210, /* [00684] FE.VERTEX_STREAMS[1].BASE_ADDR := ADDR_27 */ + 0x15000240, /* [00688] FE.VERTEX_STREAMS[2].BASE_ADDR := ADDR_28 */ + 0x080301a8, /* LOAD_STATE (1) Base: 0x006A0 Size: 3 Fixp: 0 */ + 0x0000000c, /* [006A0] FE.VERTEX_STREAMS[0].CONTROL := 0xc */ + 0x0000000c, /* [006A4] FE.VERTEX_STREAMS[1].CONTROL := 0xc */ + 0x0000000c, /* [006A8] FE.VERTEX_STREAMS[2].CONTROL := 0xc */ + 0x0801028b, /* LOAD_STATE (1) Base: 0x00A2C Size: 1 Fixp: 0 */ + 0x00000000, /* [00A2C] PA.W_CLIP_LIMIT := 0x0 */ + 0x0801028d, /* LOAD_STATE (1) Base: 0x00A34 Size: 1 Fixp: 0 */ + 0x00412200, /* [00A34] PA.CONFIG := POINT_SIZE_ENABLE=0,POINT_SPRITE_ENABLE=0,CULL_FACE_MODE=CCW,FILL_MODE=SOLID,SHADE_MODEL=SMOOTH,UNK22=1(residue:0xff3888c3) */ + 0x28000000, /* DRAW_PRIMITIVES (5) */ + 0x00000005, /* */ + 0x00000014, /* */ + 0x00000002, /* */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003 /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ +}; + +uint32_t cmdbuf2[] = { /* seq 89 */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ + 0x00004686, /* [01604] RS.CONFIG := SOURCE_FORMAT=A8R8G8B8,DOWNSAMPLE_X=0,DOWNSAMPLE_Y=0,SOURCE_TILED=1,DEST_FORMAT=A8R8G8B8,DEST_TILED=1,SWAP_RB=0,FLIP=0 */ + 0x08010583, /* LOAD_STATE (1) Base: 0x0160C Size: 1 Fixp: 0 */ + 0x80001c00, /* [0160C] RS.SOURCE_STRIDE := STRIDE=0x1c00,MULTI=0,TILING=1 */ + 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ + 0x80001c00, /* [01614] RS.DEST_STRIDE := STRIDE=0x1c00,MULTI=0,TILING=1 */ + 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ + 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ + 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ + 0x00000000, /* PAD */ + 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ + 0x00000000, /* [0163C] RS.CLEAR_CONTROL := BITS=0x0,MODE=DISABLED */ + 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ + 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ + 0x08010582, /* LOAD_STATE (1) Base: 0x01608 Size: 1 Fixp: 0 */ + 0x15900000, /* [01608] RS.SOURCE_ADDR := ADDR_G */ + 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ + 0x15900000, /* [01610] RS.DEST_ADDR := ADDR_G */ + 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ + 0x010001c0, /* [01620] RS.WINDOW_SIZE := HEIGHT=256,WIDTH=448 */ + 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ + 0xbadabeeb /* [01600] RS.KICKER := 0xbadabeeb */ +}; + +uint32_t cmdbuf3[] = { /* seq 91 */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x00000000, /* PAD */ + 0x08010594, /* LOAD_STATE (1) Base: 0x01650 Size: 1 Fixp: 0 */ + 0x00000001, /* [01650] RS.FLUSH_CACHE := FLUSH=1 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000002, /* [0380C] GL.FLUSH_CACHE := DEPTH=0,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x0801ffff, /* LOAD_STATE (1) Base: 0x3FFFC Size: 1 Fixp: 0 */ + 0x00000000, /* [3FFFC] DUMMY.DUMMY := 0x0 */ + 0x08010595, /* LOAD_STATE (1) Base: 0x01654 Size: 1 Fixp: 0 */ + 0x00000049, /* [01654] TS.MEM_CONFIG := DEPTH_FAST_CLEAR=1,COLOR_FAST_CLEAR=0,DEPTH_16BPP=1,DEPTH_AUTO_DISABLE=0,COLOR_AUTO_DISABLE=0,DEPTH_COMPRESSION=1,MSAA=0,MSAA_FORMAT=A4R4G4B4,HDEPTH=0x0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* [0380C] GL.FLUSH_CACHE := DEPTH=1,COLOR=1,TEXTURE=0,PE2D=0,TEXTUREVS=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ + 0x20000686, /* [01604] RS.CONFIG := SOURCE_FORMAT=A8R8G8B8,DOWNSAMPLE_X=0,DOWNSAMPLE_Y=0,SOURCE_TILED=1,DEST_FORMAT=A8R8G8B8,DEST_TILED=0,SWAP_RB=1,FLIP=0 */ + 0x08010583, /* LOAD_STATE (1) Base: 0x0160C Size: 1 Fixp: 0 */ + 0x80001c00, /* [0160C] RS.SOURCE_STRIDE := STRIDE=0x1c00,MULTI=0,TILING=1 */ + 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ + 0x00000700, /* [01614] RS.DEST_STRIDE := STRIDE=0x700,MULTI=0,TILING=0 */ + 0x0802058c, /* LOAD_STATE (1) Base: 0x01630 Size: 2 Fixp: 0 */ + 0xffffffff, /* [01630] RS.DITHER[0] := 0xffffffff */ + 0xffffffff, /* [01634] RS.DITHER[1] := 0xffffffff */ + 0x00000000, /* PAD */ + 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ + 0x00000000, /* [0163C] RS.CLEAR_CONTROL := BITS=0x0,MODE=DISABLED */ + 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ + 0x00000000, /* [016A0] RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ + 0x08010582, /* LOAD_STATE (1) Base: 0x01608 Size: 1 Fixp: 0 */ + 0x15900000, /* [01608] RS.SOURCE_ADDR := ADDR_G */ + 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ + 0x15a27c00, /* [01610] RS.DEST_ADDR := ADDR_L */ + 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ + 0x010001c0, /* [01620] RS.WINDOW_SIZE := HEIGHT=256,WIDTH=448 */ + 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ + 0xbadabeeb /* [01600] RS.KICKER := 0xbadabeeb */ +}; + +uint32_t cmdbuf4[] = { /* seq 101 */ + 0x18000000, /* NOP (make space for PIPE switch) */ + 0x00000000, + 0x18000000, + 0x00000000, + 0x18000000, + 0x00000000, + 0x18000000, + 0x00000000, + + /* copy pixels from render target to output bitmap */ + 0x08010e03, /* LOAD_STATE (1) Base: 0x0380C Size: 1 Fixp: 0 */ + 0x00000003, /* GLOBAL.FLUSH_CACHE := DEPTH=1,COLOR=1,3D_TEXTURE=0,2D=0,UNK4=0,SHADER_L1=0,SHADER_L2=0 */ + 0x08010581, /* LOAD_STATE (1) Base: 0x01604 Size: 1 Fixp: 0 */ + 0x00000606, /* RS.CONFIG := SOURCE_FORMAT=A8R8G8B8,UNK7=1,DEST_FORMAT=A8R8G8B8,UNK14=0,SWAP_RB=0 */ + 0x08010583, /* LOAD_STATE (1) Base: 0x0160C Size: 1 Fixp: 0 */ + 0x00000700, /* RS.SOURCE_STRIDE := 0x00000700 */ + 0x08010585, /* LOAD_STATE (1) Base: 0x01614 Size: 1 Fixp: 0 */ + 0x00000640, /* RS.DEST_STRIDE := 0x640 */ + 0x0801058c, /* LOAD_STATE (1) Base: 0x01630 Size: 1 Fixp: 0 */ + 0xffffffff, /* RS.DITHER[0] := 0xffffffff */ + 0x0801058d, /* LOAD_STATE (1) Base: 0x01634 Size: 1 Fixp: 0 */ + 0xffffffff, /* RS.DITHER[1] := 0xffffffff */ + 0x0801058f, /* LOAD_STATE (1) Base: 0x0163C Size: 1 Fixp: 0 */ + 0x00000000, /* RS.CLEAR_CONTROL := BITS=0x0,MODE=0x0 */ + 0x080105a8, /* LOAD_STATE (1) Base: 0x016A0 Size: 1 Fixp: 0 */ + 0x00000000, /* RS.EXTRA_CONFIG := AA=0x0,ENDIAN=NO_SWAP */ + 0x08010582, /* LOAD_STATE (1) Base: 0x01608 Size: 1 Fixp: 0 */ + 0x7f2c8700, /* RS.SOURCE_ADDR := *rt_physical */ + 0x08010584, /* LOAD_STATE (1) Base: 0x01610 Size: 1 Fixp: 0 */ + 0x7f338700, /* RS.DEST_ADDR := *bmp_physical */ + 0x08010588, /* LOAD_STATE (1) Base: 0x01620 Size: 1 Fixp: 0 */ + 0x00f00190, /* RS.WINDOW_SIZE := HEIGHT=240,WIDTH=400 */ + 0x08010580, /* LOAD_STATE (1) Base: 0x01600 Size: 1 Fixp: 0 */ + 0xbeebbeeb /* RS.KICKER := 0xbeebbeeb */ +}; \ No newline at end of file diff --git a/src/replay/cube_companion_gc2000.c b/src/replay/cube_companion_gc2000.c deleted file mode 100644 index 8b1ed6d..0000000 --- a/src/replay/cube_companion_gc2000.c +++ /dev/null @@ -1,473 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "write_bmp.h" -#include "viv_raw.h" -#include "companion.h" - -#include "companion_cmd_gc2000.h" - - -/* TODO: should actually update context as we go, - a context switch would currently revert state and likely result in corrupted rendering. - */ -//#include "context_cmd.h" - - -int main(int argc, char **argv) -{ - int rv; - struct viv_conn *conn = 0; - rv = viv_open(VIV_HW_3D, &conn); - if(rv!=0) - { - fprintf(stderr, "Error opening device\n"); - exit(1); - } - printf("Succesfully opened device\n"); - viv_show_chip_info(conn); - - gcsHAL_INTERFACE id = {}; - id.command = gcvHAL_ATTACH; - if((viv_invoke(conn, &id)) != gcvSTATUS_OK) - { - #ifdef DEBUG - fprintf(stderr, "Error attaching to GPU\n"); - #endif - exit(1); - } - gckCONTEXT context = id.u.Attach.context; - - /* allocate command buffer (blob uses four command buffers, but we don't even fill one) */ - viv_addr_t buf0_physical = 0; - void *buf0_logical = 0; - if(viv_alloc_contiguous(conn, 0x20000, &buf0_physical, &buf0_logical, NULL)!=0) - { - fprintf(stderr, "Error allocating host memory\n"); - exit(1); - } - printf("Allocated buffer: phys=%08x log=%08x\n", (uint32_t)buf0_physical, (uint32_t)buf0_logical); - - /* allocate main render target */ - gcuVIDMEM_NODE_PTR color_surface_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x1ab000, 0x40, gcvSURF_RENDER_TARGET, gcvPOOL_DEFAULT, &color_surface_node, NULL)!=0) - { - fprintf(stderr, "Error allocating render target buffer memory\n"); - exit(1); - } - printf("Allocated render target node: node=%08x\n", (uint32_t)color_surface_node); - viv_addr_t color_surface_physical = 0; - void *color_surface_logical = 0; - if(viv_lock_vidmem(conn, color_surface_node, &color_surface_physical, &color_surface_logical)!=0) - { - fprintf(stderr, "Error locking render target memory\n"); - exit(1); - } - printf("Locked render target: phys=%08x log=%08x\n", (uint32_t)color_surface_physical, (uint32_t)color_surface_logical); - - /* allocate tile status for main render target */ - gcuVIDMEM_NODE_PTR color_status_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x1b00, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &color_status_node, NULL)!=0) - { - fprintf(stderr, "Error allocating render target tile status memory\n"); - exit(1); - } - printf("Allocated render target tile status node: node=%08x\n", (uint32_t)color_status_node); - viv_addr_t color_status_physical = 0; - void *color_status_logical = 0; - if(viv_lock_vidmem(conn, color_status_node, &color_status_physical, &color_status_logical)!=0) - { - fprintf(stderr, "Error locking render target memory\n"); - exit(1); - } - printf("Locked render target ts: phys=%08x log=%08x\n", (uint32_t)color_status_physical, (uint32_t)color_status_logical); - - /* allocate depth for main render target */ - gcuVIDMEM_NODE_PTR depth_surface_node = 0; - if(viv_alloc_linear_vidmem(conn, 0xd1000, 0x40, gcvSURF_DEPTH, gcvPOOL_DEFAULT, &depth_surface_node, NULL)!=0) - { - fprintf(stderr, "Error allocating depth memory\n"); - exit(1); - } - printf("Allocated depth node: node=%08x\n", (uint32_t)depth_surface_node); - viv_addr_t depth_surface_physical = 0; - void *depth_surface_logical = 0; - if(viv_lock_vidmem(conn, depth_surface_node, &depth_surface_physical, &depth_surface_logical)!=0) - { - fprintf(stderr, "Error locking depth target memory\n"); - exit(1); - } - printf("Locked depth target: phys=%08x log=%08x\n", (uint32_t)depth_surface_physical, (uint32_t)depth_surface_logical); - - /* allocate depth ts for main render target */ - gcuVIDMEM_NODE_PTR depth_status_node = 0; - if(viv_alloc_linear_vidmem(conn, 0xe00, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &depth_status_node, NULL)!=0) - { - fprintf(stderr, "Error allocating depth memory\n"); - exit(1); - } - printf("Allocated depth ts node: node=%08x\n", (uint32_t)depth_status_node); - viv_addr_t depth_status_physical = 0; - void *depth_status_logical = 0; - if(viv_lock_vidmem(conn, depth_status_node, &depth_status_physical, &depth_status_logical)!=0) - { - fprintf(stderr, "Error locking depth target ts memory\n"); - exit(1); - } - printf("Locked depth ts target: phys=%08x log=%08x\n", (uint32_t)depth_status_physical, (uint32_t)depth_status_logical); - - /* allocate vertex buffer */ - gcuVIDMEM_NODE_PTR vtx_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x100000, 0x40, gcvSURF_VERTEX, gcvPOOL_DEFAULT, &vtx_node, NULL)!=0) - { - fprintf(stderr, "Error allocating vertex memory\n"); - exit(1); - } - printf("Allocated vertex node: node=%08x\n", (uint32_t)vtx_node); - viv_addr_t vtx_physical = 0; - void *vtx_logical = 0; - if(viv_lock_vidmem(conn, vtx_node, &vtx_physical, &vtx_logical)!=0) - { - fprintf(stderr, "Error locking vertex memory\n"); - exit(1); - } - printf("Locked vertex memory: phys=%08x log=%08x\n", (uint32_t)vtx_physical, (uint32_t)vtx_logical); - - /* allocate tile status for aux render target */ - gcuVIDMEM_NODE_PTR rs_dest_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x1a0000, 0x40, gcvSURF_BITMAP, gcvPOOL_DEFAULT, &rs_dest_node, NULL)!=0) - { - fprintf(stderr, "Error allocating aux render target tile status memory\n"); - exit(1); - } - printf("Allocated aux render target tile status node: node=%08x\n", (uint32_t)rs_dest_node); - viv_addr_t rs_dest_physical = 0; - void *rs_dest_logical = 0; - if(viv_lock_vidmem(conn, rs_dest_node, &rs_dest_physical, &rs_dest_logical)!=0) - { - fprintf(stderr, "Error locking aux ts render target memory\n"); - exit(1); - } - printf("Locked aux render target ts: phys=%08x log=%08x\n", (uint32_t)rs_dest_physical, (uint32_t)rs_dest_logical); - - int texture_size[] = {0x100000, 0x040000, 0x010000, 0x004000, 0x001000, 0x000400, 0x000200, 0x000100, 0x000100, 0x000100}; - gcuVIDMEM_NODE_PTR text_lod[10]; - viv_addr_t text_lod_physical[10]; - void* text_lod_logical[10]; - for(int idx=0; idx<10; idx++) - { - if (viv_alloc_linear_vidmem(conn, texture_size[idx], 0x40, gcvSURF_TEXTURE, gcvPOOL_DEFAULT, &text_lod[idx], NULL) != 0) - { - fprintf(stderr, "Error locking texture nr %d\n", idx); - exit(1); - } - if(viv_lock_vidmem(conn, text_lod[idx], &text_lod_physical[idx], &text_lod_logical[idx]) != 0) - { - fprintf(stderr, "Error locking texture memory\n"); - exit(1); - } - printf("Locked texture target nr %d: phys=%08x log=%08x\n", idx, (uint32_t)text_lod_physical[idx], (uint32_t)text_lod_logical[idx]); - } - - /* Interleave companion cube vertex data into ADDR_I */ - //memset(vtx_logical, 0, 0x5ef80); - float *vertices_array = companion_vertices_array(); - float *texture_coordinates_array = companion_texture_coordinates_array(); - float *normals_array = companion_normals_array(); - int dest_idx = 0; - for(int vert=0; vert +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "write_bmp.h" +#include "viv_raw.h" +#include "companion.h" + +#include "companion_cmd_gc880.h" + + +/* TODO: should actually update context as we go, + a context switch would currently revert state and likely result in corrupted rendering. + */ +//#include "context_cmd.h" + + +int main(int argc, char **argv) +{ + int rv; + struct viv_conn *conn = 0; + rv = viv_open(VIV_HW_3D, &conn); + if(rv!=0) + { + fprintf(stderr, "Error opening device\n"); + exit(1); + } + printf("Succesfully opened device\n"); + viv_show_chip_info(conn); + + gcsHAL_INTERFACE id = {}; + id.command = gcvHAL_ATTACH; + if((viv_invoke(conn, &id)) != gcvSTATUS_OK) + { + #ifdef DEBUG + fprintf(stderr, "Error attaching to GPU\n"); + #endif + exit(1); + } + gckCONTEXT context = id.u.Attach.context; + + /* allocate command buffer (blob uses four command buffers, but we don't even fill one) */ + viv_addr_t buf0_physical = 0; + void *buf0_logical = 0; + if(viv_alloc_contiguous(conn, 0x20000, &buf0_physical, &buf0_logical, NULL)!=0) + { + fprintf(stderr, "Error allocating host memory\n"); + exit(1); + } + printf("Allocated buffer: phys=%08x log=%08x\n", (uint32_t)buf0_physical, (uint32_t)buf0_logical); + + /* allocate main render target */ + gcuVIDMEM_NODE_PTR color_surface_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x1ab000, 0x40, gcvSURF_RENDER_TARGET, gcvPOOL_DEFAULT, &color_surface_node, NULL)!=0) + { + fprintf(stderr, "Error allocating render target buffer memory\n"); + exit(1); + } + printf("Allocated render target node: node=%08x\n", (uint32_t)color_surface_node); + viv_addr_t color_surface_physical = 0; + void *color_surface_logical = 0; + if(viv_lock_vidmem(conn, color_surface_node, &color_surface_physical, &color_surface_logical)!=0) + { + fprintf(stderr, "Error locking render target memory\n"); + exit(1); + } + printf("Locked render target: phys=%08x log=%08x\n", (uint32_t)color_surface_physical, (uint32_t)color_surface_logical); + + /* allocate tile status for main render target */ + gcuVIDMEM_NODE_PTR color_status_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x1b00, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &color_status_node, NULL)!=0) + { + fprintf(stderr, "Error allocating render target tile status memory\n"); + exit(1); + } + printf("Allocated render target tile status node: node=%08x\n", (uint32_t)color_status_node); + viv_addr_t color_status_physical = 0; + void *color_status_logical = 0; + if(viv_lock_vidmem(conn, color_status_node, &color_status_physical, &color_status_logical)!=0) + { + fprintf(stderr, "Error locking render target memory\n"); + exit(1); + } + printf("Locked render target ts: phys=%08x log=%08x\n", (uint32_t)color_status_physical, (uint32_t)color_status_logical); + + /* allocate depth for main render target */ + gcuVIDMEM_NODE_PTR depth_surface_node = 0; + if(viv_alloc_linear_vidmem(conn, 0xd1000, 0x40, gcvSURF_DEPTH, gcvPOOL_DEFAULT, &depth_surface_node, NULL)!=0) + { + fprintf(stderr, "Error allocating depth memory\n"); + exit(1); + } + printf("Allocated depth node: node=%08x\n", (uint32_t)depth_surface_node); + viv_addr_t depth_surface_physical = 0; + void *depth_surface_logical = 0; + if(viv_lock_vidmem(conn, depth_surface_node, &depth_surface_physical, &depth_surface_logical)!=0) + { + fprintf(stderr, "Error locking depth target memory\n"); + exit(1); + } + printf("Locked depth target: phys=%08x log=%08x\n", (uint32_t)depth_surface_physical, (uint32_t)depth_surface_logical); + + /* allocate depth ts for main render target */ + gcuVIDMEM_NODE_PTR depth_status_node = 0; + if(viv_alloc_linear_vidmem(conn, 0xe00, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &depth_status_node, NULL)!=0) + { + fprintf(stderr, "Error allocating depth memory\n"); + exit(1); + } + printf("Allocated depth ts node: node=%08x\n", (uint32_t)depth_status_node); + viv_addr_t depth_status_physical = 0; + void *depth_status_logical = 0; + if(viv_lock_vidmem(conn, depth_status_node, &depth_status_physical, &depth_status_logical)!=0) + { + fprintf(stderr, "Error locking depth target ts memory\n"); + exit(1); + } + printf("Locked depth ts target: phys=%08x log=%08x\n", (uint32_t)depth_status_physical, (uint32_t)depth_status_logical); + + /* allocate vertex buffer */ + gcuVIDMEM_NODE_PTR vtx_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x100000, 0x40, gcvSURF_VERTEX, gcvPOOL_DEFAULT, &vtx_node, NULL)!=0) + { + fprintf(stderr, "Error allocating vertex memory\n"); + exit(1); + } + printf("Allocated vertex node: node=%08x\n", (uint32_t)vtx_node); + viv_addr_t vtx_physical = 0; + void *vtx_logical = 0; + if(viv_lock_vidmem(conn, vtx_node, &vtx_physical, &vtx_logical)!=0) + { + fprintf(stderr, "Error locking vertex memory\n"); + exit(1); + } + printf("Locked vertex memory: phys=%08x log=%08x\n", (uint32_t)vtx_physical, (uint32_t)vtx_logical); + + /* allocate tile status for aux render target */ + gcuVIDMEM_NODE_PTR rs_dest_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x1a0000, 0x40, gcvSURF_BITMAP, gcvPOOL_DEFAULT, &rs_dest_node, NULL)!=0) + { + fprintf(stderr, "Error allocating aux render target tile status memory\n"); + exit(1); + } + printf("Allocated aux render target tile status node: node=%08x\n", (uint32_t)rs_dest_node); + viv_addr_t rs_dest_physical = 0; + void *rs_dest_logical = 0; + if(viv_lock_vidmem(conn, rs_dest_node, &rs_dest_physical, &rs_dest_logical)!=0) + { + fprintf(stderr, "Error locking aux ts render target memory\n"); + exit(1); + } + printf("Locked aux render target ts: phys=%08x log=%08x\n", (uint32_t)rs_dest_physical, (uint32_t)rs_dest_logical); + + int texture_size[] = {0x100000, 0x040000, 0x010000, 0x004000, 0x001000, 0x000400, 0x000200, 0x000100, 0x000100, 0x000100}; + gcuVIDMEM_NODE_PTR text_lod[10]; + viv_addr_t text_lod_physical[10]; + void* text_lod_logical[10]; + for(int idx=0; idx<10; idx++) + { + if (viv_alloc_linear_vidmem(conn, texture_size[idx], 0x40, gcvSURF_TEXTURE, gcvPOOL_DEFAULT, &text_lod[idx], NULL) != 0) + { + fprintf(stderr, "Error locking texture nr %d\n", idx); + exit(1); + } + if(viv_lock_vidmem(conn, text_lod[idx], &text_lod_physical[idx], &text_lod_logical[idx]) != 0) + { + fprintf(stderr, "Error locking texture memory\n"); + exit(1); + } + printf("Locked texture target nr %d: phys=%08x log=%08x\n", idx, (uint32_t)text_lod_physical[idx], (uint32_t)text_lod_logical[idx]); + } + + /* Interleave companion cube vertex data into ADDR_I */ + //memset(vtx_logical, 0, 0x5ef80); + float *vertices_array = companion_vertices_array(); + float *texture_coordinates_array = companion_texture_coordinates_array(); + float *normals_array = companion_normals_array(); + int dest_idx = 0; + for(int vert=0; vert -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "write_bmp.h" - -#include "esTransform.h" - -//INTERLEAVED - mix vertices, colors, and normals -#define INTERLEAVED - -#define VERTEX_BUFFER_SIZE 0x100000 - -float vVertices[] = { - // front - -1.0f, -1.0f, +1.0f, // point blue - +1.0f, -1.0f, +1.0f, // point magenta - -1.0f, +1.0f, +1.0f, // point cyan - +1.0f, +1.0f, +1.0f, // point white - // back - +1.0f, -1.0f, -1.0f, // point red - -1.0f, -1.0f, -1.0f, // point black - +1.0f, +1.0f, -1.0f, // point yellow - -1.0f, +1.0f, -1.0f, // point green - // right - +1.0f, -1.0f, +1.0f, // point magenta - +1.0f, -1.0f, -1.0f, // point red - +1.0f, +1.0f, +1.0f, // point white - +1.0f, +1.0f, -1.0f, // point yellow - // left - -1.0f, -1.0f, -1.0f, // point black - -1.0f, -1.0f, +1.0f, // point blue - -1.0f, +1.0f, -1.0f, // point green - -1.0f, +1.0f, +1.0f, // point cyan - // top - -1.0f, +1.0f, +1.0f, // point cyan - +1.0f, +1.0f, +1.0f, // point white - -1.0f, +1.0f, -1.0f, // point green - +1.0f, +1.0f, -1.0f, // point yellow - // bottom - -1.0f, -1.0f, -1.0f, // point black - +1.0f, -1.0f, -1.0f, // point red - -1.0f, -1.0f, +1.0f, // point blue - +1.0f, -1.0f, +1.0f // point magenta -}; - -float vColors[] = { - // front - 0.0f, 0.0f, 1.0f, // blue - 1.0f, 0.0f, 1.0f, // magenta - 0.0f, 1.0f, 1.0f, // cyan - 1.0f, 1.0f, 1.0f, // white - // back - 1.0f, 0.0f, 0.0f, // red - 0.0f, 0.0f, 0.0f, // black - 1.0f, 1.0f, 0.0f, // yellow - 0.0f, 1.0f, 0.0f, // green - // right - 1.0f, 0.0f, 1.0f, // magenta - 1.0f, 0.0f, 0.0f, // red - 1.0f, 1.0f, 1.0f, // white - 1.0f, 1.0f, 0.0f, // yellow - // left - 0.0f, 0.0f, 0.0f, // black - 0.0f, 0.0f, 1.0f, // blue - 0.0f, 1.0f, 0.0f, // green - 0.0f, 1.0f, 1.0f, // cyan - // top - 0.0f, 1.0f, 1.0f, // cyan - 1.0f, 1.0f, 1.0f, // white - 0.0f, 1.0f, 0.0f, // green - 1.0f, 1.0f, 0.0f, // yellow - // bottom - 0.0f, 0.0f, 0.0f, // black - 1.0f, 0.0f, 0.0f, // red - 0.0f, 0.0f, 1.0f, // blue - 1.0f, 0.0f, 1.0f // magenta -}; - -float vNormals[] = { - // front - +0.0f, +0.0f, +1.0f, // forward - +0.0f, +0.0f, +1.0f, // forward - +0.0f, +0.0f, +1.0f, // forward - +0.0f, +0.0f, +1.0f, // forward - // back - +0.0f, +0.0f, -1.0f, // backbard - +0.0f, +0.0f, -1.0f, // backbard - +0.0f, +0.0f, -1.0f, // backbard - +0.0f, +0.0f, -1.0f, // backbard - // right - +1.0f, +0.0f, +0.0f, // right - +1.0f, +0.0f, +0.0f, // right - +1.0f, +0.0f, +0.0f, // right - +1.0f, +0.0f, +0.0f, // right - // left - -1.0f, +0.0f, +0.0f, // left - -1.0f, +0.0f, +0.0f, // left - -1.0f, +0.0f, +0.0f, // left - -1.0f, +0.0f, +0.0f, // left - // top - +0.0f, +1.0f, +0.0f, // up - +0.0f, +1.0f, +0.0f, // up - +0.0f, +1.0f, +0.0f, // up - +0.0f, +1.0f, +0.0f, // up - // bottom - +0.0f, -1.0f, +0.0f, // down - +0.0f, -1.0f, +0.0f, // down - +0.0f, -1.0f, +0.0f, // down - +0.0f, -1.0f, +0.0f // down -}; -#define COMPONENTS_PER_VERTEX (3) -#define NUM_VERTICES (6*4) -#define VERTICES_PER_DRAW 4 -#define DRAW_COUNT 6 - -uint32_t vs[] = { - 0x01831009, 0x00000000, 0x00000000, 0x203fc048, - 0x02031009, 0x00000000, 0x00000000, 0x203fc058, - 0x07841003, 0x39000800, 0x00000050, 0x00000000, - 0x07841002, 0x39001800, 0x00aa0050, 0x00390048, - 0x07841002, 0x39002800, 0x01540050, 0x00390048, - 0x07841002, 0x39003800, 0x01fe0050, 0x00390048, - 0x03851003, 0x29004800, 0x000000d0, 0x00000000, - 0x03851002, 0x29005800, 0x00aa00d0, 0x00290058, - 0x03811002, 0x29006800, 0x015400d0, 0x00290058, - 0x07851003, 0x39007800, 0x00000050, 0x00000000, - 0x07851002, 0x39008800, 0x00aa0050, 0x00390058, - 0x07851002, 0x39009800, 0x01540050, 0x00390058, - 0x07801002, 0x3900a800, 0x01fe0050, 0x00390058, - 0x0401100c, 0x00000000, 0x00000000, 0x003fc008, - 0x03801002, 0x69000800, 0x01fe00c0, 0x00290038, - 0x03831005, 0x29000800, 0x01480040, 0x00000000, - 0x0383100d, 0x00000000, 0x00000000, 0x00000038, - 0x03801003, 0x29000800, 0x014801c0, 0x00000000, - 0x00801005, 0x29001800, 0x01480040, 0x00000000, - 0x0080108f, 0x3fc06800, 0x00000050, 0x203fc068, - 0x03801003, 0x00000800, 0x01480140, 0x00000000, - 0x04001009, 0x00000000, 0x00000000, 0x200000b8, -}; -uint32_t ps[] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000 -}; -size_t vs_size = sizeof(vs); -size_t ps_size = sizeof(ps); - -int main(int argc, char **argv) -{ - int rv; - int width = 400; - int height = 240; - int padded_width = etna_align_up(width, 64); - int padded_height = etna_align_up(height, 64); - - printf("padded_width %i padded_height %i\n", padded_width, padded_height); - struct viv_conn *conn = 0; - rv = viv_open(VIV_HW_3D, &conn); - if(rv!=0) - { - fprintf(stderr, "Error opening device\n"); - exit(1); - } - printf("Succesfully opened device\n"); - - bool supertiled = VIV_FEATURE(conn, chipMinorFeatures0,SUPER_TILED); - unsigned bits_per_tile = VIV_FEATURE(conn, chipMinorFeatures0,2BITPERTILE)?2:4; - - printf("Supertile: %i, bits per tile: %i\n", supertiled, bits_per_tile); - - struct etna_bo *rt = 0; /* main render target */ - struct etna_bo *rt_ts = 0; /* tile status for main render target */ - struct etna_bo *z = 0; /* depth for main render target */ - struct etna_bo *z_ts = 0; /* depth ts for main render target */ - struct etna_bo *vtx = 0; /* vertex buffer */ - struct etna_bo *aux_rt = 0; /* auxilary render target */ - struct etna_bo *bmp = 0; /* bitmap */ - - size_t rt_size = padded_width * padded_height * 4; - size_t rt_ts_size = etna_align_up((padded_width * padded_height * 4)*bits_per_tile/0x80, 0x100); - size_t z_size = padded_width * padded_height * 2; - size_t z_ts_size = etna_align_up((padded_width * padded_height * 2)*bits_per_tile/0x80, 0x100); - size_t bmp_size = width * height * 4; - - if((rt=etna_bo_new(conn, rt_size, DRM_ETNA_GEM_TYPE_RT))==NULL || - (rt_ts=etna_bo_new(conn, rt_ts_size, DRM_ETNA_GEM_TYPE_TS))==NULL || - (z=etna_bo_new(conn, z_size, DRM_ETNA_GEM_TYPE_ZS))==NULL || - (z_ts=etna_bo_new(conn, z_ts_size, DRM_ETNA_GEM_TYPE_TS))==NULL || - (vtx=etna_bo_new(conn, VERTEX_BUFFER_SIZE, DRM_ETNA_GEM_TYPE_VTX))==NULL || - (aux_rt=etna_bo_new(conn, rt_size, DRM_ETNA_GEM_TYPE_BMP))==NULL || - (bmp=etna_bo_new(conn, bmp_size, DRM_ETNA_GEM_TYPE_BMP))==NULL - ) - { - fprintf(stderr, "Error allocating video memory\n"); - exit(1); - } - - /* Phew, now we got all the memory we need. - * Write interleaved attribute vertex stream. - * Unlike the GL example we only do this once, not every time glDrawArrays is called, the same would be accomplished - * from GL by using a vertex buffer object. - */ -#ifdef INTERLEAVED - for(int vert=0; vert +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "write_bmp.h" + +#include "esTransform.h" + +//INTERLEAVED - mix vertices, colors, and normals +#define INTERLEAVED + +#define VERTEX_BUFFER_SIZE 0x100000 + +float vVertices[] = { + // front + -1.0f, -1.0f, +1.0f, // point blue + +1.0f, -1.0f, +1.0f, // point magenta + -1.0f, +1.0f, +1.0f, // point cyan + +1.0f, +1.0f, +1.0f, // point white + // back + +1.0f, -1.0f, -1.0f, // point red + -1.0f, -1.0f, -1.0f, // point black + +1.0f, +1.0f, -1.0f, // point yellow + -1.0f, +1.0f, -1.0f, // point green + // right + +1.0f, -1.0f, +1.0f, // point magenta + +1.0f, -1.0f, -1.0f, // point red + +1.0f, +1.0f, +1.0f, // point white + +1.0f, +1.0f, -1.0f, // point yellow + // left + -1.0f, -1.0f, -1.0f, // point black + -1.0f, -1.0f, +1.0f, // point blue + -1.0f, +1.0f, -1.0f, // point green + -1.0f, +1.0f, +1.0f, // point cyan + // top + -1.0f, +1.0f, +1.0f, // point cyan + +1.0f, +1.0f, +1.0f, // point white + -1.0f, +1.0f, -1.0f, // point green + +1.0f, +1.0f, -1.0f, // point yellow + // bottom + -1.0f, -1.0f, -1.0f, // point black + +1.0f, -1.0f, -1.0f, // point red + -1.0f, -1.0f, +1.0f, // point blue + +1.0f, -1.0f, +1.0f // point magenta +}; + +float vColors[] = { + // front + 0.0f, 0.0f, 1.0f, // blue + 1.0f, 0.0f, 1.0f, // magenta + 0.0f, 1.0f, 1.0f, // cyan + 1.0f, 1.0f, 1.0f, // white + // back + 1.0f, 0.0f, 0.0f, // red + 0.0f, 0.0f, 0.0f, // black + 1.0f, 1.0f, 0.0f, // yellow + 0.0f, 1.0f, 0.0f, // green + // right + 1.0f, 0.0f, 1.0f, // magenta + 1.0f, 0.0f, 0.0f, // red + 1.0f, 1.0f, 1.0f, // white + 1.0f, 1.0f, 0.0f, // yellow + // left + 0.0f, 0.0f, 0.0f, // black + 0.0f, 0.0f, 1.0f, // blue + 0.0f, 1.0f, 0.0f, // green + 0.0f, 1.0f, 1.0f, // cyan + // top + 0.0f, 1.0f, 1.0f, // cyan + 1.0f, 1.0f, 1.0f, // white + 0.0f, 1.0f, 0.0f, // green + 1.0f, 1.0f, 0.0f, // yellow + // bottom + 0.0f, 0.0f, 0.0f, // black + 1.0f, 0.0f, 0.0f, // red + 0.0f, 0.0f, 1.0f, // blue + 1.0f, 0.0f, 1.0f // magenta +}; + +float vNormals[] = { + // front + +0.0f, +0.0f, +1.0f, // forward + +0.0f, +0.0f, +1.0f, // forward + +0.0f, +0.0f, +1.0f, // forward + +0.0f, +0.0f, +1.0f, // forward + // back + +0.0f, +0.0f, -1.0f, // backbard + +0.0f, +0.0f, -1.0f, // backbard + +0.0f, +0.0f, -1.0f, // backbard + +0.0f, +0.0f, -1.0f, // backbard + // right + +1.0f, +0.0f, +0.0f, // right + +1.0f, +0.0f, +0.0f, // right + +1.0f, +0.0f, +0.0f, // right + +1.0f, +0.0f, +0.0f, // right + // left + -1.0f, +0.0f, +0.0f, // left + -1.0f, +0.0f, +0.0f, // left + -1.0f, +0.0f, +0.0f, // left + -1.0f, +0.0f, +0.0f, // left + // top + +0.0f, +1.0f, +0.0f, // up + +0.0f, +1.0f, +0.0f, // up + +0.0f, +1.0f, +0.0f, // up + +0.0f, +1.0f, +0.0f, // up + // bottom + +0.0f, -1.0f, +0.0f, // down + +0.0f, -1.0f, +0.0f, // down + +0.0f, -1.0f, +0.0f, // down + +0.0f, -1.0f, +0.0f // down +}; +#define COMPONENTS_PER_VERTEX (3) +#define NUM_VERTICES (6*4) +#define VERTICES_PER_DRAW 4 +#define DRAW_COUNT 6 + +uint32_t vs[] = { + 0x01831009, 0x00000000, 0x00000000, 0x203fc048, + 0x02031009, 0x00000000, 0x00000000, 0x203fc058, + 0x07841003, 0x39000800, 0x00000050, 0x00000000, + 0x07841002, 0x39001800, 0x00aa0050, 0x00390048, + 0x07841002, 0x39002800, 0x01540050, 0x00390048, + 0x07841002, 0x39003800, 0x01fe0050, 0x00390048, + 0x03851003, 0x29004800, 0x000000d0, 0x00000000, + 0x03851002, 0x29005800, 0x00aa00d0, 0x00290058, + 0x03811002, 0x29006800, 0x015400d0, 0x00290058, + 0x07851003, 0x39007800, 0x00000050, 0x00000000, + 0x07851002, 0x39008800, 0x00aa0050, 0x00390058, + 0x07851002, 0x39009800, 0x01540050, 0x00390058, + 0x07801002, 0x3900a800, 0x01fe0050, 0x00390058, + 0x0401100c, 0x00000000, 0x00000000, 0x003fc008, + 0x03801002, 0x69000800, 0x01fe00c0, 0x00290038, + 0x03831005, 0x29000800, 0x01480040, 0x00000000, + 0x0383100d, 0x00000000, 0x00000000, 0x00000038, + 0x03801003, 0x29000800, 0x014801c0, 0x00000000, + 0x00801005, 0x29001800, 0x01480040, 0x00000000, + 0x0080108f, 0x3fc06800, 0x00000050, 0x203fc068, + 0x03801003, 0x00000800, 0x01480140, 0x00000000, + 0x04001009, 0x00000000, 0x00000000, 0x200000b8, +}; +uint32_t ps[] = { + 0x00000000, 0x00000000, 0x00000000, 0x00000000 +}; +size_t vs_size = sizeof(vs); +size_t ps_size = sizeof(ps); + +int main(int argc, char **argv) +{ + int rv; + int width = 400; + int height = 240; + int padded_width = etna_align_up(width, 64); + int padded_height = etna_align_up(height, 64); + + printf("padded_width %i padded_height %i\n", padded_width, padded_height); + struct viv_conn *conn = 0; + rv = viv_open(VIV_HW_3D, &conn); + if(rv!=0) + { + fprintf(stderr, "Error opening device\n"); + exit(1); + } + printf("Succesfully opened device\n"); + + bool supertiled = VIV_FEATURE(conn, chipMinorFeatures0,SUPER_TILED); + unsigned bits_per_tile = VIV_FEATURE(conn, chipMinorFeatures0,2BITPERTILE)?2:4; + + printf("Supertile: %i, bits per tile: %i\n", supertiled, bits_per_tile); + + struct etna_bo *rt = 0; /* main render target */ + struct etna_bo *rt_ts = 0; /* tile status for main render target */ + struct etna_bo *z = 0; /* depth for main render target */ + struct etna_bo *z_ts = 0; /* depth ts for main render target */ + struct etna_bo *vtx = 0; /* vertex buffer */ + struct etna_bo *aux_rt = 0; /* auxilary render target */ + struct etna_bo *bmp = 0; /* bitmap */ + + size_t rt_size = padded_width * padded_height * 4; + size_t rt_ts_size = etna_align_up((padded_width * padded_height * 4)*bits_per_tile/0x80, 0x100); + size_t z_size = padded_width * padded_height * 2; + size_t z_ts_size = etna_align_up((padded_width * padded_height * 2)*bits_per_tile/0x80, 0x100); + size_t bmp_size = width * height * 4; + + if((rt=etna_bo_new(conn, rt_size, DRM_ETNA_GEM_TYPE_RT))==NULL || + (rt_ts=etna_bo_new(conn, rt_ts_size, DRM_ETNA_GEM_TYPE_TS))==NULL || + (z=etna_bo_new(conn, z_size, DRM_ETNA_GEM_TYPE_ZS))==NULL || + (z_ts=etna_bo_new(conn, z_ts_size, DRM_ETNA_GEM_TYPE_TS))==NULL || + (vtx=etna_bo_new(conn, VERTEX_BUFFER_SIZE, DRM_ETNA_GEM_TYPE_VTX))==NULL || + (aux_rt=etna_bo_new(conn, rt_size, DRM_ETNA_GEM_TYPE_BMP))==NULL || + (bmp=etna_bo_new(conn, bmp_size, DRM_ETNA_GEM_TYPE_BMP))==NULL + ) + { + fprintf(stderr, "Error allocating video memory\n"); + exit(1); + } + + /* Phew, now we got all the memory we need. + * Write interleaved attribute vertex stream. + * Unlike the GL example we only do this once, not every time glDrawArrays is called, the same would be accomplished + * from GL by using a vertex buffer object. + */ +#ifdef INTERLEAVED + for(int vert=0; vert -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include "viv_raw.h" -#include "write_bmp.h" -#include "esTransform.h" - -/* Print generated command buffer */ -//#define CMD_DEBUG -/* Compare generated with stored command buffers generated by Vivante driver */ -#define CMD_COMPARE - -#ifdef CMD_COMPARE -#include "cube_cmd_gc2000.h" -#endif -/* TODO: should actually update context as we go, - a context switch would currently revert state and likely result in corrupted rendering. - */ - -float vVertices[] = { - // front - -1.0f, -1.0f, +1.0f, // point blue - +1.0f, -1.0f, +1.0f, // point magenta - -1.0f, +1.0f, +1.0f, // point cyan - +1.0f, +1.0f, +1.0f, // point white - // back - +1.0f, -1.0f, -1.0f, // point red - -1.0f, -1.0f, -1.0f, // point black - +1.0f, +1.0f, -1.0f, // point yellow - -1.0f, +1.0f, -1.0f, // point green - // right - +1.0f, -1.0f, +1.0f, // point magenta - +1.0f, -1.0f, -1.0f, // point red - +1.0f, +1.0f, +1.0f, // point white - +1.0f, +1.0f, -1.0f, // point yellow - // left - -1.0f, -1.0f, -1.0f, // point black - -1.0f, -1.0f, +1.0f, // point blue - -1.0f, +1.0f, -1.0f, // point green - -1.0f, +1.0f, +1.0f, // point cyan - // top - -1.0f, +1.0f, +1.0f, // point cyan - +1.0f, +1.0f, +1.0f, // point white - -1.0f, +1.0f, -1.0f, // point green - +1.0f, +1.0f, -1.0f, // point yellow - // bottom - -1.0f, -1.0f, -1.0f, // point black - +1.0f, -1.0f, -1.0f, // point red - -1.0f, -1.0f, +1.0f, // point blue - +1.0f, -1.0f, +1.0f // point magenta -}; - -float vColors[] = { - // front - 0.0f, 0.0f, 1.0f, // blue - 1.0f, 0.0f, 1.0f, // magenta - 0.0f, 1.0f, 1.0f, // cyan - 1.0f, 1.0f, 1.0f, // white - // back - 1.0f, 0.0f, 0.0f, // red - 0.0f, 0.0f, 0.0f, // black - 1.0f, 1.0f, 0.0f, // yellow - 0.0f, 1.0f, 0.0f, // green - // right - 1.0f, 0.0f, 1.0f, // magenta - 1.0f, 0.0f, 0.0f, // red - 1.0f, 1.0f, 1.0f, // white - 1.0f, 1.0f, 0.0f, // yellow - // left - 0.0f, 0.0f, 0.0f, // black - 0.0f, 0.0f, 1.0f, // blue - 0.0f, 1.0f, 0.0f, // green - 0.0f, 1.0f, 1.0f, // cyan - // top - 0.0f, 1.0f, 1.0f, // cyan - 1.0f, 1.0f, 1.0f, // white - 0.0f, 1.0f, 0.0f, // green - 1.0f, 1.0f, 0.0f, // yellow - // bottom - 0.0f, 0.0f, 0.0f, // black - 1.0f, 0.0f, 0.0f, // red - 0.0f, 0.0f, 1.0f, // blue - 1.0f, 0.0f, 1.0f // magenta -}; - -float vNormals[] = { - // front - +0.0f, +0.0f, +1.0f, // forward - +0.0f, +0.0f, +1.0f, // forward - +0.0f, +0.0f, +1.0f, // forward - +0.0f, +0.0f, +1.0f, // forward - // back - +0.0f, +0.0f, -1.0f, // backbard - +0.0f, +0.0f, -1.0f, // backbard - +0.0f, +0.0f, -1.0f, // backbard - +0.0f, +0.0f, -1.0f, // backbard - // right - +1.0f, +0.0f, +0.0f, // right - +1.0f, +0.0f, +0.0f, // right - +1.0f, +0.0f, +0.0f, // right - +1.0f, +0.0f, +0.0f, // right - // left - -1.0f, +0.0f, +0.0f, // left - -1.0f, +0.0f, +0.0f, // left - -1.0f, +0.0f, +0.0f, // left - -1.0f, +0.0f, +0.0f, // left - // top - +0.0f, +1.0f, +0.0f, // up - +0.0f, +1.0f, +0.0f, // up - +0.0f, +1.0f, +0.0f, // up - +0.0f, +1.0f, +0.0f, // up - // bottom - +0.0f, -1.0f, +0.0f, // down - +0.0f, -1.0f, +0.0f, // down - +0.0f, -1.0f, +0.0f, // down - +0.0f, -1.0f, +0.0f // down -}; -#define COMPONENTS_PER_VERTEX (3) -#define NUM_VERTICES (6*4) -#define VERTICES_PER_DRAW 4 -#define DRAW_COUNT 6 - -#ifdef CMD_COMPARE -char is_padding[0x8000 / 4]; -#endif - -/* macro for MASKED() (multiple can be &ed) */ -#define VIV_MASKED(NAME, VALUE) (~(NAME ## _MASK | NAME ## __MASK) | ((VALUE)<<(NAME ## __SHIFT))) -/* for boolean bits */ -#define VIV_MASKED_BIT(NAME, VALUE) (~(NAME ## _MASK | NAME) | ((VALUE) ? NAME : 0)) -/* for inline enum bit fields - * XXX in principle headergen could simply generate these fields prepackaged - */ -#define VIV_MASKED_INL(NAME, VALUE) (~(NAME ## _MASK | NAME ## __MASK) | (NAME ## _ ## VALUE)) - -/* XXX store state changes - * group consecutive states - * make LOAD_STATE commands, add to current command buffer - */ -static inline void etna_set_state(gcoCMDBUF commandBuffer, uint32_t address, uint32_t value) -{ -#ifdef CMD_DEBUG - printf("%05x := %08x\n", address, value); -#endif - uint32_t *tgt = (uint32_t*)((size_t)commandBuffer->logical + commandBuffer->offset); - tgt[0] = VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE | - VIV_FE_LOAD_STATE_HEADER_COUNT(1) | - VIV_FE_LOAD_STATE_HEADER_OFFSET(address >> 2); - tgt[1] = value; - commandBuffer->offset += 8; -} - -/* this can be inlined, though would likely be even faster to return a pointer and let the client write to - * the buffer directly */ -static inline void etna_set_state_multi(gcoCMDBUF commandBuffer, uint32_t base, uint32_t num, uint32_t *values) -{ - uint32_t *tgt = (uint32_t*)((size_t)commandBuffer->logical + commandBuffer->offset); - tgt[0] = VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE | - VIV_FE_LOAD_STATE_HEADER_COUNT(num & 0x3ff) | - VIV_FE_LOAD_STATE_HEADER_OFFSET(base >> 2); -#ifdef CMD_DEBUG - for(uint32_t idx=0; idxoffset += 4 + num*4; - if(commandBuffer->offset & 4) /* PAD */ - { -#ifdef CMD_COMPARE - is_padding[commandBuffer->offset / 4] = 1; -#endif - commandBuffer->offset += 4; - } -} -static inline void etna_set_state_multi_fixp(gcoCMDBUF commandBuffer, uint32_t base, uint32_t num, uint32_t *values) -{ - uint32_t *tgt = (uint32_t*)((size_t)commandBuffer->logical + commandBuffer->offset); - tgt[0] = VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE | - VIV_FE_LOAD_STATE_HEADER_FIXP | - VIV_FE_LOAD_STATE_HEADER_COUNT(num & 0x3ff) | - VIV_FE_LOAD_STATE_HEADER_OFFSET(base >> 2); - #ifdef CMD_DEBUG - for(uint32_t idx=0; idxoffset += 4 + num*4; - if(commandBuffer->offset & 4) /* PAD */ - { - #ifdef CMD_COMPARE - is_padding[commandBuffer->offset / 4] = 1; - #endif - commandBuffer->offset += 4; - } -} -static inline void etna_set_state_f32(gcoCMDBUF commandBuffer, uint32_t address, float value) -{ - union { - uint32_t i32; - float f32; - } x = { .f32 = value }; - etna_set_state(commandBuffer, address, x.i32); -} -static inline void etna_set_state_fixp(gcoCMDBUF commandBuffer, uint32_t address, uint32_t value) -{ -#ifdef CMD_DEBUG - printf("%05x := %08x (fixp)\n", address, value); -#endif - uint32_t *tgt = (uint32_t*)((size_t)commandBuffer->logical + commandBuffer->offset); - tgt[0] = VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE | - VIV_FE_LOAD_STATE_HEADER_COUNT(1) | - VIV_FE_LOAD_STATE_HEADER_FIXP | - VIV_FE_LOAD_STATE_HEADER_OFFSET(address >> 2); - tgt[1] = value; - commandBuffer->offset += 8; -} -static inline void etna_draw_primitives(gcoCMDBUF cmdPtr, uint32_t primitive_type, uint32_t start, uint32_t count) -{ -#ifdef CMD_DEBUG - printf("draw_primitives %08x %08x %08x %08x\n", - VIV_FE_DRAW_PRIMITIVES_HEADER_OP_DRAW_PRIMITIVES, - primitive_type, start, count); -#endif - uint32_t *tgt = (uint32_t*)((size_t)cmdPtr->logical + cmdPtr->offset); - tgt[0] = VIV_FE_DRAW_PRIMITIVES_HEADER_OP_DRAW_PRIMITIVES; - tgt[1] = primitive_type; - tgt[2] = start; - tgt[3] = count; - cmdPtr->offset += 16; -} -static inline void etna_stall_9(gcoCMDBUF commandBuffer) -{ - uint32_t *tgt = (uint32_t*)((size_t)commandBuffer->logical + commandBuffer->offset); - tgt[0] = 0x48000000; - tgt[1] = 0x00000701; - commandBuffer->offset += 8; -} - -#ifdef CMD_COMPARE -static int cmdbuffer_compare(gcoCMDBUF cmdPtr, uint32_t *cmdbuf, uint32_t cmdbuf_size) -{ - /* Count differences between generated and stored command buffer */ - int diff = 0; - for(int idx=8; idxlogical + cmdPtr->startOffset + idx*4); - printf("/*%03x*/ %08x ref:%08x ", idx, my_word, cmdbuf_word); - if(is_padding[cmdPtr->startOffset/4 + idx]) - { - printf("PAD"); - } else if(cmdbuf_word != my_word) - { - diff += 1; - printf("DIFF"); - } - printf("\n"); - } - printf("Number of differences: %i\n", diff); - uint32_t size_cmd = cmdbuf_size/4; - uint32_t size_my = (cmdPtr->offset - cmdPtr->startOffset)/4; - printf("Sizes: %i %i\n", size_cmd, size_my); - return diff != 0 || size_cmd != size_my; -} -#endif - -static inline uint32_t align_up(uint32_t value, uint32_t granularity) -{ - return (value + (granularity-1)) & (~(granularity-1)); -} - -int main(int argc, char **argv) -{ - int rv; - int width = 400; - int height = 240; - int padded_width = align_up(width, 64); - int padded_height = align_up(height, 64); - printf("padded_width %i padded_height %i\n", padded_width, padded_height); - struct viv_conn *conn = 0; - rv = viv_open(VIV_HW_3D, &conn); - if(rv!=0) - { - fprintf(stderr, "Error opening device\n"); - exit(1); - } - printf("Succesfully opened device\n"); - viv_show_chip_info(conn); - - gcsHAL_INTERFACE id = {}; - id.command = gcvHAL_ATTACH; - if((viv_invoke(conn, &id)) != gcvSTATUS_OK) - { - #ifdef DEBUG - fprintf(stderr, "Error attaching to GPU\n"); - #endif - exit(1); - } - gckCONTEXT context = id.u.Attach.context; - - /* allocate command buffer (blob uses four command buffers, but we don't even fill one) */ - viv_addr_t buf0_physical = 0; - void *buf0_logical = 0; - if(viv_alloc_contiguous(conn, 0x20000, &buf0_physical, &buf0_logical, NULL)!=0) - { - fprintf(stderr, "Error allocating host memory\n"); - exit(1); - } - printf("Allocated buffer: phys=%08x log=%08x\n", (uint32_t)buf0_physical, (uint32_t)buf0_logical); - - /* allocate main render target */ - gcuVIDMEM_NODE_PTR rt_node = 0; - if(viv_alloc_linear_vidmem(conn, (padded_width * padded_height * 4), 0x40, gcvSURF_RENDER_TARGET, gcvPOOL_DEFAULT, &rt_node, NULL)!=0) - { - fprintf(stderr, "Error allocating render target buffer memory\n"); - exit(1); - } - printf("Allocated render target node: node=%08x\n", (uint32_t)rt_node); - - viv_addr_t rt_physical = 0; /* ADDR_A */ - void *rt_logical = 0; - if(viv_lock_vidmem(conn, rt_node, &rt_physical, &rt_logical)!=0) - { - fprintf(stderr, "Error locking render target memory\n"); - exit(1); - } - printf("Locked render target: phys=%08x log=%08x\n", (uint32_t)rt_physical, (uint32_t)rt_logical); - memset(rt_logical, 0xff, padded_width * padded_height * 4); /* clear previous result just in case, test that clearing works */ - - /* allocate tile status for main render target */ - gcuVIDMEM_NODE_PTR rt_ts_node = 0; - uint32_t rt_ts_size = align_up((padded_width * padded_height * 4)/0x100, 0x100); - if(viv_alloc_linear_vidmem(conn, rt_ts_size, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &rt_ts_node, NULL)!=0) - { - fprintf(stderr, "Error allocating render target tile status memory\n"); - exit(1); - } - printf("Allocated render target tile status node: node=%08x size=%08x\n", (uint32_t)rt_ts_node, rt_ts_size); - - viv_addr_t rt_ts_physical = 0; /* ADDR_B */ - void *rt_ts_logical = 0; - if(viv_lock_vidmem(conn, rt_ts_node, &rt_ts_physical, &rt_ts_logical)!=0) - { - fprintf(stderr, "Error locking render target memory\n"); - exit(1); - } - printf("Locked render target ts: phys=%08x log=%08x\n", (uint32_t)rt_ts_physical, (uint32_t)rt_ts_logical); - - /* allocate depth for main render target */ - gcuVIDMEM_NODE_PTR z_node = 0; - if(viv_alloc_linear_vidmem(conn, padded_width * padded_height * 2, 0x40, gcvSURF_DEPTH, gcvPOOL_DEFAULT, &z_node, NULL)!=0) - { - fprintf(stderr, "Error allocating depth memory\n"); - exit(1); - } - printf("Allocated depth node: node=%08x\n", (uint32_t)z_node); - - viv_addr_t z_physical = 0; /* ADDR_C */ - void *z_logical = 0; - if(viv_lock_vidmem(conn, z_node, &z_physical, &z_logical)!=0) - { - fprintf(stderr, "Error locking depth target memory\n"); - exit(1); - } - printf("Locked depth target: phys=%08x log=%08x\n", (uint32_t)z_physical, (uint32_t)z_logical); - - /* allocate depth ts for main render target */ - gcuVIDMEM_NODE_PTR z_ts_node = 0; - uint32_t z_ts_size = align_up((padded_width * padded_height * 2)/0x100, 0x100); - if(viv_alloc_linear_vidmem(conn, z_ts_size, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &z_ts_node, NULL)!=0) - { - fprintf(stderr, "Error allocating depth memory\n"); - exit(1); - } - printf("Allocated depth ts node: node=%08x size=%08x\n", (uint32_t)z_ts_node, z_ts_size); - - viv_addr_t z_ts_physical = 0; /* ADDR_D */ - void *z_ts_logical = 0; - if(viv_lock_vidmem(conn, z_ts_node, &z_ts_physical, &z_ts_logical)!=0) - { - fprintf(stderr, "Error locking depth target ts memory\n"); - exit(1); - } - printf("Locked depth ts target: phys=%08x log=%08x\n", (uint32_t)z_ts_physical, (uint32_t)z_ts_logical); - - /* allocate vertex buffer */ - gcuVIDMEM_NODE_PTR vtx_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x100000, 0x40, gcvSURF_VERTEX, gcvPOOL_DEFAULT, &vtx_node, NULL)!=0) - { - fprintf(stderr, "Error allocating vertex memory\n"); - exit(1); - } - printf("Allocated vertex node: node=%08x\n", (uint32_t)vtx_node); - - viv_addr_t vtx_physical = 0; /* ADDR_E */ - void *vtx_logical = 0; - if(viv_lock_vidmem(conn, vtx_node, &vtx_physical, &vtx_logical)!=0) - { - fprintf(stderr, "Error locking vertex memory\n"); - exit(1); - } - printf("Locked vertex memory: phys=%08x log=%08x\n", (uint32_t)vtx_physical, (uint32_t)vtx_logical); - - /* allocate aux render target */ - gcuVIDMEM_NODE_PTR aux_rt_node = 0; - if(viv_alloc_linear_vidmem(conn, padded_width * padded_height * 4, 0x40, gcvSURF_BITMAP, gcvPOOL_DEFAULT, &aux_rt_node, NULL)!=0) - { - fprintf(stderr, "Error allocating aux render target buffer memory\n"); - exit(1); - } - printf("Allocated aux render target node: node=%08x\n", (uint32_t)aux_rt_node); - - viv_addr_t aux_rt_physical = 0; /* ADDR_F */ - void *aux_rt_logical = 0; - if(viv_lock_vidmem(conn, aux_rt_node, &aux_rt_physical, &aux_rt_logical)!=0) - { - fprintf(stderr, "Error locking aux render target memory\n"); - exit(1); - } - printf("Locked aux render target: phys=%08x log=%08x\n", (uint32_t)aux_rt_physical, (uint32_t)aux_rt_logical); - - /* Phew, now we got all the memory we need. - * Write interleaved attribute vertex stream. - * Unlike the GL example we only do this once, not every time glDrawArrays is called, the same would be accomplished - * from GL by using a vertex buffer object. - */ - int dest_idx = 0; - int v_src_idx = 0; - int n_src_idx = 0; - int c_src_idx = 0; - for(int jj=0; jj +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include "viv_raw.h" +#include "write_bmp.h" +#include "esTransform.h" + +/* Print generated command buffer */ +//#define CMD_DEBUG +/* Compare generated with stored command buffers generated by Vivante driver */ +#define CMD_COMPARE + +#ifdef CMD_COMPARE +#include "cube_cmd_gc880.h" +#endif +/* TODO: should actually update context as we go, + a context switch would currently revert state and likely result in corrupted rendering. + */ + +float vVertices[] = { + // front + -1.0f, -1.0f, +1.0f, // point blue + +1.0f, -1.0f, +1.0f, // point magenta + -1.0f, +1.0f, +1.0f, // point cyan + +1.0f, +1.0f, +1.0f, // point white + // back + +1.0f, -1.0f, -1.0f, // point red + -1.0f, -1.0f, -1.0f, // point black + +1.0f, +1.0f, -1.0f, // point yellow + -1.0f, +1.0f, -1.0f, // point green + // right + +1.0f, -1.0f, +1.0f, // point magenta + +1.0f, -1.0f, -1.0f, // point red + +1.0f, +1.0f, +1.0f, // point white + +1.0f, +1.0f, -1.0f, // point yellow + // left + -1.0f, -1.0f, -1.0f, // point black + -1.0f, -1.0f, +1.0f, // point blue + -1.0f, +1.0f, -1.0f, // point green + -1.0f, +1.0f, +1.0f, // point cyan + // top + -1.0f, +1.0f, +1.0f, // point cyan + +1.0f, +1.0f, +1.0f, // point white + -1.0f, +1.0f, -1.0f, // point green + +1.0f, +1.0f, -1.0f, // point yellow + // bottom + -1.0f, -1.0f, -1.0f, // point black + +1.0f, -1.0f, -1.0f, // point red + -1.0f, -1.0f, +1.0f, // point blue + +1.0f, -1.0f, +1.0f // point magenta +}; + +float vColors[] = { + // front + 0.0f, 0.0f, 1.0f, // blue + 1.0f, 0.0f, 1.0f, // magenta + 0.0f, 1.0f, 1.0f, // cyan + 1.0f, 1.0f, 1.0f, // white + // back + 1.0f, 0.0f, 0.0f, // red + 0.0f, 0.0f, 0.0f, // black + 1.0f, 1.0f, 0.0f, // yellow + 0.0f, 1.0f, 0.0f, // green + // right + 1.0f, 0.0f, 1.0f, // magenta + 1.0f, 0.0f, 0.0f, // red + 1.0f, 1.0f, 1.0f, // white + 1.0f, 1.0f, 0.0f, // yellow + // left + 0.0f, 0.0f, 0.0f, // black + 0.0f, 0.0f, 1.0f, // blue + 0.0f, 1.0f, 0.0f, // green + 0.0f, 1.0f, 1.0f, // cyan + // top + 0.0f, 1.0f, 1.0f, // cyan + 1.0f, 1.0f, 1.0f, // white + 0.0f, 1.0f, 0.0f, // green + 1.0f, 1.0f, 0.0f, // yellow + // bottom + 0.0f, 0.0f, 0.0f, // black + 1.0f, 0.0f, 0.0f, // red + 0.0f, 0.0f, 1.0f, // blue + 1.0f, 0.0f, 1.0f // magenta +}; + +float vNormals[] = { + // front + +0.0f, +0.0f, +1.0f, // forward + +0.0f, +0.0f, +1.0f, // forward + +0.0f, +0.0f, +1.0f, // forward + +0.0f, +0.0f, +1.0f, // forward + // back + +0.0f, +0.0f, -1.0f, // backbard + +0.0f, +0.0f, -1.0f, // backbard + +0.0f, +0.0f, -1.0f, // backbard + +0.0f, +0.0f, -1.0f, // backbard + // right + +1.0f, +0.0f, +0.0f, // right + +1.0f, +0.0f, +0.0f, // right + +1.0f, +0.0f, +0.0f, // right + +1.0f, +0.0f, +0.0f, // right + // left + -1.0f, +0.0f, +0.0f, // left + -1.0f, +0.0f, +0.0f, // left + -1.0f, +0.0f, +0.0f, // left + -1.0f, +0.0f, +0.0f, // left + // top + +0.0f, +1.0f, +0.0f, // up + +0.0f, +1.0f, +0.0f, // up + +0.0f, +1.0f, +0.0f, // up + +0.0f, +1.0f, +0.0f, // up + // bottom + +0.0f, -1.0f, +0.0f, // down + +0.0f, -1.0f, +0.0f, // down + +0.0f, -1.0f, +0.0f, // down + +0.0f, -1.0f, +0.0f // down +}; +#define COMPONENTS_PER_VERTEX (3) +#define NUM_VERTICES (6*4) +#define VERTICES_PER_DRAW 4 +#define DRAW_COUNT 6 + +#ifdef CMD_COMPARE +char is_padding[0x8000 / 4]; +#endif + +/* macro for MASKED() (multiple can be &ed) */ +#define VIV_MASKED(NAME, VALUE) (~(NAME ## _MASK | NAME ## __MASK) | ((VALUE)<<(NAME ## __SHIFT))) +/* for boolean bits */ +#define VIV_MASKED_BIT(NAME, VALUE) (~(NAME ## _MASK | NAME) | ((VALUE) ? NAME : 0)) +/* for inline enum bit fields + * XXX in principle headergen could simply generate these fields prepackaged + */ +#define VIV_MASKED_INL(NAME, VALUE) (~(NAME ## _MASK | NAME ## __MASK) | (NAME ## _ ## VALUE)) + +/* XXX store state changes + * group consecutive states + * make LOAD_STATE commands, add to current command buffer + */ +static inline void etna_set_state(gcoCMDBUF commandBuffer, uint32_t address, uint32_t value) +{ +#ifdef CMD_DEBUG + printf("%05x := %08x\n", address, value); +#endif + uint32_t *tgt = (uint32_t*)((size_t)commandBuffer->logical + commandBuffer->offset); + tgt[0] = VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE | + VIV_FE_LOAD_STATE_HEADER_COUNT(1) | + VIV_FE_LOAD_STATE_HEADER_OFFSET(address >> 2); + tgt[1] = value; + commandBuffer->offset += 8; +} + +/* this can be inlined, though would likely be even faster to return a pointer and let the client write to + * the buffer directly */ +static inline void etna_set_state_multi(gcoCMDBUF commandBuffer, uint32_t base, uint32_t num, uint32_t *values) +{ + uint32_t *tgt = (uint32_t*)((size_t)commandBuffer->logical + commandBuffer->offset); + tgt[0] = VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE | + VIV_FE_LOAD_STATE_HEADER_COUNT(num & 0x3ff) | + VIV_FE_LOAD_STATE_HEADER_OFFSET(base >> 2); +#ifdef CMD_DEBUG + for(uint32_t idx=0; idxoffset += 4 + num*4; + if(commandBuffer->offset & 4) /* PAD */ + { +#ifdef CMD_COMPARE + is_padding[commandBuffer->offset / 4] = 1; +#endif + commandBuffer->offset += 4; + } +} +static inline void etna_set_state_multi_fixp(gcoCMDBUF commandBuffer, uint32_t base, uint32_t num, uint32_t *values) +{ + uint32_t *tgt = (uint32_t*)((size_t)commandBuffer->logical + commandBuffer->offset); + tgt[0] = VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE | + VIV_FE_LOAD_STATE_HEADER_FIXP | + VIV_FE_LOAD_STATE_HEADER_COUNT(num & 0x3ff) | + VIV_FE_LOAD_STATE_HEADER_OFFSET(base >> 2); + #ifdef CMD_DEBUG + for(uint32_t idx=0; idxoffset += 4 + num*4; + if(commandBuffer->offset & 4) /* PAD */ + { + #ifdef CMD_COMPARE + is_padding[commandBuffer->offset / 4] = 1; + #endif + commandBuffer->offset += 4; + } +} +static inline void etna_set_state_f32(gcoCMDBUF commandBuffer, uint32_t address, float value) +{ + union { + uint32_t i32; + float f32; + } x = { .f32 = value }; + etna_set_state(commandBuffer, address, x.i32); +} +static inline void etna_set_state_fixp(gcoCMDBUF commandBuffer, uint32_t address, uint32_t value) +{ +#ifdef CMD_DEBUG + printf("%05x := %08x (fixp)\n", address, value); +#endif + uint32_t *tgt = (uint32_t*)((size_t)commandBuffer->logical + commandBuffer->offset); + tgt[0] = VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE | + VIV_FE_LOAD_STATE_HEADER_COUNT(1) | + VIV_FE_LOAD_STATE_HEADER_FIXP | + VIV_FE_LOAD_STATE_HEADER_OFFSET(address >> 2); + tgt[1] = value; + commandBuffer->offset += 8; +} +static inline void etna_draw_primitives(gcoCMDBUF cmdPtr, uint32_t primitive_type, uint32_t start, uint32_t count) +{ +#ifdef CMD_DEBUG + printf("draw_primitives %08x %08x %08x %08x\n", + VIV_FE_DRAW_PRIMITIVES_HEADER_OP_DRAW_PRIMITIVES, + primitive_type, start, count); +#endif + uint32_t *tgt = (uint32_t*)((size_t)cmdPtr->logical + cmdPtr->offset); + tgt[0] = VIV_FE_DRAW_PRIMITIVES_HEADER_OP_DRAW_PRIMITIVES; + tgt[1] = primitive_type; + tgt[2] = start; + tgt[3] = count; + cmdPtr->offset += 16; +} +static inline void etna_stall_9(gcoCMDBUF commandBuffer) +{ + uint32_t *tgt = (uint32_t*)((size_t)commandBuffer->logical + commandBuffer->offset); + tgt[0] = 0x48000000; + tgt[1] = 0x00000701; + commandBuffer->offset += 8; +} + +#ifdef CMD_COMPARE +static int cmdbuffer_compare(gcoCMDBUF cmdPtr, uint32_t *cmdbuf, uint32_t cmdbuf_size) +{ + /* Count differences between generated and stored command buffer */ + int diff = 0; + for(int idx=8; idxlogical + cmdPtr->startOffset + idx*4); + printf("/*%03x*/ %08x ref:%08x ", idx, my_word, cmdbuf_word); + if(is_padding[cmdPtr->startOffset/4 + idx]) + { + printf("PAD"); + } else if(cmdbuf_word != my_word) + { + diff += 1; + printf("DIFF"); + } + printf("\n"); + } + printf("Number of differences: %i\n", diff); + uint32_t size_cmd = cmdbuf_size/4; + uint32_t size_my = (cmdPtr->offset - cmdPtr->startOffset)/4; + printf("Sizes: %i %i\n", size_cmd, size_my); + return diff != 0 || size_cmd != size_my; +} +#endif + +static inline uint32_t align_up(uint32_t value, uint32_t granularity) +{ + return (value + (granularity-1)) & (~(granularity-1)); +} + +int main(int argc, char **argv) +{ + int rv; + int width = 400; + int height = 240; + int padded_width = align_up(width, 64); + int padded_height = align_up(height, 64); + printf("padded_width %i padded_height %i\n", padded_width, padded_height); + struct viv_conn *conn = 0; + rv = viv_open(VIV_HW_3D, &conn); + if(rv!=0) + { + fprintf(stderr, "Error opening device\n"); + exit(1); + } + printf("Succesfully opened device\n"); + viv_show_chip_info(conn); + + gcsHAL_INTERFACE id = {}; + id.command = gcvHAL_ATTACH; + if((viv_invoke(conn, &id)) != gcvSTATUS_OK) + { + #ifdef DEBUG + fprintf(stderr, "Error attaching to GPU\n"); + #endif + exit(1); + } + gckCONTEXT context = id.u.Attach.context; + + /* allocate command buffer (blob uses four command buffers, but we don't even fill one) */ + viv_addr_t buf0_physical = 0; + void *buf0_logical = 0; + if(viv_alloc_contiguous(conn, 0x20000, &buf0_physical, &buf0_logical, NULL)!=0) + { + fprintf(stderr, "Error allocating host memory\n"); + exit(1); + } + printf("Allocated buffer: phys=%08x log=%08x\n", (uint32_t)buf0_physical, (uint32_t)buf0_logical); + + /* allocate main render target */ + gcuVIDMEM_NODE_PTR rt_node = 0; + if(viv_alloc_linear_vidmem(conn, (padded_width * padded_height * 4), 0x40, gcvSURF_RENDER_TARGET, gcvPOOL_DEFAULT, &rt_node, NULL)!=0) + { + fprintf(stderr, "Error allocating render target buffer memory\n"); + exit(1); + } + printf("Allocated render target node: node=%08x\n", (uint32_t)rt_node); + + viv_addr_t rt_physical = 0; /* ADDR_A */ + void *rt_logical = 0; + if(viv_lock_vidmem(conn, rt_node, &rt_physical, &rt_logical)!=0) + { + fprintf(stderr, "Error locking render target memory\n"); + exit(1); + } + printf("Locked render target: phys=%08x log=%08x\n", (uint32_t)rt_physical, (uint32_t)rt_logical); + memset(rt_logical, 0xff, padded_width * padded_height * 4); /* clear previous result just in case, test that clearing works */ + + /* allocate tile status for main render target */ + gcuVIDMEM_NODE_PTR rt_ts_node = 0; + uint32_t rt_ts_size = align_up((padded_width * padded_height * 4)/0x100, 0x100); + if(viv_alloc_linear_vidmem(conn, rt_ts_size, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &rt_ts_node, NULL)!=0) + { + fprintf(stderr, "Error allocating render target tile status memory\n"); + exit(1); + } + printf("Allocated render target tile status node: node=%08x size=%08x\n", (uint32_t)rt_ts_node, rt_ts_size); + + viv_addr_t rt_ts_physical = 0; /* ADDR_B */ + void *rt_ts_logical = 0; + if(viv_lock_vidmem(conn, rt_ts_node, &rt_ts_physical, &rt_ts_logical)!=0) + { + fprintf(stderr, "Error locking render target memory\n"); + exit(1); + } + printf("Locked render target ts: phys=%08x log=%08x\n", (uint32_t)rt_ts_physical, (uint32_t)rt_ts_logical); + + /* allocate depth for main render target */ + gcuVIDMEM_NODE_PTR z_node = 0; + if(viv_alloc_linear_vidmem(conn, padded_width * padded_height * 2, 0x40, gcvSURF_DEPTH, gcvPOOL_DEFAULT, &z_node, NULL)!=0) + { + fprintf(stderr, "Error allocating depth memory\n"); + exit(1); + } + printf("Allocated depth node: node=%08x\n", (uint32_t)z_node); + + viv_addr_t z_physical = 0; /* ADDR_C */ + void *z_logical = 0; + if(viv_lock_vidmem(conn, z_node, &z_physical, &z_logical)!=0) + { + fprintf(stderr, "Error locking depth target memory\n"); + exit(1); + } + printf("Locked depth target: phys=%08x log=%08x\n", (uint32_t)z_physical, (uint32_t)z_logical); + + /* allocate depth ts for main render target */ + gcuVIDMEM_NODE_PTR z_ts_node = 0; + uint32_t z_ts_size = align_up((padded_width * padded_height * 2)/0x100, 0x100); + if(viv_alloc_linear_vidmem(conn, z_ts_size, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &z_ts_node, NULL)!=0) + { + fprintf(stderr, "Error allocating depth memory\n"); + exit(1); + } + printf("Allocated depth ts node: node=%08x size=%08x\n", (uint32_t)z_ts_node, z_ts_size); + + viv_addr_t z_ts_physical = 0; /* ADDR_D */ + void *z_ts_logical = 0; + if(viv_lock_vidmem(conn, z_ts_node, &z_ts_physical, &z_ts_logical)!=0) + { + fprintf(stderr, "Error locking depth target ts memory\n"); + exit(1); + } + printf("Locked depth ts target: phys=%08x log=%08x\n", (uint32_t)z_ts_physical, (uint32_t)z_ts_logical); + + /* allocate vertex buffer */ + gcuVIDMEM_NODE_PTR vtx_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x100000, 0x40, gcvSURF_VERTEX, gcvPOOL_DEFAULT, &vtx_node, NULL)!=0) + { + fprintf(stderr, "Error allocating vertex memory\n"); + exit(1); + } + printf("Allocated vertex node: node=%08x\n", (uint32_t)vtx_node); + + viv_addr_t vtx_physical = 0; /* ADDR_E */ + void *vtx_logical = 0; + if(viv_lock_vidmem(conn, vtx_node, &vtx_physical, &vtx_logical)!=0) + { + fprintf(stderr, "Error locking vertex memory\n"); + exit(1); + } + printf("Locked vertex memory: phys=%08x log=%08x\n", (uint32_t)vtx_physical, (uint32_t)vtx_logical); + + /* allocate aux render target */ + gcuVIDMEM_NODE_PTR aux_rt_node = 0; + if(viv_alloc_linear_vidmem(conn, padded_width * padded_height * 4, 0x40, gcvSURF_BITMAP, gcvPOOL_DEFAULT, &aux_rt_node, NULL)!=0) + { + fprintf(stderr, "Error allocating aux render target buffer memory\n"); + exit(1); + } + printf("Allocated aux render target node: node=%08x\n", (uint32_t)aux_rt_node); + + viv_addr_t aux_rt_physical = 0; /* ADDR_F */ + void *aux_rt_logical = 0; + if(viv_lock_vidmem(conn, aux_rt_node, &aux_rt_physical, &aux_rt_logical)!=0) + { + fprintf(stderr, "Error locking aux render target memory\n"); + exit(1); + } + printf("Locked aux render target: phys=%08x log=%08x\n", (uint32_t)aux_rt_physical, (uint32_t)aux_rt_logical); + + /* Phew, now we got all the memory we need. + * Write interleaved attribute vertex stream. + * Unlike the GL example we only do this once, not every time glDrawArrays is called, the same would be accomplished + * from GL by using a vertex buffer object. + */ + int dest_idx = 0; + int v_src_idx = 0; + int n_src_idx = 0; + int c_src_idx = 0; + for(int jj=0; jj -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "write_bmp.h" -#include "viv_raw.h" - -#include "cube_cmd_gc2000.h" -/* TODO: should actually update context as we go, - * a context switch would currently revert state and likely result in corrupted rendering. - */ -#include "context_cmd.h" - -float vVertices[] = { - // front - -1.0f, -1.0f, +1.0f, // point blue - +1.0f, -1.0f, +1.0f, // point magenta - -1.0f, +1.0f, +1.0f, // point cyan - +1.0f, +1.0f, +1.0f, // point white - // back - +1.0f, -1.0f, -1.0f, // point red - -1.0f, -1.0f, -1.0f, // point black - +1.0f, +1.0f, -1.0f, // point yellow - -1.0f, +1.0f, -1.0f, // point green - // right - +1.0f, -1.0f, +1.0f, // point magenta - +1.0f, -1.0f, -1.0f, // point red - +1.0f, +1.0f, +1.0f, // point white - +1.0f, +1.0f, -1.0f, // point yellow - // left - -1.0f, -1.0f, -1.0f, // point black - -1.0f, -1.0f, +1.0f, // point blue - -1.0f, +1.0f, -1.0f, // point green - -1.0f, +1.0f, +1.0f, // point cyan - // top - -1.0f, +1.0f, +1.0f, // point cyan - +1.0f, +1.0f, +1.0f, // point white - -1.0f, +1.0f, -1.0f, // point green - +1.0f, +1.0f, -1.0f, // point yellow - // bottom - -1.0f, -1.0f, -1.0f, // point black - +1.0f, -1.0f, -1.0f, // point red - -1.0f, -1.0f, +1.0f, // point blue - +1.0f, -1.0f, +1.0f // point magenta -}; - -float vColors[] = { - // front - 0.0f, 0.0f, 1.0f, // blue - 1.0f, 0.0f, 1.0f, // magenta - 0.0f, 1.0f, 1.0f, // cyan - 1.0f, 1.0f, 1.0f, // white - // back - 1.0f, 0.0f, 0.0f, // red - 0.0f, 0.0f, 0.0f, // black - 1.0f, 1.0f, 0.0f, // yellow - 0.0f, 1.0f, 0.0f, // green - // right - 1.0f, 0.0f, 1.0f, // magenta - 1.0f, 0.0f, 0.0f, // red - 1.0f, 1.0f, 1.0f, // white - 1.0f, 1.0f, 0.0f, // yellow - // left - 0.0f, 0.0f, 0.0f, // black - 0.0f, 0.0f, 1.0f, // blue - 0.0f, 1.0f, 0.0f, // green - 0.0f, 1.0f, 1.0f, // cyan - // top - 0.0f, 1.0f, 1.0f, // cyan - 1.0f, 1.0f, 1.0f, // white - 0.0f, 1.0f, 0.0f, // green - 1.0f, 1.0f, 0.0f, // yellow - // bottom - 0.0f, 0.0f, 0.0f, // black - 1.0f, 0.0f, 0.0f, // red - 0.0f, 0.0f, 1.0f, // blue - 1.0f, 0.0f, 1.0f // magenta -}; - -float vNormals[] = { - // front - +0.0f, +0.0f, +1.0f, // forward - +0.0f, +0.0f, +1.0f, // forward - +0.0f, +0.0f, +1.0f, // forward - +0.0f, +0.0f, +1.0f, // forward - // back - +0.0f, +0.0f, -1.0f, // backbard - +0.0f, +0.0f, -1.0f, // backbard - +0.0f, +0.0f, -1.0f, // backbard - +0.0f, +0.0f, -1.0f, // backbard - // right - +1.0f, +0.0f, +0.0f, // right - +1.0f, +0.0f, +0.0f, // right - +1.0f, +0.0f, +0.0f, // right - +1.0f, +0.0f, +0.0f, // right - // left - -1.0f, +0.0f, +0.0f, // left - -1.0f, +0.0f, +0.0f, // left - -1.0f, +0.0f, +0.0f, // left - -1.0f, +0.0f, +0.0f, // left - // top - +0.0f, +1.0f, +0.0f, // up - +0.0f, +1.0f, +0.0f, // up - +0.0f, +1.0f, +0.0f, // up - +0.0f, +1.0f, +0.0f, // up - // bottom - +0.0f, -1.0f, +0.0f, // down - +0.0f, -1.0f, +0.0f, // down - +0.0f, -1.0f, +0.0f, // down - +0.0f, -1.0f, +0.0f // down -}; -#define COMPONENTS_PER_VERTEX (3) -#define NUM_VERTICES (6*4) -#define VERTICES_PER_DRAW 4 -#define DRAW_COUNT 6 - -int main(int argc, char **argv) -{ - int rv; - struct viv_conn *conn = 0; - rv = viv_open(VIV_HW_3D, &conn); - if(rv!=0) - { - fprintf(stderr, "Error opening device\n"); - exit(1); - } - printf("Succesfully opened device\n"); - viv_show_chip_info(conn); - - /* allocate command buffer (blob uses four command buffers, but we don't even fill one) */ - viv_addr_t buf0_physical = 0; - void *buf0_logical = 0; - if(viv_alloc_contiguous(conn, 0x20000, &buf0_physical, &buf0_logical, NULL)!=0) - { - fprintf(stderr, "Error allocating host memory\n"); - exit(1); - } - printf("Allocated buffer: phys=%08x log=%08x\n", (uint32_t)buf0_physical, (uint32_t)buf0_logical); - - /* allocate main render target */ - gcuVIDMEM_NODE_PTR color_surface_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x73000, 0x40, gcvSURF_RENDER_TARGET, gcvPOOL_SYSTEM /*why?*/, &color_surface_node, NULL)!=0) - { - fprintf(stderr, "Error allocating render target buffer memory\n"); - exit(1); - } - printf("Allocated render target node: node=%08x\n", (uint32_t)color_surface_node); - - viv_addr_t color_surface_physical = 0; - void *color_surface_logical = 0; - if(viv_lock_vidmem(conn, color_surface_node, &color_surface_physical, &color_surface_logical)!=0) - { - fprintf(stderr, "Error locking render target memory\n"); - exit(1); - } - printf("Locked render target: phys=%08x log=%08x\n", (uint32_t)color_surface_physical, (uint32_t)color_surface_logical); - - /* allocate tile status for main render target */ - gcuVIDMEM_NODE_PTR color_status_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x800, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &color_status_node, NULL)!=0) - { - fprintf(stderr, "Error allocating render target tile status memory\n"); - exit(1); - } - printf("Allocated render target tile status node: node=%08x\n", (uint32_t)color_status_node); - - viv_addr_t color_status_physical = 0; - void *color_status_logical = 0; - if(viv_lock_vidmem(conn, color_status_node, &color_status_physical, &color_status_logical)!=0) - { - fprintf(stderr, "Error locking render target memory\n"); - exit(1); - } - printf("Locked render target ts: phys=%08x log=%08x\n", (uint32_t)color_status_physical, (uint32_t)color_status_logical); - - /* allocate depth for main render target */ - gcuVIDMEM_NODE_PTR depth_surface_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x45000, 0x40, gcvSURF_DEPTH, gcvPOOL_DEFAULT, &depth_surface_node, NULL)!=0) - { - fprintf(stderr, "Error allocating depth memory\n"); - exit(1); - } - printf("Allocated depth node: node=%08x\n", (uint32_t)depth_surface_node); - - viv_addr_t depth_surface_physical = 0; - void *depth_surface_logical = 0; - if(viv_lock_vidmem(conn, depth_surface_node, &depth_surface_physical, &depth_surface_logical)!=0) - { - fprintf(stderr, "Error locking depth target memory\n"); - exit(1); - } - printf("Locked depth target: phys=%08x log=%08x\n", (uint32_t)depth_surface_physical, (uint32_t)depth_surface_logical); - - /* allocate depth ts for main render target */ - gcuVIDMEM_NODE_PTR depth_status_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x500, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &depth_status_node, NULL)!=0) - { - fprintf(stderr, "Error allocating depth memory\n"); - exit(1); - } - printf("Allocated depth ts node: node=%08x\n", (uint32_t)depth_status_node); - - viv_addr_t depth_status_physical = 0; - void *depth_status_logical = 0; - if(viv_lock_vidmem(conn, depth_status_node, &depth_status_physical, &depth_status_logical)!=0) - { - fprintf(stderr, "Error locking depth target ts memory\n"); - exit(1); - } - printf("Locked depth ts target: phys=%08x log=%08x\n", (uint32_t)depth_status_physical, (uint32_t)depth_status_logical); - - /* allocate tile status for aux render target */ - gcuVIDMEM_NODE_PTR rs_dest_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x70000, 0x40, gcvSURF_BITMAP, gcvPOOL_DEFAULT, &rs_dest_node, NULL)!=0) - { - fprintf(stderr, "Error allocating aux render target tile status memory\n"); - exit(1); - } - printf("Allocated aux render target tile status node: node=%08x\n", (uint32_t)rs_dest_node); - - viv_addr_t rs_dest_physical = 0; - void *rs_dest_logical = 0; - if(viv_lock_vidmem(conn, rs_dest_node, &rs_dest_physical, &rs_dest_logical)!=0) - { - fprintf(stderr, "Error locking aux ts render target memory\n"); - exit(1); - } - printf("Locked aux render target ts: phys=%08x log=%08x\n", (uint32_t)rs_dest_physical, (uint32_t)rs_dest_logical); - - /* allocate vertex buffer */ - gcuVIDMEM_NODE_PTR vtx_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x100000, 0x40, gcvSURF_VERTEX, gcvPOOL_DEFAULT, &vtx_node, NULL)!=0) - { - fprintf(stderr, "Error allocating vertex memory\n"); - exit(1); - } - printf("Allocated vertex node: node=%08x\n", (uint32_t)vtx_node); - - viv_addr_t vtx_physical = 0; - void *vtx_logical = 0; - if(viv_lock_vidmem(conn, vtx_node, &vtx_physical, &vtx_logical)!=0) - { - fprintf(stderr, "Error locking vertex memory\n"); - exit(1); - } - printf("Locked vertex memory: phys=%08x log=%08x\n", (uint32_t)vtx_physical, (uint32_t)vtx_logical); - - /* Phew, now we got all the memory we need. - * Write interleaved attribute vertex stream. - * Unlike the GL example we only do this once, not every time glDrawArrays is called, the same would be accomplished - * from GL by using a vertex buffer object. - */ - int dest_idx = 0; - int v_src_idx = 0; - int n_src_idx = 0; - int c_src_idx = 0; - for(int jj=0; jj +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "write_bmp.h" +#include "viv_raw.h" + +#include "cube_cmd_gc880.h" +/* TODO: should actually update context as we go, + * a context switch would currently revert state and likely result in corrupted rendering. + */ +#include "context_cmd.h" + +float vVertices[] = { + // front + -1.0f, -1.0f, +1.0f, // point blue + +1.0f, -1.0f, +1.0f, // point magenta + -1.0f, +1.0f, +1.0f, // point cyan + +1.0f, +1.0f, +1.0f, // point white + // back + +1.0f, -1.0f, -1.0f, // point red + -1.0f, -1.0f, -1.0f, // point black + +1.0f, +1.0f, -1.0f, // point yellow + -1.0f, +1.0f, -1.0f, // point green + // right + +1.0f, -1.0f, +1.0f, // point magenta + +1.0f, -1.0f, -1.0f, // point red + +1.0f, +1.0f, +1.0f, // point white + +1.0f, +1.0f, -1.0f, // point yellow + // left + -1.0f, -1.0f, -1.0f, // point black + -1.0f, -1.0f, +1.0f, // point blue + -1.0f, +1.0f, -1.0f, // point green + -1.0f, +1.0f, +1.0f, // point cyan + // top + -1.0f, +1.0f, +1.0f, // point cyan + +1.0f, +1.0f, +1.0f, // point white + -1.0f, +1.0f, -1.0f, // point green + +1.0f, +1.0f, -1.0f, // point yellow + // bottom + -1.0f, -1.0f, -1.0f, // point black + +1.0f, -1.0f, -1.0f, // point red + -1.0f, -1.0f, +1.0f, // point blue + +1.0f, -1.0f, +1.0f // point magenta +}; + +float vColors[] = { + // front + 0.0f, 0.0f, 1.0f, // blue + 1.0f, 0.0f, 1.0f, // magenta + 0.0f, 1.0f, 1.0f, // cyan + 1.0f, 1.0f, 1.0f, // white + // back + 1.0f, 0.0f, 0.0f, // red + 0.0f, 0.0f, 0.0f, // black + 1.0f, 1.0f, 0.0f, // yellow + 0.0f, 1.0f, 0.0f, // green + // right + 1.0f, 0.0f, 1.0f, // magenta + 1.0f, 0.0f, 0.0f, // red + 1.0f, 1.0f, 1.0f, // white + 1.0f, 1.0f, 0.0f, // yellow + // left + 0.0f, 0.0f, 0.0f, // black + 0.0f, 0.0f, 1.0f, // blue + 0.0f, 1.0f, 0.0f, // green + 0.0f, 1.0f, 1.0f, // cyan + // top + 0.0f, 1.0f, 1.0f, // cyan + 1.0f, 1.0f, 1.0f, // white + 0.0f, 1.0f, 0.0f, // green + 1.0f, 1.0f, 0.0f, // yellow + // bottom + 0.0f, 0.0f, 0.0f, // black + 1.0f, 0.0f, 0.0f, // red + 0.0f, 0.0f, 1.0f, // blue + 1.0f, 0.0f, 1.0f // magenta +}; + +float vNormals[] = { + // front + +0.0f, +0.0f, +1.0f, // forward + +0.0f, +0.0f, +1.0f, // forward + +0.0f, +0.0f, +1.0f, // forward + +0.0f, +0.0f, +1.0f, // forward + // back + +0.0f, +0.0f, -1.0f, // backbard + +0.0f, +0.0f, -1.0f, // backbard + +0.0f, +0.0f, -1.0f, // backbard + +0.0f, +0.0f, -1.0f, // backbard + // right + +1.0f, +0.0f, +0.0f, // right + +1.0f, +0.0f, +0.0f, // right + +1.0f, +0.0f, +0.0f, // right + +1.0f, +0.0f, +0.0f, // right + // left + -1.0f, +0.0f, +0.0f, // left + -1.0f, +0.0f, +0.0f, // left + -1.0f, +0.0f, +0.0f, // left + -1.0f, +0.0f, +0.0f, // left + // top + +0.0f, +1.0f, +0.0f, // up + +0.0f, +1.0f, +0.0f, // up + +0.0f, +1.0f, +0.0f, // up + +0.0f, +1.0f, +0.0f, // up + // bottom + +0.0f, -1.0f, +0.0f, // down + +0.0f, -1.0f, +0.0f, // down + +0.0f, -1.0f, +0.0f, // down + +0.0f, -1.0f, +0.0f // down +}; +#define COMPONENTS_PER_VERTEX (3) +#define NUM_VERTICES (6*4) +#define VERTICES_PER_DRAW 4 +#define DRAW_COUNT 6 + +int main(int argc, char **argv) +{ + int rv; + struct viv_conn *conn = 0; + rv = viv_open(VIV_HW_3D, &conn); + if(rv!=0) + { + fprintf(stderr, "Error opening device\n"); + exit(1); + } + printf("Succesfully opened device\n"); + viv_show_chip_info(conn); + + /* allocate command buffer (blob uses four command buffers, but we don't even fill one) */ + viv_addr_t buf0_physical = 0; + void *buf0_logical = 0; + if(viv_alloc_contiguous(conn, 0x20000, &buf0_physical, &buf0_logical, NULL)!=0) + { + fprintf(stderr, "Error allocating host memory\n"); + exit(1); + } + printf("Allocated buffer: phys=%08x log=%08x\n", (uint32_t)buf0_physical, (uint32_t)buf0_logical); + + /* allocate main render target */ + gcuVIDMEM_NODE_PTR color_surface_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x73000, 0x40, gcvSURF_RENDER_TARGET, gcvPOOL_SYSTEM /*why?*/, &color_surface_node, NULL)!=0) + { + fprintf(stderr, "Error allocating render target buffer memory\n"); + exit(1); + } + printf("Allocated render target node: node=%08x\n", (uint32_t)color_surface_node); + + viv_addr_t color_surface_physical = 0; + void *color_surface_logical = 0; + if(viv_lock_vidmem(conn, color_surface_node, &color_surface_physical, &color_surface_logical)!=0) + { + fprintf(stderr, "Error locking render target memory\n"); + exit(1); + } + printf("Locked render target: phys=%08x log=%08x\n", (uint32_t)color_surface_physical, (uint32_t)color_surface_logical); + + /* allocate tile status for main render target */ + gcuVIDMEM_NODE_PTR color_status_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x800, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &color_status_node, NULL)!=0) + { + fprintf(stderr, "Error allocating render target tile status memory\n"); + exit(1); + } + printf("Allocated render target tile status node: node=%08x\n", (uint32_t)color_status_node); + + viv_addr_t color_status_physical = 0; + void *color_status_logical = 0; + if(viv_lock_vidmem(conn, color_status_node, &color_status_physical, &color_status_logical)!=0) + { + fprintf(stderr, "Error locking render target memory\n"); + exit(1); + } + printf("Locked render target ts: phys=%08x log=%08x\n", (uint32_t)color_status_physical, (uint32_t)color_status_logical); + + /* allocate depth for main render target */ + gcuVIDMEM_NODE_PTR depth_surface_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x45000, 0x40, gcvSURF_DEPTH, gcvPOOL_DEFAULT, &depth_surface_node, NULL)!=0) + { + fprintf(stderr, "Error allocating depth memory\n"); + exit(1); + } + printf("Allocated depth node: node=%08x\n", (uint32_t)depth_surface_node); + + viv_addr_t depth_surface_physical = 0; + void *depth_surface_logical = 0; + if(viv_lock_vidmem(conn, depth_surface_node, &depth_surface_physical, &depth_surface_logical)!=0) + { + fprintf(stderr, "Error locking depth target memory\n"); + exit(1); + } + printf("Locked depth target: phys=%08x log=%08x\n", (uint32_t)depth_surface_physical, (uint32_t)depth_surface_logical); + + /* allocate depth ts for main render target */ + gcuVIDMEM_NODE_PTR depth_status_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x500, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &depth_status_node, NULL)!=0) + { + fprintf(stderr, "Error allocating depth memory\n"); + exit(1); + } + printf("Allocated depth ts node: node=%08x\n", (uint32_t)depth_status_node); + + viv_addr_t depth_status_physical = 0; + void *depth_status_logical = 0; + if(viv_lock_vidmem(conn, depth_status_node, &depth_status_physical, &depth_status_logical)!=0) + { + fprintf(stderr, "Error locking depth target ts memory\n"); + exit(1); + } + printf("Locked depth ts target: phys=%08x log=%08x\n", (uint32_t)depth_status_physical, (uint32_t)depth_status_logical); + + /* allocate tile status for aux render target */ + gcuVIDMEM_NODE_PTR rs_dest_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x70000, 0x40, gcvSURF_BITMAP, gcvPOOL_DEFAULT, &rs_dest_node, NULL)!=0) + { + fprintf(stderr, "Error allocating aux render target tile status memory\n"); + exit(1); + } + printf("Allocated aux render target tile status node: node=%08x\n", (uint32_t)rs_dest_node); + + viv_addr_t rs_dest_physical = 0; + void *rs_dest_logical = 0; + if(viv_lock_vidmem(conn, rs_dest_node, &rs_dest_physical, &rs_dest_logical)!=0) + { + fprintf(stderr, "Error locking aux ts render target memory\n"); + exit(1); + } + printf("Locked aux render target ts: phys=%08x log=%08x\n", (uint32_t)rs_dest_physical, (uint32_t)rs_dest_logical); + + /* allocate vertex buffer */ + gcuVIDMEM_NODE_PTR vtx_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x100000, 0x40, gcvSURF_VERTEX, gcvPOOL_DEFAULT, &vtx_node, NULL)!=0) + { + fprintf(stderr, "Error allocating vertex memory\n"); + exit(1); + } + printf("Allocated vertex node: node=%08x\n", (uint32_t)vtx_node); + + viv_addr_t vtx_physical = 0; + void *vtx_logical = 0; + if(viv_lock_vidmem(conn, vtx_node, &vtx_physical, &vtx_logical)!=0) + { + fprintf(stderr, "Error locking vertex memory\n"); + exit(1); + } + printf("Locked vertex memory: phys=%08x log=%08x\n", (uint32_t)vtx_physical, (uint32_t)vtx_logical); + + /* Phew, now we got all the memory we need. + * Write interleaved attribute vertex stream. + * Unlike the GL example we only do this once, not every time glDrawArrays is called, the same would be accomplished + * from GL by using a vertex buffer object. + */ + int dest_idx = 0; + int v_src_idx = 0; + int n_src_idx = 0; + int c_src_idx = 0; + for(int jj=0; jj -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "write_bmp.h" -#include "viv_raw.h" - -#include "empty_screen_cmd.h" -/* TODO: should actually update context as we go, - a context switch would currently revert state and likely result in corrupted rendering. - */ -#include "context_cmd.h" - - -//#define COMPONENTS_PER_VERTEX (3) -//#define NUM_VERTICES (6*4) - -int main(int argc, char **argv) -{ - int rv; - struct viv_conn *conn = 0; - rv = viv_open(VIV_HW_3D, &conn); - if(rv!=0) - { - fprintf(stderr, "Error opening device\n"); - exit(1); - } - printf("Succesfully opened device\n"); - viv_show_chip_info(conn); - - /* allocate command buffer (blob uses four command buffers, but we don't even fill one) */ - viv_addr_t buf0_physical = 0; - void *buf0_logical = 0; - if(viv_alloc_contiguous(conn, 0x20000, &buf0_physical, &buf0_logical, NULL)!=0) - { - fprintf(stderr, "Error allocating host memory\n"); - exit(1); - } - printf("Allocated buffer: phys=%08x log=%08x\n", (uint32_t)buf0_physical, (uint32_t)buf0_logical); - - /* allocate main render target */ - gcuVIDMEM_NODE_PTR color_surface_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x73000, 0x40, gcvSURF_RENDER_TARGET, gcvPOOL_SYSTEM /*why?*/, &color_surface_node, NULL)!=0) - { - fprintf(stderr, "Error allocating render target buffer memory\n"); - exit(1); - } - printf("Allocated render target node: node=%08x\n", (uint32_t)color_surface_node); - - viv_addr_t color_surface_physical = 0; - void *color_surface_logical = 0; - if(viv_lock_vidmem(conn, color_surface_node, &color_surface_physical, &color_surface_logical)!=0) - { - fprintf(stderr, "Error locking render target memory\n"); - exit(1); - } - printf("Locked render target: phys=%08x log=%08x\n", (uint32_t)color_surface_physical, (uint32_t)color_surface_logical); - - /* allocate tile status for main render target */ - gcuVIDMEM_NODE_PTR color_status_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x800, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &color_status_node, NULL)!=0) - { - fprintf(stderr, "Error allocating render target tile status memory\n"); - exit(1); - } - printf("Allocated render target tile status node: node=%08x\n", (uint32_t)color_status_node); - - viv_addr_t color_status_physical = 0; - void *color_status_logical = 0; - if(viv_lock_vidmem(conn, color_status_node, &color_status_physical, &color_status_logical)!=0) - { - fprintf(stderr, "Error locking render target memory\n"); - exit(1); - } - printf("Locked render target ts: phys=%08x log=%08x\n", (uint32_t)color_status_physical, (uint32_t)color_status_logical); - - /* allocate depth for main render target */ - gcuVIDMEM_NODE_PTR depth_surface_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x45000, 0x40, gcvSURF_DEPTH, gcvPOOL_DEFAULT, &depth_surface_node, NULL)!=0) - { - fprintf(stderr, "Error allocating depth memory\n"); - exit(1); - } - printf("Allocated depth node: node=%08x\n", (uint32_t)depth_surface_node); - - viv_addr_t depth_surface_physical = 0; - void *depth_surface_logical = 0; - if(viv_lock_vidmem(conn, depth_surface_node, &depth_surface_physical, &depth_surface_logical)!=0) - { - fprintf(stderr, "Error locking depth target memory\n"); - exit(1); - } - printf("Locked depth target: phys=%08x log=%08x\n", (uint32_t)depth_surface_physical, (uint32_t)depth_surface_logical); - - /* allocate depth ts for main render target */ - gcuVIDMEM_NODE_PTR depth_status_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x500, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &depth_status_node, NULL)!=0) - { - fprintf(stderr, "Error allocating depth memory\n"); - exit(1); - } - printf("Allocated depth ts node: node=%08x\n", (uint32_t)depth_status_node); - - viv_addr_t depth_status_physical = 0; - void *depth_status_logical = 0; - if(viv_lock_vidmem(conn, depth_status_node, &depth_status_physical, &depth_status_logical)!=0) - { - fprintf(stderr, "Error locking depth target ts memory\n"); - exit(1); - } - printf("Locked depth ts target: phys=%08x log=%08x\n", (uint32_t)depth_status_physical, (uint32_t)depth_status_logical); - - /* allocate tile status for aux render target */ - gcuVIDMEM_NODE_PTR rs_dest_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x70000, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &rs_dest_node, NULL)!=0) - { - fprintf(stderr, "Error allocating aux render target tile status memory\n"); - exit(1); - } - printf("Allocated aux render target tile status node: node=%08x\n", (uint32_t)rs_dest_node); - - viv_addr_t rs_dest_physical = 0; - void *rs_dest_logical = 0; - if(viv_lock_vidmem(conn, rs_dest_node, &rs_dest_physical, &rs_dest_logical)!=0) - { - fprintf(stderr, "Error locking aux ts render target memory\n"); - exit(1); - } - printf("Locked aux render target ts: phys=%08x log=%08x\n", (uint32_t)rs_dest_physical, (uint32_t)rs_dest_logical); - - - struct _gcoCMDBUF commandBuffer = { - .object = { - .type = gcvOBJ_COMMANDBUFFER - }, - //.os = (_gcoOS*)0xbf7488, - //.hardware = (_gcoHARDWARE*)0x402694e0, - .physical = (void*)buf0_physical, - .logical = (void*)buf0_logical, - .bytes = 0x20000, - .startOffset = 0x0, - //.offset = 0xac0, - //.free = 0x7520, - //.hintTable = (unsigned int*)0x0, // Used when gcdSECURE - //.hintIndex = (unsigned int*)0x58, // Used when gcdSECURE - //.hintCommit = (unsigned int*)0xffffffff // Used when gcdSECURE - }; - - //(struct viv_conn *conn, gckCONTEXT *vctx) - gcsHAL_INTERFACE id = {}; - id.command = gcvHAL_ATTACH; - if((viv_invoke(conn, &id)) != gcvSTATUS_OK) - { - #ifdef DEBUG - fprintf(stderr, "Error attaching to GPU\n"); - #endif - exit(1); - } - else - { - fprintf(stderr, "gcvHAL_ATTACHed to GPU\n"); - } - gckCONTEXT context = id.u.Attach.context; - - /* Set addresses in first command buffer */ - commandBuffer.free = commandBuffer.bytes - 0x8; /* Always keep 0x8 at end of buffer for kernel driver */ - cmdbuf1[37] = cmdbuf1[87] = cmdbuf1[109] = color_status_physical; //ADDR_H */ 0x800 gcvSURF_TILE_STATUS - cmdbuf1[38] = cmdbuf1[110] = cmdbuf1[141] = cmdbuf1[143] = color_surface_physical; //ADDR_G */ 0x73000 gcvSURF_RENDER_TARGET - cmdbuf1[47] = depth_status_physical; //ADDR_J */ 0x500 gcvSURF_TILE_STATUS - cmdbuf1[48] = depth_surface_physical; //DDR_I */ 0x45000 gcvSURF_DEPTH - cmdbuf1[111] = 0xffff0000; // color ABGR - second command buffer swaps red and blue - - /* Submit first command buffer */ - commandBuffer.startOffset = 0; - memcpy((void*)((size_t)commandBuffer.logical + commandBuffer.startOffset), cmdbuf1, sizeof(cmdbuf1)); - commandBuffer.offset = commandBuffer.startOffset + sizeof(cmdbuf1); - commandBuffer.free -= sizeof(cmdbuf1) + 0x18; - printf("[1] startOffset=%08x, offset=%08x, free=%08x\n", (uint32_t)commandBuffer.startOffset, (uint32_t)commandBuffer.offset, (uint32_t)commandBuffer.free); - - if(viv_commit(conn, &commandBuffer, context) != 0) - { - fprintf(stderr, "Error committing first command buffer\n"); - exit(1); - } - else - { - fprintf(stderr, "Committed first command buffer\n"); - } - - - /*Second command buffer - SWAP_RB=1 - swaps red and blue*/ - cmdbuf2[35] = color_surface_physical; - cmdbuf2[37] = rs_dest_physical; - commandBuffer.startOffset = commandBuffer.offset + 0x18; - memcpy((void*)((size_t)commandBuffer.logical + commandBuffer.startOffset), cmdbuf2, sizeof(cmdbuf2)); - commandBuffer.offset = commandBuffer.startOffset + sizeof(cmdbuf2); - commandBuffer.free -= sizeof(cmdbuf2) + 0x18; - if(viv_commit(conn, &commandBuffer, context) != 0) - { - fprintf(stderr, "Error committing second command buffer\n"); - exit(1); - } - else - { - fprintf(stderr, "Committed second command buffer\n"); - } - - /* Submit event queue with SIGNAL, fromWhere=gcvKERNEL_PIXEL (wait for pixel engine to finish) */ - int sig_id = 0; - if(viv_user_signal_create(conn, 0, &sig_id) != 0) /* automatic resetting signal */ - { - fprintf(stderr, "Cannot create user signal\n"); - exit(1); - } - printf("Created user signal %i\n", sig_id); - if(viv_event_queue_signal(conn, sig_id, gcvKERNEL_PIXEL) != 0) - { - fprintf(stderr, "Cannot queue GPU signal\n"); - exit(1); - } - - /* Wait for signal */ - if(viv_user_signal_wait(conn, sig_id, VIV_WAIT_INDEFINITE) != 0) - { - fprintf(stderr, "Cannot wait for signal\n"); - exit(1); - } - - /* Allocate video memory for BITMAP, lock */ - gcuVIDMEM_NODE_PTR bmp_node = 0; - if(viv_alloc_linear_vidmem(conn, 0x70000, 0x40, gcvSURF_BITMAP, gcvPOOL_DEFAULT, &bmp_node, NULL)!=0) - { - fprintf(stderr, "Error allocating bitmap status memory\n"); - exit(1); - } - printf("Allocated bitmap node: node=%08x\n", (uint32_t)bmp_node); - - viv_addr_t bmp_physical = 0; - void *bmp_logical = 0; - if(viv_lock_vidmem(conn, bmp_node, &bmp_physical, &bmp_logical)!=0) - { - fprintf(stderr, "Error locking bmp memory\n"); - exit(1); - } - memset(bmp_logical, 0xff, 0x5dc00); /* clear previous result */ - printf("Locked bmp: phys=%08x log=%08x\n", (uint32_t)bmp_physical, (uint32_t)bmp_logical); - - - /* Submit third command buffer, updating context. - * Fourth command buffer copies render result to bitmap, detiling along the way. - */ - //color_surface_physical - first commandBuffer result, rs_dest_physical - second commandBuffer; - cmdbuf3[0x19] = rs_dest_physical; - cmdbuf3[0x1b] = bmp_physical; - commandBuffer.startOffset = commandBuffer.offset + 0x18; - memcpy((void*)((size_t)commandBuffer.logical + commandBuffer.startOffset), cmdbuf3, sizeof(cmdbuf3)); - commandBuffer.offset = commandBuffer.startOffset + sizeof(cmdbuf3); - commandBuffer.free -= sizeof(cmdbuf3) + 0x18; - printf("[4] startOffset=%08x, offset=%08x, free=%08x\n", (uint32_t)commandBuffer.startOffset, (uint32_t)commandBuffer.offset, (uint32_t)commandBuffer.free); - if(viv_commit(conn, &commandBuffer, context) != 0) - { - fprintf(stderr, "Error committing fourth command buffer\n"); - exit(1); - } - - /* Submit event queue with SIGNAL, fromWhere=gcvKERNEL_PIXEL */ - if(viv_event_queue_signal(conn, sig_id, gcvKERNEL_PIXEL) != 0) - { - fprintf(stderr, "Cannot queue GPU signal\n"); - exit(1); - } - - /* Wait for signal */ - if(viv_user_signal_wait(conn, sig_id, VIV_WAIT_INDEFINITE) != 0) - { - fprintf(stderr, "Cannot wait for signal\n"); - exit(1); - } - bmp_dump32(bmp_logical, 400, 240, false, "/home/linaro/replay.bmp"); - /* Unlock video memory */ - if(viv_unlock_vidmem(conn, bmp_node, gcvSURF_BITMAP, 1) != 0) - { - fprintf(stderr, "Cannot unlock vidmem\n"); - exit(1); - } - /* - for(int x=0; x<0x700; ++x) - { - uint32_t value = ((uint32_t*)rt_ts_logical)[x]; - printf("Sample ts: %x %08x\n", x*4, value); - }*/ -// printf("Contextbuffer used %i\n", *contextBuffer.inUse); - - viv_close(conn); - return 0; -} - diff --git a/src/replay/empty_screen_gc880.c b/src/replay/empty_screen_gc880.c new file mode 100644 index 0000000..1027137 --- /dev/null +++ b/src/replay/empty_screen_gc880.c @@ -0,0 +1,304 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "write_bmp.h" +#include "viv_raw.h" + +#include "empty_screen_cmd.h" +/* TODO: should actually update context as we go, + a context switch would currently revert state and likely result in corrupted rendering. + */ +#include "context_cmd.h" + + +//#define COMPONENTS_PER_VERTEX (3) +//#define NUM_VERTICES (6*4) + +int main(int argc, char **argv) +{ + int rv; + struct viv_conn *conn = 0; + rv = viv_open(VIV_HW_3D, &conn); + if(rv!=0) + { + fprintf(stderr, "Error opening device\n"); + exit(1); + } + printf("Succesfully opened device\n"); + viv_show_chip_info(conn); + + /* allocate command buffer (blob uses four command buffers, but we don't even fill one) */ + viv_addr_t buf0_physical = 0; + void *buf0_logical = 0; + if(viv_alloc_contiguous(conn, 0x20000, &buf0_physical, &buf0_logical, NULL)!=0) + { + fprintf(stderr, "Error allocating host memory\n"); + exit(1); + } + printf("Allocated buffer: phys=%08x log=%08x\n", (uint32_t)buf0_physical, (uint32_t)buf0_logical); + + /* allocate main render target */ + gcuVIDMEM_NODE_PTR color_surface_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x73000, 0x40, gcvSURF_RENDER_TARGET, gcvPOOL_SYSTEM /*why?*/, &color_surface_node, NULL)!=0) + { + fprintf(stderr, "Error allocating render target buffer memory\n"); + exit(1); + } + printf("Allocated render target node: node=%08x\n", (uint32_t)color_surface_node); + + viv_addr_t color_surface_physical = 0; + void *color_surface_logical = 0; + if(viv_lock_vidmem(conn, color_surface_node, &color_surface_physical, &color_surface_logical)!=0) + { + fprintf(stderr, "Error locking render target memory\n"); + exit(1); + } + printf("Locked render target: phys=%08x log=%08x\n", (uint32_t)color_surface_physical, (uint32_t)color_surface_logical); + + /* allocate tile status for main render target */ + gcuVIDMEM_NODE_PTR color_status_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x800, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &color_status_node, NULL)!=0) + { + fprintf(stderr, "Error allocating render target tile status memory\n"); + exit(1); + } + printf("Allocated render target tile status node: node=%08x\n", (uint32_t)color_status_node); + + viv_addr_t color_status_physical = 0; + void *color_status_logical = 0; + if(viv_lock_vidmem(conn, color_status_node, &color_status_physical, &color_status_logical)!=0) + { + fprintf(stderr, "Error locking render target memory\n"); + exit(1); + } + printf("Locked render target ts: phys=%08x log=%08x\n", (uint32_t)color_status_physical, (uint32_t)color_status_logical); + + /* allocate depth for main render target */ + gcuVIDMEM_NODE_PTR depth_surface_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x45000, 0x40, gcvSURF_DEPTH, gcvPOOL_DEFAULT, &depth_surface_node, NULL)!=0) + { + fprintf(stderr, "Error allocating depth memory\n"); + exit(1); + } + printf("Allocated depth node: node=%08x\n", (uint32_t)depth_surface_node); + + viv_addr_t depth_surface_physical = 0; + void *depth_surface_logical = 0; + if(viv_lock_vidmem(conn, depth_surface_node, &depth_surface_physical, &depth_surface_logical)!=0) + { + fprintf(stderr, "Error locking depth target memory\n"); + exit(1); + } + printf("Locked depth target: phys=%08x log=%08x\n", (uint32_t)depth_surface_physical, (uint32_t)depth_surface_logical); + + /* allocate depth ts for main render target */ + gcuVIDMEM_NODE_PTR depth_status_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x500, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &depth_status_node, NULL)!=0) + { + fprintf(stderr, "Error allocating depth memory\n"); + exit(1); + } + printf("Allocated depth ts node: node=%08x\n", (uint32_t)depth_status_node); + + viv_addr_t depth_status_physical = 0; + void *depth_status_logical = 0; + if(viv_lock_vidmem(conn, depth_status_node, &depth_status_physical, &depth_status_logical)!=0) + { + fprintf(stderr, "Error locking depth target ts memory\n"); + exit(1); + } + printf("Locked depth ts target: phys=%08x log=%08x\n", (uint32_t)depth_status_physical, (uint32_t)depth_status_logical); + + /* allocate tile status for aux render target */ + gcuVIDMEM_NODE_PTR rs_dest_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x70000, 0x40, gcvSURF_TILE_STATUS, gcvPOOL_DEFAULT, &rs_dest_node, NULL)!=0) + { + fprintf(stderr, "Error allocating aux render target tile status memory\n"); + exit(1); + } + printf("Allocated aux render target tile status node: node=%08x\n", (uint32_t)rs_dest_node); + + viv_addr_t rs_dest_physical = 0; + void *rs_dest_logical = 0; + if(viv_lock_vidmem(conn, rs_dest_node, &rs_dest_physical, &rs_dest_logical)!=0) + { + fprintf(stderr, "Error locking aux ts render target memory\n"); + exit(1); + } + printf("Locked aux render target ts: phys=%08x log=%08x\n", (uint32_t)rs_dest_physical, (uint32_t)rs_dest_logical); + + + struct _gcoCMDBUF commandBuffer = { + .object = { + .type = gcvOBJ_COMMANDBUFFER + }, + //.os = (_gcoOS*)0xbf7488, + //.hardware = (_gcoHARDWARE*)0x402694e0, + .physical = (void*)buf0_physical, + .logical = (void*)buf0_logical, + .bytes = 0x20000, + .startOffset = 0x0, + //.offset = 0xac0, + //.free = 0x7520, + //.hintTable = (unsigned int*)0x0, // Used when gcdSECURE + //.hintIndex = (unsigned int*)0x58, // Used when gcdSECURE + //.hintCommit = (unsigned int*)0xffffffff // Used when gcdSECURE + }; + + //(struct viv_conn *conn, gckCONTEXT *vctx) + gcsHAL_INTERFACE id = {}; + id.command = gcvHAL_ATTACH; + if((viv_invoke(conn, &id)) != gcvSTATUS_OK) + { + #ifdef DEBUG + fprintf(stderr, "Error attaching to GPU\n"); + #endif + exit(1); + } + else + { + fprintf(stderr, "gcvHAL_ATTACHed to GPU\n"); + } + gckCONTEXT context = id.u.Attach.context; + + /* Set addresses in first command buffer */ + commandBuffer.free = commandBuffer.bytes - 0x8; /* Always keep 0x8 at end of buffer for kernel driver */ + cmdbuf1[37] = cmdbuf1[87] = cmdbuf1[109] = color_status_physical; //ADDR_H */ 0x800 gcvSURF_TILE_STATUS + cmdbuf1[38] = cmdbuf1[110] = cmdbuf1[141] = cmdbuf1[143] = color_surface_physical; //ADDR_G */ 0x73000 gcvSURF_RENDER_TARGET + cmdbuf1[47] = depth_status_physical; //ADDR_J */ 0x500 gcvSURF_TILE_STATUS + cmdbuf1[48] = depth_surface_physical; //DDR_I */ 0x45000 gcvSURF_DEPTH + cmdbuf1[111] = 0xffff0000; // color ABGR - second command buffer swaps red and blue + + /* Submit first command buffer */ + commandBuffer.startOffset = 0; + memcpy((void*)((size_t)commandBuffer.logical + commandBuffer.startOffset), cmdbuf1, sizeof(cmdbuf1)); + commandBuffer.offset = commandBuffer.startOffset + sizeof(cmdbuf1); + commandBuffer.free -= sizeof(cmdbuf1) + 0x18; + printf("[1] startOffset=%08x, offset=%08x, free=%08x\n", (uint32_t)commandBuffer.startOffset, (uint32_t)commandBuffer.offset, (uint32_t)commandBuffer.free); + + if(viv_commit(conn, &commandBuffer, context) != 0) + { + fprintf(stderr, "Error committing first command buffer\n"); + exit(1); + } + else + { + fprintf(stderr, "Committed first command buffer\n"); + } + + + /*Second command buffer - SWAP_RB=1 - swaps red and blue*/ + cmdbuf2[35] = color_surface_physical; + cmdbuf2[37] = rs_dest_physical; + commandBuffer.startOffset = commandBuffer.offset + 0x18; + memcpy((void*)((size_t)commandBuffer.logical + commandBuffer.startOffset), cmdbuf2, sizeof(cmdbuf2)); + commandBuffer.offset = commandBuffer.startOffset + sizeof(cmdbuf2); + commandBuffer.free -= sizeof(cmdbuf2) + 0x18; + if(viv_commit(conn, &commandBuffer, context) != 0) + { + fprintf(stderr, "Error committing second command buffer\n"); + exit(1); + } + else + { + fprintf(stderr, "Committed second command buffer\n"); + } + + /* Submit event queue with SIGNAL, fromWhere=gcvKERNEL_PIXEL (wait for pixel engine to finish) */ + int sig_id = 0; + if(viv_user_signal_create(conn, 0, &sig_id) != 0) /* automatic resetting signal */ + { + fprintf(stderr, "Cannot create user signal\n"); + exit(1); + } + printf("Created user signal %i\n", sig_id); + if(viv_event_queue_signal(conn, sig_id, gcvKERNEL_PIXEL) != 0) + { + fprintf(stderr, "Cannot queue GPU signal\n"); + exit(1); + } + + /* Wait for signal */ + if(viv_user_signal_wait(conn, sig_id, VIV_WAIT_INDEFINITE) != 0) + { + fprintf(stderr, "Cannot wait for signal\n"); + exit(1); + } + + /* Allocate video memory for BITMAP, lock */ + gcuVIDMEM_NODE_PTR bmp_node = 0; + if(viv_alloc_linear_vidmem(conn, 0x70000, 0x40, gcvSURF_BITMAP, gcvPOOL_DEFAULT, &bmp_node, NULL)!=0) + { + fprintf(stderr, "Error allocating bitmap status memory\n"); + exit(1); + } + printf("Allocated bitmap node: node=%08x\n", (uint32_t)bmp_node); + + viv_addr_t bmp_physical = 0; + void *bmp_logical = 0; + if(viv_lock_vidmem(conn, bmp_node, &bmp_physical, &bmp_logical)!=0) + { + fprintf(stderr, "Error locking bmp memory\n"); + exit(1); + } + memset(bmp_logical, 0xff, 0x5dc00); /* clear previous result */ + printf("Locked bmp: phys=%08x log=%08x\n", (uint32_t)bmp_physical, (uint32_t)bmp_logical); + + + /* Submit third command buffer, updating context. + * Fourth command buffer copies render result to bitmap, detiling along the way. + */ + //color_surface_physical - first commandBuffer result, rs_dest_physical - second commandBuffer; + cmdbuf3[0x19] = rs_dest_physical; + cmdbuf3[0x1b] = bmp_physical; + commandBuffer.startOffset = commandBuffer.offset + 0x18; + memcpy((void*)((size_t)commandBuffer.logical + commandBuffer.startOffset), cmdbuf3, sizeof(cmdbuf3)); + commandBuffer.offset = commandBuffer.startOffset + sizeof(cmdbuf3); + commandBuffer.free -= sizeof(cmdbuf3) + 0x18; + printf("[4] startOffset=%08x, offset=%08x, free=%08x\n", (uint32_t)commandBuffer.startOffset, (uint32_t)commandBuffer.offset, (uint32_t)commandBuffer.free); + if(viv_commit(conn, &commandBuffer, context) != 0) + { + fprintf(stderr, "Error committing fourth command buffer\n"); + exit(1); + } + + /* Submit event queue with SIGNAL, fromWhere=gcvKERNEL_PIXEL */ + if(viv_event_queue_signal(conn, sig_id, gcvKERNEL_PIXEL) != 0) + { + fprintf(stderr, "Cannot queue GPU signal\n"); + exit(1); + } + + /* Wait for signal */ + if(viv_user_signal_wait(conn, sig_id, VIV_WAIT_INDEFINITE) != 0) + { + fprintf(stderr, "Cannot wait for signal\n"); + exit(1); + } + bmp_dump32(bmp_logical, 400, 240, false, "/home/linaro/replay.bmp"); + /* Unlock video memory */ + if(viv_unlock_vidmem(conn, bmp_node, gcvSURF_BITMAP, 1) != 0) + { + fprintf(stderr, "Cannot unlock vidmem\n"); + exit(1); + } + /* + for(int x=0; x<0x700; ++x) + { + uint32_t value = ((uint32_t*)rt_ts_logical)[x]; + printf("Sample ts: %x %08x\n", x*4, value); + }*/ +// printf("Contextbuffer used %i\n", *contextBuffer.inUse); + + viv_close(conn); + return 0; +} + -- cgit