[Mesa-dev] [PATCH 1/2] softpipe: fix shadow 2d texture array sampling
Brian Paul
brianp at vmware.com
Mon Dec 19 06:36:52 PST 2011
On 12/19/2011 04:53 AM, Dave Airlie wrote:
> From: Dave Airlie<airlied at redhat.com>
>
> The 4th texcoord is used in this case for the comparison.
>
> This fixes piglit glsl-fs-shadow2DArray* on softpipe.
>
> Signed-off-by: Dave Airlie<airlied at redhat.com>
> ---
> src/gallium/auxiliary/tgsi/tgsi_exec.c | 11 ++++++++++-
> src/gallium/drivers/softpipe/sp_tex_sample.c | 17 ++++++++++++-----
> 2 files changed, 22 insertions(+), 6 deletions(-)
>
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c
> index a44ba80..4115e35 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
> @@ -1822,7 +1822,6 @@ exec_tex(struct tgsi_exec_machine *mach,
> break;
>
> case TGSI_TEXTURE_2D_ARRAY:
> - case TGSI_TEXTURE_SHADOW2D_ARRAY:
> FETCH(&r[0], 0, CHAN_X);
> FETCH(&r[1], 0, CHAN_Y);
> FETCH(&r[2], 0, CHAN_Z);
> @@ -1837,7 +1836,17 @@ exec_tex(struct tgsi_exec_machine *mach,
> control,
> &r[0],&r[1],&r[2],&r[3]); /* outputs */
> break;
> + case TGSI_TEXTURE_SHADOW2D_ARRAY:
> + FETCH(&r[0], 0, CHAN_X);
> + FETCH(&r[1], 0, CHAN_Y);
> + FETCH(&r[2], 0, CHAN_Z);
> + FETCH(&r[3], 0, CHAN_W);
>
> + fetch_texel(mach->Samplers[unit],
> +&r[0],&r[1],&r[2],&r[3], /* S, T, P, LOD */
> + control,
> +&r[0],&r[1],&r[2],&r[3]); /* outputs */
> + break;
> case TGSI_TEXTURE_3D:
> case TGSI_TEXTURE_CUBE:
> FETCH(&r[0], 0, CHAN_X);
> diff --git a/src/gallium/drivers/softpipe/sp_tex_sample.c b/src/gallium/drivers/softpipe/sp_tex_sample.c
> index 43f201f..8123d7b 100644
> --- a/src/gallium/drivers/softpipe/sp_tex_sample.c
> +++ b/src/gallium/drivers/softpipe/sp_tex_sample.c
> @@ -2113,15 +2113,22 @@ sample_compare(struct tgsi_sampler *tgsi_sampler,
>
> /**
> * Compare texcoord 'p' (aka R) against texture value 'rgba[0]'
> + * for 2D Array texture we need to use the 'c0' (aka Q).
> * When we sampled the depth texture, the depth value was put into all
> * RGBA channels. We look at the red channel here.
> */
>
> - pc0 = CLAMP(p[0], 0.0F, 1.0F);
> - pc1 = CLAMP(p[1], 0.0F, 1.0F);
> - pc2 = CLAMP(p[2], 0.0F, 1.0F);
> - pc3 = CLAMP(p[3], 0.0F, 1.0F);
> -
> + if (samp->view->texture->target == PIPE_TEXTURE_2D_ARRAY) {
> + pc0 = CLAMP(c0[0], 0.0F, 1.0F);
> + pc1 = CLAMP(c0[1], 0.0F, 1.0F);
> + pc2 = CLAMP(c0[2], 0.0F, 1.0F);
> + pc3 = CLAMP(c0[3], 0.0F, 1.0F);
> + } else {
> + pc0 = CLAMP(p[0], 0.0F, 1.0F);
> + pc1 = CLAMP(p[1], 0.0F, 1.0F);
> + pc2 = CLAMP(p[2], 0.0F, 1.0F);
> + pc3 = CLAMP(p[3], 0.0F, 1.0F);
> + }
> /* compare four texcoords vs. four texture samples */
> switch (sampler->compare_func) {
> case PIPE_FUNC_LESS:
Reviewed-by: Brian Paul <brianp at vmware.com>
More information about the mesa-dev
mailing list