r600g: fix shadow rect samplers
authorMarek Olšák <maraeo@gmail.com>
Mon, 5 Sep 2011 06:01:24 +0000 (08:01 +0200)
committerMarek Olšák <maraeo@gmail.com>
Sat, 10 Sep 2011 06:53:29 +0000 (08:53 +0200)
src/gallium/drivers/r600/r600_shader.c

index fa8ad61ba3bd4208ae4b6c74422dc78ee16323dd..7f7f74537328d4dc6cb3cc04e22278523df0b60e 100644 (file)
@@ -2179,6 +2179,7 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
        opcode = ctx->inst_info->r600_opcode;
        if (inst->Texture.Texture == TGSI_TEXTURE_SHADOW1D ||
            inst->Texture.Texture == TGSI_TEXTURE_SHADOW2D ||
+           inst->Texture.Texture == TGSI_TEXTURE_SHADOWRECT ||
            inst->Texture.Texture == TGSI_TEXTURE_SHADOW1D_ARRAY ||
            inst->Texture.Texture == TGSI_TEXTURE_SHADOW2D_ARRAY) {
                switch (opcode) {
@@ -2228,12 +2229,13 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
                tex.src_sel_w = 1;
        }
 
-       if (inst->Texture.Texture != TGSI_TEXTURE_RECT) {
+       if (inst->Texture.Texture != TGSI_TEXTURE_RECT &&
+           inst->Texture.Texture != TGSI_TEXTURE_SHADOWRECT) {
                tex.coord_type_x = 1;
                tex.coord_type_y = 1;
-               tex.coord_type_z = 1;
-               tex.coord_type_w = 1;
        }
+       tex.coord_type_z = 1;
+       tex.coord_type_w = 1;
 
        tex.offset_x = offset_x;
        tex.offset_y = offset_y;
@@ -2244,6 +2246,7 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
         * Some instructions expect the depth in Z. */
        if ((inst->Texture.Texture == TGSI_TEXTURE_SHADOW1D ||
             inst->Texture.Texture == TGSI_TEXTURE_SHADOW2D ||
+            inst->Texture.Texture == TGSI_TEXTURE_SHADOWRECT ||
             inst->Texture.Texture == TGSI_TEXTURE_SHADOW1D_ARRAY) &&
            opcode != SQ_TEX_INST_SAMPLE_C_L &&
            opcode != SQ_TEX_INST_SAMPLE_C_LB) {