nir/tex_instr: Rename the indirect source type and add an array size
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 5 Dec 2014 22:46:24 +0000 (14:46 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 15 Jan 2015 15:20:21 +0000 (07:20 -0800)
In particular, we rename nir_tex_src_sampler_index to _sampler_offset and
add a sampler_array_size field to nir_tex_instr.  This way we can pass the
size of sampler arrays through to backends even after removing the variable
information and, with it, the type.

Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
src/glsl/nir/nir.c
src/glsl/nir/nir.h
src/glsl/nir/nir_print.c
src/mesa/drivers/dri/i965/brw_fs_nir.cpp

index e9035d449c3fbbc09084c7cc3e259792def52357..b15440b0855b28adaff6bf775b0ed54b17026411 100644 (file)
@@ -467,6 +467,10 @@ nir_tex_instr_create(void *mem_ctx, unsigned num_srcs)
    instr->has_predicate = false;
    src_init(&instr->predicate);
 
+   instr->sampler_index = 0;
+   instr->sampler_array_size = 0;
+   instr->sampler = NULL;
+
    return instr;
 }
 
index ecd174a88ad2c5c906e6a74efea0ffaa9c3374ea..fe1f9a8682ead3e34a0dfcfd0acbca15511ce757 100644 (file)
@@ -793,7 +793,7 @@ typedef enum {
    nir_tex_src_ms_index, /* MSAA sample index */
    nir_tex_src_ddx,
    nir_tex_src_ddy,
-   nir_tex_src_sampler_index, /* < dynamically uniform indirect index */
+   nir_tex_src_sampler_offset, /* < dynamically uniform indirect offset */
    nir_num_texinput_types
 } nir_texinput_type;
 
@@ -838,7 +838,16 @@ typedef struct {
    /* gather component selector */
    unsigned component : 2;
 
+   /** The sampler index
+    *
+    * If this texture instruction has a nir_tex_src_sampler_offset source,
+    * then the sampler index is given by sampler_index + sampler_offset.
+    */
    unsigned sampler_index;
+
+   /** The size of the sampler array or 0 if it's not an array */
+   unsigned sampler_array_size;
+
    nir_deref_var *sampler; /* if this is NULL, use sampler_index instead */
 } nir_tex_instr;
 
index 68d0b6d111743bdcbf624c09029299d8e3bdb87e..22a2a1d65573cdd27ee6312b09adcb6eab90e19a 100644 (file)
@@ -464,8 +464,8 @@ print_tex_instr(nir_tex_instr *instr, print_var_state *state, FILE *fp)
       case nir_tex_src_ddy:
          fprintf(fp, "(ddy)");
          break;
-      case nir_tex_src_sampler_index:
-         fprintf(fp, "(sampler_index)");
+      case nir_tex_src_sampler_offset:
+         fprintf(fp, "(sampler_offset)");
          break;
 
       default:
index a53607546482c0034e6fa90df5e07974450b4333..1fe9fefe5260e6e207938aa2ff1a2a38605e1172 100644 (file)
@@ -1662,7 +1662,7 @@ fs_visitor::nir_emit_texture(nir_tex_instr *instr)
          break;
       case nir_tex_src_projector:
          unreachable("should be lowered");
-      case nir_tex_src_sampler_index:
+      case nir_tex_src_sampler_offset:
          unreachable("not yet supported");
       default:
          unreachable("unknown texture source");