crocus/gen8: add rasterizer state changes.

Port over raster packet and state changes

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11507>
This commit is contained in:
Dave Airlie 2021-06-22 05:18:37 +10:00 committed by Marge Bot
parent 6613c0ac37
commit d12a9eda72
1 changed files with 48 additions and 6 deletions

View File

@ -645,6 +645,9 @@ struct crocus_rasterizer_state {
#if GFX_VER >= 6
uint32_t sf[GENX(3DSTATE_SF_length)];
uint32_t clip[GENX(3DSTATE_CLIP_length)];
#endif
#if GFX_VER >= 8
uint32_t raster[GENX(3DSTATE_RASTER_length)];
#endif
uint32_t line_stipple[GENX(3DSTATE_LINE_STIPPLE_length)];
@ -2000,7 +2003,15 @@ crocus_create_rasterizer_state(struct pipe_context *ctx,
sf.LineEndCapAntialiasingRegionWidth =
state->line_smooth ? _10pixels : _05pixels;
sf.LastPixelEnable = state->line_last_pixel;
#if GFX_VER == 8
struct crocus_screen *screen = (struct crocus_screen *)ctx->screen;
if (screen->devinfo.is_cherryview)
sf.CHVLineWidth = line_width;
else
sf.LineWidth = line_width;
#else
sf.LineWidth = line_width;
#endif
sf.PointWidthSource = state->point_size_per_vertex ? Vertex : State;
sf.PointWidth = state->point_size;
@ -2012,11 +2023,6 @@ crocus_create_rasterizer_state(struct pipe_context *ctx,
sf.LineStripListProvokingVertexSelect = 1;
}
sf.FrontWinding = state->front_ccw ? 1 : 0; // Or the other way...
sf.CullMode = translate_cull_mode(state->cull_face);
sf.ScissorRectangleEnable = true;
#if GFX_VER == 6
sf.AttributeSwizzleEnable = true;
if (state->sprite_coord_mode == PIPE_SPRITE_COORD_LOWER_LEFT)
@ -2025,6 +2031,9 @@ crocus_create_rasterizer_state(struct pipe_context *ctx,
sf.PointSpriteTextureCoordinateOrigin = UPPERLEFT;
#endif
#if GFX_VER <= 7
sf.FrontWinding = state->front_ccw ? 1 : 0; // Or the other way...
#if GFX_VER >= 6
sf.GlobalDepthOffsetEnableSolid = state->offset_tri;
sf.GlobalDepthOffsetEnableWireframe = state->offset_line;
@ -2037,9 +2046,33 @@ crocus_create_rasterizer_state(struct pipe_context *ctx,
sf.BackFaceFillMode = translate_fill_mode(state->fill_back);
#endif
sf.CullMode = translate_cull_mode(state->cull_face);
sf.ScissorRectangleEnable = true;
#if GFX_VERx10 == 75
sf.LineStippleEnable = state->line_stipple_enable;
#endif
#endif
}
#endif
#if GFX_VER == 8
crocus_pack_command(GENX(3DSTATE_RASTER), cso->raster, rr) {
rr.FrontWinding = state->front_ccw ? CounterClockwise : Clockwise;
rr.CullMode = translate_cull_mode(state->cull_face);
rr.FrontFaceFillMode = translate_fill_mode(state->fill_front);
rr.BackFaceFillMode = translate_fill_mode(state->fill_back);
rr.DXMultisampleRasterizationEnable = state->multisample;
rr.GlobalDepthOffsetEnableSolid = state->offset_tri;
rr.GlobalDepthOffsetEnableWireframe = state->offset_line;
rr.GlobalDepthOffsetEnablePoint = state->offset_point;
rr.GlobalDepthOffsetConstant = state->offset_units * 2;
rr.GlobalDepthOffsetScale = state->offset_scale;
rr.GlobalDepthOffsetClamp = state->offset_clamp;
rr.SmoothPointEnable = state->point_smooth;
rr.AntialiasingEnable = state->line_smooth;
rr.ScissorRectangleEnable = state->scissor;
rr.ViewportZClipTestEnable = (state->depth_clip_near || state->depth_clip_far);
}
#endif
@ -2057,12 +2090,18 @@ crocus_create_rasterizer_state(struct pipe_context *ctx,
cl.CullMode = translate_cull_mode(state->cull_face);
#endif
cl.UserClipDistanceClipTestEnableBitmask = state->clip_plane_enable;
#if GFX_VER < 8
cl.ViewportZClipTestEnable = (state->depth_clip_near || state->depth_clip_far);
#endif
cl.APIMode = state->clip_halfz ? APIMODE_D3D : APIMODE_OGL;
cl.GuardbandClipTestEnable = true;
cl.ClipEnable = true;
cl.MinimumPointWidth = 0.125;
cl.MaximumPointWidth = 255.875;
cl.ViewportZClipTestEnable = (state->depth_clip_near || state->depth_clip_far);
#if GFX_VER == 8
cl.ForceUserClipDistanceClipTestEnableBitmask = true;
#endif
if (state->flatshade_first) {
cl.TriangleFanProvokingVertexSelect = 1;
@ -6888,6 +6927,9 @@ crocus_upload_dirty_render_state(struct crocus_context *ice,
}
crocus_emit_merge(batch, cso->sf, dynamic_sf,
ARRAY_SIZE(dynamic_sf));
#if GFX_VER == 8
crocus_batch_emit(batch, cso->raster, sizeof(cso->raster));
#endif
#endif
}