Reduce brw_fs_precompile's dependence on gl_fragment_program. Signed-off-by: Jordan Justen <jordan.l.jus...@intel.com> --- src/mesa/drivers/dri/i965/brw_fs.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index a6a03ea..5298059 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -3471,6 +3471,7 @@ brw_fs_precompile(struct gl_context *ctx, struct gl_shader_program *prog) struct gl_fragment_program *fp = (struct gl_fragment_program *) prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program; + struct gl_program *glp = &fp->Base; struct brw_fragment_program *bfp = brw_fragment_program(fp); bool program_uses_dfdy = fp->UsesDFdy; @@ -3480,7 +3481,7 @@ brw_fs_precompile(struct gl_context *ctx, struct gl_shader_program *prog) if (fp->UsesKill) key.iz_lookup |= IZ_PS_KILL_ALPHATEST_BIT; - if (fp->Base.OutputsWritten & BITFIELD64_BIT(FRAG_RESULT_DEPTH)) + if (glp->OutputsWritten & BITFIELD64_BIT(FRAG_RESULT_DEPTH)) key.iz_lookup |= IZ_PS_COMPUTES_DEPTH_BIT; /* Just assume depth testing. */ @@ -3488,13 +3489,13 @@ brw_fs_precompile(struct gl_context *ctx, struct gl_shader_program *prog) key.iz_lookup |= IZ_DEPTH_WRITE_ENABLE_BIT; } - if (brw->gen < 6 || _mesa_bitcount_64(fp->Base.InputsRead & + if (brw->gen < 6 || _mesa_bitcount_64(glp->InputsRead & BRW_FS_VARYING_INPUT_MASK) > 16) - key.input_slots_valid = fp->Base.InputsRead | VARYING_BIT_POS; + key.input_slots_valid = glp->InputsRead | VARYING_BIT_POS; - unsigned sampler_count = _mesa_fls(fp->Base.SamplersUsed); + unsigned sampler_count = _mesa_fls(glp->SamplersUsed); for (unsigned i = 0; i < sampler_count; i++) { - if (fp->Base.ShadowSamplers & (1 << i)) { + if (glp->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); @@ -3504,15 +3505,15 @@ brw_fs_precompile(struct gl_context *ctx, struct gl_shader_program *prog) } } - if (fp->Base.InputsRead & VARYING_BIT_POS) { + if (glp->InputsRead & VARYING_BIT_POS) { key.drawable_height = ctx->DrawBuffer->Height; } - key.nr_color_regions = _mesa_bitcount_64(fp->Base.OutputsWritten & + key.nr_color_regions = _mesa_bitcount_64(glp->OutputsWritten & ~(BITFIELD64_BIT(FRAG_RESULT_DEPTH) | BITFIELD64_BIT(FRAG_RESULT_SAMPLE_MASK))); - if ((fp->Base.InputsRead & VARYING_BIT_POS) || program_uses_dfdy) { + if ((glp->InputsRead & VARYING_BIT_POS) || program_uses_dfdy) { key.render_to_fbo = _mesa_is_user_fbo(ctx->DrawBuffer) || key.nr_color_regions > 1; } -- 2.1.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev