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,

Reply via email to