<div dir="ltr"><div>Reviewed-by: Marek Olšák <<a href="mailto:marek.olsak@amd.com">marek.olsak@amd.com</a>><br><br></div>Marek<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 28, 2018 at 6:35 AM, Rhys Perry <span dir="ltr"><<a href="mailto:pendingchaos02@gmail.com" target="_blank">pendingchaos02@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">---<br>
src/gallium/docs/source/cso/<wbr>rasterizer.rst | 23 +++++++++++++++++++++++<br>
<span class=""> src/gallium/docs/source/<wbr>screen.rst | 18 ++++++++++++++++++<br>
src/gallium/drivers/etnaviv/<wbr>etnaviv_screen.c | 10 ++++++++++<br>
src/gallium/drivers/freedreno/<wbr>freedreno_screen.c | 10 ++++++++++<br>
src/gallium/drivers/i915/i915_<wbr>screen.c | 13 +++++++++++++<br>
src/gallium/drivers/llvmpipe/<wbr>lp_screen.c | 12 ++++++++++++<br>
src/gallium/drivers/nouveau/<wbr>nv30/nv30_screen.c | 10 ++++++++++<br>
src/gallium/drivers/nouveau/<wbr>nv50/nv50_screen.c | 10 ++++++++++<br>
src/gallium/drivers/nouveau/<wbr>nvc0/nvc0_screen.c | 10 ++++++++++<br>
src/gallium/drivers/r300/r300_<wbr>screen.c | 10 ++++++++++<br>
src/gallium/drivers/r600/r600_<wbr>pipe.c | 6 ++++++<br>
src/gallium/drivers/r600/r600_<wbr>pipe_common.c | 4 ++++<br>
src/gallium/drivers/radeonsi/<wbr>si_get.c | 10 ++++++++++<br>
src/gallium/drivers/softpipe/<wbr>sp_screen.c | 12 ++++++++++++<br>
src/gallium/drivers/svga/svga_<wbr>screen.c | 13 +++++++++++++<br>
src/gallium/drivers/swr/swr_<wbr>screen.cpp | 10 ++++++++++<br>
src/gallium/drivers/vc4/vc4_<wbr>screen.c | 13 ++++++++++++-<br>
src/gallium/drivers/vc5/vc5_<wbr>screen.c | 13 ++++++++++++-<br>
src/gallium/drivers/virgl/<wbr>virgl_screen.c | 10 ++++++++++<br>
src/gallium/include/pipe/p_<wbr>defines.h | 20 ++++++++++++++++++++<br>
</span> src/gallium/include/pipe/p_<wbr>state.h | 8 ++++++++<br>
21 files changed, 243 insertions(+), 2 deletions(-)<br>
<br>
diff --git a/src/gallium/docs/source/cso/<wbr>rasterizer.rst b/src/gallium/docs/source/cso/<wbr>rasterizer.rst<br>
index 616e4511a2..4dabcc032f 100644<br>
--- a/src/gallium/docs/source/cso/<wbr>rasterizer.rst<br>
+++ b/src/gallium/docs/source/cso/<wbr>rasterizer.rst<br>
@@ -340,3 +340,26 @@ clip_plane_enable<br>
<span class=""> If any clip distance output is written, those half-spaces for which no<br>
clip distance is written count as disabled; i.e. user clip planes and<br>
shader clip distances cannot be mixed, and clip distances take precedence.<br>
+<br>
+conservative_raster_mode<br>
+ The conservative rasterization mode. For PIPE_CONSERVATIVE_RASTER_OFF,<br>
+ conservative rasterization is disabled. For IPE_CONSERVATIVE_RASTER_POST_<wbr>SNAP<br>
+ or PIPE_CONSERVATIVE_RASTER_PRE_<wbr>SNAP, conservative rasterization is nabled.<br>
+ When conservative rasterization is enabled, the polygon smooth, line mooth,<br>
+ point smooth and line stipple settings are ignored.<br>
+ With the post-snap mode, unlike the pre-snap mode, fragments are never<br>
+ generated for degenerate primitives. Degenerate primitives, when rasterized,<br>
+ are considered back-facing and the vertex attributes and depth are that of<br>
+ the provoking vertex.<br>
+ If the post-snap mode is used with an unsupported primitive, the pre-snap<br>
+ mode is used, if supported. Behavior is similar for the pre-snap mode.<br>
+ If the pre-snap mode is used, fragments are generated with respect to the primitive<br>
+ before vertex snapping.<br>
+<br>
+conservative_raster_dilate<br>
+ The amount of dilation during conservative rasterization.<br>
</span>+<br>
+subpixel_precision_x<br>
+ A bias added to the horizontal subpixel precision during conservative rasterization.<br>
+subpixel_precision_y<br>
+ A bias added to the vertical subpixel precision during conservative rasterization.<br>
<div><div class="h5">diff --git a/src/gallium/docs/source/<wbr>screen.rst b/src/gallium/docs/source/<wbr>screen.rst<br>
index 3837360fb4..5bc6ee99f0 100644<br>
--- a/src/gallium/docs/source/<wbr>screen.rst<br>
+++ b/src/gallium/docs/source/<wbr>screen.rst<br>
@@ -420,6 +420,18 @@ The integer capabilities:<br>
by the driver, and the driver can throw assertion failures.<br>
* ``PIPE_CAP_PACKED_UNIFORMS``: True if the driver supports packed uniforms<br>
as opposed to padding to vec4s.<br>
+* ``PIPE_CAP_CONSERVATIVE_<wbr>RASTER_POST_SNAP_TRIANGLES``: Whether the<br>
+ PIPE_CONSERVATIVE_RASTER_POST_<wbr>SNAP mode is supported for triangles.<br>
+* ``PIPE_CAP_CONSERVATIVE_<wbr>RASTER_POST_SNAP_POINTS_LINES`<wbr>`: Whether the<br>
+PIPE_CONSERVATIVE_RASTER_<wbr>POST_SNAP mode is supported for points and lines.<br>
+* ``PIPE_CAP_CONSERVATIVE_<wbr>RASTER_PRE_SNAP_TRIANGLES``: Whether the<br>
+PIPE_CONSERVATIVE_RASTER_PRE_<wbr>SNAP mode is supported for triangles.<br>
+* ``PIPE_CAP_CONSERVATIVE_<wbr>RASTER_PRE_SNAP_POINTS_LINES``<wbr>: Whether the<br>
+PIPE_CONSERVATIVE_RASTER_PRE_<wbr>SNAP mode is supported for points and lines.<br>
+* ``PIPE_CAP_CONSERVATIVE_<wbr>RASTER_POST_DEPTH_COVERAGE``: Whether PIPE_CAP_POST_DEPTH_COVERAGE<br>
+works with conservative rasterization.<br>
+* ``PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS``: The maximum<br>
+subpixel precision bias in bits during conservative rasterization.<br>
<br>
<br>
.. _pipe_capf:<br>
@@ -437,6 +449,12 @@ The floating-point capabilities are:<br>
applied to anisotropically filtered textures.<br>
* ``PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS``: The maximum :term:`LOD` bias that may be applied<br>
to filtered textures.<br>
+* ``PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE``: The minimum conservative rasterization<br>
+ dilation.<br>
+* ``PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE``: The maximum conservative rasterization<br>
+ dilation.<br>
+* ``PIPE_CAPF_CONSERVATIVE_<wbr>RASTER_DILATE_GRANULARITY``: The conservative rasterization<br>
+ dilation granularity for values relative to the minimum dilation.<br>
<br>
<br>
.. _pipe_shader_cap:<br>
diff --git a/src/gallium/drivers/etnaviv/<wbr>etnaviv_screen.c b/src/gallium/drivers/etnaviv/<wbr>etnaviv_screen.c<br>
index 2ae4e86c63..6f3a892b10 100644<br>
--- a/src/gallium/drivers/etnaviv/<wbr>etnaviv_screen.c<br>
+++ b/src/gallium/drivers/etnaviv/<wbr>etnaviv_screen.c<br>
@@ -269,6 +269,12 @@ etna_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)<br>
case PIPE_CAP_CONTEXT_PRIORITY_<wbr>MASK:<br>
case PIPE_CAP_FENCE_SIGNAL:<br>
case PIPE_CAP_CONSTBUF0_FLAGS:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS:<br>
case PIPE_CAP_PACKED_UNIFORMS:<br>
return 0;<br>
<br>
@@ -370,6 +376,10 @@ etna_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)<br>
return 16.0f;<br>
case PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS:<br>
return util_last_bit(screen->specs.<wbr>max_texture_size);<br>
+ case PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY:<br>
+ return 0.0f;<br>
}<br>
<br>
debug_printf("unknown paramf %d", param);<br>
diff --git a/src/gallium/drivers/<wbr>freedreno/freedreno_screen.c b/src/gallium/drivers/<wbr>freedreno/freedreno_screen.c<br>
index f338d756df..c59995c75d 100644<br>
--- a/src/gallium/drivers/<wbr>freedreno/freedreno_screen.c<br>
+++ b/src/gallium/drivers/<wbr>freedreno/freedreno_screen.c<br>
@@ -340,6 +340,12 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)<br>
case PIPE_CAP_FENCE_SIGNAL:<br>
case PIPE_CAP_CONSTBUF0_FLAGS:<br>
case PIPE_CAP_PACKED_UNIFORMS:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS:<br>
return 0;<br>
<br>
case PIPE_CAP_CONTEXT_PRIORITY_<wbr>MASK:<br>
@@ -479,6 +485,10 @@ fd_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)<br>
return 16.0f;<br>
case PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS:<br>
return 15.0f;<br>
+ case PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY:<br>
+ return 0.0f;<br>
}<br>
debug_printf("unknown paramf %d\n", param);<br>
return 0;<br>
diff --git a/src/gallium/drivers/i915/<wbr>i915_screen.c b/src/gallium/drivers/i915/<wbr>i915_screen.c<br>
index 59d2ec6628..9d99238f2b 100644<br>
--- a/src/gallium/drivers/i915/<wbr>i915_screen.c<br>
+++ b/src/gallium/drivers/i915/<wbr>i915_screen.c<br>
@@ -283,6 +283,12 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)<br>
case PIPE_CAP_TGSI_ARRAY_<wbr>COMPONENTS:<br>
case PIPE_CAP_POLYGON_MODE_FILL_<wbr>RECTANGLE:<br>
case PIPE_CAP_POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS:<br>
return 0;<br>
<br>
case PIPE_CAP_MAX_DUAL_SOURCE_<wbr>RENDER_TARGETS:<br>
@@ -435,6 +441,13 @@ i915_get_paramf(struct pipe_screen *screen, enum pipe_capf cap)<br>
case PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS:<br>
return 16.0;<br>
<br>
+ case PIPE_CAPF_MIN_CONSERVTIVE_<wbr>RASTER_DILATE:<br>
+ /* fall-through */<br>
+ case PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ /* fall-through */<br>
+ case PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY:<br>
+ return 0.0f;<br>
+<br>
default:<br>
debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap);<br>
return 0;<br>
diff --git a/src/gallium/drivers/<wbr>llvmpipe/lp_screen.c b/src/gallium/drivers/<wbr>llvmpipe/lp_screen.c<br>
index 3f5d0327bf..af1aff4e1e 100644<br>
--- a/src/gallium/drivers/<wbr>llvmpipe/lp_screen.c<br>
+++ b/src/gallium/drivers/<wbr>llvmpipe/lp_screen.c<br>
@@ -362,6 +362,12 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)<br>
case PIPE_CAP_FENCE_SIGNAL:<br>
case PIPE_CAP_CONSTBUF0_FLAGS:<br>
case PIPE_CAP_PACKED_UNIFORMS:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS:<br>
return 0;<br>
}<br>
/* should only get here on unhandled cases */<br>
@@ -422,6 +428,12 @@ llvmpipe_get_paramf(struct pipe_screen *screen, enum pipe_capf param)<br>
return 16.0; /* not actually signficant at this time */<br>
case PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS:<br>
return 16.0; /* arbitrary */<br>
+ case PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ return 0.0;<br>
+ case PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ return 0.0;<br>
+ case PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY:<br>
+ return 0.0;<br>
}<br>
/* should only get here on unhandled cases */<br>
debug_printf("Unexpected PIPE_CAP %d query\n", param);<br>
diff --git a/src/gallium/drivers/nouveau/<wbr>nv30/nv30_screen.c b/src/gallium/drivers/nouveau/<wbr>nv30/nv30_screen.c<br>
index 1d1fbaad60..a24176a8e9 100644<br>
--- a/src/gallium/drivers/nouveau/<wbr>nv30/nv30_screen.c<br>
+++ b/src/gallium/drivers/nouveau/<wbr>nv30/nv30_screen.c<br>
@@ -229,6 +229,12 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)<br>
case PIPE_CAP_FENCE_SIGNAL:<br>
case PIPE_CAP_CONSTBUF0_FLAGS:<br>
case PIPE_CAP_PACKED_UNIFORMS:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS:<br>
return 0;<br>
<br>
case PIPE_CAP_VENDOR_ID:<br>
@@ -270,6 +276,10 @@ nv30_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)<br>
return (eng3d->oclass >= NV40_3D_CLASS) ? 16.0 : 8.0;<br>
case PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS:<br>
return 15.0;<br>
+ case PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY:<br>
+ return 0.0;<br>
default:<br>
debug_printf("unknown paramf %d\n", param);<br>
return 0;<br>
diff --git a/src/gallium/drivers/nouveau/<wbr>nv50/nv50_screen.c b/src/gallium/drivers/nouveau/<wbr>nv50/nv50_screen.c<br>
index 6fd2982e3c..1db112fa6c 100644<br>
--- a/src/gallium/drivers/nouveau/<wbr>nv50/nv50_screen.c<br>
+++ b/src/gallium/drivers/nouveau/<wbr>nv50/nv50_screen.c<br>
@@ -281,6 +281,12 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)<br>
case PIPE_CAP_FENCE_SIGNAL:<br>
case PIPE_CAP_CONSTBUF0_FLAGS:<br>
case PIPE_CAP_PACKED_UNIFORMS:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS:<br>
return 0;<br>
<br>
case PIPE_CAP_VENDOR_ID:<br>
@@ -398,6 +404,10 @@ nv50_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)<br>
return 16.0f;<br>
case PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS:<br>
return 4.0f;<br>
+ case PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY:<br>
+ return 0.0f;<br>
}<br>
<br>
NOUVEAU_ERR("unknown PIPE_CAPF %d\n", param);<br>
diff --git a/src/gallium/drivers/nouveau/<wbr>nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/<wbr>nvc0/nvc0_screen.c<br>
index b4a2c676f5..ddbb3ec16d 100644<br>
--- a/src/gallium/drivers/nouveau/<wbr>nvc0/nvc0_screen.c<br>
+++ b/src/gallium/drivers/nouveau/<wbr>nvc0/nvc0_screen.c<br>
@@ -309,6 +309,12 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)<br>
case PIPE_CAP_FENCE_SIGNAL:<br>
case PIPE_CAP_CONSTBUF0_FLAGS:<br>
case PIPE_CAP_PACKED_UNIFORMS:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS:<br>
return 0;<br>
<br>
case PIPE_CAP_VENDOR_ID:<br>
@@ -450,6 +456,10 @@ nvc0_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)<br>
return 16.0f;<br>
case PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS:<br>
return 15.0f;<br>
+ case PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY:<br>
+ return 0.0f;<br>
}<br>
<br>
NOUVEAU_ERR("unknown PIPE_CAPF %d\n", param);<br>
diff --git a/src/gallium/drivers/r300/<wbr>r300_screen.c b/src/gallium/drivers/r300/<wbr>r300_screen.c<br>
index 8ea2e87ce6..8a6e0c2f21 100644<br>
--- a/src/gallium/drivers/r300/<wbr>r300_screen.c<br>
+++ b/src/gallium/drivers/r300/<wbr>r300_screen.c<br>
@@ -251,6 +251,12 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)<br>
case PIPE_CAP_FENCE_SIGNAL:<br>
case PIPE_CAP_CONSTBUF0_FLAGS:<br>
case PIPE_CAP_PACKED_UNIFORMS:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS:<br>
return 0;<br>
<br>
/* SWTCL-only features. */<br>
@@ -475,6 +481,10 @@ static float r300_get_paramf(struct pipe_screen* pscreen,<br>
return 16.0f;<br>
case PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS:<br>
return 16.0f;<br>
+ case PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY:<br>
+ return 0.0f;<br>
default:<br>
debug_printf("r300: Warning: Unknown CAP %d in get_paramf.\n",<br>
param);<br>
diff --git a/src/gallium/drivers/r600/<wbr>r600_pipe.c b/src/gallium/drivers/r600/<wbr>r600_pipe.c<br>
index 43f2dfae7e..102e75035f 100644<br>
--- a/src/gallium/drivers/r600/<wbr>r600_pipe.c<br>
+++ b/src/gallium/drivers/r600/<wbr>r600_pipe.c<br>
@@ -415,6 +415,12 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)<br>
case PIPE_CAP_FENCE_SIGNAL:<br>
case PIPE_CAP_CONSTBUF0_FLAGS:<br>
case PIPE_CAP_PACKED_UNIFORMS:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS:<br>
return 0;<br>
<br>
case PIPE_CAP_DOUBLES:<br>
diff --git a/src/gallium/drivers/r600/<wbr>r600_pipe_common.c b/src/gallium/drivers/r600/<wbr>r600_pipe_common.c<br>
index 026e8dc986..c53a7cc4f0 100644<br>
--- a/src/gallium/drivers/r600/<wbr>r600_pipe_common.c<br>
+++ b/src/gallium/drivers/r600/<wbr>r600_pipe_common.c<br>
@@ -910,6 +910,10 @@ static float r600_get_paramf(struct pipe_screen* pscreen,<br>
return 16.0f;<br>
case PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS:<br>
return 16.0f;<br>
+ case PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY:<br>
+ return 0.0f;<br>
}<br>
return 0.0f;<br>
}<br>
diff --git a/src/gallium/drivers/<wbr>radeonsi/si_get.c b/src/gallium/drivers/<wbr>radeonsi/si_get.c<br>
index b4ca5bea94..b5c6a3a4c8 100644<br>
--- a/src/gallium/drivers/<wbr>radeonsi/si_get.c<br>
+++ b/src/gallium/drivers/<wbr>radeonsi/si_get.c<br>
@@ -274,6 +274,12 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)<br>
case PIPE_CAP_TILE_RASTER_ORDER:<br>
case PIPE_CAP_MAX_COMBINED_SHADER_<wbr>OUTPUT_RESOURCES:<br>
case PIPE_CAP_CONTEXT_PRIORITY_<wbr>MASK:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS:<br>
return 0;<br>
<br>
case PIPE_CAP_FENCE_SIGNAL:<br>
@@ -373,6 +379,10 @@ static float si_get_paramf(struct pipe_screen* pscreen, enum pipe_capf param)<br>
return 16.0f;<br>
case PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS:<br>
return 16.0f;<br>
+ case PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY:<br>
+ return 0.0f;<br>
}<br>
return 0.0f;<br>
}<br>
diff --git a/src/gallium/drivers/<wbr>softpipe/sp_screen.c b/src/gallium/drivers/<wbr>softpipe/sp_screen.c<br>
index 25f6f74f36..f9c786ae75 100644<br>
--- a/src/gallium/drivers/<wbr>softpipe/sp_screen.c<br>
+++ b/src/gallium/drivers/<wbr>softpipe/sp_screen.c<br>
@@ -314,6 +314,12 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)<br>
case PIPE_CAP_FENCE_SIGNAL:<br>
case PIPE_CAP_CONSTBUF0_FLAGS:<br>
case PIPE_CAP_PACKED_UNIFORMS:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS:<br>
return 0;<br>
case PIPE_CAP_SHADER_BUFFER_OFFSET_<wbr>ALIGNMENT:<br>
return 4;<br>
@@ -362,6 +368,12 @@ softpipe_get_paramf(struct pipe_screen *screen, enum pipe_capf param)<br>
return 16.0;<br>
case PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS:<br>
return 16.0; /* arbitrary */<br>
+ case PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ return 0.0;<br>
+ case PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ return 0.0;<br>
+ case PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY:<br>
+ return 0.0;<br>
}<br>
/* should only get here on unhandled cases */<br>
debug_printf("Unexpected PIPE_CAPF %d query\n", param);<br>
diff --git a/src/gallium/drivers/svga/<wbr>svga_screen.c b/src/gallium/drivers/svga/<wbr>svga_screen.c<br>
index f5f07fa75e..82d7c98b68 100644<br>
--- a/src/gallium/drivers/svga/<wbr>svga_screen.c<br>
+++ b/src/gallium/drivers/svga/<wbr>svga_screen.c<br>
@@ -167,6 +167,13 @@ svga_get_paramf(struct pipe_screen *screen, enum pipe_capf param)<br>
case PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS:<br>
return 15.0;<br>
<br>
+ case PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ /* fall-through */<br>
+ case PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ /* fall-through */<br>
+ case PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY:<br>
+ return 0.0f;<br>
+<br>
}<br>
<br>
debug_printf("Unexpected PIPE_CAPF_ query %u\n", param);<br>
@@ -373,6 +380,12 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)<br>
case PIPE_CAP_PCI_DEVICE:<br>
case PIPE_CAP_PCI_FUNCTION:<br>
case PIPE_CAP_ROBUST_BUFFER_ACCESS_<wbr>BEHAVIOR:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS:<br>
return 0;<br>
case PIPE_CAP_MIN_MAP_BUFFER_<wbr>ALIGNMENT:<br>
return 64;<br>
diff --git a/src/gallium/drivers/swr/swr_<wbr>screen.cpp b/src/gallium/drivers/swr/swr_<wbr>screen.cpp<br>
index dd2d003d15..17d54b3220 100644<br>
--- a/src/gallium/drivers/swr/swr_<wbr>screen.cpp<br>
+++ b/src/gallium/drivers/swr/swr_<wbr>screen.cpp<br>
@@ -347,6 +347,12 @@ swr_get_param(struct pipe_screen *screen, enum pipe_cap param)<br>
case PIPE_CAP_FENCE_SIGNAL:<br>
case PIPE_CAP_CONSTBUF0_FLAGS:<br>
case PIPE_CAP_PACKED_UNIFORMS:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS:<br>
return 0;<br>
<br>
case PIPE_CAP_VENDOR_ID:<br>
@@ -400,6 +406,10 @@ swr_get_paramf(struct pipe_screen *screen, enum pipe_capf param)<br>
return 0.0;<br>
case PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS:<br>
return 16.0; /* arbitrary */<br>
+ case PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY:<br>
+ return 0.0f;<br>
}<br>
/* should only get here on unhandled cases */<br>
debug_printf("Unexpected PIPE_CAPF %d query\n", param);<br>
diff --git a/src/gallium/drivers/vc4/vc4_<wbr>screen.c b/src/gallium/drivers/vc4/vc4_<wbr>screen.c<br>
index cead71b77c..81c8049325 100644<br>
--- a/src/gallium/drivers/vc4/vc4_<wbr>screen.c<br>
+++ b/src/gallium/drivers/vc4/vc4_<wbr>screen.c<br>
@@ -287,7 +287,13 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)<br>
case PIPE_CAP_SIGNED_VERTEX_BUFFER_<wbr>OFFSET:<br>
case PIPE_CAP_CONTEXT_PRIORITY_<wbr>MASK:<br>
case PIPE_CAP_FENCE_SIGNAL:<br>
- case PIPE_CAP_CONSTBUF0_FLAGS:<br>
+ case PIPE_CAP_CONSTBUF0_FLAGS:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS:<br>
case PIPE_CAP_PACKED_UNIFORMS:<br>
return 0;<br>
<br>
@@ -375,6 +381,11 @@ vc4_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)<br>
return 0.0f;<br>
case PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS:<br>
return 0.0f;<br>
+<br>
+ case PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY:<br>
+ return 0.0f;<br>
default:<br>
fprintf(stderr, "unknown paramf %d\n", param);<br>
return 0;<br>
diff --git a/src/gallium/drivers/vc5/vc5_<wbr>screen.c b/src/gallium/drivers/vc5/vc5_<wbr>screen.c<br>
index add5a2f358..2f64c2d0e6 100644<br>
--- a/src/gallium/drivers/vc5/vc5_<wbr>screen.c<br>
+++ b/src/gallium/drivers/vc5/vc5_<wbr>screen.c<br>
@@ -259,7 +259,13 @@ vc5_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)<br>
case PIPE_CAP_STREAM_OUTPUT_<wbr>INTERLEAVE_BUFFERS:<br>
case PIPE_CAP_MAX_COMBINED_SHADER_<wbr>OUTPUT_RESOURCES:<br>
case PIPE_CAP_CONTEXT_PRIORITY_<wbr>MASK:<br>
- case PIPE_CAP_CONSTBUF0_FLAGS:<br>
+ case PIPE_CAP_CONSTBUF0_FLAGS:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS:<br>
case PIPE_CAP_PACKED_UNIFORMS:<br>
return 0;<br>
<br>
@@ -333,6 +339,11 @@ vc5_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)<br>
return 0.0f;<br>
case PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS:<br>
return 16.0f;<br>
+<br>
+ case PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY:<br>
+ return 0.0f;<br>
default:<br>
fprintf(stderr, "unknown paramf %d\n", param);<br>
return 0;<br>
diff --git a/src/gallium/drivers/virgl/<wbr>virgl_screen.c b/src/gallium/drivers/virgl/<wbr>virgl_screen.c<br>
index 1878def474..469d6fc2eb 100644<br>
--- a/src/gallium/drivers/virgl/<wbr>virgl_screen.c<br>
+++ b/src/gallium/drivers/virgl/<wbr>virgl_screen.c<br>
@@ -275,6 +275,12 @@ virgl_get_param(struct pipe_screen *screen, enum pipe_cap param)<br>
case PIPE_CAP_FENCE_SIGNAL:<br>
case PIPE_CAP_CONSTBUF0_FLAGS:<br>
case PIPE_CAP_PACKED_UNIFORMS:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES:<br>
+ case PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE:<br>
+ case PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS:<br>
return 0;<br>
case PIPE_CAP_VENDOR_ID:<br>
return 0x1af4;<br>
@@ -372,6 +378,10 @@ virgl_get_paramf(struct pipe_screen *screen, enum pipe_capf param)<br>
return 16.0;<br>
case PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS:<br>
return vscreen->caps.caps.v2.max_<wbr>texture_lod_bias;<br>
+ case PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE:<br>
+ case PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY:<br>
+ return 0.0f;<br>
}<br>
/* should only get here on unhandled cases */<br>
debug_printf("Unexpected PIPE_CAPF %d query\n", param);<br>
diff --git a/src/gallium/include/pipe/p_<wbr>defines.h b/src/gallium/include/pipe/p_<wbr>defines.h<br>
index c4ae053206..6b2f33b9e3 100644<br>
--- a/src/gallium/include/pipe/p_<wbr>defines.h<br>
+++ b/src/gallium/include/pipe/p_<wbr>defines.h<br>
@@ -606,6 +606,17 @@ enum pipe_reset_status<br>
};<br>
<br>
<br>
+/**<br>
+ * Conservative rasterization modes.<br>
+ */<br>
+enum pipe_conservative_raster_mode<br>
+{<br>
+ PIPE_CONSERVATIVE_RASTER_OFF,<br>
+ PIPE_CONSERVATIVE_RASTER_POST_<wbr>SNAP,<br>
+ PIPE_CONSERVATIVE_RASTER_PRE_<wbr>SNAP,<br>
+};<br>
+<br>
+<br>
/**<br>
* resource_get_handle flags.<br>
*/<br>
@@ -795,6 +806,12 @@ enum pipe_cap<br>
PIPE_CAP_FENCE_SIGNAL,<br>
PIPE_CAP_CONSTBUF0_FLAGS,<br>
PIPE_CAP_PACKED_UNIFORMS,<br>
+ PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_TRIANGLES,<br>
+ PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_SNAP_POINTS_LINES,<br>
+ PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_TRIANGLES,<br>
+ PIPE_CAP_CONSERVATIVE_RASTER_<wbr>PRE_SNAP_POINTS_LINES,<br>
+ PIPE_CAP_MAX_CONSERVATIVE_<wbr>RASTER_SUBPIXEL_PRECISION_<wbr>BIAS,<br>
+ PIPE_CAP_CONSERVATIVE_RASTER_<wbr>POST_DEPTH_COVERAGE,<br>
};<br>
<br>
/**<br>
@@ -834,6 +851,9 @@ enum pipe_capf<br>
PIPE_CAPF_MAX_POINT_WIDTH_AA,<br>
PIPE_CAPF_MAX_TEXTURE_<wbr>ANISOTROPY,<br>
PIPE_CAPF_MAX_TEXTURE_LOD_<wbr>BIAS,<br>
+ PIPE_CAPF_MIN_CONSERVATIVE_<wbr>RASTER_DILATE,<br>
+ PIPE_CAPF_MAX_CONSERVATIVE_<wbr>RASTER_DILATE,<br>
+ PIPE_CAPF_CONSERVATIVE_RASTER_<wbr>DILATE_GRANULARITY,<br>
};<br>
<br>
/** Shader caps not specific to any single stage */<br>
</div></div>diff --git a/src/gallium/include/pipe/p_<wbr>state.h b/src/gallium/include/pipe/p_<wbr>state.h<br>
index 4dce399f84..db9fa1a8e9 100644<br>
<span class="">--- a/src/gallium/include/pipe/p_<wbr>state.h<br>
+++ b/src/gallium/include/pipe/p_<wbr>state.h<br>
@@ -113,6 +113,7 @@ struct pipe_rasterizer_state<br>
unsigned line_smooth:1;<br>
unsigned line_stipple_enable:1;<br>
unsigned line_last_pixel:1;<br>
+ unsigned conservative_raster_mode:2; /**< PIPE_CONSERVATIVE_RASTER_x */<br>
<br>
/**<br>
* Use the first vertex of a primitive as the provoking vertex for<br>
</span>@@ -123,6 +124,12 @@ struct pipe_rasterizer_state<br>
unsigned half_pixel_center:1;<br>
unsigned bottom_edge_rule:1;<br>
<span class=""><br>
+ /*<br>
+ * Conservative rasterization subpixel precision bias in bits<br>
+ */<br>
</span>+ unsigned subpixel_precision_x:4;<br>
+ unsigned subpixel_precision_y:4;<br>
+<br>
/**<br>
* When true, rasterization is disabled and no pixels are written.<br>
* This only makes sense with the Stream Out functionality.<br>
@@ -186,6 +193,7 @@ struct pipe_rasterizer_state<br>
<span class="im HOEnZb"> float offset_units;<br>
float offset_scale;<br>
float offset_clamp;<br>
+ float conservative_raster_dilate;<br>
};<br>
<br>
<br>
</span><div class="HOEnZb"><div class="h5">--<br>
2.14.3<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</div></div></blockquote></div><br></div>