i965/fs: Make swizzle_result() not use ir_texture.
authorConnor Abbott <connor.abbott@intel.com>
Sat, 2 Aug 2014 01:05:37 +0000 (18:05 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 16 Oct 2014 00:05:19 +0000 (17:05 -0700)
Our new IR won't have ir_texture objects.

Signed-off-by: Connor Abbott <connor.abbott@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
src/mesa/drivers/dri/i965/brw_fs.h
src/mesa/drivers/dri/i965/brw_fs_fp.cpp
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp

index 2615e407d007832cc77448b5c4bdca4a402c1959..6c99d22817b05977e02fc3ad5507c57ac8763ae2 100644 (file)
@@ -335,7 +335,8 @@ public:
    void visit(ir_end_primitive *);
 
    uint32_t gather_channel(ir_texture *ir, uint32_t sampler);
-   void swizzle_result(ir_texture *ir, fs_reg orig_val, uint32_t sampler);
+   void swizzle_result(ir_texture_opcode op, int dest_components,
+                       fs_reg orig_val, uint32_t sampler);
 
    fs_inst *emit(fs_inst *inst);
    void emit(exec_list list);
index 99cdecbbe4aa3b906cb093e13ccf11917c66acc9..825d793dc4a29e4034df728a44a07375a5c8c70b 100644 (file)
@@ -497,7 +497,7 @@ fs_visitor::emit_fragment_program_code()
          inst->shadow_compare = fpi->TexShadow;
 
          /* Reuse the GLSL swizzle_result() handler. */
-         swizzle_result(ir, dst, fpi->TexSrcUnit);
+         swizzle_result(ir->op, 4, dst, fpi->TexSrcUnit);
          dst = this->result;
 
          break;
index c16de4ddd1474f27a7eab11606ac915ae873cb68..5c0b0b93f06f01e2cee3d610708845437b22a1cc 100644 (file)
@@ -2055,7 +2055,7 @@ fs_visitor::visit(ir_texture *ir)
       emit_gen6_gather_wa(tex->gen6_gather_wa[sampler], dst);
    }
 
-   swizzle_result(ir, dst, sampler);
+   swizzle_result(ir->op, ir->type->vector_elements, dst, sampler);
 }
 
 /**
@@ -2121,9 +2121,10 @@ fs_visitor::gather_channel(ir_texture *ir, uint32_t sampler)
  * EXT_texture_swizzle as well as DEPTH_TEXTURE_MODE for shadow comparisons.
  */
 void
-fs_visitor::swizzle_result(ir_texture *ir, fs_reg orig_val, uint32_t sampler)
+fs_visitor::swizzle_result(ir_texture_opcode op, int dest_components,
+                           fs_reg orig_val, uint32_t sampler)
 {
-   if (ir->op == ir_query_levels) {
+   if (op == ir_query_levels) {
       /* # levels is in .w */
       this->result = offset(orig_val, 3);
       return;
@@ -2134,7 +2135,7 @@ fs_visitor::swizzle_result(ir_texture *ir, fs_reg orig_val, uint32_t sampler)
    /* txs,lod don't actually sample the texture, so swizzling the result
     * makes no sense.
     */
-   if (ir->op == ir_txs || ir->op == ir_lod || ir->op == ir_tg4)
+   if (op == ir_txs || op == ir_lod || op == ir_tg4)
       return;
 
    const struct brw_sampler_prog_key_data *tex =
@@ -2142,9 +2143,8 @@ fs_visitor::swizzle_result(ir_texture *ir, fs_reg orig_val, uint32_t sampler)
       &((brw_wm_prog_key*) this->key)->tex : NULL;
    assert(tex);
 
-   if (ir->type == glsl_type::float_type) {
+   if (dest_components == 1) {
       /* Ignore DEPTH_TEXTURE_MODE swizzling. */
-      assert(ir->sampler->type->sampler_shadow);
    } else if (tex->swizzles[sampler] != SWIZZLE_NOOP) {
       fs_reg swizzled_result = fs_reg(this, glsl_type::vec4_type);
       swizzled_result.type = orig_val.type;