[Mesa-dev] [PATCH 1/3] radeonsi: Refactor packing of texture coordinates
Christian König
deathsimple at vodafone.de
Fri Feb 22 08:18:15 PST 2013
Am 22.02.2013 17:02, schrieb Michel Dänzer:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> The number of coordinates to pack will be useful for other address parameters
> as well.
>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
Very nice, for this series:
Reviewed-by: Christian König <christian.koenig at amd.com>
> ---
> src/gallium/drivers/radeonsi/radeonsi_shader.c | 54 +++++++++++++++-----------
> 1 file changed, 32 insertions(+), 22 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/radeonsi_shader.c b/src/gallium/drivers/radeonsi/radeonsi_shader.c
> index 7922928..b5925b5 100644
> --- a/src/gallium/drivers/radeonsi/radeonsi_shader.c
> +++ b/src/gallium/drivers/radeonsi/radeonsi_shader.c
> @@ -830,6 +830,7 @@ static void tex_fetch_args(
> LLVMValueRef offset;
> LLVMValueRef coords[4];
> LLVMValueRef address[16];
> + unsigned num_coords;
> unsigned count = 0;
> unsigned chan;
>
> @@ -837,6 +838,35 @@ static void tex_fetch_args(
> /* XXX: should be optimized using emit_data->inst->Dst[0].Register.WriteMask*/
> emit_data->args[0] = lp_build_const_int32(bld_base->base.gallivm, 0xf);
>
> + switch (target) {
> + case TGSI_TEXTURE_1D:
> + case TGSI_TEXTURE_1D_ARRAY:
> + case TGSI_TEXTURE_SHADOW1D:
> + case TGSI_TEXTURE_SHADOW1D_ARRAY:
> + num_coords = 1;
> + break;
> + case TGSI_TEXTURE_2D:
> + case TGSI_TEXTURE_2D_ARRAY:
> + case TGSI_TEXTURE_2D_ARRAY_MSAA:
> + case TGSI_TEXTURE_2D_MSAA:
> + case TGSI_TEXTURE_RECT:
> + case TGSI_TEXTURE_SHADOW2D:
> + case TGSI_TEXTURE_SHADOW2D_ARRAY:
> + case TGSI_TEXTURE_SHADOWRECT:
> + num_coords = 2;
> + break;
> + case TGSI_TEXTURE_3D:
> + case TGSI_TEXTURE_CUBE:
> + case TGSI_TEXTURE_CUBE_ARRAY:
> + case TGSI_TEXTURE_SHADOWCUBE:
> + case TGSI_TEXTURE_SHADOWCUBE_ARRAY:
> + num_coords = 3;
> + break;
> + default:
> + assert(!"Unknown texture target");
> + num_coords = 0;
> + }
> +
> /* Fetch and project texture coordinates */
> coords[3] = lp_build_emit_fetch(bld_base, emit_data->inst, 0, TGSI_CHAN_W);
> for (chan = 0; chan < 3; chan++ ) {
> @@ -879,30 +909,10 @@ static void tex_fetch_args(
>
> /* Pack texture coordinates */
> address[count++] = coords[0];
> - switch (target) {
> - case TGSI_TEXTURE_2D:
> - case TGSI_TEXTURE_2D_ARRAY:
> - case TGSI_TEXTURE_3D:
> - case TGSI_TEXTURE_CUBE:
> - case TGSI_TEXTURE_RECT:
> - case TGSI_TEXTURE_SHADOW2D:
> - case TGSI_TEXTURE_SHADOWRECT:
> - case TGSI_TEXTURE_SHADOW2D_ARRAY:
> - case TGSI_TEXTURE_SHADOWCUBE:
> - case TGSI_TEXTURE_2D_MSAA:
> - case TGSI_TEXTURE_2D_ARRAY_MSAA:
> - case TGSI_TEXTURE_CUBE_ARRAY:
> - case TGSI_TEXTURE_SHADOWCUBE_ARRAY:
> + if (num_coords > 1)
> address[count++] = coords[1];
> - }
> - switch (target) {
> - case TGSI_TEXTURE_3D:
> - case TGSI_TEXTURE_CUBE:
> - case TGSI_TEXTURE_SHADOWCUBE:
> - case TGSI_TEXTURE_CUBE_ARRAY:
> - case TGSI_TEXTURE_SHADOWCUBE_ARRAY:
> + if (num_coords > 2)
> address[count++] = coords[2];
> - }
>
> /* Pack array slice */
> switch (target) {
More information about the mesa-dev
mailing list