[Mesa-dev] [PATCH v02 20/37] i965: Port Gen8+ 3DSTATE_RASTER state to genxml.
Kenneth Graunke
kenneth at whitecape.org
Tue Apr 25 23:46:39 UTC 2017
On Monday, April 24, 2017 3:19:15 PM PDT Rafael Antognolli wrote:
> Emits 3DSTATE_RASTER from genX_state_upload.c using pack structs from
> genxml.
>
> Signed-off-by: Rafael Antognolli <rafael.antognolli at intel.com>
> ---
> src/mesa/drivers/dri/i965/brw_state.h | 1 +-
> src/mesa/drivers/dri/i965/gen8_sf_state.c | 125 +-------------------
> src/mesa/drivers/dri/i965/genX_state_upload.c | 125 ++++++++++++++++++-
> 3 files changed, 124 insertions(+), 127 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
> index c26be41..3a10a8a 100644
> --- a/src/mesa/drivers/dri/i965/brw_state.h
> +++ b/src/mesa/drivers/dri/i965/brw_state.h
> @@ -156,7 +156,6 @@ extern const struct brw_tracked_state gen8_ps_blend;
> extern const struct brw_tracked_state gen8_ps_extra;
> extern const struct brw_tracked_state gen8_ps_state;
> extern const struct brw_tracked_state gen8_wm_state;
> -extern const struct brw_tracked_state gen8_raster_state;
> extern const struct brw_tracked_state gen8_sbe_state;
> extern const struct brw_tracked_state gen8_sf_state;
> extern const struct brw_tracked_state gen8_sf_clip_viewport;
> diff --git a/src/mesa/drivers/dri/i965/gen8_sf_state.c b/src/mesa/drivers/dri/i965/gen8_sf_state.c
> index 41e94fb..d47adcd 100644
> --- a/src/mesa/drivers/dri/i965/gen8_sf_state.c
> +++ b/src/mesa/drivers/dri/i965/gen8_sf_state.c
> @@ -224,128 +224,3 @@ const struct brw_tracked_state gen8_sf_state = {
> },
> .emit = upload_sf,
> };
> -
> -static void
> -upload_raster(struct brw_context *brw)
> -{
> - struct gl_context *ctx = &brw->ctx;
> - uint32_t dw1 = 0;
> -
> - /* _NEW_BUFFERS */
> - bool render_to_fbo = _mesa_is_user_fbo(brw->ctx.DrawBuffer);
> -
> - /* _NEW_POLYGON */
> - if (ctx->Polygon._FrontBit == render_to_fbo)
> - dw1 |= GEN8_RASTER_FRONT_WINDING_CCW;
> -
> - if (ctx->Polygon.CullFlag) {
> - switch (ctx->Polygon.CullFaceMode) {
> - case GL_FRONT:
> - dw1 |= GEN8_RASTER_CULL_FRONT;
> - break;
> - case GL_BACK:
> - dw1 |= GEN8_RASTER_CULL_BACK;
> - break;
> - case GL_FRONT_AND_BACK:
> - dw1 |= GEN8_RASTER_CULL_BOTH;
> - break;
> - default:
> - unreachable("not reached");
> - }
> - } else {
> - dw1 |= GEN8_RASTER_CULL_NONE;
> - }
> -
> - /* _NEW_POINT */
> - if (ctx->Point.SmoothFlag)
> - dw1 |= GEN8_RASTER_SMOOTH_POINT_ENABLE;
> -
> - if (_mesa_is_multisample_enabled(ctx))
> - dw1 |= GEN8_RASTER_API_MULTISAMPLE_ENABLE;
> -
> - if (ctx->Polygon.OffsetFill)
> - dw1 |= GEN6_SF_GLOBAL_DEPTH_OFFSET_SOLID;
> -
> - if (ctx->Polygon.OffsetLine)
> - dw1 |= GEN6_SF_GLOBAL_DEPTH_OFFSET_WIREFRAME;
> -
> - if (ctx->Polygon.OffsetPoint)
> - dw1 |= GEN6_SF_GLOBAL_DEPTH_OFFSET_POINT;
> -
> - switch (ctx->Polygon.FrontMode) {
> - case GL_FILL:
> - dw1 |= GEN6_SF_FRONT_SOLID;
> - break;
> - case GL_LINE:
> - dw1 |= GEN6_SF_FRONT_WIREFRAME;
> - break;
> - case GL_POINT:
> - dw1 |= GEN6_SF_FRONT_POINT;
> - break;
> -
> - default:
> - unreachable("not reached");
> - }
> -
> - switch (ctx->Polygon.BackMode) {
> - case GL_FILL:
> - dw1 |= GEN6_SF_BACK_SOLID;
> - break;
> - case GL_LINE:
> - dw1 |= GEN6_SF_BACK_WIREFRAME;
> - break;
> - case GL_POINT:
> - dw1 |= GEN6_SF_BACK_POINT;
> - break;
> - default:
> - unreachable("not reached");
> - }
> -
> - /* _NEW_LINE */
> - if (ctx->Line.SmoothFlag)
> - dw1 |= GEN8_RASTER_LINE_AA_ENABLE;
> -
> - /* _NEW_SCISSOR */
> - if (ctx->Scissor.EnableFlags)
> - dw1 |= GEN8_RASTER_SCISSOR_ENABLE;
> -
> - /* _NEW_TRANSFORM */
> - if (!ctx->Transform.DepthClamp) {
> - if (brw->gen >= 9) {
> - dw1 |= GEN9_RASTER_VIEWPORT_Z_NEAR_CLIP_TEST_ENABLE |
> - GEN9_RASTER_VIEWPORT_Z_FAR_CLIP_TEST_ENABLE;
> - } else {
> - dw1 |= GEN8_RASTER_VIEWPORT_Z_CLIP_TEST_ENABLE;
> - }
> - }
> -
> - /* BRW_NEW_CONSERVATIVE_RASTERIZATION */
> - if (ctx->IntelConservativeRasterization) {
> - if (brw->gen >= 9)
> - dw1 |= GEN9_RASTER_CONSERVATIVE_RASTERIZATION_ENABLE;
> - }
> -
> - BEGIN_BATCH(5);
> - OUT_BATCH(_3DSTATE_RASTER << 16 | (5 - 2));
> - OUT_BATCH(dw1);
> - OUT_BATCH_F(ctx->Polygon.OffsetUnits * 2); /* constant. copied from gen4 */
> - OUT_BATCH_F(ctx->Polygon.OffsetFactor); /* scale */
> - OUT_BATCH_F(ctx->Polygon.OffsetClamp); /* global depth offset clamp */
> - ADVANCE_BATCH();
> -}
> -
> -const struct brw_tracked_state gen8_raster_state = {
> - .dirty = {
> - .mesa = _NEW_BUFFERS |
> - _NEW_LINE |
> - _NEW_MULTISAMPLE |
> - _NEW_POINT |
> - _NEW_POLYGON |
> - _NEW_SCISSOR |
> - _NEW_TRANSFORM,
> - .brw = BRW_NEW_BLORP |
> - BRW_NEW_CONTEXT |
> - BRW_NEW_CONSERVATIVE_RASTERIZATION,
> - },
> - .emit = upload_raster,
> -};
> diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c b/src/mesa/drivers/dri/i965/genX_state_upload.c
> index 7532085..948782a 100644
> --- a/src/mesa/drivers/dri/i965/genX_state_upload.c
> +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c
> @@ -343,10 +343,133 @@ static const struct brw_tracked_state genX(clip_state) = {
> .emit = genX(upload_clip_state),
> };
>
> +#endif
> +
> /* ---------------------------------------------------------------------- */
>
> +#if GEN_GEN >= 8
> +static void
> +genX(upload_raster)(struct brw_context *brw)
> +{
> + struct gl_context *ctx = &brw->ctx;
> +
> + /* _NEW_BUFFERS */
> + bool render_to_fbo = _mesa_is_user_fbo(brw->ctx.DrawBuffer);
ctx->DrawBuffer
> +
> + /* _NEW_POLYGON */
> + struct gl_polygon_attrib *polygon = &ctx->Polygon;
> +
> + /* _NEW_POINT */
> + struct gl_point_attrib *point = &ctx->Point;
> +
> + brw_batch_emit(brw, GENX(3DSTATE_RASTER), raster) {
> + if (polygon->_FrontBit == render_to_fbo)
> + raster.FrontWinding = CounterClockwise;
> +
> + if (polygon->CullFlag) {
> + switch (polygon->CullFaceMode) {
Please align 'case' with 'switch' (unindent 3 spaces), here and below.
> + case GL_FRONT:
> + raster.CullMode = CULLMODE_FRONT;
> + break;
> + case GL_BACK:
> + raster.CullMode = CULLMODE_BACK;
> + break;
> + case GL_FRONT_AND_BACK:
> + raster.CullMode = CULLMODE_BOTH;
> + break;
> + default:
> + unreachable("not reached");
> + }
> + } else {
> + raster.CullMode = CULLMODE_NONE;
> + }
> +
> + point->SmoothFlag = raster.SmoothPointEnable;
> +
> + raster.DXMultisampleRasterizationEnable =
> + _mesa_is_multisample_enabled(ctx);
> +
> + raster.GlobalDepthOffsetEnableSolid = polygon->OffsetFill;
> + raster.GlobalDepthOffsetEnableWireframe = polygon->OffsetLine;
> + raster.GlobalDepthOffsetEnablePoint = polygon->OffsetPoint;
> +
> + switch (polygon->FrontMode) {
> + case GL_FILL:
> + raster.FrontFaceFillMode = FILL_MODE_SOLID;
> + break;
> + case GL_LINE:
> + raster.FrontFaceFillMode = FILL_MODE_WIREFRAME;
> + break;
> + case GL_POINT:
> + raster.FrontFaceFillMode = FILL_MODE_POINT;
> + break;
> + default:
> + unreachable("not reached");
> + }
> +
> + switch (polygon->BackMode) {
> + case GL_FILL:
> + raster.BackFaceFillMode = FILL_MODE_SOLID;
> + break;
> + case GL_LINE:
> + raster.BackFaceFillMode = FILL_MODE_WIREFRAME;
> + break;
> + case GL_POINT:
> + raster.BackFaceFillMode = FILL_MODE_POINT;
> + break;
> + default:
> + unreachable("not reached");
> + }
> +
> + /* _NEW_LINE */
> + raster.AntialiasingEnable = ctx->Line.SmoothFlag;
> +
> + /* _NEW_SCISSOR */
> + raster.ScissorRectangleEnable = ctx->Scissor.EnableFlags;
> +
> + /* _NEW_TRANSFORM */
> + if (!ctx->Transform.DepthClamp) {
> +#if GEN_GEN >= 9
> + raster.ViewportZFarClipTestEnable = true;
> + raster.ViewportZNearClipTestEnable = true;
> +#else
> + raster.ViewportZClipTestEnable = true;
> +#endif
> + }
> +
> + /* BRW_NEW_CONSERVATIVE_RASTERIZATION */
> +#if GEN_GEN >= 9
> + raster.ConservativeRasterizationEnable =
> + ctx->IntelConservativeRasterization;
> +#endif
> +
> + raster.GlobalDepthOffsetClamp = polygon->OffsetClamp;
> + raster.GlobalDepthOffsetScale = polygon->OffsetFactor;
> +
> + /* copied from gen4 */
Let's drop this /* copied from gen4 */ comment, it's not really been
meaningful for years :)
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
> + raster.GlobalDepthOffsetConstant = polygon->OffsetUnits * 2;
> + }
> +}
> +
> +static const struct brw_tracked_state genX(raster_state) = {
> + .dirty = {
> + .mesa = _NEW_BUFFERS |
> + _NEW_LINE |
> + _NEW_MULTISAMPLE |
> + _NEW_POINT |
> + _NEW_POLYGON |
> + _NEW_SCISSOR |
> + _NEW_TRANSFORM,
> + .brw = BRW_NEW_BLORP |
> + BRW_NEW_CONTEXT |
> + BRW_NEW_CONSERVATIVE_RASTERIZATION,
> + },
> + .emit = genX(upload_raster),
> +};
> #endif
>
> +/* ---------------------------------------------------------------------- */
> +
> void
> genX(init_atoms)(struct brw_context *brw)
> {
> @@ -628,7 +751,7 @@ genX(init_atoms)(struct brw_context *brw)
> &gen8_gs_state,
> &gen7_sol_state,
> &genX(clip_state),
> - &gen8_raster_state,
> + &genX(raster_state),
> &gen8_sbe_state,
> &gen8_sf_state,
> &gen8_ps_blend,
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part.
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170425/a2a9e29f/attachment.sig>
More information about the mesa-dev
mailing list