Re: [Mesa-dev] [PATCH 09/14] swr: [rasterizer core] conservative rasterization frontend support

2016-06-17 Thread Rowley, Timothy O
Good spotting.  Whoops, will do that.

-Tim

> On Jun 17, 2016, at 2:59 PM, Emil Velikov  wrote:
> 
> On 17 June 2016 at 20:25, Tim Rowley  wrote:
> 
>> create mode 100644 src/gallium/drivers/swr/rasterizer/core/conservativeRast.h
>> 
> Please mention the new file in the CORE_CXX_SOURCES list in
> Makefile.sources (alphabetically).
> 
> Thanks
> Emil

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 09/14] swr: [rasterizer core] conservative rasterization frontend support

2016-06-17 Thread Emil Velikov
On 17 June 2016 at 20:25, Tim Rowley  wrote:

>  create mode 100644 src/gallium/drivers/swr/rasterizer/core/conservativeRast.h
>
Please mention the new file in the CORE_CXX_SOURCES list in
Makefile.sources (alphabetically).

Thanks
Emil
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 09/14] swr: [rasterizer core] conservative rasterization frontend support

2016-06-17 Thread Tim Rowley
---
 src/gallium/drivers/swr/rasterizer/core/api.cpp|  13 +-
 src/gallium/drivers/swr/rasterizer/core/clip.h |   4 +-
 .../drivers/swr/rasterizer/core/conservativeRast.h | 120 +++
 src/gallium/drivers/swr/rasterizer/core/context.h  |   2 +
 .../drivers/swr/rasterizer/core/frontend.cpp   | 163 +++--
 src/gallium/drivers/swr/rasterizer/core/frontend.h |  43 +-
 .../drivers/swr/rasterizer/core/rasterizer.h   |   8 +
 src/gallium/drivers/swr/rasterizer/core/state.h|   4 +-
 src/gallium/drivers/swr/rasterizer/core/utils.h|  30 
 9 files changed, 324 insertions(+), 63 deletions(-)
 create mode 100644 src/gallium/drivers/swr/rasterizer/core/conservativeRast.h

diff --git a/src/gallium/drivers/swr/rasterizer/core/api.cpp 
b/src/gallium/drivers/swr/rasterizer/core/api.cpp
index 22a94fb..cec4519 100644
--- a/src/gallium/drivers/swr/rasterizer/core/api.cpp
+++ b/src/gallium/drivers/swr/rasterizer/core/api.cpp
@@ -780,10 +780,7 @@ void SetupPipeline(DRAW_CONTEXT *pDC)
 const bool bMultisampleEnable = ((rastState.sampleCount > 
SWR_MULTISAMPLE_1X) || rastState.forcedSampleCount) ? 1 : 0;
 const uint32_t centroid = ((psState.barycentricsMask & 
SWR_BARYCENTRIC_CENTROID_MASK) > 0) ? 1 : 0;
 const uint32_t canEarlyZ = (psState.forceEarlyZ || 
(!psState.writesODepth && !psState.usesSourceDepth && !psState.usesUAV)) ? 1 : 
0;
-
-// currently only support 'normal' input coverage
-SWR_ASSERT(psState.inputCoverage == SWR_INPUT_COVERAGE_NORMAL ||
-   psState.inputCoverage == SWR_INPUT_COVERAGE_NONE);
+const uint32_t inputCoverage = (psState.inputCoverage != 
SWR_INPUT_COVERAGE_NONE);
  
 SWR_BARYCENTRICS_MASK barycentricsMask = 
(SWR_BARYCENTRICS_MASK)psState.barycentricsMask;
 
@@ -795,20 +792,20 @@ void SetupPipeline(DRAW_CONTEXT *pDC)
 {
 // always need to generate I & J per sample for Z interpolation
 barycentricsMask = (SWR_BARYCENTRICS_MASK)(barycentricsMask | 
SWR_BARYCENTRIC_PER_SAMPLE_MASK);
-backendFuncs.pfnBackend = 
gBackendPixelRateTable[rastState.sampleCount][rastState.samplePattern][psState.inputCoverage][centroid][forcedSampleCount][canEarlyZ];
+backendFuncs.pfnBackend = 
gBackendPixelRateTable[rastState.sampleCount][rastState.samplePattern][inputCoverage][centroid][forcedSampleCount][canEarlyZ];
 }
 else
 {
 // always need to generate I & J per pixel for Z interpolation
 barycentricsMask = (SWR_BARYCENTRICS_MASK)(barycentricsMask | 
SWR_BARYCENTRIC_PER_PIXEL_MASK);
-backendFuncs.pfnBackend = 
gBackendSingleSample[psState.inputCoverage][centroid][canEarlyZ];
+backendFuncs.pfnBackend = 
gBackendSingleSample[inputCoverage][centroid][canEarlyZ];
 }
 break;
 case SWR_SHADING_RATE_SAMPLE:
 SWR_ASSERT(rastState.samplePattern == SWR_MSAA_STANDARD_PATTERN);
 // always need to generate I & J per sample for Z interpolation
 barycentricsMask = (SWR_BARYCENTRICS_MASK)(barycentricsMask | 
SWR_BARYCENTRIC_PER_SAMPLE_MASK);
-backendFuncs.pfnBackend = 
gBackendSampleRateTable[rastState.sampleCount][psState.inputCoverage][centroid][canEarlyZ];
+backendFuncs.pfnBackend = 
gBackendSampleRateTable[rastState.sampleCount][inputCoverage][centroid][canEarlyZ];
 break;
 default:
 SWR_ASSERT(0 && "Invalid shading rate");
@@ -833,7 +830,7 @@ void SetupPipeline(DRAW_CONTEXT *pDC)
 break;
 default:
 pState->pfnProcessPrims = ClipTriangles;
-pfnBinner = BinTriangles;
+pfnBinner = GetBinTrianglesFunc((rastState.conservativeRast > 0));
 break;
 };
 
diff --git a/src/gallium/drivers/swr/rasterizer/core/clip.h 
b/src/gallium/drivers/swr/rasterizer/core/clip.h
index 67a4c4f..1a6fc6d 100644
--- a/src/gallium/drivers/swr/rasterizer/core/clip.h
+++ b/src/gallium/drivers/swr/rasterizer/core/clip.h
@@ -385,7 +385,7 @@ public:
 PRIMITIVE_TOPOLOGY clipTopology = TOP_UNKNOWN;
 if (NumVertsPerPrim == 3)
 {
-pfnBinFunc = BinTriangles;
+pfnBinFunc = 
GetBinTrianglesFunc((pa.pDC->pState->state.rastState.conservativeRast > 0));
 clipTopology = TOP_TRIANGLE_FAN;
 
 // so that the binner knows to bloat wide points later
@@ -519,7 +519,7 @@ public:
 pfnBinner = BinLines;
 break;
 default:
-pfnBinner = BinTriangles;
+pfnBinner = 
GetBinTrianglesFunc((pa.pDC->pState->state.rastState.conservativeRast > 0));
 break;
 };
 
diff --git a/src/gallium/drivers/swr/rasterizer/core/conservativeRast.h 
b/src/gallium/drivers/swr/rasterizer/core/conservativeRast.h
new file mode 100644
index 000..f8aa8df
--- /dev/null
+++