summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2010-09-30 20:09:53 -0700
committerEric Anholt <eric@anholt.net>2010-09-30 20:23:40 -0700
commit5f237a1ccb28399fbbceecea694f5d18ebba9938 (patch)
tree547e556f523846a6e59568032f75e6d5cf392952 /src
parentaae338104fa6022b8b1d6b22c7ad1115b252b9b6 (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.cpp19
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));