Merge pull request #155 from Subv/vertex_offset

Use register 0x22A (GPUREG_DRAW_VERTEX_OFFSET) when using GPU_DrawArrays
This commit is contained in:
fincs 2015-09-05 17:59:37 +02:00
commit 2e43fd1a40
3 changed files with 8 additions and 4 deletions

View File

@ -294,7 +294,7 @@ void GPU_SetTexture(GPU_TEXUNIT unit, u32* data, u16 width, u16 height, u32 para
void GPU_SetTextureBorderColor(GPU_TEXUNIT unit,u32 borderColor); void GPU_SetTextureBorderColor(GPU_TEXUNIT unit,u32 borderColor);
void GPU_SetTexEnv(u8 id, u16 rgbSources, u16 alphaSources, u16 rgbOperands, u16 alphaOperands, GPU_COMBINEFUNC rgbCombine, GPU_COMBINEFUNC alphaCombine, u32 constantColor); void GPU_SetTexEnv(u8 id, u16 rgbSources, u16 alphaSources, u16 rgbOperands, u16 alphaOperands, GPU_COMBINEFUNC rgbCombine, GPU_COMBINEFUNC alphaCombine, u32 constantColor);
void GPU_DrawArray(GPU_Primitive_t primitive, u32 n); void GPU_DrawArray(GPU_Primitive_t primitive, u32 n, u32 first);
void GPU_DrawElements(GPU_Primitive_t primitive, u32* indexArray, u32 n); void GPU_DrawElements(GPU_Primitive_t primitive, u32* indexArray, u32 n);
void GPU_FinishDrawing(); void GPU_FinishDrawing();

View File

@ -554,7 +554,7 @@
#define GPUREG_INDEXBUFFER_CONFIG 0x0227 #define GPUREG_INDEXBUFFER_CONFIG 0x0227
#define GPUREG_NUMVERTICES 0x0228 #define GPUREG_NUMVERTICES 0x0228
#define GPUREG_GEOSTAGE_CONFIG 0x0229 #define GPUREG_GEOSTAGE_CONFIG 0x0229
#define GPUREG_022A 0x022A #define GPUREG_DRAW_VERTEX_OFFSET 0x022A
#define GPUREG_022B 0x022B #define GPUREG_022B 0x022B
#define GPUREG_022C 0x022C #define GPUREG_022C 0x022C
#define GPUREG_022D 0x022D #define GPUREG_022D 0x022D

View File

@ -485,7 +485,7 @@ void GPU_SetTexEnv(u8 id, u16 rgbSources, u16 alphaSources, u16 rgbOperands, u16
GPUCMD_AddIncrementalWrites(GPUREG_0000|GPU_TEVID[id], param, 0x00000005); GPUCMD_AddIncrementalWrites(GPUREG_0000|GPU_TEVID[id], param, 0x00000005);
} }
void GPU_DrawArray(GPU_Primitive_t primitive, u32 n) void GPU_DrawArray(GPU_Primitive_t primitive, u32 n, u32 first)
{ {
//set primitive type //set primitive type
GPUCMD_AddMaskedWrite(GPUREG_PRIMITIVE_CONFIG, 0x2, primitive); GPUCMD_AddMaskedWrite(GPUREG_PRIMITIVE_CONFIG, 0x2, primitive);
@ -494,6 +494,8 @@ void GPU_DrawArray(GPU_Primitive_t primitive, u32 n)
GPUCMD_AddWrite(GPUREG_INDEXBUFFER_CONFIG, 0x80000000); GPUCMD_AddWrite(GPUREG_INDEXBUFFER_CONFIG, 0x80000000);
//pass number of vertices //pass number of vertices
GPUCMD_AddWrite(GPUREG_NUMVERTICES, n); GPUCMD_AddWrite(GPUREG_NUMVERTICES, n);
//set first vertex
GPUCMD_AddWrite(GPUREG_DRAW_VERTEX_OFFSET, first);
//all the following except 0x000F022E might be useless //all the following except 0x000F022E might be useless
GPUCMD_AddMaskedWrite(GPUREG_0253, 0x1, 0x00000001); GPUCMD_AddMaskedWrite(GPUREG_0253, 0x1, 0x00000001);
@ -514,6 +516,8 @@ void GPU_DrawElements(GPU_Primitive_t primitive, u32* indexArray, u32 n)
//pass number of vertices //pass number of vertices
GPUCMD_AddWrite(GPUREG_NUMVERTICES, n); GPUCMD_AddWrite(GPUREG_NUMVERTICES, n);
GPUCMD_AddWrite(GPUREG_DRAW_VERTEX_OFFSET, 0x00000000);
GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 0x2, 0x00000100); GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 0x2, 0x00000100);
GPUCMD_AddMaskedWrite(GPUREG_0253, 0x2, 0x00000100); GPUCMD_AddMaskedWrite(GPUREG_0253, 0x2, 0x00000100);