swr/rast: Support flexible vertex layout for DS output
authorTim Rowley <timothy.o.rowley@intel.com>
Wed, 18 Oct 2017 21:51:07 +0000 (16:51 -0500)
committerTim Rowley <timothy.o.rowley@intel.com>
Mon, 20 Nov 2017 19:49:59 +0000 (13:49 -0600)
Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
src/gallium/drivers/swr/rasterizer/core/frontend.cpp
src/gallium/drivers/swr/rasterizer/core/state.h

index 211e9e4..e15b300 100644 (file)
@@ -1237,6 +1237,7 @@ static void TessellationStages(
         dsContext.pDomainU = (simdscalar*)tsData.pDomainPointsU;
         dsContext.pDomainV = (simdscalar*)tsData.pDomainPointsV;
         dsContext.pOutputData = gt_pTessellationThreadData->pDSOutput;
+        dsContext.outVertexAttribOffset = tsState.dsOutVtxAttribOffset;
 #if USE_SIMD16_FRONTEND
         dsContext.vectorStride = RoundUpEven(requiredDSVectorInvocations);      // simd8 -> simd16
 #else
index 2af384f..d11ffc6 100644 (file)
@@ -288,6 +288,7 @@ struct SWR_DS_CONTEXT
     uint32_t        PrimitiveID;    // IN: (SCALAR) PrimitiveID for the patch associated with the DS invocation
     uint32_t        vectorOffset;   // IN: (SCALAR) vector index offset into SIMD data.
     uint32_t        vectorStride;   // IN: (SCALAR) stride (in vectors) of output data per attribute-component
+    uint32_t        outVertexAttribOffset; // IN: (SCALAR) Offset to the attributes as processed by the next shader stage.
     ScalarPatch*    pCpIn;          // IN: (SCALAR) Control patch
     simdscalar*     pDomainU;       // IN: (SIMD) Domain Point U coords
     simdscalar*     pDomainV;       // IN: (SIMD) Domain Point V coords
@@ -819,6 +820,7 @@ struct SWR_TS_STATE
     uint32_t                numHsOutputAttribs;
     uint32_t                numDsOutputAttribs;
     uint32_t                dsAllocationSize;
+    uint32_t                dsOutVtxAttribOffset;
 
     // Offset to the start of the attributes of the input vertices, in simdvector units
     uint32_t                vertexAttribOffset;