diff options
author | Eric Anholt <eric@anholt.net> | 2010-09-30 20:09:53 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2010-09-30 20:23:40 -0700 |
commit | 5f237a1ccb28399fbbceecea694f5d18ebba9938 (patch) | |
tree | 547e556f523846a6e59568032f75e6d5cf392952 /src | |
parent | aae338104fa6022b8b1d6b22c7ad1115b252b9b6 (diff) |
i965: Use the lowering pass for texture projection.
We should end up with the same code, but anyone else with this issue
could share the handling (which I got wrong for shadow comparisons in
the driver before).
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs.cpp | 19 |
1 files changed, 3 insertions, 16 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 0a77b5ab4e..c49b27b0b5 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -138,6 +138,7 @@ brw_link_shader(GLcontext *ctx, struct gl_shader_program *prog) do_div_to_mul_rcp(shader->ir); do_sub_to_add_neg(shader->ir); do_explog_to_explog2(shader->ir); + do_lower_texture_projection(shader->ir); do { progress = false; @@ -1229,22 +1230,8 @@ fs_visitor::visit(ir_texture *ir) ir->coordinate->accept(this); fs_reg coordinate = this->result; - if (ir->projector) { - fs_reg inv_proj = fs_reg(this, glsl_type::float_type); - - ir->projector->accept(this); - emit(fs_inst(FS_OPCODE_RCP, inv_proj, this->result)); - - fs_reg proj_coordinate = fs_reg(this, ir->coordinate->type); - for (unsigned int i = 0; i < ir->coordinate->type->vector_elements; i++) { - emit(fs_inst(BRW_OPCODE_MUL, proj_coordinate, coordinate, inv_proj)); - coordinate.reg_offset++; - proj_coordinate.reg_offset++; - } - proj_coordinate.reg_offset = 0; - - coordinate = proj_coordinate; - } + /* Should be lowered by do_lower_texture_projection */ + assert(!ir->projector); for (mlen = 0; mlen < ir->coordinate->type->vector_elements; mlen++) { emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), coordinate)); |