i965/fs: Rudimentary support for non-floating point texture results.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 18 Aug 2011 07:18:15 +0000 (00:18 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Tue, 23 Aug 2011 18:18:08 +0000 (11:18 -0700)
Not all texturing operations return floating point data.  For example,
the resinfo message (textureSize or TXS) returns integer data.  In the
future, we'll also add integer texture support.

ir_texture's type field contains this information; use its base type to
appropriately type the destination register.  We want to keep it as a
four component vector, however, since SIMD8 samplers always have a
response length of 4.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp

index 764351a34f999a69c9c1f37af109cffaf6b28d82..792799d9063c3cf44bbf929d9009bc7cb6279e5f 100644 (file)
@@ -1075,7 +1075,7 @@ fs_visitor::visit(ir_texture *ir)
    /* Writemasking doesn't eliminate channels on SIMD8 texture
     * samples, so don't worry about them.
     */
-   fs_reg dst = fs_reg(this, glsl_type::vec4_type);
+   fs_reg dst = fs_reg(this, glsl_type::get_instance(ir->type->base_type, 4, 1));
 
    if (intel->gen >= 7) {
       inst = emit_texture_gen7(ir, dst, coordinate, sampler);