mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 15:20:10 +01:00
st/mesa: add layer_offset to PBO fragment shader
This will be used to select a slice of a 3D texture. v2: fix a comment (Marek) Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
2bf6dfac8a
commit
1cb4be94ae
2 changed files with 16 additions and 4 deletions
|
|
@ -84,6 +84,7 @@ st_pbo_addresses_setup(struct st_context *st,
|
|||
addr->constants.yoffset = -addr->yoffset;
|
||||
addr->constants.stride = addr->pixels_per_row;
|
||||
addr->constants.image_size = addr->pixels_per_row * addr->image_height;
|
||||
addr->constants.layer_offset = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -371,6 +372,7 @@ create_fs(struct st_context *st, bool download, enum pipe_texture_target target)
|
|||
struct ureg_src pos;
|
||||
struct ureg_src layer;
|
||||
struct ureg_src const0;
|
||||
struct ureg_src const1;
|
||||
struct ureg_dst temp0;
|
||||
|
||||
have_layer =
|
||||
|
|
@ -408,6 +410,7 @@ create_fs(struct st_context *st, bool download, enum pipe_texture_target target)
|
|||
TGSI_INTERPOLATE_CONSTANT);
|
||||
}
|
||||
const0 = ureg_DECL_constant(ureg, 0);
|
||||
const1 = ureg_DECL_constant(ureg, 1);
|
||||
temp0 = ureg_DECL_temporary(ureg);
|
||||
|
||||
/* Note: const0 = [ -xoffset + skip_pixels, -yoffset, stride, image_height ] */
|
||||
|
|
@ -457,11 +460,19 @@ create_fs(struct st_context *st, bool download, enum pipe_texture_target target)
|
|||
ureg_MOV(ureg, ureg_writemask(temp1, TGSI_WRITEMASK_ZW), ureg_imm1u(ureg, 0));
|
||||
|
||||
if (have_layer) {
|
||||
struct ureg_dst temp1_layer =
|
||||
ureg_writemask(temp1, target == PIPE_TEXTURE_1D_ARRAY ? TGSI_WRITEMASK_Y
|
||||
: TGSI_WRITEMASK_Z);
|
||||
|
||||
/* temp1.y/z = layer */
|
||||
ureg_MOV(ureg, ureg_writemask(temp1,
|
||||
target == PIPE_TEXTURE_1D_ARRAY ? TGSI_WRITEMASK_Y
|
||||
: TGSI_WRITEMASK_Z),
|
||||
ureg_scalar(layer, TGSI_SWIZZLE_X));
|
||||
ureg_MOV(ureg, temp1_layer, ureg_scalar(layer, TGSI_SWIZZLE_X));
|
||||
|
||||
if (target == PIPE_TEXTURE_3D) {
|
||||
/* temp1.z += layer_offset */
|
||||
ureg_UADD(ureg, temp1_layer,
|
||||
ureg_scalar(ureg_src(temp1), TGSI_SWIZZLE_Z),
|
||||
ureg_scalar(const1, TGSI_SWIZZLE_X));
|
||||
}
|
||||
}
|
||||
|
||||
/* temp1 = txf(sampler, temp1) */
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ struct st_pbo_addresses {
|
|||
int32_t yoffset;
|
||||
int32_t stride;
|
||||
int32_t image_size;
|
||||
int32_t layer_offset;
|
||||
} constants;
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue