Check texture format in get_texel() to handle depth textures.
authorBrian <brian.paul@tungstengraphics.com>
Sat, 13 Oct 2007 17:11:11 +0000 (11:11 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Sat, 13 Oct 2007 17:11:11 +0000 (11:11 -0600)
src/mesa/pipe/softpipe/sp_tex_sample.c

index b89adf84805b017af3d9c407961cdcf24bec109c..aab26f0b0e80327fb58887324a84b76103edc76c 100644 (file)
@@ -606,10 +606,23 @@ get_texel(struct tgsi_sampler *sampler,
    /* get the texel from cache entry */
    tx = x % TEX_CACHE_TILE_SIZE;
    ty = y % TEX_CACHE_TILE_SIZE;
-   rgba[0][j] = sampler->cache[entry].data[ty][tx][0];
-   rgba[1][j] = sampler->cache[entry].data[ty][tx][1];
-   rgba[2][j] = sampler->cache[entry].data[ty][tx][2];
-   rgba[3][j] = sampler->cache[entry].data[ty][tx][3];
+   if (sampler->texture->format == PIPE_FORMAT_U_Z16 ||
+       sampler->texture->format == PIPE_FORMAT_U_Z32 ||
+       sampler->texture->format == PIPE_FORMAT_S8_Z24) {
+      /* get_tile() returned one float per texel */
+      float *src = (float *) sampler->cache[entry].data;
+      rgba[0][j] =
+      rgba[1][j] =
+      rgba[2][j] =
+      rgba[3][j] = src[ty * TEX_CACHE_TILE_SIZE + tx];
+   }
+   else {
+      /* get_tile() returned four floats per texel */
+      rgba[0][j] = sampler->cache[entry].data[ty][tx][0];
+      rgba[1][j] = sampler->cache[entry].data[ty][tx][1];
+      rgba[2][j] = sampler->cache[entry].data[ty][tx][2];
+      rgba[3][j] = sampler->cache[entry].data[ty][tx][3];
+   }
 }