nir/lower_tex: generalize get_texture_size()
authorIago Toral Quiroga <itoral@igalia.com>
Wed, 30 Nov 2016 11:42:54 +0000 (12:42 +0100)
committerIago Toral Quiroga <itoral@igalia.com>
Tue, 13 Dec 2016 09:31:38 +0000 (10:31 +0100)
This was written specifically for RECT samplers. Make it more generic so
we can call this from the gradient lowerings too.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/compiler/nir/nir_lower_tex.c

index 39f7af7c5822f3fc21156a5e2eb4c10ff6798442..08cb6681acec3744e396371154efe54aa7eba292 100644 (file)
@@ -154,22 +154,27 @@ get_texture_size(nir_builder *b, nir_tex_instr *tex)
 {
    b->cursor = nir_before_instr(&tex->instr);
 
-   /* RECT textures should not be array: */
-   assert(!tex->is_array);
-
    nir_tex_instr *txs;
 
    txs = nir_tex_instr_create(b->shader, 1);
    txs->op = nir_texop_txs;
-   txs->sampler_dim = GLSL_SAMPLER_DIM_RECT;
+   txs->sampler_dim = tex->sampler_dim;
+   txs->is_array = tex->is_array;
+   txs->is_shadow = tex->is_shadow;
+   txs->is_new_style_shadow = tex->is_new_style_shadow;
    txs->texture_index = tex->texture_index;
+   txs->texture = (nir_deref_var *)
+      nir_copy_deref(txs, &tex->texture->deref);
+   txs->sampler_index = tex->sampler_index;
+   txs->sampler = (nir_deref_var *)
+      nir_copy_deref(txs, &tex->sampler->deref);
    txs->dest_type = nir_type_int;
 
    /* only single src, the lod: */
    txs->src[0].src = nir_src_for_ssa(nir_imm_int(b, 0));
    txs->src[0].src_type = nir_tex_src_lod;
 
-   nir_ssa_dest_init(&txs->instr, &txs->dest, 2, 32, NULL);
+   nir_ssa_dest_init(&txs->instr, &txs->dest, tex->coord_components, 32, NULL);
    nir_builder_instr_insert(b, &txs->instr);
 
    return nir_i2f(b, &txs->dest.ssa);