From 23e7b81f2d742d292d77b53ac9cf72c3d89fc798 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 15 Nov 2012 11:55:36 -0800 Subject: [PATCH] i965: Use fewer temporary variables in clip setup. When you're comparing to the spec, you're trying to immediately see what numbered dword of the packet your bit ends up in. Reviewed-by: Kenneth Graunke NOTE: This is a candidate for the 9.0 branch. --- src/mesa/drivers/dri/i965/gen6_clip_state.c | 21 +++++++---------- src/mesa/drivers/dri/i965/gen7_clip_state.c | 25 +++++++++------------ 2 files changed, 18 insertions(+), 28 deletions(-) diff --git a/src/mesa/drivers/dri/i965/gen6_clip_state.c b/src/mesa/drivers/dri/i965/gen6_clip_state.c index c34d87e29f3..63c58656416 100644 --- a/src/mesa/drivers/dri/i965/gen6_clip_state.c +++ b/src/mesa/drivers/dri/i965/gen6_clip_state.c @@ -36,35 +36,33 @@ upload_clip_state(struct brw_context *brw) { struct intel_context *intel = &brw->intel; struct gl_context *ctx = &intel->ctx; - uint32_t depth_clamp = 0; - uint32_t provoking, userclip; - uint32_t nonperspective_barycentric_enable_flag = 0; + uint32_t dw2 = 0; /* CACHE_NEW_WM_PROG */ if (brw->wm.prog_data->barycentric_interp_modes & BRW_WM_NONPERSPECTIVE_BARYCENTRIC_BITS) { - nonperspective_barycentric_enable_flag = - GEN6_CLIP_NON_PERSPECTIVE_BARYCENTRIC_ENABLE; + dw2 |= GEN6_CLIP_NON_PERSPECTIVE_BARYCENTRIC_ENABLE; } if (!ctx->Transform.DepthClamp) - depth_clamp = GEN6_CLIP_Z_TEST; + dw2 |= GEN6_CLIP_Z_TEST; /* _NEW_LIGHT */ if (ctx->Light.ProvokingVertex == GL_FIRST_VERTEX_CONVENTION) { - provoking = + dw2 |= (0 << GEN6_CLIP_TRI_PROVOKE_SHIFT) | (1 << GEN6_CLIP_TRIFAN_PROVOKE_SHIFT) | (0 << GEN6_CLIP_LINE_PROVOKE_SHIFT); } else { - provoking = + dw2 |= (2 << GEN6_CLIP_TRI_PROVOKE_SHIFT) | (2 << GEN6_CLIP_TRIFAN_PROVOKE_SHIFT) | (1 << GEN6_CLIP_LINE_PROVOKE_SHIFT); } /* _NEW_TRANSFORM */ - userclip = ctx->Transform.ClipPlanesEnabled; + dw2 |= (ctx->Transform.ClipPlanesEnabled << + GEN6_USER_CLIP_CLIP_DISTANCES_SHIFT); BEGIN_BATCH(4); OUT_BATCH(_3DSTATE_CLIP << 16 | (4 - 2)); @@ -72,12 +70,9 @@ upload_clip_state(struct brw_context *brw) OUT_BATCH(GEN6_CLIP_ENABLE | GEN6_CLIP_API_OGL | GEN6_CLIP_MODE_NORMAL | - nonperspective_barycentric_enable_flag | GEN6_CLIP_XY_TEST | GEN6_CLIP_GB_TEST | - userclip << GEN6_USER_CLIP_CLIP_DISTANCES_SHIFT | - depth_clamp | - provoking); + dw2); OUT_BATCH(U_FIXED(0.125, 3) << GEN6_CLIP_MIN_POINT_WIDTH_SHIFT | U_FIXED(255.875, 3) << GEN6_CLIP_MAX_POINT_WIDTH_SHIFT | GEN6_CLIP_FORCE_ZERO_RTAINDEX); diff --git a/src/mesa/drivers/dri/i965/gen7_clip_state.c b/src/mesa/drivers/dri/i965/gen7_clip_state.c index 3bc6de05393..e82a3390208 100644 --- a/src/mesa/drivers/dri/i965/gen7_clip_state.c +++ b/src/mesa/drivers/dri/i965/gen7_clip_state.c @@ -33,19 +33,16 @@ upload_clip_state(struct brw_context *brw) { struct intel_context *intel = &brw->intel; struct gl_context *ctx = &intel->ctx; - uint32_t depth_clamp = 0; - uint32_t provoking, userclip; - uint32_t dw1 = GEN6_CLIP_STATISTICS_ENABLE; - uint32_t nonperspective_barycentric_enable_flag = 0; + uint32_t dw1 = GEN6_CLIP_STATISTICS_ENABLE, dw2 = 0; /* _NEW_BUFFERS */ - bool render_to_fbo = _mesa_is_user_fbo(brw->intel.ctx.DrawBuffer); + struct gl_framebuffer *fb = ctx->DrawBuffer; + bool render_to_fbo = _mesa_is_user_fbo(fb); /* CACHE_NEW_WM_PROG */ if (brw->wm.prog_data->barycentric_interp_modes & BRW_WM_NONPERSPECTIVE_BARYCENTRIC_BITS) { - nonperspective_barycentric_enable_flag = - GEN6_CLIP_NON_PERSPECTIVE_BARYCENTRIC_ENABLE; + dw2 |= GEN6_CLIP_NON_PERSPECTIVE_BARYCENTRIC_ENABLE; } dw1 |= GEN7_CLIP_EARLY_CULL; @@ -75,23 +72,24 @@ upload_clip_state(struct brw_context *brw) /* _NEW_TRANSFORM */ if (!ctx->Transform.DepthClamp) - depth_clamp = GEN6_CLIP_Z_TEST; + dw2 |= GEN6_CLIP_Z_TEST; /* _NEW_LIGHT */ if (ctx->Light.ProvokingVertex == GL_FIRST_VERTEX_CONVENTION) { - provoking = + dw2 |= (0 << GEN6_CLIP_TRI_PROVOKE_SHIFT) | (1 << GEN6_CLIP_TRIFAN_PROVOKE_SHIFT) | (0 << GEN6_CLIP_LINE_PROVOKE_SHIFT); } else { - provoking = + dw2 |= (2 << GEN6_CLIP_TRI_PROVOKE_SHIFT) | (2 << GEN6_CLIP_TRIFAN_PROVOKE_SHIFT) | (1 << GEN6_CLIP_LINE_PROVOKE_SHIFT); } /* _NEW_TRANSFORM */ - userclip = ctx->Transform.ClipPlanesEnabled; + dw2 |= (ctx->Transform.ClipPlanesEnabled << + GEN6_USER_CLIP_CLIP_DISTANCES_SHIFT); BEGIN_BATCH(4); OUT_BATCH(_3DSTATE_CLIP << 16 | (4 - 2)); @@ -99,12 +97,9 @@ upload_clip_state(struct brw_context *brw) OUT_BATCH(GEN6_CLIP_ENABLE | GEN6_CLIP_API_OGL | GEN6_CLIP_MODE_NORMAL | - nonperspective_barycentric_enable_flag | GEN6_CLIP_XY_TEST | GEN6_CLIP_GB_TEST | - userclip << GEN6_USER_CLIP_CLIP_DISTANCES_SHIFT | - depth_clamp | - provoking); + dw2); OUT_BATCH(U_FIXED(0.125, 3) << GEN6_CLIP_MIN_POINT_WIDTH_SHIFT | U_FIXED(255.875, 3) << GEN6_CLIP_MAX_POINT_WIDTH_SHIFT | GEN6_CLIP_FORCE_ZERO_RTAINDEX); -- 2.30.2