st/mesa: use uint-samplers for sampling stencil buffers
authorErik Faye-Lund <erik.faye-lund@collabora.com>
Fri, 3 Jan 2020 23:13:07 +0000 (00:13 +0100)
committerErik Faye-Lund <erik.faye-lund@collabora.com>
Mon, 6 Jan 2020 08:23:43 +0000 (09:23 +0100)
Otherwise, we end up mismatching the sampler types when rendering.

Signed-off-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/state_tracker/st_cb_drawpixels.c

index a220c841597ae794293d33259b4ba67f663ea122..55228e3b64d25bd7977ac19b3e3f194da6417dbd 100644 (file)
 
 static nir_ssa_def *
 sample_via_nir(nir_builder *b, nir_variable *texcoord,
-               const char *name, int sampler)
+               const char *name, int sampler, enum glsl_base_type base_type)
 {
    const struct glsl_type *sampler2D =
-      glsl_sampler_type(GLSL_SAMPLER_DIM_2D, false, false, GLSL_TYPE_FLOAT);
+      glsl_sampler_type(GLSL_SAMPLER_DIM_2D, false, false, base_type);
 
    nir_variable *var =
       nir_variable_create(b->shader, nir_var_uniform, sampler2D, name);
@@ -163,7 +163,8 @@ make_drawpix_z_stencil_program_nir(struct st_context *st,
          nir_variable_create(b.shader, nir_var_shader_out, glsl_float_type(),
                              "gl_FragDepth");
       out->data.location = FRAG_RESULT_DEPTH;
-      nir_ssa_def *depth = sample_via_nir(&b, texcoord, "depth", 0);
+      nir_ssa_def *depth = sample_via_nir(&b, texcoord, "depth", 0,
+                                          GLSL_TYPE_FLOAT);
       nir_store_var(&b, out, depth, 0x1);
 
       /* Also copy color */
@@ -184,7 +185,8 @@ make_drawpix_z_stencil_program_nir(struct st_context *st,
          nir_variable_create(b.shader, nir_var_shader_out, glsl_uint_type(),
                              "gl_FragStencilRefARB");
       out->data.location = FRAG_RESULT_STENCIL;
-      nir_ssa_def *stencil = sample_via_nir(&b, texcoord, "stencil", 1);
+      nir_ssa_def *stencil = sample_via_nir(&b, texcoord, "stencil", 1,
+                                            GLSL_TYPE_UINT);
       nir_store_var(&b, out, stencil, 0x1);
    }