Reviewed-by: Marek Olšák <marek.ol...@amd.com> Marek
On Wed, Mar 28, 2018 at 6:35 AM, Rhys Perry <pendingchao...@gmail.com> wrote: > --- > src/gallium/docs/source/cso/rasterizer.rst | 23 > +++++++++++++++++++++++ > src/gallium/docs/source/screen.rst | 18 ++++++++++++++++++ > src/gallium/drivers/etnaviv/etnaviv_screen.c | 10 ++++++++++ > src/gallium/drivers/freedreno/freedreno_screen.c | 10 ++++++++++ > src/gallium/drivers/i915/i915_screen.c | 13 +++++++++++++ > src/gallium/drivers/llvmpipe/lp_screen.c | 12 ++++++++++++ > src/gallium/drivers/nouveau/nv30/nv30_screen.c | 10 ++++++++++ > src/gallium/drivers/nouveau/nv50/nv50_screen.c | 10 ++++++++++ > src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 10 ++++++++++ > src/gallium/drivers/r300/r300_screen.c | 10 ++++++++++ > src/gallium/drivers/r600/r600_pipe.c | 6 ++++++ > src/gallium/drivers/r600/r600_pipe_common.c | 4 ++++ > src/gallium/drivers/radeonsi/si_get.c | 10 ++++++++++ > src/gallium/drivers/softpipe/sp_screen.c | 12 ++++++++++++ > src/gallium/drivers/svga/svga_screen.c | 13 +++++++++++++ > src/gallium/drivers/swr/swr_screen.cpp | 10 ++++++++++ > src/gallium/drivers/vc4/vc4_screen.c | 13 ++++++++++++- > src/gallium/drivers/vc5/vc5_screen.c | 13 ++++++++++++- > src/gallium/drivers/virgl/virgl_screen.c | 10 ++++++++++ > src/gallium/include/pipe/p_defines.h | 20 > ++++++++++++++++++++ > src/gallium/include/pipe/p_state.h | 8 ++++++++ > 21 files changed, 243 insertions(+), 2 deletions(-) > > diff --git a/src/gallium/docs/source/cso/rasterizer.rst > b/src/gallium/docs/source/cso/rasterizer.rst > index 616e4511a2..4dabcc032f 100644 > --- a/src/gallium/docs/source/cso/rasterizer.rst > +++ b/src/gallium/docs/source/cso/rasterizer.rst > @@ -340,3 +340,26 @@ clip_plane_enable > If any clip distance output is written, those half-spaces for which no > clip distance is written count as disabled; i.e. user clip planes and > shader clip distances cannot be mixed, and clip distances take > precedence. > + > +conservative_raster_mode > + The conservative rasterization mode. For > PIPE_CONSERVATIVE_RASTER_OFF, > + conservative rasterization is disabled. For > IPE_CONSERVATIVE_RASTER_POST_SNAP > + or PIPE_CONSERVATIVE_RASTER_PRE_SNAP, conservative rasterization is > nabled. > + When conservative rasterization is enabled, the polygon smooth, line > mooth, > + point smooth and line stipple settings are ignored. > + With the post-snap mode, unlike the pre-snap mode, fragments are never > + generated for degenerate primitives. Degenerate primitives, when > rasterized, > + are considered back-facing and the vertex attributes and depth are > that of > + the provoking vertex. > + If the post-snap mode is used with an unsupported primitive, the > pre-snap > + mode is used, if supported. Behavior is similar for the pre-snap > mode. > + If the pre-snap mode is used, fragments are generated with respect to > the primitive > + before vertex snapping. > + > +conservative_raster_dilate > + The amount of dilation during conservative rasterization. > + > +subpixel_precision_x > + A bias added to the horizontal subpixel precision during conservative > rasterization. > +subpixel_precision_y > + A bias added to the vertical subpixel precision during conservative > rasterization. > diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/ > screen.rst > index 3837360fb4..5bc6ee99f0 100644 > --- a/src/gallium/docs/source/screen.rst > +++ b/src/gallium/docs/source/screen.rst > @@ -420,6 +420,18 @@ The integer capabilities: > by the driver, and the driver can throw assertion failures. > * ``PIPE_CAP_PACKED_UNIFORMS``: True if the driver supports packed > uniforms > as opposed to padding to vec4s. > +* ``PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES``: Whether the > + PIPE_CONSERVATIVE_RASTER_POST_SNAP mode is supported for triangles. > +* ``PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES``: Whether the > +PIPE_CONSERVATIVE_RASTER_POST_SNAP mode is supported for points and > lines. > +* ``PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES``: Whether the > +PIPE_CONSERVATIVE_RASTER_PRE_SNAP mode is supported for triangles. > +* ``PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES``: Whether the > +PIPE_CONSERVATIVE_RASTER_PRE_SNAP mode is supported for points and lines. > +* ``PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE``: Whether > PIPE_CAP_POST_DEPTH_COVERAGE > +works with conservative rasterization. > +* ``PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS``: The > maximum > +subpixel precision bias in bits during conservative rasterization. > > > .. _pipe_capf: > @@ -437,6 +449,12 @@ The floating-point capabilities are: > applied to anisotropically filtered textures. > * ``PIPE_CAPF_MAX_TEXTURE_LOD_BIAS``: The maximum :term:`LOD` bias that > may be applied > to filtered textures. > +* ``PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE``: The minimum conservative > rasterization > + dilation. > +* ``PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE``: The maximum conservative > rasterization > + dilation. > +* ``PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY``: The conservative > rasterization > + dilation granularity for values relative to the minimum dilation. > > > .. _pipe_shader_cap: > diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c > b/src/gallium/drivers/etnaviv/etnaviv_screen.c > index 2ae4e86c63..6f3a892b10 100644 > --- a/src/gallium/drivers/etnaviv/etnaviv_screen.c > +++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c > @@ -269,6 +269,12 @@ etna_screen_get_param(struct pipe_screen *pscreen, > enum pipe_cap param) > case PIPE_CAP_CONTEXT_PRIORITY_MASK: > case PIPE_CAP_FENCE_SIGNAL: > case PIPE_CAP_CONSTBUF0_FLAGS: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE: > + case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS: > case PIPE_CAP_PACKED_UNIFORMS: > return 0; > > @@ -370,6 +376,10 @@ etna_screen_get_paramf(struct pipe_screen *pscreen, > enum pipe_capf param) > return 16.0f; > case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: > return util_last_bit(screen->specs.max_texture_size); > + case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY: > + return 0.0f; > } > > debug_printf("unknown paramf %d", param); > diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c > b/src/gallium/drivers/freedreno/freedreno_screen.c > index f338d756df..c59995c75d 100644 > --- a/src/gallium/drivers/freedreno/freedreno_screen.c > +++ b/src/gallium/drivers/freedreno/freedreno_screen.c > @@ -340,6 +340,12 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum > pipe_cap param) > case PIPE_CAP_FENCE_SIGNAL: > case PIPE_CAP_CONSTBUF0_FLAGS: > case PIPE_CAP_PACKED_UNIFORMS: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE: > + case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS: > return 0; > > case PIPE_CAP_CONTEXT_PRIORITY_MASK: > @@ -479,6 +485,10 @@ fd_screen_get_paramf(struct pipe_screen *pscreen, > enum pipe_capf param) > return 16.0f; > case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: > return 15.0f; > + case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY: > + return 0.0f; > } > debug_printf("unknown paramf %d\n", param); > return 0; > diff --git a/src/gallium/drivers/i915/i915_screen.c > b/src/gallium/drivers/i915/i915_screen.c > index 59d2ec6628..9d99238f2b 100644 > --- a/src/gallium/drivers/i915/i915_screen.c > +++ b/src/gallium/drivers/i915/i915_screen.c > @@ -283,6 +283,12 @@ i915_get_param(struct pipe_screen *screen, enum > pipe_cap cap) > case PIPE_CAP_TGSI_ARRAY_COMPONENTS: > case PIPE_CAP_POLYGON_MODE_FILL_RECTANGLE: > case PIPE_CAP_POST_DEPTH_COVERAGE: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE: > + case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS: > return 0; > > case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS: > @@ -435,6 +441,13 @@ i915_get_paramf(struct pipe_screen *screen, enum > pipe_capf cap) > case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: > return 16.0; > > + case PIPE_CAPF_MIN_CONSERVTIVE_RASTER_DILATE: > + /* fall-through */ > + case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE: > + /* fall-through */ > + case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY: > + return 0.0f; > + > default: > debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap); > return 0; > diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c > b/src/gallium/drivers/llvmpipe/lp_screen.c > index 3f5d0327bf..af1aff4e1e 100644 > --- a/src/gallium/drivers/llvmpipe/lp_screen.c > +++ b/src/gallium/drivers/llvmpipe/lp_screen.c > @@ -362,6 +362,12 @@ llvmpipe_get_param(struct pipe_screen *screen, enum > pipe_cap param) > case PIPE_CAP_FENCE_SIGNAL: > case PIPE_CAP_CONSTBUF0_FLAGS: > case PIPE_CAP_PACKED_UNIFORMS: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE: > + case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS: > return 0; > } > /* should only get here on unhandled cases */ > @@ -422,6 +428,12 @@ llvmpipe_get_paramf(struct pipe_screen *screen, enum > pipe_capf param) > return 16.0; /* not actually signficant at this time */ > case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: > return 16.0; /* arbitrary */ > + case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE: > + return 0.0; > + case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE: > + return 0.0; > + case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY: > + return 0.0; > } > /* should only get here on unhandled cases */ > debug_printf("Unexpected PIPE_CAP %d query\n", param); > diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.c > b/src/gallium/drivers/nouveau/nv30/nv30_screen.c > index 1d1fbaad60..a24176a8e9 100644 > --- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c > +++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c > @@ -229,6 +229,12 @@ nv30_screen_get_param(struct pipe_screen *pscreen, > enum pipe_cap param) > case PIPE_CAP_FENCE_SIGNAL: > case PIPE_CAP_CONSTBUF0_FLAGS: > case PIPE_CAP_PACKED_UNIFORMS: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE: > + case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS: > return 0; > > case PIPE_CAP_VENDOR_ID: > @@ -270,6 +276,10 @@ nv30_screen_get_paramf(struct pipe_screen *pscreen, > enum pipe_capf param) > return (eng3d->oclass >= NV40_3D_CLASS) ? 16.0 : 8.0; > case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: > return 15.0; > + case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY: > + return 0.0; > default: > debug_printf("unknown paramf %d\n", param); > return 0; > diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c > b/src/gallium/drivers/nouveau/nv50/nv50_screen.c > index 6fd2982e3c..1db112fa6c 100644 > --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c > +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c > @@ -281,6 +281,12 @@ nv50_screen_get_param(struct pipe_screen *pscreen, > enum pipe_cap param) > case PIPE_CAP_FENCE_SIGNAL: > case PIPE_CAP_CONSTBUF0_FLAGS: > case PIPE_CAP_PACKED_UNIFORMS: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE: > + case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS: > return 0; > > case PIPE_CAP_VENDOR_ID: > @@ -398,6 +404,10 @@ nv50_screen_get_paramf(struct pipe_screen *pscreen, > enum pipe_capf param) > return 16.0f; > case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: > return 4.0f; > + case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY: > + return 0.0f; > } > > NOUVEAU_ERR("unknown PIPE_CAPF %d\n", param); > diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c > b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c > index b4a2c676f5..ddbb3ec16d 100644 > --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c > +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c > @@ -309,6 +309,12 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, > enum pipe_cap param) > case PIPE_CAP_FENCE_SIGNAL: > case PIPE_CAP_CONSTBUF0_FLAGS: > case PIPE_CAP_PACKED_UNIFORMS: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE: > + case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS: > return 0; > > case PIPE_CAP_VENDOR_ID: > @@ -450,6 +456,10 @@ nvc0_screen_get_paramf(struct pipe_screen *pscreen, > enum pipe_capf param) > return 16.0f; > case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: > return 15.0f; > + case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY: > + return 0.0f; > } > > NOUVEAU_ERR("unknown PIPE_CAPF %d\n", param); > diff --git a/src/gallium/drivers/r300/r300_screen.c > b/src/gallium/drivers/r300/r300_screen.c > index 8ea2e87ce6..8a6e0c2f21 100644 > --- a/src/gallium/drivers/r300/r300_screen.c > +++ b/src/gallium/drivers/r300/r300_screen.c > @@ -251,6 +251,12 @@ static int r300_get_param(struct pipe_screen* > pscreen, enum pipe_cap param) > case PIPE_CAP_FENCE_SIGNAL: > case PIPE_CAP_CONSTBUF0_FLAGS: > case PIPE_CAP_PACKED_UNIFORMS: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE: > + case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS: > return 0; > > /* SWTCL-only features. */ > @@ -475,6 +481,10 @@ static float r300_get_paramf(struct pipe_screen* > pscreen, > return 16.0f; > case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: > return 16.0f; > + case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY: > + return 0.0f; > default: > debug_printf("r300: Warning: Unknown CAP %d in get_paramf.\n", > param); > diff --git a/src/gallium/drivers/r600/r600_pipe.c > b/src/gallium/drivers/r600/r600_pipe.c > index 43f2dfae7e..102e75035f 100644 > --- a/src/gallium/drivers/r600/r600_pipe.c > +++ b/src/gallium/drivers/r600/r600_pipe.c > @@ -415,6 +415,12 @@ static int r600_get_param(struct pipe_screen* > pscreen, enum pipe_cap param) > case PIPE_CAP_FENCE_SIGNAL: > case PIPE_CAP_CONSTBUF0_FLAGS: > case PIPE_CAP_PACKED_UNIFORMS: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE: > + case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS: > return 0; > > case PIPE_CAP_DOUBLES: > diff --git a/src/gallium/drivers/r600/r600_pipe_common.c > b/src/gallium/drivers/r600/r600_pipe_common.c > index 026e8dc986..c53a7cc4f0 100644 > --- a/src/gallium/drivers/r600/r600_pipe_common.c > +++ b/src/gallium/drivers/r600/r600_pipe_common.c > @@ -910,6 +910,10 @@ static float r600_get_paramf(struct pipe_screen* > pscreen, > return 16.0f; > case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: > return 16.0f; > + case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY: > + return 0.0f; > } > return 0.0f; > } > diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/ > radeonsi/si_get.c > index b4ca5bea94..b5c6a3a4c8 100644 > --- a/src/gallium/drivers/radeonsi/si_get.c > +++ b/src/gallium/drivers/radeonsi/si_get.c > @@ -274,6 +274,12 @@ static int si_get_param(struct pipe_screen *pscreen, > enum pipe_cap param) > case PIPE_CAP_TILE_RASTER_ORDER: > case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES: > case PIPE_CAP_CONTEXT_PRIORITY_MASK: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE: > + case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS: > return 0; > > case PIPE_CAP_FENCE_SIGNAL: > @@ -373,6 +379,10 @@ static float si_get_paramf(struct pipe_screen* > pscreen, enum pipe_capf param) > return 16.0f; > case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: > return 16.0f; > + case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY: > + return 0.0f; > } > return 0.0f; > } > diff --git a/src/gallium/drivers/softpipe/sp_screen.c > b/src/gallium/drivers/softpipe/sp_screen.c > index 25f6f74f36..f9c786ae75 100644 > --- a/src/gallium/drivers/softpipe/sp_screen.c > +++ b/src/gallium/drivers/softpipe/sp_screen.c > @@ -314,6 +314,12 @@ softpipe_get_param(struct pipe_screen *screen, enum > pipe_cap param) > case PIPE_CAP_FENCE_SIGNAL: > case PIPE_CAP_CONSTBUF0_FLAGS: > case PIPE_CAP_PACKED_UNIFORMS: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE: > + case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS: > return 0; > case PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT: > return 4; > @@ -362,6 +368,12 @@ softpipe_get_paramf(struct pipe_screen *screen, enum > pipe_capf param) > return 16.0; > case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: > return 16.0; /* arbitrary */ > + case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE: > + return 0.0; > + case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE: > + return 0.0; > + case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY: > + return 0.0; > } > /* should only get here on unhandled cases */ > debug_printf("Unexpected PIPE_CAPF %d query\n", param); > diff --git a/src/gallium/drivers/svga/svga_screen.c > b/src/gallium/drivers/svga/svga_screen.c > index f5f07fa75e..82d7c98b68 100644 > --- a/src/gallium/drivers/svga/svga_screen.c > +++ b/src/gallium/drivers/svga/svga_screen.c > @@ -167,6 +167,13 @@ svga_get_paramf(struct pipe_screen *screen, enum > pipe_capf param) > case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: > return 15.0; > > + case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE: > + /* fall-through */ > + case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE: > + /* fall-through */ > + case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY: > + return 0.0f; > + > } > > debug_printf("Unexpected PIPE_CAPF_ query %u\n", param); > @@ -373,6 +380,12 @@ svga_get_param(struct pipe_screen *screen, enum > pipe_cap param) > case PIPE_CAP_PCI_DEVICE: > case PIPE_CAP_PCI_FUNCTION: > case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE: > + case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS: > return 0; > case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT: > return 64; > diff --git a/src/gallium/drivers/swr/swr_screen.cpp > b/src/gallium/drivers/swr/swr_screen.cpp > index dd2d003d15..17d54b3220 100644 > --- a/src/gallium/drivers/swr/swr_screen.cpp > +++ b/src/gallium/drivers/swr/swr_screen.cpp > @@ -347,6 +347,12 @@ swr_get_param(struct pipe_screen *screen, enum > pipe_cap param) > case PIPE_CAP_FENCE_SIGNAL: > case PIPE_CAP_CONSTBUF0_FLAGS: > case PIPE_CAP_PACKED_UNIFORMS: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE: > + case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS: > return 0; > > case PIPE_CAP_VENDOR_ID: > @@ -400,6 +406,10 @@ swr_get_paramf(struct pipe_screen *screen, enum > pipe_capf param) > return 0.0; > case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: > return 16.0; /* arbitrary */ > + case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY: > + return 0.0f; > } > /* should only get here on unhandled cases */ > debug_printf("Unexpected PIPE_CAPF %d query\n", param); > diff --git a/src/gallium/drivers/vc4/vc4_screen.c > b/src/gallium/drivers/vc4/vc4_screen.c > index cead71b77c..81c8049325 100644 > --- a/src/gallium/drivers/vc4/vc4_screen.c > +++ b/src/gallium/drivers/vc4/vc4_screen.c > @@ -287,7 +287,13 @@ vc4_screen_get_param(struct pipe_screen *pscreen, > enum pipe_cap param) > case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET: > case PIPE_CAP_CONTEXT_PRIORITY_MASK: > case PIPE_CAP_FENCE_SIGNAL: > - case PIPE_CAP_CONSTBUF0_FLAGS: > + case PIPE_CAP_CONSTBUF0_FLAGS: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE: > + case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS: > case PIPE_CAP_PACKED_UNIFORMS: > return 0; > > @@ -375,6 +381,11 @@ vc4_screen_get_paramf(struct pipe_screen *pscreen, > enum pipe_capf param) > return 0.0f; > case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: > return 0.0f; > + > + case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY: > + return 0.0f; > default: > fprintf(stderr, "unknown paramf %d\n", param); > return 0; > diff --git a/src/gallium/drivers/vc5/vc5_screen.c > b/src/gallium/drivers/vc5/vc5_screen.c > index add5a2f358..2f64c2d0e6 100644 > --- a/src/gallium/drivers/vc5/vc5_screen.c > +++ b/src/gallium/drivers/vc5/vc5_screen.c > @@ -259,7 +259,13 @@ vc5_screen_get_param(struct pipe_screen *pscreen, > enum pipe_cap param) > case PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS: > case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES: > case PIPE_CAP_CONTEXT_PRIORITY_MASK: > - case PIPE_CAP_CONSTBUF0_FLAGS: > + case PIPE_CAP_CONSTBUF0_FLAGS: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE: > + case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS: > case PIPE_CAP_PACKED_UNIFORMS: > return 0; > > @@ -333,6 +339,11 @@ vc5_screen_get_paramf(struct pipe_screen *pscreen, > enum pipe_capf param) > return 0.0f; > case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: > return 16.0f; > + > + case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY: > + return 0.0f; > default: > fprintf(stderr, "unknown paramf %d\n", param); > return 0; > diff --git a/src/gallium/drivers/virgl/virgl_screen.c > b/src/gallium/drivers/virgl/virgl_screen.c > index 1878def474..469d6fc2eb 100644 > --- a/src/gallium/drivers/virgl/virgl_screen.c > +++ b/src/gallium/drivers/virgl/virgl_screen.c > @@ -275,6 +275,12 @@ virgl_get_param(struct pipe_screen *screen, enum > pipe_cap param) > case PIPE_CAP_FENCE_SIGNAL: > case PIPE_CAP_CONSTBUF0_FLAGS: > case PIPE_CAP_PACKED_UNIFORMS: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES: > + case PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES: > + case PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE: > + case PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS: > return 0; > case PIPE_CAP_VENDOR_ID: > return 0x1af4; > @@ -372,6 +378,10 @@ virgl_get_paramf(struct pipe_screen *screen, enum > pipe_capf param) > return 16.0; > case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: > return vscreen->caps.caps.v2.max_texture_lod_bias; > + case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE: > + case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY: > + return 0.0f; > } > /* should only get here on unhandled cases */ > debug_printf("Unexpected PIPE_CAPF %d query\n", param); > diff --git a/src/gallium/include/pipe/p_defines.h > b/src/gallium/include/pipe/p_defines.h > index c4ae053206..6b2f33b9e3 100644 > --- a/src/gallium/include/pipe/p_defines.h > +++ b/src/gallium/include/pipe/p_defines.h > @@ -606,6 +606,17 @@ enum pipe_reset_status > }; > > > +/** > + * Conservative rasterization modes. > + */ > +enum pipe_conservative_raster_mode > +{ > + PIPE_CONSERVATIVE_RASTER_OFF, > + PIPE_CONSERVATIVE_RASTER_POST_SNAP, > + PIPE_CONSERVATIVE_RASTER_PRE_SNAP, > +}; > + > + > /** > * resource_get_handle flags. > */ > @@ -795,6 +806,12 @@ enum pipe_cap > PIPE_CAP_FENCE_SIGNAL, > PIPE_CAP_CONSTBUF0_FLAGS, > PIPE_CAP_PACKED_UNIFORMS, > + PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES, > + PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES, > + PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES, > + PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES, > + PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS, > + PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE, > }; > > /** > @@ -834,6 +851,9 @@ enum pipe_capf > PIPE_CAPF_MAX_POINT_WIDTH_AA, > PIPE_CAPF_MAX_TEXTURE_ANISOTROPY, > PIPE_CAPF_MAX_TEXTURE_LOD_BIAS, > + PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE, > + PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE, > + PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY, > }; > > /** Shader caps not specific to any single stage */ > diff --git a/src/gallium/include/pipe/p_state.h > b/src/gallium/include/pipe/p_state.h > index 4dce399f84..db9fa1a8e9 100644 > --- a/src/gallium/include/pipe/p_state.h > +++ b/src/gallium/include/pipe/p_state.h > @@ -113,6 +113,7 @@ struct pipe_rasterizer_state > unsigned line_smooth:1; > unsigned line_stipple_enable:1; > unsigned line_last_pixel:1; > + unsigned conservative_raster_mode:2; /**< PIPE_CONSERVATIVE_RASTER_x */ > > /** > * Use the first vertex of a primitive as the provoking vertex for > @@ -123,6 +124,12 @@ struct pipe_rasterizer_state > unsigned half_pixel_center:1; > unsigned bottom_edge_rule:1; > > + /* > + * Conservative rasterization subpixel precision bias in bits > + */ > + unsigned subpixel_precision_x:4; > + unsigned subpixel_precision_y:4; > + > /** > * When true, rasterization is disabled and no pixels are written. > * This only makes sense with the Stream Out functionality. > @@ -186,6 +193,7 @@ struct pipe_rasterizer_state > float offset_units; > float offset_scale; > float offset_clamp; > + float conservative_raster_dilate; > }; > > > -- > 2.14.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev