PS2: Slightly optimise drawing by using aligned data where possible

This commit is contained in:
UnknownShadow200 2025-05-08 21:36:38 +10:00
parent 736f4fd10d
commit 82b494203d
3 changed files with 13 additions and 37 deletions

View File

@ -95,12 +95,7 @@
FUNC DrawColouredQuad FUNC DrawColouredQuad
### VERTEX 1 ### ### VERTEX 1 ###
# LOAD VERTEX 1 lqc2 POS_1, 0x00(SRC)
ld $t0,0x00(SRC) # t0 = src[0].x,y
sd $t0,0x00(TMP) # tmp.x,y = t0
lw $t0,0x08(SRC) # t0 = src[0].z
sw $t0,0x08(TMP) # tmp.z = t0
lqc2 POS_1, 0x00(TMP) # V1 = tmp
TransformVertex POS_1 TransformVertex POS_1
lwc1 COL1, 0x0C(SRC) lwc1 COL1, 0x0C(SRC)
@ -108,12 +103,7 @@ FUNC DrawColouredQuad
BeginClip POS_1 BeginClip POS_1
### VERTEX 2 ### ### VERTEX 2 ###
# LOAD VERTEX 2 lqc2 POS_2, 0x10(SRC)
ld $t0,0x10(SRC) # t0 = src[1].x,y
sd $t0,0x00(TMP) # tmp.x,y = t0
lw $t0,0x18(SRC) # t0 = src[1].z
sw $t0,0x08(TMP) # tmp.z = t0
lqc2 POS_2, 0x00(TMP) # V2 = tmp
TransformVertex POS_2 TransformVertex POS_2
lwc1 COL2, 0x1C(SRC) lwc1 COL2, 0x1C(SRC)
@ -122,12 +112,7 @@ FUNC DrawColouredQuad
BeginClip POS_2 BeginClip POS_2
### VERTEX 3 ### ### VERTEX 3 ###
# LOAD VERTEX 3 lqc2 POS_3, 0x20(SRC)
ld $t0,0x20(SRC) # t0 = src[2].x,y
sd $t0,0x00(TMP) # tmp.x,y = t0
lw $t0,0x28(SRC) # t0 = src[2].z
sw $t0,0x08(TMP) # tmp.z = t0
lqc2 POS_3, 0x00(TMP) # V3 = tmp
TransformVertex POS_3 TransformVertex POS_3
lwc1 COL3, 0x2C(SRC) lwc1 COL3, 0x2C(SRC)
@ -136,12 +121,7 @@ FUNC DrawColouredQuad
BeginClip POS_3 BeginClip POS_3
### VERTEX 4 ### ### VERTEX 4 ###
# LOAD VERTEX 4 lqc2 POS_4, 0x30(SRC)
ld $t0,0x30(SRC) # t0 = src[3].x,y
sd $t0,0x00(TMP) # tmp.x,y = t0
lw $t0,0x38(SRC) # t0 = src[3].z
sw $t0,0x08(TMP) # tmp.z = t0
lqc2 POS_4, 0x00(TMP) # V4 = tmp
TransformVertex POS_4 TransformVertex POS_4
lwc1 COL4, 0x3C(SRC) lwc1 COL4, 0x3C(SRC)

View File

@ -105,12 +105,7 @@
FUNC DrawTexturedQuad FUNC DrawTexturedQuad
### VERTEX 1 ### ### VERTEX 1 ###
# LOAD VERTEX 1 lqc2 POS_1, 0x00(SRC)
ld $t0,0x00(SRC) # t0 = src[0].x,y
sd $t0,0x00(TMP) # tmp.x,y = t0
lw $t0,0x08(SRC) # t0 = src[0].z
sw $t0,0x08(TMP) # tmp.z = t0
lqc2 POS_1, 0x00(TMP) # V1 = tmp
TransformVertex POS_1 TransformVertex POS_1
lwc1 COL1, 0x0C(SRC) lwc1 COL1, 0x0C(SRC)
@ -131,22 +126,19 @@ FUNC DrawTexturedQuad
lwc1 COL2, 0x24(SRC) lwc1 COL2, 0x24(SRC)
lwc1 U_2, 0x28(SRC) lwc1 U_2, 0x28(SRC)
lwc1 V_2, 0x2C(SRC) lwc1 V_2, 0x2C(SRC)
vmulq.w POS_1, V0001, $Q vmulq.w POS_1, V0001, $Q
vdiv $Q, _one, POS2w vdiv $Q, _one, POS2w
BeginClip POS_2 BeginClip POS_2
### VERTEX 3 ### ### VERTEX 3 ###
# LOAD VERTEX 3 lqc2 POS_3, 0x30(SRC)
ld $t0,0x30(SRC) # t0 = src[2].x,y
sd $t0,0x00(TMP) # tmp.x,y = t0
lw $t0,0x38(SRC) # t0 = src[2].z
sw $t0,0x08(TMP) # tmp.z = t0
lqc2 POS_3, 0x00(TMP) # V3 = tmp
TransformVertex POS_3 TransformVertex POS_3
lwc1 COL3, 0x3C(SRC) lwc1 COL3, 0x3C(SRC)
lwc1 U_3, 0x40(SRC) lwc1 U_3, 0x40(SRC)
lwc1 V_3, 0x44(SRC) lwc1 V_3, 0x44(SRC)
vmulq.w POS_2, V0001, $Q vmulq.w POS_2, V0001, $Q
vdiv $Q, _one, POS3w vdiv $Q, _one, POS3w
BeginClip POS_3 BeginClip POS_3
@ -163,6 +155,7 @@ FUNC DrawTexturedQuad
lwc1 COL4, 0x54(SRC) lwc1 COL4, 0x54(SRC)
lwc1 U_4, 0x58(SRC) lwc1 U_4, 0x58(SRC)
lwc1 V_4, 0x5C(SRC) lwc1 V_4, 0x5C(SRC)
vmulq.w POS_3, V0001, $Q vmulq.w POS_3, V0001, $Q
vdiv $Q, _one, POS4w vdiv $Q, _one, POS4w
BeginClip POS_4 BeginClip POS_4

View File

@ -397,7 +397,10 @@ static void PreprocessColouredVertices(void) {
} }
static GfxResourceID Gfx_AllocStaticVb(VertexFormat fmt, int count) { static GfxResourceID Gfx_AllocStaticVb(VertexFormat fmt, int count) {
return Mem_TryAlloc(count, strideSizes[fmt]); //return Mem_TryAlloc(count, strideSizes[fmt]);
return memalign(16,count * strideSizes[fmt]);
// align to 16 bytes, so DrawTexturedQuad/DrawColouredQuad can
// load vertices using the "load quad (16 bytes)" instruction
} }
void Gfx_BindVb(GfxResourceID vb) { gfx_vertices = vb; } void Gfx_BindVb(GfxResourceID vb) { gfx_vertices = vb; }