From: Paul Berry Date: Wed, 23 Oct 2013 17:17:30 +0000 (-0700) Subject: i965/vec4: Extract function to set up vec4 prog key for precompiling. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e0f34301b29ecf3fb7118b2e05872510c104a49b;p=mesa.git i965/vec4: Extract function to set up vec4 prog key for precompiling. This will allow us to re-use it for precompiling geometry shaders. Reviewed-by: Kenneth Graunke Reviewed-by: Ian Romanick Reviewed-by: Matt Turner --- diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp index 2bc8cc4a676..ba7490053b1 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp @@ -1592,6 +1592,28 @@ brw_vs_emit(struct brw_context *brw, } +void +brw_vec4_setup_prog_key_for_precompile(struct gl_context *ctx, + struct brw_vec4_prog_key *key, + GLuint id, struct gl_program *prog) +{ + key->program_string_id = id; + key->clamp_vertex_color = ctx->API == API_OPENGL_COMPAT; + + unsigned sampler_count = _mesa_fls(prog->SamplersUsed); + for (unsigned i = 0; i < sampler_count; i++) { + if (prog->ShadowSamplers & (1 << i)) { + /* Assume DEPTH_TEXTURE_MODE is the default: X, X, X, 1 */ + key->tex.swizzles[i] = + MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_ONE); + } else { + /* Color sampler: assume no swizzling. */ + key->tex.swizzles[i] = SWIZZLE_XYZW; + } + } +} + + bool brw_vec4_prog_data_compare(const struct brw_vec4_prog_data *a, const struct brw_vec4_prog_data *b) diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h index 1039d456524..854478ce06e 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.h +++ b/src/mesa/drivers/dri/i965/brw_vec4.h @@ -74,6 +74,10 @@ struct brw_vec4_prog_key { extern "C" { #endif +void +brw_vec4_setup_prog_key_for_precompile(struct gl_context *ctx, + struct brw_vec4_prog_key *key, + GLuint id, struct gl_program *prog); bool brw_vec4_prog_data_compare(const struct brw_vec4_prog_data *a, const struct brw_vec4_prog_data *b); void brw_vec4_prog_data_free(const struct brw_vec4_prog_data *prog_data); diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c index 407d3976adf..b5c8b6300d3 100644 --- a/src/mesa/drivers/dri/i965/brw_vs.c +++ b/src/mesa/drivers/dri/i965/brw_vs.c @@ -534,20 +534,7 @@ brw_vs_precompile(struct gl_context *ctx, struct gl_shader_program *prog) memset(&key, 0, sizeof(key)); - key.base.program_string_id = bvp->id; - key.base.clamp_vertex_color = ctx->API == API_OPENGL_COMPAT; - - unsigned sampler_count = _mesa_fls(vp->Base.SamplersUsed); - for (unsigned i = 0; i < sampler_count; i++) { - if (vp->Base.ShadowSamplers & (1 << i)) { - /* Assume DEPTH_TEXTURE_MODE is the default: X, X, X, 1 */ - key.base.tex.swizzles[i] = - MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_ONE); - } else { - /* Color sampler: assume no swizzling. */ - key.base.tex.swizzles[i] = SWIZZLE_XYZW; - } - } + brw_vec4_setup_prog_key_for_precompile(ctx, &key.base, bvp->id, &vp->Base); success = do_vs_prog(brw, prog, bvp, &key);