nir: Create sampler2D variables in nir_lower_{bitmap,drawpixels}.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 24 Aug 2018 08:34:30 +0000 (01:34 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 15 Oct 2018 06:35:35 +0000 (23:35 -0700)
This is needed for nir_gather_info to actually count the new textures,
since it operates solely on variables.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Dave Airlie <airlied@redhat.com>
src/compiler/nir/nir_lower_bitmap.c
src/compiler/nir/nir_lower_drawpixels.c

index a4d9498576c87c7ab3f935088e2bd422d0c0f25f..03eb627312916192835f258d5bd91e943ffc7ac4 100644 (file)
@@ -88,6 +88,13 @@ lower_bitmap(nir_shader *shader, nir_builder *b,
 
    texcoord = nir_load_var(b, get_texcoord(shader));
 
+   const struct glsl_type *sampler2D =
+      glsl_sampler_type(GLSL_SAMPLER_DIM_2D, false, false, GLSL_TYPE_FLOAT);
+
+   nir_variable *tex_var =
+      nir_variable_create(shader, nir_var_uniform, sampler2D, "bitmap_tex");
+   tex_var->data.binding = options->sampler;
+
    tex = nir_tex_instr_create(shader, 1);
    tex->op = nir_texop_tex;
    tex->sampler_dim = GLSL_SAMPLER_DIM_2D;
index 462b9c308b2649bd301d0728f624e4acb0ea3972..99eb646b245e3768b105e1c1d458a3f0bc1a9270 100644 (file)
@@ -35,7 +35,7 @@ typedef struct {
    const nir_lower_drawpixels_options *options;
    nir_shader   *shader;
    nir_builder   b;
-   nir_variable *texcoord, *scale, *bias;
+   nir_variable *texcoord, *scale, *bias, *tex, *pixelmap;
 } lower_drawpixels_state;
 
 static nir_ssa_def *
@@ -125,6 +125,15 @@ lower_color(lower_drawpixels_state *state, nir_intrinsic_instr *intr)
 
    texcoord = get_texcoord(state);
 
+   const struct glsl_type *sampler2D =
+      glsl_sampler_type(GLSL_SAMPLER_DIM_2D, false, false, GLSL_TYPE_FLOAT);
+
+   if (!state->tex) {
+      state->tex =
+         nir_variable_create(b->shader, nir_var_uniform, sampler2D, "drawpix");
+      state->tex->data.binding = state->options->drawpix_sampler;
+   }
+
    /* replace load_var(gl_Color) w/ texture sample:
     *   TEX def, texcoord, drawpix_sampler, 2D
     */
@@ -151,6 +160,12 @@ lower_color(lower_drawpixels_state *state, nir_intrinsic_instr *intr)
    }
 
    if (state->options->pixel_maps) {
+      if (!state->pixelmap) {
+         state->pixelmap = nir_variable_create(b->shader, nir_var_uniform,
+                                               sampler2D, "pixelmap");
+         state->pixelmap->data.binding = state->options->pixelmap_sampler;
+      }
+
       /* do four pixel map look-ups with two TEX instructions: */
       nir_ssa_def *def_xy, *def_zw;