[Mesa-dev] [PATCH v4 3/4] st/mesa: add support for nvidia conservative rasterization extensions
Marek Olšák
maraeo at gmail.com
Mon Apr 2 02:32:23 UTC 2018
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Marek
On Wed, Mar 28, 2018 at 3:22 PM, Rhys Perry <pendingchaos02 at gmail.com>
wrote:
> Reviewed-by: Brian Paul <brianp at vmware.com>
>
> ---
> src/mesa/state_tracker/st_atom_rasterizer.c | 15 +++++++++++++
> src/mesa/state_tracker/st_context.c | 2 ++
> src/mesa/state_tracker/st_extensions.c | 34
> +++++++++++++++++++++++++++++
> 3 files changed, 51 insertions(+)
>
> diff --git a/src/mesa/state_tracker/st_atom_rasterizer.c
> b/src/mesa/state_tracker/st_atom_rasterizer.c
> index 1be072e6e3..5b747a924e 100644
> --- a/src/mesa/state_tracker/st_atom_rasterizer.c
> +++ b/src/mesa/state_tracker/st_atom_rasterizer.c
> @@ -298,5 +298,20 @@ st_update_rasterizer(struct st_context *st)
> raster->clip_plane_enable = ctx->Transform.ClipPlanesEnabled;
> raster->clip_halfz = (ctx->Transform.ClipDepthMode == GL_ZERO_TO_ONE);
>
> + /* ST_NEW_RASTERIZER */
> + if (ctx->ConservativeRasterization) {
> + if (ctx->ConservativeRasterMode == GL_CONSERVATIVE_RASTER_MODE_
> POST_SNAP_NV)
> + raster->conservative_raster_mode =
> PIPE_CONSERVATIVE_RASTER_POST_SNAP;
> + else
> + raster->conservative_raster_mode = PIPE_CONSERVATIVE_RASTER_PRE_
> SNAP;
> + } else {
> + raster->conservative_raster_mode = PIPE_CONSERVATIVE_RASTER_OFF;
> + }
> +
> + raster->conservative_raster_dilate = ctx->ConservativeRasterDilate;
> +
> + raster->subpixel_precision_x = ctx->NvSubpixelPrecisionBias[0];
> + raster->subpixel_precision_y = ctx->NvSubpixelPrecisionBias[1];
> +
> cso_set_rasterizer(st->cso_context, raster);
> }
> diff --git a/src/mesa/state_tracker/st_context.c
> b/src/mesa/state_tracker/st_context.c
> index 90b7f9359a..0709681e16 100644
> --- a/src/mesa/state_tracker/st_context.c
> +++ b/src/mesa/state_tracker/st_context.c
> @@ -344,6 +344,8 @@ st_init_driver_flags(struct st_context *st)
> f->NewPolygonState = ST_NEW_RASTERIZER;
> f->NewPolygonStipple = ST_NEW_POLY_STIPPLE;
> f->NewViewport = ST_NEW_VIEWPORT;
> + f->NewNvConservativeRasterization = ST_NEW_RASTERIZER;
> + f->NewNvConservativeRasterizationParams = ST_NEW_RASTERIZER;
> }
>
>
> diff --git a/src/mesa/state_tracker/st_extensions.c
> b/src/mesa/state_tracker/st_extensions.c
> index bea61f21cb..539ba7e245 100644
> --- a/src/mesa/state_tracker/st_extensions.c
> +++ b/src/mesa/state_tracker/st_extensions.c
> @@ -494,6 +494,16 @@ void st_init_limits(struct pipe_screen *screen,
> c->UseSTD430AsDefaultPacking =
> screen->get_param(screen, PIPE_CAP_LOAD_CONSTBUF);
>
> + c->MaxSubpixelPrecisionBiasBits =
> + screen->get_param(screen, PIPE_CAP_MAX_CONSERVATIVE_
> RASTER_SUBPIXEL_PRECISION_BIAS);
> +
> + c->ConservativeRasterDilateRange[0] =
> + screen->get_paramf(screen, PIPE_CAPF_MIN_CONSERVATIVE_
> RASTER_DILATE);
> + c->ConservativeRasterDilateRange[1] =
> + screen->get_paramf(screen, PIPE_CAPF_MAX_CONSERVATIVE_
> RASTER_DILATE);
> + c->ConservativeRasterDilateGranularity =
> + screen->get_paramf(screen, PIPE_CAPF_CONSERVATIVE_RASTER_
> DILATE_GRANULARITY);
> +
> /* limit the max combined shader output resources to a driver limit */
> temp = screen->get_param(screen, PIPE_CAP_MAX_COMBINED_SHADER_
> OUTPUT_RESOURCES);
> if (temp > 0 && c->MaxCombinedShaderOutputResources > temp)
> @@ -1363,4 +1373,28 @@ void st_init_extensions(struct pipe_screen *screen,
> extensions->ARB_texture_cube_map_array &&
> extensions->ARB_texture_stencil8 &&
> extensions->ARB_texture_multisample;
> +
> + if (screen->get_param(screen, PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES)
> &&
> + screen->get_param(screen, PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES)
> &&
> + screen->get_param(screen, PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE))
> {
> + float max_dilate;
> + bool pre_snap_triangles, pre_snap_points_lines;
> +
> + max_dilate = screen->get_paramf(screen, PIPE_CAPF_MAX_CONSERVATIVE_
> RASTER_DILATE);
> +
> + pre_snap_triangles =
> + screen->get_param(screen, PIPE_CAP_CONSERVATIVE_RASTER_
> PRE_SNAP_TRIANGLES);
> + pre_snap_points_lines =
> + screen->get_param(screen, PIPE_CAP_CONSERVATIVE_RASTER_
> PRE_SNAP_POINTS_LINES);
> +
> + extensions->NV_conservative_raster =
> + screen->get_param(screen, PIPE_CAP_MAX_CONSERVATIVE_
> RASTER_SUBPIXEL_PRECISION_BIAS) > 1;
> +
> + if (extensions->NV_conservative_raster) {
> + extensions->NV_conservative_raster_dilate = max_dilate >= 0.75;
> + extensions->NV_conservative_raster_pre_snap_triangles =
> pre_snap_triangles;
> + extensions->NV_conservative_raster_pre_snap =
> + pre_snap_triangles && pre_snap_points_lines;
> + }
> + }
> }
> --
> 2.14.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180401/1f457ed2/attachment.html>
More information about the mesa-dev
mailing list