mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-07 02:10:12 +01:00
i965: Split out brw_<stage>_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 <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
01d3b750b3
commit
28510d69ff
3 changed files with 79 additions and 55 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue