mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 13:48:06 +02:00
swr: [rasterizer core] Fix trifan regression from 9d3442575f
Fixes piglit triangle-rasterization-overdraw. SIMD16 path not working. Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
This commit is contained in:
parent
4cb69e817c
commit
7046695a0e
2 changed files with 11 additions and 5 deletions
|
|
@ -119,6 +119,8 @@ struct PA_STATE
|
|||
// cuts
|
||||
struct PA_STATE_OPT : public PA_STATE
|
||||
{
|
||||
SIMDVERTEX leadingVertex; // For tri-fan
|
||||
|
||||
uint32_t numPrims{ 0 }; // Total number of primitives for draw.
|
||||
uint32_t numPrimsComplete{ 0 }; // Total number of complete primitives.
|
||||
|
||||
|
|
|
|||
|
|
@ -1213,6 +1213,10 @@ void PaTriStripSingle0(PA_STATE_OPT& pa, uint32_t slot, uint32_t primIndex, __m1
|
|||
|
||||
bool PaTriFan0(PA_STATE_OPT& pa, uint32_t slot, simdvector verts[])
|
||||
{
|
||||
// store off leading vertex for attributes
|
||||
PA_STATE_OPT::SIMDVERTEX* pVertex = (PA_STATE_OPT::SIMDVERTEX*)pa.pStreamBase;
|
||||
pa.leadingVertex = pVertex[pa.cur];
|
||||
|
||||
SetNextPaState(pa, PaTriFan1, PaTriFanSingle0);
|
||||
return false; // Not enough vertices to assemble 8 triangles.
|
||||
}
|
||||
|
|
@ -1224,7 +1228,7 @@ bool PaTriFan1(PA_STATE_OPT& pa, uint32_t slot, simdvector verts[])
|
|||
simdvector a;
|
||||
simdvector b;
|
||||
|
||||
const simd16vector &leadvert_16 = PaGetSimdVector_simd16(pa, pa.first, slot);
|
||||
const simd16vector &leadvert_16 = pa.leadingVertex.attrib[slot];
|
||||
|
||||
if (!pa.useAlternateOffset)
|
||||
{
|
||||
|
|
@ -1252,7 +1256,7 @@ bool PaTriFan1(PA_STATE_OPT& pa, uint32_t slot, simdvector verts[])
|
|||
}
|
||||
|
||||
#else
|
||||
simdvector &leadVert = PaGetSimdVector(pa, pa.first, slot);
|
||||
simdvector &leadVert = pa.leadingVertex.attrib[slot];
|
||||
|
||||
simdvector &a = PaGetSimdVector(pa, pa.prev, slot);
|
||||
simdvector &b = PaGetSimdVector(pa, pa.cur, slot);
|
||||
|
|
@ -1293,7 +1297,7 @@ bool PaTriFan0_simd16(PA_STATE_OPT& pa, uint32_t slot, simd16vector verts[])
|
|||
|
||||
bool PaTriFan1_simd16(PA_STATE_OPT& pa, uint32_t slot, simd16vector verts[])
|
||||
{
|
||||
const simd16vector &a = PaGetSimdVector_simd16(pa, pa.first, slot);
|
||||
const simd16vector &a = pa.leadingVertex.attrib[slot];
|
||||
const simd16vector &b = PaGetSimdVector_simd16(pa, pa.prev, slot);
|
||||
const simd16vector &c = PaGetSimdVector_simd16(pa, pa.cur, slot);
|
||||
|
||||
|
|
@ -1329,7 +1333,7 @@ bool PaTriFan1_simd16(PA_STATE_OPT& pa, uint32_t slot, simd16vector verts[])
|
|||
void PaTriFanSingle0(PA_STATE_OPT& pa, uint32_t slot, uint32_t primIndex, __m128 verts[])
|
||||
{
|
||||
#if USE_SIMD16_FRONTEND
|
||||
const simd16vector &a = PaGetSimdVector_simd16(pa, pa.first, slot);
|
||||
const simd16vector &a = pa.leadingVertex.attrib[slot];
|
||||
const simd16vector &b = PaGetSimdVector_simd16(pa, pa.prev, slot);
|
||||
const simd16vector &c = PaGetSimdVector_simd16(pa, pa.cur, slot);
|
||||
|
||||
|
|
@ -1365,7 +1369,7 @@ void PaTriFanSingle0(PA_STATE_OPT& pa, uint32_t slot, uint32_t primIndex, __m128
|
|||
verts[2] = swizzleLaneN(c, primIndex - 14);
|
||||
}
|
||||
#else
|
||||
const simdvector &a = PaGetSimdVector(pa, pa.first, slot);
|
||||
const simdvector &a = pa.leadingVertex.attrib[slot];
|
||||
const simdvector &b = PaGetSimdVector(pa, pa.prev, slot);
|
||||
const simdvector &c = PaGetSimdVector(pa, pa.cur, slot);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue