Reviewed-by: Marek Olšák <marek.ol...@amd.com> Marek
On Wed, Mar 28, 2018 at 3:22 PM, Rhys Perry <pendingchao...@gmail.com> wrote: > Reviewed-by: Brian Paul <bri...@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@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