libagx: drop Clockwise

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32081>
This commit is contained in:
Alyssa Rosenzweig 2024-11-04 15:02:26 -04:00 committed by Marge Bot
parent 0c0097ab34
commit 5e4e8df95a

View file

@ -334,8 +334,8 @@ DefineIndex(private struct CHWTessellator *ctx, int index,
} }
static void static void
DefineClockwiseTriangle(private struct CHWTessellator *ctx, int index0, DefineTriangle(private struct CHWTessellator *ctx, int index0, int index1,
int index1, int index2, int indexStorageBaseOffset) int index2, int indexStorageBaseOffset)
{ {
index0 = PatchIndexValue(ctx, index0); index0 = PatchIndexValue(ctx, index0);
index1 = PatchIndexValue(ctx, index1); index1 = PatchIndexValue(ctx, index1);
@ -456,7 +456,8 @@ StitchRegular(private struct CHWTessellator *ctx, bool bTrapezoid,
int insidePoint = insideEdgePointBaseOffset; int insidePoint = insideEdgePointBaseOffset;
int outsidePoint = outsideEdgePointBaseOffset; int outsidePoint = outsideEdgePointBaseOffset;
if (bTrapezoid) { if (bTrapezoid) {
DefineClockwiseTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint, baseIndexOffset); DefineTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint,
baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
outsidePoint++; outsidePoint++;
} }
@ -465,11 +466,12 @@ StitchRegular(private struct CHWTessellator *ctx, bool bTrapezoid,
case DIAGONALS_INSIDE_TO_OUTSIDE: case DIAGONALS_INSIDE_TO_OUTSIDE:
// Diagonals pointing from inside edge forward towards outside edge // Diagonals pointing from inside edge forward towards outside edge
for (p = 0; p < numInsideEdgePoints - 1; p++) { for (p = 0; p < numInsideEdgePoints - 1; p++) {
DefineClockwiseTriangle(ctx, insidePoint, outsidePoint, outsidePoint + 1, baseIndexOffset); DefineTriangle(ctx, insidePoint, outsidePoint, outsidePoint + 1,
baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
DefineClockwiseTriangle(ctx, insidePoint, outsidePoint + 1, insidePoint + 1, DefineTriangle(ctx, insidePoint, outsidePoint + 1, insidePoint + 1,
baseIndexOffset); baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
insidePoint++; insidePoint++;
outsidePoint++; outsidePoint++;
@ -480,20 +482,22 @@ StitchRegular(private struct CHWTessellator *ctx, bool bTrapezoid,
// First half // First half
for (p = 0; p < numInsideEdgePoints / 2 - 1; p++) { for (p = 0; p < numInsideEdgePoints / 2 - 1; p++) {
DefineClockwiseTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint, baseIndexOffset); DefineTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint,
baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
DefineClockwiseTriangle(ctx, insidePoint, outsidePoint + 1, insidePoint + 1, DefineTriangle(ctx, insidePoint, outsidePoint + 1, insidePoint + 1,
baseIndexOffset); baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
insidePoint++; insidePoint++;
outsidePoint++; outsidePoint++;
} }
// Middle // Middle
DefineClockwiseTriangle(ctx, outsidePoint, insidePoint + 1, insidePoint, baseIndexOffset); DefineTriangle(ctx, outsidePoint, insidePoint + 1, insidePoint,
baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
DefineClockwiseTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint + 1, DefineTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint + 1,
baseIndexOffset); baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
insidePoint++; insidePoint++;
outsidePoint++; outsidePoint++;
@ -501,10 +505,11 @@ StitchRegular(private struct CHWTessellator *ctx, bool bTrapezoid,
// Second half // Second half
for (; p < numInsideEdgePoints; p++) { for (; p < numInsideEdgePoints; p++) {
DefineClockwiseTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint, baseIndexOffset); DefineTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint,
baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
DefineClockwiseTriangle(ctx, insidePoint, outsidePoint + 1, insidePoint + 1, DefineTriangle(ctx, insidePoint, outsidePoint + 1, insidePoint + 1,
baseIndexOffset); baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
insidePoint++; insidePoint++;
outsidePoint++; outsidePoint++;
@ -514,10 +519,11 @@ StitchRegular(private struct CHWTessellator *ctx, bool bTrapezoid,
// First half, diagonals pointing from outside of outside edge to inside of // First half, diagonals pointing from outside of outside edge to inside of
// inside edge // inside edge
for (p = 0; p < numInsideEdgePoints / 2; p++) { for (p = 0; p < numInsideEdgePoints / 2; p++) {
DefineClockwiseTriangle(ctx, outsidePoint, insidePoint + 1, insidePoint, baseIndexOffset); DefineTriangle(ctx, outsidePoint, insidePoint + 1, insidePoint,
baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
DefineClockwiseTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint + 1, DefineTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint + 1,
baseIndexOffset); baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
insidePoint++; insidePoint++;
outsidePoint++; outsidePoint++;
@ -525,10 +531,11 @@ StitchRegular(private struct CHWTessellator *ctx, bool bTrapezoid,
// Second half, diagonals pointing from inside of inside edge to outside of // Second half, diagonals pointing from inside of inside edge to outside of
// outside edge // outside edge
for (; p < numInsideEdgePoints - 1; p++) { for (; p < numInsideEdgePoints - 1; p++) {
DefineClockwiseTriangle(ctx, insidePoint, outsidePoint, outsidePoint + 1, baseIndexOffset); DefineTriangle(ctx, insidePoint, outsidePoint, outsidePoint + 1,
baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
DefineClockwiseTriangle(ctx, insidePoint, outsidePoint + 1, insidePoint + 1, DefineTriangle(ctx, insidePoint, outsidePoint + 1, insidePoint + 1,
baseIndexOffset); baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
insidePoint++; insidePoint++;
outsidePoint++; outsidePoint++;
@ -536,7 +543,8 @@ StitchRegular(private struct CHWTessellator *ctx, bool bTrapezoid,
break; break;
} }
if (bTrapezoid) { if (bTrapezoid) {
DefineClockwiseTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint, baseIndexOffset); DefineTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint,
baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
} }
} }
@ -652,8 +660,8 @@ StitchTransition(private struct CHWTessellator *ctx, int baseIndexOffset,
// since we don't start the loop at 0 below, we need a special case. // since we don't start the loop at 0 below, we need a special case.
if (0 < outsideNumHalfTessFactorPoints) { if (0 < outsideNumHalfTessFactorPoints) {
// Advance outside // Advance outside
DefineClockwiseTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint, DefineTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint,
baseIndexOffset); baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
outsidePoint++; outsidePoint++;
} }
@ -663,15 +671,15 @@ StitchTransition(private struct CHWTessellator *ctx, int baseIndexOffset,
if (bound < insideNumHalfTessFactorPoints) { if (bound < insideNumHalfTessFactorPoints) {
// Advance inside // Advance inside
DefineClockwiseTriangle(ctx, insidePoint, outsidePoint, DefineTriangle(ctx, insidePoint, outsidePoint, insidePoint + 1,
insidePoint + 1, baseIndexOffset); baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
insidePoint++; insidePoint++;
} }
if (bound < outsideNumHalfTessFactorPoints) { if (bound < outsideNumHalfTessFactorPoints) {
// Advance outside // Advance outside
DefineClockwiseTriangle(ctx, outsidePoint, outsidePoint + 1, DefineTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint,
insidePoint, baseIndexOffset); baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
outsidePoint++; outsidePoint++;
} }
@ -681,24 +689,24 @@ StitchTransition(private struct CHWTessellator *ctx, int baseIndexOffset,
insideEdgeTessFactorOdd) { insideEdgeTessFactorOdd) {
if (insideEdgeTessFactorOdd == outsideTessFactorOdd) { if (insideEdgeTessFactorOdd == outsideTessFactorOdd) {
// Quad in the middle // Quad in the middle
DefineClockwiseTriangle(ctx, insidePoint, outsidePoint, DefineTriangle(ctx, insidePoint, outsidePoint, insidePoint + 1,
insidePoint + 1, baseIndexOffset); baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
DefineClockwiseTriangle(ctx, insidePoint + 1, outsidePoint, DefineTriangle(ctx, insidePoint + 1, outsidePoint, outsidePoint + 1,
outsidePoint + 1, baseIndexOffset); baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
insidePoint++; insidePoint++;
outsidePoint++; outsidePoint++;
} else if (!insideEdgeTessFactorOdd) { } else if (!insideEdgeTessFactorOdd) {
// Triangle pointing inside // Triangle pointing inside
DefineClockwiseTriangle(ctx, insidePoint, outsidePoint, DefineTriangle(ctx, insidePoint, outsidePoint, outsidePoint + 1,
outsidePoint + 1, baseIndexOffset); baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
outsidePoint++; outsidePoint++;
} else { } else {
// Triangle pointing outside // Triangle pointing outside
DefineClockwiseTriangle(ctx, insidePoint, outsidePoint, DefineTriangle(ctx, insidePoint, outsidePoint, insidePoint + 1,
insidePoint + 1, baseIndexOffset); baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
insidePoint++; insidePoint++;
} }
@ -710,15 +718,15 @@ StitchTransition(private struct CHWTessellator *ctx, int baseIndexOffset,
if (bound < outsideNumHalfTessFactorPoints) { if (bound < outsideNumHalfTessFactorPoints) {
// Advance outside // Advance outside
DefineClockwiseTriangle(ctx, outsidePoint, outsidePoint + 1, DefineTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint,
insidePoint, baseIndexOffset); baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
outsidePoint++; outsidePoint++;
} }
if (bound < insideNumHalfTessFactorPoints) { if (bound < insideNumHalfTessFactorPoints) {
// Advance inside // Advance inside
DefineClockwiseTriangle(ctx, insidePoint, outsidePoint, DefineTriangle(ctx, insidePoint, outsidePoint, insidePoint + 1,
insidePoint + 1, baseIndexOffset); baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
insidePoint++; insidePoint++;
} }
@ -726,8 +734,8 @@ StitchTransition(private struct CHWTessellator *ctx, int baseIndexOffset,
// Below case is not needed if we didn't optimize loop above and made it run // Below case is not needed if we didn't optimize loop above and made it run
// from 31 down to 0. // from 31 down to 0.
if (0 < outsideNumHalfTessFactorPoints) { if (0 < outsideNumHalfTessFactorPoints) {
DefineClockwiseTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint, DefineTriangle(ctx, outsidePoint, outsidePoint + 1, insidePoint,
baseIndexOffset); baseIndexOffset);
baseIndexOffset += 3; baseIndexOffset += 3;
outsidePoint++; outsidePoint++;
} }
@ -931,8 +939,8 @@ libagx_tess_tri(constant struct libagx_tess_args *p, enum libagx_tess_mode mode,
if (!p->points_mode) { if (!p->points_mode) {
ctx.Index = libagx_draw(p, mode, false, patch, 3); ctx.Index = libagx_draw(p, mode, false, patch, 3);
DefineClockwiseTriangle(&ctx, 0, 1, 2, DefineTriangle(&ctx, 0, 1, 2,
/*indexStorageBaseOffset*/ 0); /*indexStorageBaseOffset*/ 0);
} else { } else {
libagx_draw_points(&ctx, p, patch, 3); libagx_draw_points(&ctx, p, patch, 3);
} }
@ -1155,9 +1163,9 @@ libagx_tess_tri(constant struct libagx_tess_args *p, enum libagx_tess_mode mode,
} }
if (insideTessFactorOdd) { if (insideTessFactorOdd) {
// Triangulate center (a single triangle) // Triangulate center (a single triangle)
DefineClockwiseTriangle(&ctx, outsideEdgePointBaseOffset, DefineTriangle(&ctx, outsideEdgePointBaseOffset,
outsideEdgePointBaseOffset + 1, outsideEdgePointBaseOffset + 1,
outsideEdgePointBaseOffset + 2, NumIndices); outsideEdgePointBaseOffset + 2, NumIndices);
NumIndices += 3; NumIndices += 3;
} }
} }
@ -1266,8 +1274,8 @@ libagx_tess_quad(constant struct libagx_tess_args *p,
if (mode == LIBAGX_TESS_MODE_COUNT) if (mode == LIBAGX_TESS_MODE_COUNT)
return; return;
DefineClockwiseTriangle(&ctx, 0, 1, 3, /*indexStorageOffset*/ 0); DefineTriangle(&ctx, 0, 1, 3, /*indexStorageOffset*/ 0);
DefineClockwiseTriangle(&ctx, 1, 2, 3, /*indexStorageOffset*/ 3); DefineTriangle(&ctx, 1, 2, 3, /*indexStorageOffset*/ 3);
} else { } else {
libagx_draw_points(&ctx, p, patch, 4); libagx_draw_points(&ctx, p, patch, 4);
if (mode == LIBAGX_TESS_MODE_COUNT) if (mode == LIBAGX_TESS_MODE_COUNT)