From: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>

---
 src/amd/vulkan/radv_meta.c            | 20 +++++++++++---------
 src/amd/vulkan/radv_meta_blit.c       | 30 +++++++++++++++++++++---------
 src/amd/vulkan/radv_meta_blit2d.c     | 21 +++++++++++++--------
 src/amd/vulkan/radv_meta_bufimage.c   | 22 +++++++++++++---------
 src/amd/vulkan/radv_meta_fast_clear.c |  7 ++++---
 5 files changed, 62 insertions(+), 38 deletions(-)

diff --git a/src/amd/vulkan/radv_meta.c b/src/amd/vulkan/radv_meta.c
index 56b72d1..00a20d1 100644
--- a/src/amd/vulkan/radv_meta.c
+++ b/src/amd/vulkan/radv_meta.c
@@ -515,18 +515,20 @@ void radv_meta_build_resolve_shader_core(nir_builder *b,
        nir_ssa_def *tmp;
        nir_if *outer_if = NULL;
 
-       nir_tex_instr *tex = nir_tex_instr_create(b->shader, 2);
+       nir_ssa_def *input_img_deref = &nir_build_deref_var(b, 
input_img)->dest.ssa;
+
+       nir_tex_instr *tex = nir_tex_instr_create(b->shader, 3);
        tex->sampler_dim = GLSL_SAMPLER_DIM_MS;
        tex->op = nir_texop_txf_ms;
        tex->src[0].src_type = nir_tex_src_coord;
        tex->src[0].src = nir_src_for_ssa(img_coord);
        tex->src[1].src_type = nir_tex_src_ms_index;
        tex->src[1].src = nir_src_for_ssa(nir_imm_int(b, 0));
+       tex->src[2].src_type = nir_tex_src_texture_deref;
+       tex->src[2].src = nir_src_for_ssa(input_img_deref);
        tex->dest_type = nir_type_float;
        tex->is_array = false;
        tex->coord_components = 2;
-       tex->texture = nir_deref_var_create(tex, input_img);
-       tex->sampler = NULL;
 
        nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, "tex");
        nir_builder_instr_insert(b, &tex->instr);
@@ -534,16 +536,16 @@ void radv_meta_build_resolve_shader_core(nir_builder *b,
        tmp = &tex->dest.ssa;
 
        if (!is_integer && samples > 1) {
-               nir_tex_instr *tex_all_same = nir_tex_instr_create(b->shader, 
1);
+               nir_tex_instr *tex_all_same = nir_tex_instr_create(b->shader, 
2);
                tex_all_same->sampler_dim = GLSL_SAMPLER_DIM_MS;
                tex_all_same->op = nir_texop_samples_identical;
                tex_all_same->src[0].src_type = nir_tex_src_coord;
                tex_all_same->src[0].src = nir_src_for_ssa(img_coord);
+               tex_all_same->src[1].src_type = nir_tex_src_texture_deref;
+               tex_all_same->src[1].src = nir_src_for_ssa(input_img_deref);
                tex_all_same->dest_type = nir_type_float;
                tex_all_same->is_array = false;
                tex_all_same->coord_components = 2;
-               tex_all_same->texture = nir_deref_var_create(tex_all_same, 
input_img);
-               tex_all_same->sampler = NULL;
 
                nir_ssa_dest_init(&tex_all_same->instr, &tex_all_same->dest, 1, 
32, "tex");
                nir_builder_instr_insert(b, &tex_all_same->instr);
@@ -555,18 +557,18 @@ void radv_meta_build_resolve_shader_core(nir_builder *b,
 
                b->cursor = nir_after_cf_list(&if_stmt->then_list);
                for (int i = 1; i < samples; i++) {
-                       nir_tex_instr *tex_add = 
nir_tex_instr_create(b->shader, 2);
+                       nir_tex_instr *tex_add = 
nir_tex_instr_create(b->shader, 3);
                        tex_add->sampler_dim = GLSL_SAMPLER_DIM_MS;
                        tex_add->op = nir_texop_txf_ms;
                        tex_add->src[0].src_type = nir_tex_src_coord;
                        tex_add->src[0].src = nir_src_for_ssa(img_coord);
                        tex_add->src[1].src_type = nir_tex_src_ms_index;
                        tex_add->src[1].src = nir_src_for_ssa(nir_imm_int(b, 
i));
+                       tex_add->src[2].src_type = nir_tex_src_texture_deref;
+                       tex_add->src[2].src = nir_src_for_ssa(input_img_deref);
                        tex_add->dest_type = nir_type_float;
                        tex_add->is_array = false;
                        tex_add->coord_components = 2;
-                       tex_add->texture = nir_deref_var_create(tex_add, 
input_img);
-                       tex_add->sampler = NULL;
 
                        nir_ssa_dest_init(&tex_add->instr, &tex_add->dest, 4, 
32, "tex");
                        nir_builder_instr_insert(b, &tex_add->instr);
diff --git a/src/amd/vulkan/radv_meta_blit.c b/src/amd/vulkan/radv_meta_blit.c
index 3ff4849..a6ee0cb 100644
--- a/src/amd/vulkan/radv_meta_blit.c
+++ b/src/amd/vulkan/radv_meta_blit.c
@@ -131,16 +131,20 @@ build_nir_copy_fragment_shader(enum glsl_sampler_dim 
tex_dim)
        sampler->data.descriptor_set = 0;
        sampler->data.binding = 0;
 
-       nir_tex_instr *tex = nir_tex_instr_create(b.shader, 1);
+       nir_ssa_def *tex_deref = &nir_build_deref_var(&b, sampler)->dest.ssa;
+
+       nir_tex_instr *tex = nir_tex_instr_create(b.shader, 3);
        tex->sampler_dim = tex_dim;
        tex->op = nir_texop_tex;
        tex->src[0].src_type = nir_tex_src_coord;
        tex->src[0].src = nir_src_for_ssa(tex_pos);
+       tex->src[1].src_type = nir_tex_src_texture_deref;
+       tex->src[1].src = nir_src_for_ssa(tex_deref);
+       tex->src[2].src_type = nir_tex_src_sampler_deref;
+       tex->src[2].src = nir_src_for_ssa(tex_deref);
        tex->dest_type = nir_type_float; /* TODO */
        tex->is_array = glsl_sampler_type_is_array(sampler_type);
        tex->coord_components = tex_pos->num_components;
-       tex->texture = nir_deref_var_create(tex, sampler);
-       tex->sampler = nir_deref_var_create(tex, sampler);
 
        nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, "tex");
        nir_builder_instr_insert(&b, &tex->instr);
@@ -185,16 +189,20 @@ build_nir_copy_fragment_shader_depth(enum 
glsl_sampler_dim tex_dim)
        sampler->data.descriptor_set = 0;
        sampler->data.binding = 0;
 
-       nir_tex_instr *tex = nir_tex_instr_create(b.shader, 1);
+       nir_ssa_def *tex_deref = &nir_build_deref_var(&b, sampler)->dest.ssa;
+
+       nir_tex_instr *tex = nir_tex_instr_create(b.shader, 3);
        tex->sampler_dim = tex_dim;
        tex->op = nir_texop_tex;
        tex->src[0].src_type = nir_tex_src_coord;
        tex->src[0].src = nir_src_for_ssa(tex_pos);
+       tex->src[1].src_type = nir_tex_src_texture_deref;
+       tex->src[1].src = nir_src_for_ssa(tex_deref);
+       tex->src[2].src_type = nir_tex_src_sampler_deref;
+       tex->src[2].src = nir_src_for_ssa(tex_deref);
        tex->dest_type = nir_type_float; /* TODO */
        tex->is_array = glsl_sampler_type_is_array(sampler_type);
        tex->coord_components = tex_pos->num_components;
-       tex->texture = nir_deref_var_create(tex, sampler);
-       tex->sampler = nir_deref_var_create(tex, sampler);
 
        nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, "tex");
        nir_builder_instr_insert(&b, &tex->instr);
@@ -239,16 +247,20 @@ build_nir_copy_fragment_shader_stencil(enum 
glsl_sampler_dim tex_dim)
        sampler->data.descriptor_set = 0;
        sampler->data.binding = 0;
 
-       nir_tex_instr *tex = nir_tex_instr_create(b.shader, 1);
+       nir_ssa_def *tex_deref = &nir_build_deref_var(&b, sampler)->dest.ssa;
+
+       nir_tex_instr *tex = nir_tex_instr_create(b.shader, 3);
        tex->sampler_dim = tex_dim;
        tex->op = nir_texop_tex;
        tex->src[0].src_type = nir_tex_src_coord;
        tex->src[0].src = nir_src_for_ssa(tex_pos);
+       tex->src[1].src_type = nir_tex_src_texture_deref;
+       tex->src[1].src = nir_src_for_ssa(tex_deref);
+       tex->src[2].src_type = nir_tex_src_sampler_deref;
+       tex->src[2].src = nir_src_for_ssa(tex_deref);
        tex->dest_type = nir_type_float; /* TODO */
        tex->is_array = glsl_sampler_type_is_array(sampler_type);
        tex->coord_components = tex_pos->num_components;
-       tex->texture = nir_deref_var_create(tex, sampler);
-       tex->sampler = nir_deref_var_create(tex, sampler);
 
        nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, "tex");
        nir_builder_instr_insert(&b, &tex->instr);
diff --git a/src/amd/vulkan/radv_meta_blit2d.c 
b/src/amd/vulkan/radv_meta_blit2d.c
index 4a718c6..85e2d46 100644
--- a/src/amd/vulkan/radv_meta_blit2d.c
+++ b/src/amd/vulkan/radv_meta_blit2d.c
@@ -485,22 +485,25 @@ build_nir_texel_fetch(struct nir_builder *b, struct 
radv_device *device,
                nir_ssa_dest_init(&sample_idx->instr, &sample_idx->dest, 1, 32, 
"sample_idx");
                nir_builder_instr_insert(b, &sample_idx->instr);
        }
-       nir_tex_instr *tex = nir_tex_instr_create(b->shader, is_multisampled ? 
3 : 2);
+
+       nir_ssa_def *tex_deref = &nir_build_deref_var(b, sampler)->dest.ssa;
+
+       nir_tex_instr *tex = nir_tex_instr_create(b->shader, is_multisampled ? 
4 : 3);
        tex->sampler_dim = dim;
        tex->op = is_multisampled ? nir_texop_txf_ms : nir_texop_txf;
        tex->src[0].src_type = nir_tex_src_coord;
        tex->src[0].src = nir_src_for_ssa(is_3d ? tex_pos_3d : tex_pos);
        tex->src[1].src_type = is_multisampled ? nir_tex_src_ms_index : 
nir_tex_src_lod;
        tex->src[1].src = nir_src_for_ssa(is_multisampled ? 
&sample_idx->dest.ssa : nir_imm_int(b, 0));
+       tex->src[2].src_type = nir_tex_src_texture_deref;
+       tex->src[2].src = nir_src_for_ssa(tex_deref);
        if (is_multisampled) {
-               tex->src[2].src_type = nir_tex_src_lod;
-               tex->src[2].src = nir_src_for_ssa(nir_imm_int(b, 0));
+               tex->src[3].src_type = nir_tex_src_lod;
+               tex->src[3].src = nir_src_for_ssa(nir_imm_int(b, 0));
        }
        tex->dest_type = nir_type_uint;
        tex->is_array = false;
        tex->coord_components = is_3d ? 3 : 2;
-       tex->texture = nir_deref_var_create(tex, sampler);
-       tex->sampler = NULL;
 
        nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, "tex");
        nir_builder_instr_insert(b, &tex->instr);
@@ -534,16 +537,18 @@ build_nir_buffer_fetch(struct nir_builder *b, struct 
radv_device *device,
        pos_x = nir_iadd(b, pos_x, pos_y);
        //pos_x = nir_iadd(b, pos_x, nir_imm_int(b, 100000));
 
-       nir_tex_instr *tex = nir_tex_instr_create(b->shader, 1);
+       nir_ssa_def *tex_deref = &nir_build_deref_var(b, sampler)->dest.ssa;
+
+       nir_tex_instr *tex = nir_tex_instr_create(b->shader, 2);
        tex->sampler_dim = GLSL_SAMPLER_DIM_BUF;
        tex->op = nir_texop_txf;
        tex->src[0].src_type = nir_tex_src_coord;
        tex->src[0].src = nir_src_for_ssa(pos_x);
+       tex->src[1].src_type = nir_tex_src_texture_deref;
+       tex->src[1].src = nir_src_for_ssa(tex_deref);
        tex->dest_type = nir_type_uint;
        tex->is_array = false;
        tex->coord_components = 1;
-       tex->texture = nir_deref_var_create(tex, sampler);
-       tex->sampler = NULL;
 
        nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, "tex");
        nir_builder_instr_insert(b, &tex->instr);
diff --git a/src/amd/vulkan/radv_meta_bufimage.c 
b/src/amd/vulkan/radv_meta_bufimage.c
index 69e15d3..147d2ea 100644
--- a/src/amd/vulkan/radv_meta_bufimage.c
+++ b/src/amd/vulkan/radv_meta_bufimage.c
@@ -88,18 +88,20 @@ build_nir_itob_compute_shader(struct radv_device *dev, bool 
is_3d)
        nir_builder_instr_insert(&b, &stride->instr);
 
        nir_ssa_def *img_coord = nir_iadd(&b, global_id, &offset->dest.ssa);
-       nir_tex_instr *tex = nir_tex_instr_create(b.shader, 2);
+       nir_ssa_def *input_img_deref = &nir_build_deref_var(&b, 
input_img)->dest.ssa;
+
+       nir_tex_instr *tex = nir_tex_instr_create(b.shader, 3);
        tex->sampler_dim = dim;
        tex->op = nir_texop_txf;
        tex->src[0].src_type = nir_tex_src_coord;
        tex->src[0].src = nir_src_for_ssa(nir_channels(&b, img_coord, is_3d ? 
0x7 : 0x3));
        tex->src[1].src_type = nir_tex_src_lod;
        tex->src[1].src = nir_src_for_ssa(nir_imm_int(&b, 0));
+       tex->src[2].src_type = nir_tex_src_texture_deref;
+       tex->src[2].src = nir_src_for_ssa(input_img_deref);
        tex->dest_type = nir_type_float;
        tex->is_array = false;
        tex->coord_components = is_3d ? 3 : 2;
-       tex->texture = nir_deref_var_create(tex, input_img);
-       tex->sampler = NULL;
 
        nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, "tex");
        nir_builder_instr_insert(&b, &tex->instr);
@@ -320,19 +322,20 @@ build_nir_btoi_compute_shader(struct radv_device *dev, 
bool is_3d)
        nir_ssa_def *buf_coord = nir_vec4(&b, tmp, tmp, tmp, tmp);
 
        nir_ssa_def *img_coord = nir_iadd(&b, global_id, &offset->dest.ssa);
+       nir_ssa_def *input_img_deref = &nir_build_deref_var(&b, 
input_img)->dest.ssa;
 
-       nir_tex_instr *tex = nir_tex_instr_create(b.shader, 2);
+       nir_tex_instr *tex = nir_tex_instr_create(b.shader, 3);
        tex->sampler_dim = GLSL_SAMPLER_DIM_BUF;
        tex->op = nir_texop_txf;
        tex->src[0].src_type = nir_tex_src_coord;
        tex->src[0].src = nir_src_for_ssa(nir_channels(&b, buf_coord, 1));
        tex->src[1].src_type = nir_tex_src_lod;
        tex->src[1].src = nir_src_for_ssa(nir_imm_int(&b, 0));
+       tex->src[2].src_type = nir_tex_src_texture_deref;
+       tex->src[2].src = nir_src_for_ssa(input_img_deref);
        tex->dest_type = nir_type_float;
        tex->is_array = false;
        tex->coord_components = 1;
-       tex->texture = nir_deref_var_create(tex, input_img);
-       tex->sampler = NULL;
 
        nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, "tex");
        nir_builder_instr_insert(&b, &tex->instr);
@@ -532,21 +535,22 @@ build_nir_itoi_compute_shader(struct radv_device *dev, 
bool is_3d)
        nir_builder_instr_insert(&b, &dst_offset->instr);
 
        nir_ssa_def *src_coord = nir_iadd(&b, global_id, &src_offset->dest.ssa);
+       nir_ssa_def *input_img_deref = &nir_build_deref_var(&b, 
input_img)->dest.ssa;
 
        nir_ssa_def *dst_coord = nir_iadd(&b, global_id, &dst_offset->dest.ssa);
 
-       nir_tex_instr *tex = nir_tex_instr_create(b.shader, 2);
+       nir_tex_instr *tex = nir_tex_instr_create(b.shader, 3);
        tex->sampler_dim = dim;
        tex->op = nir_texop_txf;
        tex->src[0].src_type = nir_tex_src_coord;
        tex->src[0].src = nir_src_for_ssa(nir_channels(&b, src_coord, is_3d ? 
0x7 : 0x3));
        tex->src[1].src_type = nir_tex_src_lod;
        tex->src[1].src = nir_src_for_ssa(nir_imm_int(&b, 0));
+       tex->src[2].src_type = nir_tex_src_texture_deref;
+       tex->src[2].src = nir_src_for_ssa(input_img_deref);
        tex->dest_type = nir_type_float;
        tex->is_array = false;
        tex->coord_components = is_3d ? 3 : 2;
-       tex->texture = nir_deref_var_create(tex, input_img);
-       tex->sampler = NULL;
 
        nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, "tex");
        nir_builder_instr_insert(&b, &tex->instr);
diff --git a/src/amd/vulkan/radv_meta_fast_clear.c 
b/src/amd/vulkan/radv_meta_fast_clear.c
index d5af7a1..411d02f 100644
--- a/src/amd/vulkan/radv_meta_fast_clear.c
+++ b/src/amd/vulkan/radv_meta_fast_clear.c
@@ -66,19 +66,20 @@ build_dcc_decompress_compute_shader(struct radv_device *dev)
                                                
b.shader->info.cs.local_size[2], 0);
 
        nir_ssa_def *global_id = nir_iadd(&b, nir_imul(&b, wg_id, block_size), 
invoc_id);
+       nir_ssa_def *input_img_deref = &nir_build_deref_var(&b, 
input_img)->dest.ssa;
 
-       nir_tex_instr *tex = nir_tex_instr_create(b.shader, 2);
+       nir_tex_instr *tex = nir_tex_instr_create(b.shader, 3);
        tex->sampler_dim = GLSL_SAMPLER_DIM_2D;
        tex->op = nir_texop_txf;
        tex->src[0].src_type = nir_tex_src_coord;
        tex->src[0].src = nir_src_for_ssa(nir_channels(&b, global_id, 3));
        tex->src[1].src_type = nir_tex_src_lod;
        tex->src[1].src = nir_src_for_ssa(nir_imm_int(&b, 0));
+       tex->src[2].src_type = nir_tex_src_texture_deref;
+       tex->src[2].src = nir_src_for_ssa(input_img_deref);
        tex->dest_type = nir_type_float;
        tex->is_array = false;
        tex->coord_components = 2;
-       tex->texture = nir_deref_var_create(tex, input_img);
-       tex->sampler = NULL;
 
        nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, "tex");
        nir_builder_instr_insert(&b, &tex->instr);
-- 
2.5.0.400.gff86faf

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to