On Wed, May 18, 2016 at 5:25 PM, Nicolai Hähnle <nhaeh...@gmail.com> wrote: > From: Nicolai Hähnle <nicolai.haeh...@amd.com> > > This will be used to select a slice of a 3D texture. > --- > src/mesa/state_tracker/st_pbo.c | 19 +++++++++++++++---- > src/mesa/state_tracker/st_pbo.h | 1 + > 2 files changed, 16 insertions(+), 4 deletions(-) > > diff --git a/src/mesa/state_tracker/st_pbo.c b/src/mesa/state_tracker/st_pbo.c > index c7735f7..31a0c19 100644 > --- a/src/mesa/state_tracker/st_pbo.c > +++ b/src/mesa/state_tracker/st_pbo.c > @@ -83,6 +83,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; > } > @@ -370,6 +371,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 = > @@ -407,6 +409,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 ] */ > @@ -456,11 +459,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.y/z += layer_offset */
Y isn't written to here, so: /* temp1.z += layer_offset */ Marek _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev