diff options
author | Marek Olšák <marek.olsak@amd.com> | 2020-02-24 18:16:48 -0500 |
---|---|---|
committer | Dylan Baker <dylan@pnwbakers.com> | 2020-02-28 14:30:35 -0800 |
commit | 0942c4158247f16152375d180a8c2bc4f8d8d9d2 (patch) | |
tree | 38fe3c7c30af673a9e5a4c0accd446a0ed8e7e16 | |
parent | 8a9f1293b84fb4bcca2bec1eb7cdb298af488d37 (diff) |
tgsi_to_nir: set num_images and num_samplers with holes correctly
This fixes the copy_uv shader from st/omx, because it uses image 0 and 2
and image 1 isn't declared.
Cc: 20.0 <mesa-stable@lists.freedesktop.org>
Reviewed-by: Rob Clark <robdclark@gmail.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3936>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3936>
(cherry picked from commit c798aae7390f20e74b8ebb09113e806b410ac7a7)
-rw-r--r-- | .pick_status.json | 2 | ||||
-rw-r--r-- | src/gallium/auxiliary/nir/tgsi_to_nir.c | 14 |
2 files changed, 15 insertions, 1 deletions
diff --git a/.pick_status.json b/.pick_status.json index f1f8086b0b8..cfb97d06089 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1219,7 +1219,7 @@ "description": "tgsi_to_nir: set num_images and num_samplers with holes correctly", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": null }, diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c index bd59949da5c..398ac813f15 100644 --- a/src/gallium/auxiliary/nir/tgsi_to_nir.c +++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c @@ -72,6 +72,10 @@ struct ttn_compile { nir_variable *images[PIPE_MAX_SHADER_IMAGES]; nir_variable *ssbo[PIPE_MAX_SHADER_BUFFERS]; + unsigned num_samplers; + unsigned num_images; + unsigned num_msaa_images; + nir_variable *input_var_face; nir_variable *input_var_position; nir_variable *input_var_point; @@ -1325,7 +1329,9 @@ get_sampler_var(struct ttn_compile *c, int binding, "sampler"); var->data.binding = binding; var->data.explicit_binding = true; + c->samplers[binding] = var; + c->num_samplers = MAX2(c->num_samplers, binding + 1); /* Record textures used */ unsigned mask = 1 << binding; @@ -1357,7 +1363,11 @@ get_image_var(struct ttn_compile *c, int binding, var->data.explicit_binding = true; var->data.access = access; var->data.image.format = format; + c->images[binding] = var; + c->num_images = MAX2(c->num_images, binding + 1); + if (dim == GLSL_SAMPLER_DIM_MS) + c->num_msaa_images = c->num_images; } return var; @@ -2656,6 +2666,10 @@ ttn_finalize_nir(struct ttn_compile *c, struct pipe_screen *screen) nir_shader_gather_info(nir, c->build.impl); } + nir->info.num_images = c->num_images; + nir->info.num_textures = c->num_samplers; + nir->info.last_msaa_image = c->num_msaa_images - 1; + nir_validate_shader(nir, "TTN: after all optimizations"); } |