mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 02:28:10 +02:00
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:
parent
0c0097ab34
commit
5e4e8df95a
1 changed files with 57 additions and 49 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue