Module: Mesa Branch: staging/22.2 Commit: ab6ce72fd9b4b0dc7e3db8d806b8fa23f5269b09 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ab6ce72fd9b4b0dc7e3db8d806b8fa23f5269b09
Author: Mike Blumenkrantz <[email protected]> Date: Wed Aug 17 11:50:22 2022 -0400 st_pbo/compute: fix 1D coord dimension by pre-trimming vectors cc: mesa-stable Acked-by: Marek Olšák <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18118> (cherry picked from commit 2fa5afd639d0431b6f38da09a3f33a23220004dd) --- .pick_status.json | 2 +- src/mesa/state_tracker/st_pbo_compute.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 2147dd0023e..afb1708835c 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -13189,7 +13189,7 @@ "description": "st_pbo/compute: fix 1D coord dimension by pre-trimming vectors", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/mesa/state_tracker/st_pbo_compute.c b/src/mesa/state_tracker/st_pbo_compute.c index 16ad0fd2f29..d88b444521a 100644 --- a/src/mesa/state_tracker/st_pbo_compute.c +++ b/src/mesa/state_tracker/st_pbo_compute.c @@ -633,8 +633,13 @@ create_conversion_shader(struct st_context *st, enum pipe_texture_target target, nir_channel(&b, start, 1), nir_channel(&b, global_id, 2)); } - nir_ssa_def *max = nir_iadd(&b, nir_pad_vector_imm_int(&b, sd.offset, 0, 3), sd.range); - nir_push_if(&b, nir_ball(&b, nir_ilt(&b, coord, nir_trim_vector(&b, max, coord_components)))); + coord = nir_trim_vector(&b, coord, coord_components); + nir_ssa_def *offset = coord_components > 2 ? + nir_pad_vector_imm_int(&b, sd.offset, 0, 3) : + nir_trim_vector(&b, sd.offset, coord_components); + nir_ssa_def *range = nir_trim_vector(&b, sd.range, coord_components); + nir_ssa_def *max = nir_iadd(&b, offset, range); + nir_push_if(&b, nir_ball(&b, nir_ilt(&b, coord, max))); nir_tex_instr *txf = nir_tex_instr_create(b.shader, 3); txf->is_array = glsl_sampler_type_is_array(sampler->type); txf->op = nir_texop_txf; @@ -793,7 +798,7 @@ download_texture_compute(struct st_context *st, assert(view_target != PIPE_TEXTURE_1D_ARRAY || !zoffset); struct pbo_data pd = { .x = xoffset, - .y = view_target == PIPE_TEXTURE_1D_ARRAY ? 0 : yoffset; + .y = view_target == PIPE_TEXTURE_1D_ARRAY ? 0 : yoffset, .width = width, .height = height, .depth = depth, .invert = pack->Invert, .blocksize = util_format_get_blocksize(dst_format) - 1,
