diff --git a/misc/dreamcast/DrawColouredQuads.S b/misc/dreamcast/DrawColouredQuads.S index 0142861ca..a68f1127c 100644 --- a/misc/dreamcast/DrawColouredQuads.S +++ b/misc/dreamcast/DrawColouredQuads.S @@ -38,56 +38,16 @@ _DrawColouredQuads: .TRANSFORM_QUAD: mov.l CMD_COL_VERT, r1 ! r1 = GPU VERT command -! TRANSFORM VERTEX 1 - add #16, r3 ! r3 += VERTEX_STRIDE - pref @r3 ! PREFETCH r3 (next vertex) - add #64, r5 ! r5 += 2 * sizeof(VERTEX) - fmov @r4+, fr4 ! fr4 = src->x - fmov @r4+, fr5 ! fr5 = src->y - fmov @r4+, fr6 ! fr6 = src->z - fldi1 fr7 ! fr7 = 1.0 - ftrv xmtrx, fv4 ! TRANSFORM(fr4..fr7) - - fmov @r4+,fr3 ! C = src->color + LoadColouredVertex ProcessVertex1 -! TRANSFORM VERTEX 2 - add #16, r3 ! r3 += VERTEX_STRIDE - pref @r3 ! PREFETCH r3 (next vertex) - add #64, r5 ! r5 += 2 * sizeof(VERTEX) - fmov @r4+, fr4 ! fr4 = src->x - fmov @r4+, fr5 ! fr5 = src->y - fmov @r4+, fr6 ! fr6 = src->z - fldi1 fr7 ! fr7 = 1.0 - ftrv xmtrx, fv4 ! TRANSFORM(fr4..fr7) - - fmov @r4+,fr3 ! C = src->color + LoadColouredVertex ProcessVertex2 -! TRANSFORM VERTEX 3 - add #16, r3 ! r3 += VERTEX_STRIDE - pref @r3 ! PREFETCH r3 (next vertex) - add #64, r5 ! r5 += 2 * sizeof(VERTEX) - fmov @r4+, fr4 ! fr4 = src->x - fmov @r4+, fr5 ! fr5 = src->y - fmov @r4+, fr6 ! fr6 = src->z - fldi1 fr7 ! fr7 = 1.0 - ftrv xmtrx, fv4 ! TRANSFORM(fr4..fr7) - - fmov @r4+,fr3 ! C = src->color + LoadColouredVertex ProcessVertex3 -! TRANSFORM VERTEX 4 - add #16, r3 ! r3 += VERTEX_STRIDE - pref @r3 ! PREFETCH r3 (next vertex) - add #64, r5 ! r5 += 2 * sizeof(VERTEX) - fmov @r4+, fr4 ! fr4 = src->x - fmov @r4+, fr5 ! fr5 = src->y - fmov @r4+, fr6 ! fr6 = src->z - fldi1 fr7 ! fr7 = 1.0 - ftrv xmtrx, fv4 ! TRANSFORM(fr4..fr7) - - fmov @r4+,fr3 ! C = src->color + LoadColouredVertex ProcessVertex4 CMD_COL_EOS ! CLIPFLAGS TESTING @@ -118,20 +78,16 @@ CMD_COL_EOS: .long 0xf0000000 .global _VP_COL_HWIDTH .type _VP_COL_HWIDTH,%object -.size _VP_COL_HWIDTH,4 _VP_COL_HWIDTH: .long 0 .global _VP_COL_HHEIGHT .type _VP_COL_HHEIGHT,%object -.size _VP_COL_HHEIGHT,4 _VP_COL_HHEIGHT: .long 0 .global _VP_COL_X_PLUS_HWIDTH .type _VP_COL_X_PLUS_HWIDTH,%object -.size _VP_COL_X_PLUS_HWIDTH,4 _VP_COL_X_PLUS_HWIDTH: .long 0 .global _VP_COL_Y_PLUS_HHEIGHT .type _VP_COL_Y_PLUS_HHEIGHT,%object -.size _VP_COL_Y_PLUS_HHEIGHT,4 _VP_COL_Y_PLUS_HHEIGHT: .long 0 \ No newline at end of file diff --git a/misc/dreamcast/DrawTexturedQuads.S b/misc/dreamcast/DrawTexturedQuads.S index 10fab7ea7..9ef80f9fe 100644 --- a/misc/dreamcast/DrawTexturedQuads.S +++ b/misc/dreamcast/DrawTexturedQuads.S @@ -36,64 +36,16 @@ _DrawTexturedQuads: .TRANSFORM_QUAD: mov.l CMD_TEX_VERT, r1 ! r1 = GPU VERT command -! TRANSFORM VERTEX 1 - add #24, r3 ! r3 += VERTEX_STRIDE - pref @r3 ! PREFETCH r3 (next vertex) - add #64, r5 ! r5 += 2 * sizeof(VERTEX) - fmov @r4+, fr4 ! X = src->x - fmov @r4+, fr5 ! Y = src->y - fmov @r4+, fr6 ! Z = src->z - fldi1 fr7 ! W = 1.0 - ftrv xmtrx, fv4 ! TRANSFORM(XYZW) -! OUTPUT + CLIPFLAGS VERTEX 1 - fmov @r4+,fr3 ! C = src->color - fmov @r4+,fr1 ! U = src->u - fmov @r4+,fr2 ! V = src->v + LoadTexturedVertex ProcessVertex1 -! TRANSFORM VERTEX 2 - add #24, r3 ! r3 += VERTEX_STRIDE - pref @r3 ! PREFETCH r3 (next vertex) - add #64, r5 ! r5 += 2 * sizeof(VERTEX) - fmov @r4+, fr4 ! X = src->x - fmov @r4+, fr5 ! Y = src->y - fmov @r4+, fr6 ! Z = src->z - fldi1 fr7 ! W = 1.0 - ftrv xmtrx, fv4 ! TRANSFORM(XYZW) -! OUTPUT + CLIPFLAGS VERTEX 2 - fmov @r4+,fr3 ! C = src->color - fmov @r4+,fr1 ! U = src->u - fmov @r4+,fr2 ! V = src->v + LoadTexturedVertex ProcessVertex2 -! TRANSFORM VERTEX 3 - add #24, r3 ! r3 += VERTEX_STRIDE - pref @r3 ! PREFETCH r3 (next vertex) - add #64, r5 ! r5 += 2 * sizeof(VERTEX) - fmov @r4+, fr4 ! X = src->x - fmov @r4+, fr5 ! Y = src->y - fmov @r4+, fr6 ! Z = src->z - fldi1 fr7 ! W = 1.0 - ftrv xmtrx, fv4 ! TRANSFORM(XYZW) -! OUTPUT + CLIPFLAGS VERTEX 3 - fmov @r4+,fr3 ! C = src->color - fmov @r4+,fr1 ! U = src->u - fmov @r4+,fr2 ! V = src->v + LoadTexturedVertex ProcessVertex3 -! TRANSFORM VERTEX 4 - add #24, r3 ! r3 += VERTEX_STRIDE - pref @r3 ! PREFETCH r3 (next vertex) - add #64, r5 ! r5 += 2 * sizeof(VERTEX) - fmov @r4+, fr4 ! X = src->x - fmov @r4+, fr5 ! Y = src->y - fmov @r4+, fr6 ! Z = src->z - fldi1 fr7 ! W = 1.0 - ftrv xmtrx, fv4 ! TRANSFORM(XYZW) -! OUTPUT + CLIPFLAGS VERTEX 4 - fmov @r4+,fr3 ! C = src->color - fmov @r4+,fr1 ! U = src->u - fmov @r4+,fr2 ! V = src->v + LoadTexturedVertex ProcessVertex4 CMD_TEX_EOS ! CLIPFLAGS TESTING @@ -124,20 +76,16 @@ CMD_TEX_EOS: .long 0xf0000000 .global _VP_TEX_HWIDTH .type _VP_TEX_HWIDTH,%object -.size _VP_TEX_HWIDTH,4 _VP_TEX_HWIDTH: .long 0 .global _VP_TEX_HHEIGHT .type _VP_TEX_HHEIGHT,%object -.size _VP_TEX_HHEIGHT,4 _VP_TEX_HHEIGHT: .long 0 .global _VP_TEX_X_PLUS_HWIDTH .type _VP_TEX_X_PLUS_HWIDTH,%object -.size _VP_TEX_X_PLUS_HWIDTH,4 _VP_TEX_X_PLUS_HWIDTH: .long 0 .global _VP_TEX_Y_PLUS_HHEIGHT .type _VP_TEX_Y_PLUS_HHEIGHT,%object -.size _VP_TEX_Y_PLUS_HHEIGHT,4 _VP_TEX_Y_PLUS_HHEIGHT: .long 0 \ No newline at end of file diff --git a/misc/dreamcast/ViewportTransform.S b/misc/dreamcast/ViewportTransform.S index ba01df878..fee37ce0c 100644 --- a/misc/dreamcast/ViewportTransform.S +++ b/misc/dreamcast/ViewportTransform.S @@ -1,3 +1,40 @@ +! ========================================================= +! ========================= VERTEX LOADING ================ +! ========================================================= +.macro LoadColouredVertex +! PREPARE NEXT VERTEX + add #16, r3 ! r3 += VERTEX_STRIDE + pref @r3 ! PREFETCH r3 (next vertex) + add #64, r5 ! r5 += 2 * sizeof(VERTEX) +! LOAD XYZ + fmov @r4+, fr4 ! X = src->x + fmov @r4+, fr5 ! Y = src->y + fmov @r4+, fr6 ! Z = src->z + fldi1 fr7 ! W = 1.0 +! TRANSFORM VERTEX + ftrv xmtrx, fv4 ! TRANSFORM(XYZW) +! LOAD ATTRIBUTES + fmov @r4+,fr3 ! C = src->color +.endm + +.macro LoadTexturedVertex +! PREPARE NEXT VERTEX + add #24, r3 ! r3 += VERTEX_STRIDE + pref @r3 ! PREFETCH r3 (next vertex) + add #64, r5 ! r5 += 2 * sizeof(VERTEX) +! LOAD XYZ + fmov @r4+, fr4 ! X = src->x + fmov @r4+, fr5 ! Y = src->y + fmov @r4+, fr6 ! Z = src->z + fldi1 fr7 ! W = 1.0 +! TRANSFORM VERTEX + ftrv xmtrx, fv4 ! TRANSFORM(XYZW) +! LOAD ATTRIBUTES + fmov @r4+,fr3 ! C = src->color + fmov @r4+,fr1 ! U = src->u + fmov @r4+,fr2 ! V = src->v +.endm + ! ========================================================= ! ========================= VERTEX OUTPUT ================= ! ========================================================= @@ -96,10 +133,10 @@ .macro ViewportTransformVertex ! INVERSE W CALCULATION - add #28, r5 ! r5 = &vertex[0].w - fmov.s @r5+,fr0 ! fr0 = vertex->w + add #28, r5 ! r5 = &vertex->w + fmov.s @r5,fr0 ! fr0 = vertex->w fmul fr0,fr0 ! fr0 = fr0 * fr0 - add #-32, r5 ! r5 -= sizeof(VERTEX) + add #-24, r5 ! r5 = &vertex->x fsrra fr0 ! fr0 = 1 / sqrt(fr0) -> 1 / vertex->w ! TRANSFORM X @@ -107,22 +144,18 @@ fmov fr10,fr5 ! fr5 = VIEWPORT_X_PLUS_HWIDTH fmul fr8,fr4 ! fr4 = VIEWPORT_HWIDTH * vertex->x fmac fr0,fr4,fr5 ! fr5 = fr0 * fr4 + fr5 -- (X * F * hwidth) + x_plus_hwidth - fmov.s fr9,@r5 ! vertex->x = fr9 - add #4, r5 ! r5 += 4 (points to vertex->y) + fmov.s fr5,@r5 ! vertex->x = fr5 + add #4, r5 ! r5 = &vertex->y ! TRANSFORM Y - fmov.s @r5,fr3 ! fr4 = vertex->y - fmov fr11,fr5 ! fr4 = VIEWPORT_Y_PLUS_HHEIGHT + fmov.s @r5,fr4 ! fr4 = vertex->y + fmov fr11,fr5 ! fr5 = VIEWPORT_Y_PLUS_HHEIGHT fmul fr9,fr4 ! fr4 = VIEWPORT_HHEIGHT * vertex->y fmac fr0,fr4,fr5 ! fr5 = fr0 * fr4 + fr5 -- (Y * F * hheight) + y_plus_hheight - fmov.s fr9,@r5 ! vertex->y = fr9 - add #4, r5 ! r5 += 4 (points to vertex->z) + fmov.s fr5,@r5 ! vertex->y = fr5 + add #4, r5 ! r5 = &vertex->z ! ASSIGN Z -! fmov.s @r5,fr0 ! vertex->z = fr0 -! add #24, r5 ! r5 += 24 (points to next vertex) -.endm - - -VP_ZSHIFT: - .float 1.0001 \ No newline at end of file + fmov.s fr0,@r5 ! vertex->z = fr0 + add #20, r5 ! r5 += 20 (points to start of next vertex) +.endm \ No newline at end of file diff --git a/src/Graphics_Dreamcast.c b/src/Graphics_Dreamcast.c index d7f82ebac..7408dad6d 100644 --- a/src/Graphics_Dreamcast.c +++ b/src/Graphics_Dreamcast.c @@ -31,6 +31,7 @@ static void InitGLState(void) { void Gfx_Create(void) { if (!Gfx.Created) glKosInit(); + Gfx_SetViewport(0, 0, Game.Width, Game.Height); InitGLState();