diff --git a/libctru/include/3ds/gpu/enums.h b/libctru/include/3ds/gpu/enums.h index 9614b8e..2307a96 100644 --- a/libctru/include/3ds/gpu/enums.h +++ b/libctru/include/3ds/gpu/enums.h @@ -32,6 +32,17 @@ typedef enum GPU_MIRRORED_REPEAT = 0x3, ///< Repeats with mirrored texture. } GPU_TEXTURE_WRAP_PARAM; +/// Texture modes. +typedef enum +{ + GPU_TEX_2D = 0x0, ///< 2D texture + GPU_TEX_CUBE_MAP = 0x1, ///< Cube map + GPU_TEX_SHADOW_2D = 0x2, ///< 2D Shadow texture + GPU_TEX_PROJECTION = 0x3, ///< Projection texture + GPU_TEX_SHADOW_CUBE = 0x4, ///< Shadow cube map + GPU_TEX_DISABLED = 0x5, ///< Disabled +} GPU_TEXTURE_MODE_PARAM; + /// Supported texture units. typedef enum { @@ -87,7 +98,16 @@ typedef enum GPU_LEQUAL = 5, ///< Pass if less than or equal. GPU_GREATER = 6, ///< Pass if greater than. GPU_GEQUAL = 7, ///< Pass if greater than or equal. -}GPU_TESTFUNC; +} GPU_TESTFUNC; + +/// Early depth test functions. +typedef enum +{ + GPU_EARLYDEPTH_GEQUAL = 0, ///< Pass if greater than or equal. + GPU_EARLYDEPTH_GREATER = 1, ///< Pass if greater than. + GPU_EARLYDEPTH_LEQUAL = 2, ///< Pass if less than or equal. + GPU_EARLYDEPTH_LESS = 3, ///< Pass if less than. +} GPU_EARLYDEPTHFUNC; /// Scissor test modes. typedef enum diff --git a/libctru/include/3ds/gpu/registers.h b/libctru/include/3ds/gpu/registers.h index 52bf566..f94600d 100644 --- a/libctru/include/3ds/gpu/registers.h +++ b/libctru/include/3ds/gpu/registers.h @@ -81,11 +81,11 @@ #define GPUREG_VIEWPORT_INVH 0x0044 ///< Inverted viewport height. #define GPUREG_0045 0x0045 ///< Unknown #define GPUREG_0046 0x0046 ///< Unknown -#define GPUREG_0047 0x0047 ///< Unknown -#define GPUREG_0048 0x0048 ///< Unknown -#define GPUREG_0049 0x0049 ///< Unknown -#define GPUREG_004A 0x004A ///< Unknown -#define GPUREG_004B 0x004B ///< Unknown +#define GPUREG_FRAGOP_CLIP 0x0047 ///< Unknown +#define GPUREG_FRAGOP_CLIP_DATA0 0x0048 ///< Unknown +#define GPUREG_FRAGOP_CLIP_DATA1 0x0049 ///< Unknown +#define GPUREG_FRAGOP_CLIP_DATA2 0x004A ///< Unknown +#define GPUREG_FRAGOP_CLIP_DATA3 0x004B ///< Unknown #define GPUREG_004C 0x004C ///< Unknown #define GPUREG_DEPTHMAP_SCALE 0x004D ///< Depth map scale. #define GPUREG_DEPTHMAP_OFFSET 0x004E ///< Depth map offset. @@ -107,21 +107,21 @@ #define GPUREG_005E 0x005E ///< Unknown #define GPUREG_005F 0x005F ///< Unknown #define GPUREG_0060 0x0060 ///< Unknown -#define GPUREG_0061 0x0061 ///< Unknown -#define GPUREG_0062 0x0062 ///< Unknown -#define GPUREG_0063 0x0063 ///< Unknown -#define GPUREG_0064 0x0064 ///< Unknown +#define GPUREG_EARLYDEPTH_FUNC 0x0061 ///< Unknown +#define GPUREG_EARLYDEPTH_TEST1 0x0062 ///< Unknown +#define GPUREG_EARLYDEPTH_CLEAR 0x0063 ///< Unknown +#define GPUREG_SH_OUTATTR_MODE 0x0064 ///< Shader output attributes mode. #define GPUREG_SCISSORTEST_MODE 0x0065 ///< Scissor test mode. #define GPUREG_SCISSORTEST_POS 0x0066 ///< Scissor test position. #define GPUREG_SCISSORTEST_DIM 0x0067 ///< Scissor text dimensions. #define GPUREG_VIEWPORT_XY 0x0068 ///< Viewport X and Y. #define GPUREG_0069 0x0069 ///< Unknown -#define GPUREG_006A 0x006A ///< Unknown +#define GPUREG_EARLYDEPTH_DATA 0x006A ///< Unknown #define GPUREG_006B 0x006B ///< Unknown #define GPUREG_006C 0x006C ///< Unknown -#define GPUREG_006D 0x006D ///< Unknown -#define GPUREG_FRAMEBUFFER_DIM2 0x006E ///< Framebuffer dimensions. -#define GPUREG_006F 0x006F ///< Unknown +#define GPUREG_DEPTHMAP_ENABLE 0x006D ///< Depth map enable. +#define GPUREG_RENDERBUF_DIM 0x006E ///< Renderbuffer dimensions. +#define GPUREG_SH_OUTATTR_CLOCK 0x006F ///< Shader output attributes clock enable. #define GPUREG_0070 0x0070 ///< Unknown #define GPUREG_0071 0x0071 ///< Unknown #define GPUREG_0072 0x0072 ///< Unknown @@ -142,18 +142,18 @@ ///@name Texturing registers (0x080-0x0FF) ///@{ -#define GPUREG_TEXUNIT_ENABLE 0x0080 ///< Enabled texture units. +#define GPUREG_TEXUNIT_CONFIG 0x0080 ///< Texture unit configuration. #define GPUREG_TEXUNIT0_BORDER_COLOR 0x0081 ///< Texture unit 0 border color. #define GPUREG_TEXUNIT0_DIM 0x0082 ///< Texture unit 0 dimensions. #define GPUREG_TEXUNIT0_PARAM 0x0083 ///< Texture unit 0 parameters. -#define GPUREG_0084 0x0084 ///< Unknown. -#define GPUREG_TEXUNIT0_LOC 0x0085 ///< Texture unit 0 address. -#define GPUREG_0086 0x0086 ///< Unknown. -#define GPUREG_0087 0x0087 ///< Unknown. -#define GPUREG_0088 0x0088 ///< Unknown. -#define GPUREG_0089 0x0089 ///< Unknown. -#define GPUREG_008A 0x008A ///< Unknown. -#define GPUREG_008B 0x008B ///< Unknown. +#define GPUREG_TEXUNIT0_LOD 0x0084 ///< Texture unit 0 LOD. +#define GPUREG_TEXUNIT0_ADDR1 0x0085 ///< Texture unit 0 address. +#define GPUREG_TEXUNIT0_ADDR2 0x0086 ///< Unknown. +#define GPUREG_TEXUNIT0_ADDR3 0x0087 ///< Unknown. +#define GPUREG_TEXUNIT0_ADDR4 0x0088 ///< Unknown. +#define GPUREG_TEXUNIT0_ADDR5 0x0089 ///< Unknown. +#define GPUREG_TEXUNIT0_ADDR6 0x008A ///< Unknown. +#define GPUREG_TEXUNIT0_SHADOW 0x008B ///< Unknown. #define GPUREG_008C 0x008C ///< Unknown. #define GPUREG_008D 0x008D ///< Unknown. #define GPUREG_TEXUNIT0_TYPE 0x008E ///< Texture unit 0 type. @@ -162,16 +162,16 @@ #define GPUREG_TEXUNIT1_BORDER_COLOR 0x0091 ///< Texture unit 1 border color. #define GPUREG_TEXUNIT1_DIM 0x0092 ///< Texture unit 1 dimensions. #define GPUREG_TEXUNIT1_PARAM 0x0093 ///< Texture unit 1 parameters. -#define GPUREG_0094 0x0094 ///< Unknown. -#define GPUREG_TEXUNIT1_LOC 0x0095 ///< Texture unit 1 address. +#define GPUREG_TEXUNIT1_LOD 0x0094 ///< Texture unit 1 LOD. +#define GPUREG_TEXUNIT1_ADDR 0x0095 ///< Texture unit 1 address. #define GPUREG_TEXUNIT1_TYPE 0x0096 ///< Texture unit 1 type. #define GPUREG_0097 0x0097 ///< Unknown. #define GPUREG_0098 0x0098 ///< Unknown. #define GPUREG_TEXUNIT2_BORDER_COLOR 0x0099 ///< Texture unit 2 border color. #define GPUREG_TEXUNIT2_DIM 0x009A ///< Texture unit 2 dimensions. #define GPUREG_TEXUNIT2_PARAM 0x009B ///< Texture unit 2 parameters. -#define GPUREG_009C 0x009C ///< Unknown. -#define GPUREG_TEXUNIT2_LOC 0x009D ///< Texture unit 2 location. +#define GPUREG_TEXUNIT2_LOD 0x009C ///< Texture unit 2 LOD. +#define GPUREG_TEXUNIT2_ADDR 0x009D ///< Texture unit 2 address. #define GPUREG_TEXUNIT2_TYPE 0x009E ///< Texture unit 2 type. #define GPUREG_009F 0x009F ///< Unknown. #define GPUREG_00A0 0x00A0 ///< Unknown. @@ -182,22 +182,22 @@ #define GPUREG_00A5 0x00A5 ///< Unknown. #define GPUREG_00A6 0x00A6 ///< Unknown. #define GPUREG_00A7 0x00A7 ///< Unknown. -#define GPUREG_00A8 0x00A8 ///< Unknown. -#define GPUREG_00A9 0x00A9 ///< Unknown. -#define GPUREG_00AA 0x00AA ///< Unknown. -#define GPUREG_00AB 0x00AB ///< Unknown. -#define GPUREG_00AC 0x00AC ///< Unknown. -#define GPUREG_00AD 0x00AD ///< Unknown. +#define GPUREG_TEXUNIT3_PROTEX0 0x00A8 ///< Unknown. +#define GPUREG_TEXUNIT3_PROTEX1 0x00A9 ///< Unknown. +#define GPUREG_TEXUNIT3_PROTEX2 0x00AA ///< Unknown. +#define GPUREG_TEXUNIT3_PROTEX3 0x00AB ///< Unknown. +#define GPUREG_TEXUNIT3_PROTEX4 0x00AC ///< Unknown. +#define GPUREG_TEXUNIT3_PROTEX5 0x00AD ///< Unknown. #define GPUREG_00AE 0x00AE ///< Unknown. -#define GPUREG_00AF 0x00AF ///< Unknown. -#define GPUREG_00B0 0x00B0 ///< Unknown. -#define GPUREG_00B1 0x00B1 ///< Unknown. -#define GPUREG_00B2 0x00B2 ///< Unknown. -#define GPUREG_00B3 0x00B3 ///< Unknown. -#define GPUREG_00B4 0x00B4 ///< Unknown. -#define GPUREG_00B5 0x00B5 ///< Unknown. -#define GPUREG_00B6 0x00B6 ///< Unknown. -#define GPUREG_00B7 0x00B7 ///< Unknown. +#define GPUREG_PROTEX_LUT 0x00AF ///< Unknown. +#define GPUREG_PROTEX_LUT_DATA0 0x00B0 ///< Unknown. +#define GPUREG_PROTEX_LUT_DATA1 0x00B1 ///< Unknown. +#define GPUREG_PROTEX_LUT_DATA2 0x00B2 ///< Unknown. +#define GPUREG_PROTEX_LUT_DATA3 0x00B3 ///< Unknown. +#define GPUREG_PROTEX_LUT_DATA4 0x00B4 ///< Unknown. +#define GPUREG_PROTEX_LUT_DATA5 0x00B5 ///< Unknown. +#define GPUREG_PROTEX_LUT_DATA6 0x00B6 ///< Unknown. +#define GPUREG_PROTEX_LUT_DATA7 0x00B7 ///< Unknown. #define GPUREG_00B8 0x00B8 ///< Unknown. #define GPUREG_00B9 0x00B9 ///< Unknown. #define GPUREG_00BA 0x00BA ///< Unknown. @@ -239,21 +239,21 @@ #define GPUREG_00DE 0x00DE ///< Unknown. #define GPUREG_00DF 0x00DF ///< Unknown. #define GPUREG_TEXENV_UPDATE_BUFFER 0x00E0 ///< Texture env buffer update flag. -#define GPUREG_00E1 0x00E1 ///< Unknown. +#define GPUREG_FOG_COLOR 0x00E1 ///< Unknown. #define GPUREG_00E2 0x00E2 ///< Unknown. #define GPUREG_00E3 0x00E3 ///< Unknown. -#define GPUREG_00E4 0x00E4 ///< Unknown. -#define GPUREG_00E5 0x00E5 ///< Unknown. -#define GPUREG_00E6 0x00E6 ///< Unknown. +#define GPUREG_GAS_ATTENUATION 0x00E4 ///< Unknown. +#define GPUREG_GAS_ACCMAX 0x00E5 ///< Unknown. +#define GPUREG_FOG_LUT_INDEX 0x00E6 ///< Unknown. #define GPUREG_00E7 0x00E7 ///< Unknown. -#define GPUREG_00E8 0x00E8 ///< Unknown. -#define GPUREG_00E9 0x00E9 ///< Unknown. -#define GPUREG_00EA 0x00EA ///< Unknown. -#define GPUREG_00EB 0x00EB ///< Unknown. -#define GPUREG_00EC 0x00EC ///< Unknown. -#define GPUREG_00ED 0x00ED ///< Unknown. -#define GPUREG_00EE 0x00EE ///< Unknown. -#define GPUREG_00EF 0x00EF ///< Unknown. +#define GPUREG_FOG_LUT_DATA0 0x00E8 ///< Unknown. +#define GPUREG_FOG_LUT_DATA1 0x00E9 ///< Unknown. +#define GPUREG_FOG_LUT_DATA2 0x00EA ///< Unknown. +#define GPUREG_FOG_LUT_DATA3 0x00EB ///< Unknown. +#define GPUREG_FOG_LUT_DATA4 0x00EC ///< Unknown. +#define GPUREG_FOG_LUT_DATA5 0x00ED ///< Unknown. +#define GPUREG_FOG_LUT_DATA6 0x00EE ///< Unknown. +#define GPUREG_FOG_LUT_DATA7 0x00EF ///< Unknown. #define GPUREG_TEXENV4_SOURCE 0x00F0 ///< Texture env 4 source. #define GPUREG_TEXENV4_OPERAND 0x00F1 ///< Texture env 4 operand. #define GPUREG_TEXENV4_COMBINER 0x00F2 ///< Texture env 4 combiner. @@ -298,7 +298,7 @@ #define GPUREG_DEPTHBUFFER_WRITE 0x0115 ///< Writes to the depth buffer. #define GPUREG_DEPTHBUFFER_FORMAT 0x0116 ///< Depth buffer format. #define GPUREG_COLORBUFFER_FORMAT 0x0117 ///< Color buffer format. -#define GPUREG_0118 0x0118 ///< Unknown. +#define GPUREG_EARLYDEPTH_TEST2 0x0118 ///< Unknown. #define GPUREG_0119 0x0119 ///< Unknown. #define GPUREG_011A 0x011A ///< Unknown. #define GPUREG_FRAMEBUFFER_BLOCK32 0x011B ///< Frame buffer block 32. @@ -306,13 +306,13 @@ #define GPUREG_COLORBUFFER_LOC 0x011D ///< Color buffer location. #define GPUREG_FRAMEBUFFER_DIM 0x011E ///< Frame buffer dimensions. #define GPUREG_011F 0x011F ///< Unknown. -#define GPUREG_0120 0x0120 ///< Unknown. -#define GPUREG_0121 0x0121 ///< Unknown. -#define GPUREG_0122 0x0122 ///< Unknown. -#define GPUREG_0123 0x0123 ///< Unknown. -#define GPUREG_0124 0x0124 ///< Unknown. +#define GPUREG_GAS_LIGHT_XY 0x0120 ///< Unknown. +#define GPUREG_GAS_LIGHT_Z 0x0121 ///< Unknown. +#define GPUREG_GAS_LIGHT_Z_COLOR 0x0122 ///< Unknown. +#define GPUREG_GAS_LUT_INDEX 0x0123 ///< Unknown. +#define GPUREG_GAS_LUT_DATA 0x0124 ///< Unknown. #define GPUREG_0125 0x0125 ///< Unknown. -#define GPUREG_0126 0x0126 ///< Unknown. +#define GPUREG_GAS_DELTAZ_DEPTH 0x0126 ///< Unknown. #define GPUREG_0127 0x0127 ///< Unknown. #define GPUREG_0128 0x0128 ///< Unknown. #define GPUREG_0129 0x0129 ///< Unknown. @@ -322,7 +322,7 @@ #define GPUREG_012D 0x012D ///< Unknown. #define GPUREG_012E 0x012E ///< Unknown. #define GPUREG_012F 0x012F ///< Unknown. -#define GPUREG_0130 0x0130 ///< Unknown. +#define GPUREG_FRAGOP_SHADOW 0x0130 ///< Unknown. #define GPUREG_0131 0x0131 ///< Unknown. #define GPUREG_0132 0x0132 ///< Unknown. #define GPUREG_0133 0x0133 ///< Unknown. @@ -583,11 +583,11 @@ #define GPUREG_VERTEX_OFFSET 0x022A ///< Vertex offset. #define GPUREG_022B 0x022B ///< Unknown. #define GPUREG_022C 0x022C ///< Unknown. -#define GPUREG_022D 0x022D ///< Unknown. +#define GPUREG_POST_VERTEX_CACHE_NUM 0x022D ///< Unknown. #define GPUREG_DRAWARRAYS 0x022E ///< Draw arrays trigger. #define GPUREG_DRAWELEMENTS 0x022F ///< Draw arrays elements. #define GPUREG_0230 0x0230 ///< Unknown. -#define GPUREG_0231 0x0231 ///< Unknown. +#define GPUREG_VTX_FUNC 0x0231 ///< Unknown. #define GPUREG_FIXEDATTRIB_INDEX 0x0232 ///< Fixed attribute index. #define GPUREG_FIXEDATTRIB_DATA0 0x0233 ///< Fixed attribute data 0. #define GPUREG_FIXEDATTRIB_DATA1 0x0234 ///< Fixed attribute data 1. @@ -604,25 +604,25 @@ #define GPUREG_023F 0x023F ///< Unknown. #define GPUREG_0240 0x0240 ///< Unknown. #define GPUREG_0241 0x0241 ///< Unknown. -#define GPUREG_0242 0x0242 ///< Unknown. +#define GPUREG_VSH_NUM_ATTR 0x0242 ///< Unknown. #define GPUREG_0243 0x0243 ///< Unknown. -#define GPUREG_0244 0x0244 ///< Unknown. -#define GPUREG_0245 0x0245 ///< Unknown. +#define GPUREG_VSH_COM_MODE 0x0244 ///< Unknown. +#define GPUREG_START_DRAW_FUNC0 0x0245 ///< Unknown. #define GPUREG_0246 0x0246 ///< Unknown. #define GPUREG_0247 0x0247 ///< Unknown. #define GPUREG_0248 0x0248 ///< Unknown. #define GPUREG_0249 0x0249 ///< Unknown. -#define GPUREG_024A 0x024A ///< Unknown. +#define GPUREG_VSH_OUTMAP_TOTAL1 0x024A ///< Unknown. #define GPUREG_024B 0x024B ///< Unknown. #define GPUREG_024C 0x024C ///< Unknown. #define GPUREG_024D 0x024D ///< Unknown. #define GPUREG_024E 0x024E ///< Unknown. #define GPUREG_024F 0x024F ///< Unknown. #define GPUREG_0250 0x0250 ///< Unknown. -#define GPUREG_0251 0x0251 ///< Unknown. -#define GPUREG_0252 0x0252 ///< Unknown. -#define GPUREG_0253 0x0253 ///< Unknown. -#define GPUREG_0254 0x0254 ///< Unknown. +#define GPUREG_VSH_OUTMAP_TOTAL2 0x0251 ///< Unknown. +#define GPUREG_GSH_MISC0 0x0252 ///< Unknown. +#define GPUREG_GEOSTAGE_CONFIG2 0x0253 ///< Unknown. +#define GPUREG_GSH_MISC1 0x0254 ///< Unknown. #define GPUREG_0255 0x0255 ///< Unknown. #define GPUREG_0256 0x0256 ///< Unknown. #define GPUREG_0257 0x0257 ///< Unknown. diff --git a/libctru/source/gpu/gpu-old.c b/libctru/source/gpu/gpu-old.c index 7450105..25089c3 100644 --- a/libctru/source/gpu/gpu-old.c +++ b/libctru/source/gpu/gpu-old.c @@ -52,7 +52,7 @@ void GPU_SetViewport(u32* depthBuffer, u32* colorBuffer, u32 x, u32 y, u32 w, u3 param[0x2]=f116e; GPUCMD_AddIncrementalWrites(GPUREG_DEPTHBUFFER_LOC, param, 0x00000003); - GPUCMD_AddWrite(GPUREG_FRAMEBUFFER_DIM2, f116e); + GPUCMD_AddWrite(GPUREG_RENDERBUF_DIM, f116e); GPUCMD_AddWrite(GPUREG_DEPTHBUFFER_FORMAT, 0x00000003); //depth buffer format GPUCMD_AddWrite(GPUREG_COLORBUFFER_FORMAT, 0x00000002); //color buffer format GPUCMD_AddWrite(GPUREG_FRAMEBUFFER_BLOCK32, 0x00000000); //? @@ -90,7 +90,7 @@ void GPU_SetScissorTest(GPU_SCISSORMODE mode, u32 left, u32 bottom, u32 right, u void GPU_DepthMap(float zScale, float zOffset) { - GPUCMD_AddWrite(GPUREG_006D, 0x00000001); //? + GPUCMD_AddWrite(GPUREG_DEPTHMAP_ENABLE, 0x00000001); GPUCMD_AddWrite(GPUREG_DEPTHMAP_SCALE, f32tof24(zScale)); GPUCMD_AddWrite(GPUREG_DEPTHMAP_OFFSET, f32tof24(zOffset)); } @@ -136,8 +136,8 @@ void GPU_SetBlendingColor(u8 r, u8 g, u8 b, u8 a) void GPU_SetTextureEnable(GPU_TEXUNIT units) { - GPUCMD_AddMaskedWrite(GPUREG_006F, 0x2, units<<8); // enables texcoord outputs - GPUCMD_AddWrite(GPUREG_TEXUNIT_ENABLE, 0x00011000|units); // enables texture units + GPUCMD_AddMaskedWrite(GPUREG_SH_OUTATTR_CLOCK, 0x2, units<<8); // enables texcoord outputs + GPUCMD_AddWrite(GPUREG_TEXUNIT_CONFIG, 0x00011000|units); // enables texture units } void GPU_SetTexture(GPU_TEXUNIT unit, u32* data, u16 width, u16 height, u32 param, GPU_TEXCOLOR colorType) @@ -146,21 +146,21 @@ void GPU_SetTexture(GPU_TEXUNIT unit, u32* data, u16 width, u16 height, u32 para { case GPU_TEXUNIT0: GPUCMD_AddWrite(GPUREG_TEXUNIT0_TYPE, colorType); - GPUCMD_AddWrite(GPUREG_TEXUNIT0_LOC, ((u32)data)>>3); + GPUCMD_AddWrite(GPUREG_TEXUNIT0_ADDR1, ((u32)data)>>3); GPUCMD_AddWrite(GPUREG_TEXUNIT0_DIM, (width<<16)|height); GPUCMD_AddWrite(GPUREG_TEXUNIT0_PARAM, param); break; case GPU_TEXUNIT1: GPUCMD_AddWrite(GPUREG_TEXUNIT1_TYPE, colorType); - GPUCMD_AddWrite(GPUREG_TEXUNIT1_LOC, ((u32)data)>>3); + GPUCMD_AddWrite(GPUREG_TEXUNIT1_ADDR, ((u32)data)>>3); GPUCMD_AddWrite(GPUREG_TEXUNIT1_DIM, (width<<16)|height); GPUCMD_AddWrite(GPUREG_TEXUNIT1_PARAM, param); break; case GPU_TEXUNIT2: GPUCMD_AddWrite(GPUREG_TEXUNIT2_TYPE, colorType); - GPUCMD_AddWrite(GPUREG_TEXUNIT2_LOC, ((u32)data)>>3); + GPUCMD_AddWrite(GPUREG_TEXUNIT2_ADDR, ((u32)data)>>3); GPUCMD_AddWrite(GPUREG_TEXUNIT2_DIM, (width<<16)|height); GPUCMD_AddWrite(GPUREG_TEXUNIT2_PARAM, param); break; @@ -218,7 +218,7 @@ void GPU_SetAttributeBuffers(u8 totalAttributes, u32* baseAddress, u64 attribute GPUCMD_AddIncrementalWrites(GPUREG_ATTRIBBUFFERS_LOC, param, 0x00000027); GPUCMD_AddMaskedWrite(GPUREG_VSH_INPUTBUFFER_CONFIG, 0xB, 0xA0000000|(totalAttributes-1)); - GPUCMD_AddWrite(GPUREG_0242, (totalAttributes-1)); + GPUCMD_AddWrite(GPUREG_VSH_NUM_ATTR, (totalAttributes-1)); GPUCMD_AddIncrementalWrites(GPUREG_VSH_ATTRIBUTES_PERMUTATION_LOW, ((u32[]){attributePermutation&0xFFFFFFFF, (attributePermutation>>32)&0xFFFF}), 2); } @@ -268,11 +268,11 @@ void GPU_DrawArray(GPU_Primitive_t primitive, u32 first, u32 count) GPUCMD_AddWrite(GPUREG_VERTEX_OFFSET, first); //all the following except 0x000F022E might be useless - GPUCMD_AddMaskedWrite(GPUREG_0253, 0x1, 0x00000001); - GPUCMD_AddMaskedWrite(GPUREG_0245, 0x1, 0x00000000); + GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG2, 0x1, 0x00000001); + GPUCMD_AddMaskedWrite(GPUREG_START_DRAW_FUNC0, 0x1, 0x00000000); GPUCMD_AddWrite(GPUREG_DRAWARRAYS, 0x00000001); - GPUCMD_AddMaskedWrite(GPUREG_0245, 0x1, 0x00000001); - GPUCMD_AddWrite(GPUREG_0231, 0x00000001); + GPUCMD_AddMaskedWrite(GPUREG_START_DRAW_FUNC0, 0x1, 0x00000001); + GPUCMD_AddWrite(GPUREG_VTX_FUNC, 0x00000001); GPUCMD_AddWrite(GPUREG_FRAMEBUFFER_FLUSH, 0x00000001); } @@ -289,12 +289,12 @@ void GPU_DrawElements(GPU_Primitive_t primitive, u32* indexArray, u32 n) GPUCMD_AddWrite(GPUREG_VERTEX_OFFSET, 0x00000000); GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 0x2, 0x00000100); - GPUCMD_AddMaskedWrite(GPUREG_0253, 0x2, 0x00000100); + GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG2, 0x2, 0x00000100); - GPUCMD_AddMaskedWrite(GPUREG_0245, 0x1, 0x00000000); + GPUCMD_AddMaskedWrite(GPUREG_START_DRAW_FUNC0, 0x1, 0x00000000); GPUCMD_AddWrite(GPUREG_DRAWELEMENTS, 0x00000001); - GPUCMD_AddMaskedWrite(GPUREG_0245, 0x1, 0x00000001); - GPUCMD_AddWrite(GPUREG_0231, 0x00000001); + GPUCMD_AddMaskedWrite(GPUREG_START_DRAW_FUNC0, 0x1, 0x00000001); + GPUCMD_AddWrite(GPUREG_VTX_FUNC, 0x00000001); // CHECKME: does this one also require GPUREG_FRAMEBUFFER_FLUSH at the end? } @@ -303,5 +303,5 @@ void GPU_FinishDrawing() { GPUCMD_AddWrite(GPUREG_FRAMEBUFFER_FLUSH, 0x00000001); GPUCMD_AddWrite(GPUREG_FRAMEBUFFER_INVALIDATE, 0x00000001); - GPUCMD_AddWrite(GPUREG_0063, 0x00000001); + GPUCMD_AddWrite(GPUREG_EARLYDEPTH_CLEAR, 0x00000001); } diff --git a/libctru/source/gpu/shaderProgram.c b/libctru/source/gpu/shaderProgram.c index abefbe1..876332b 100644 --- a/libctru/source/gpu/shaderProgram.c +++ b/libctru/source/gpu/shaderProgram.c @@ -192,10 +192,10 @@ Result shaderProgramConfigure(shaderProgram_s* sp, bool sendVshCode, bool sendGs if(!sp->geometryShader) { GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 0x1, 0x00000000); - GPUCMD_AddMaskedWrite(GPUREG_0244, 0x1, 0x00000000); + GPUCMD_AddMaskedWrite(GPUREG_VSH_COM_MODE, 0x1, 0x00000000); }else{ GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 0x1, 0x00000002); - GPUCMD_AddMaskedWrite(GPUREG_0244, 0x1, 0x00000001); + GPUCMD_AddMaskedWrite(GPUREG_VSH_COM_MODE, 0x1, 0x00000001); } // setup vertex shader stuff no matter what @@ -209,19 +209,19 @@ Result shaderProgramConfigure(shaderProgram_s* sp, bool sendVshCode, bool sendGs GPUCMD_AddWrite(GPUREG_VSH_ENTRYPOINT, 0x7FFF0000|(vshDvle->mainOffset&0xFFFF)); GPUCMD_AddWrite(GPUREG_VSH_OUTMAP_MASK, vshDvle->outmapMask); - GPUCMD_AddWrite(GPUREG_024A, vshDvle->outmapData[0]-1); // ? - GPUCMD_AddWrite(GPUREG_0251, vshDvle->outmapData[0]-1); // ? + GPUCMD_AddWrite(GPUREG_VSH_OUTMAP_TOTAL1, vshDvle->outmapData[0]-1); // ? + GPUCMD_AddWrite(GPUREG_VSH_OUTMAP_TOTAL2, vshDvle->outmapData[0]-1); // ? GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 0x8, 0x00000000); // ? - GPUCMD_AddWrite(GPUREG_0252, 0x00000000); // ? + GPUCMD_AddWrite(GPUREG_GSH_MISC0, 0x00000000); // ? if(!sp->geometryShader) { // finish setting up vertex shader alone GPU_SetShaderOutmap((u32*)vshDvle->outmapData); - GPUCMD_AddWrite(GPUREG_0064, 0x00000001); // ? - GPUCMD_AddWrite(GPUREG_006F, 0x00000703); // ? + GPUCMD_AddWrite(GPUREG_SH_OUTATTR_MODE, 0x00000001); // ? + GPUCMD_AddWrite(GPUREG_SH_OUTATTR_CLOCK, 0x00000703); // ? }else{ // setup both vertex and geometry shader const DVLE_s* gshDvle = sp->geometryShader->dvle; @@ -240,8 +240,8 @@ Result shaderProgramConfigure(shaderProgram_s* sp, bool sendVshCode, bool sendGs GPUCMD_AddWrite(GPUREG_GSH_INPUTBUFFER_CONFIG, 0x08000000|(sp->geoShaderInputStride-1)); GPUCMD_AddIncrementalWrites(GPUREG_GSH_ATTRIBUTES_PERMUTATION_LOW, sp->geoShaderInputPermutation, 2); - GPUCMD_AddWrite(GPUREG_0064, 0x00000001); // ? - GPUCMD_AddWrite(GPUREG_006F, 0x01030703); // ? + GPUCMD_AddWrite(GPUREG_SH_OUTATTR_MODE, 0x00000001); // ? + GPUCMD_AddWrite(GPUREG_SH_OUTATTR_CLOCK, 0x01030703); // ? } return 0;