From 28510d69ff8fc03bc1693be2b7a02bc68791dd2f Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Mon, 23 Feb 2015 14:44:39 -0800 Subject: [PATCH] i965: Split out brw__populate_key into their own functions This commit splits portions of the existing brw_upload_vs_prog and brw_upload_gs_prog function into new brw_vs_populate_key and brw_gs_populate_key functions. This follows the same style as is already present for all other stages, (see brw_wm_populate_key, etc.). This commit is intended to have no functional change. It exists in preparation for some upcoming code movement in preparation for the shader cache. Reviewed-by: Ian Romanick Reviewed-by: Kenneth Graunke --- src/mesa/drivers/dri/i965/brw_ff_gs.c | 7 ++- src/mesa/drivers/dri/i965/brw_gs.c | 39 +++++++----- src/mesa/drivers/dri/i965/brw_vs.c | 88 +++++++++++++++------------ 3 files changed, 79 insertions(+), 55 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_ff_gs.c b/src/mesa/drivers/dri/i965/brw_ff_gs.c index 016fcdf3db5..14ae4c144e9 100644 --- a/src/mesa/drivers/dri/i965/brw_ff_gs.c +++ b/src/mesa/drivers/dri/i965/brw_ff_gs.c @@ -147,8 +147,9 @@ static void compile_ff_gs_prog(struct brw_context *brw, ralloc_free(mem_ctx); } -static void populate_key(struct brw_context *brw, - struct brw_ff_gs_prog_key *key) +static void +brw_ff_gs_populate_key(struct brw_context *brw, + struct brw_ff_gs_prog_key *key) { static const unsigned swizzle_for_offset[4] = { BRW_SWIZZLE4(0, 1, 2, 3), @@ -235,7 +236,7 @@ brw_upload_ff_gs_prog(struct brw_context *brw) /* Populate the key: */ - populate_key(brw, &key); + brw_ff_gs_populate_key(brw, &key); if (brw->ff_gs.prog_active != key.need_gs_prog) { brw->ctx.NewDriverState |= BRW_NEW_FF_GS_PROG_DATA; diff --git a/src/mesa/drivers/dri/i965/brw_gs.c b/src/mesa/drivers/dri/i965/brw_gs.c index ffe74768253..e2330499ea0 100644 --- a/src/mesa/drivers/dri/i965/brw_gs.c +++ b/src/mesa/drivers/dri/i965/brw_gs.c @@ -288,6 +288,30 @@ do_gs_prog(struct brw_context *brw, return true; } +static void +brw_gs_populate_key(struct brw_context *brw, + struct brw_gs_prog_key *key) +{ + struct gl_context *ctx = &brw->ctx; + struct brw_stage_state *stage_state = &brw->gs.base; + struct brw_geometry_program *gp = + (struct brw_geometry_program *) brw->geometry_program; + struct gl_program *prog = &gp->program.Base; + + memset(key, 0, sizeof(*key)); + + key->base.program_string_id = gp->id; + brw_setup_vue_key_clip_info(brw, &key->base, + gp->program.Base.UsesClipDistanceOut); + + /* _NEW_TEXTURE */ + brw_populate_sampler_prog_key_data(ctx, prog, stage_state->sampler_count, + &key->base.tex); + + /* BRW_NEW_VUE_MAP_VS */ + key->input_varyings = brw->vue_map_vs.slots_valid; +} + void brw_upload_gs_prog(struct brw_context *brw) { @@ -327,20 +351,7 @@ brw_upload_gs_prog(struct brw_context *brw) return; } - struct gl_program *prog = &gp->program.Base; - - memset(&key, 0, sizeof(key)); - - key.base.program_string_id = gp->id; - brw_setup_vue_key_clip_info(brw, &key.base, - gp->program.Base.UsesClipDistanceOut); - - /* _NEW_TEXTURE */ - brw_populate_sampler_prog_key_data(ctx, prog, stage_state->sampler_count, - &key.base.tex); - - /* BRW_NEW_VUE_MAP_VS */ - key.input_varyings = brw->vue_map_vs.slots_valid; + brw_gs_populate_key(brw, &key); if (!brw_search_cache(&brw->cache, BRW_CACHE_GS_PROG, &key, sizeof(key), diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c index bf16f348ec4..9069596489a 100644 --- a/src/mesa/drivers/dri/i965/brw_vs.c +++ b/src/mesa/drivers/dri/i965/brw_vs.c @@ -401,6 +401,55 @@ brw_setup_vue_key_clip_info(struct brw_context *brw, } } +static void +brw_vs_populate_key(struct brw_context *brw, + struct brw_vs_prog_key *key) +{ + struct gl_context *ctx = &brw->ctx; + /* BRW_NEW_VERTEX_PROGRAM */ + struct brw_vertex_program *vp = + (struct brw_vertex_program *)brw->vertex_program; + struct gl_program *prog = (struct gl_program *) brw->vertex_program; + int i; + + memset(key, 0, sizeof(*key)); + + /* Just upload the program verbatim for now. Always send it all + * the inputs it asks for, whether they are varying or not. + */ + key->base.program_string_id = vp->id; + brw_setup_vue_key_clip_info(brw, &key->base, + vp->program.Base.UsesClipDistanceOut); + + /* _NEW_POLYGON */ + if (brw->gen < 6) { + key->copy_edgeflag = (ctx->Polygon.FrontMode != GL_FILL || + ctx->Polygon.BackMode != GL_FILL); + } + + if (prog->OutputsWritten & (VARYING_BIT_COL0 | VARYING_BIT_COL1 | + VARYING_BIT_BFC0 | VARYING_BIT_BFC1)) { + /* _NEW_LIGHT | _NEW_BUFFERS */ + key->clamp_vertex_color = ctx->Light._ClampVertexColor; + } + + /* _NEW_POINT */ + if (brw->gen < 6 && ctx->Point.PointSprite) { + for (i = 0; i < 8; i++) { + if (ctx->Point.CoordReplace[i]) + key->point_coord_replace |= (1 << i); + } + } + + /* _NEW_TEXTURE */ + brw_populate_sampler_prog_key_data(ctx, prog, brw->vs.base.sampler_count, + &key->base.tex); + + /* BRW_NEW_VS_ATTRIB_WORKAROUNDS */ + memcpy(key->gl_attrib_wa_flags, brw->vb.attrib_wa_flags, + sizeof(brw->vb.attrib_wa_flags)); +} + void brw_upload_vs_prog(struct brw_context *brw) { @@ -409,8 +458,6 @@ brw_upload_vs_prog(struct brw_context *brw) /* BRW_NEW_VERTEX_PROGRAM */ struct brw_vertex_program *vp = (struct brw_vertex_program *)brw->vertex_program; - struct gl_program *prog = (struct gl_program *) brw->vertex_program; - int i; if (!brw_state_dirty(brw, _NEW_BUFFERS | @@ -423,42 +470,7 @@ brw_upload_vs_prog(struct brw_context *brw) BRW_NEW_VS_ATTRIB_WORKAROUNDS)) return; - memset(&key, 0, sizeof(key)); - - /* Just upload the program verbatim for now. Always send it all - * the inputs it asks for, whether they are varying or not. - */ - key.base.program_string_id = vp->id; - brw_setup_vue_key_clip_info(brw, &key.base, - vp->program.Base.UsesClipDistanceOut); - - /* _NEW_POLYGON */ - if (brw->gen < 6) { - key.copy_edgeflag = (ctx->Polygon.FrontMode != GL_FILL || - ctx->Polygon.BackMode != GL_FILL); - } - - if (prog->OutputsWritten & (VARYING_BIT_COL0 | VARYING_BIT_COL1 | - VARYING_BIT_BFC0 | VARYING_BIT_BFC1)) { - /* _NEW_LIGHT | _NEW_BUFFERS */ - key.clamp_vertex_color = ctx->Light._ClampVertexColor; - } - - /* _NEW_POINT */ - if (brw->gen < 6 && ctx->Point.PointSprite) { - for (i = 0; i < 8; i++) { - if (ctx->Point.CoordReplace[i]) - key.point_coord_replace |= (1 << i); - } - } - - /* _NEW_TEXTURE */ - brw_populate_sampler_prog_key_data(ctx, prog, brw->vs.base.sampler_count, - &key.base.tex); - - /* BRW_NEW_VS_ATTRIB_WORKAROUNDS */ - memcpy(key.gl_attrib_wa_flags, brw->vb.attrib_wa_flags, - sizeof(brw->vb.attrib_wa_flags)); + brw_vs_populate_key(brw, &key); if (!brw_search_cache(&brw->cache, BRW_CACHE_VS_PROG, &key, sizeof(key),