zink: support sampling non-float textures
authorErik Faye-Lund <erik.faye-lund@collabora.com>
Fri, 3 Jan 2020 11:42:02 +0000 (12:42 +0100)
committerMarge Bot <eric+marge@anholt.net>
Sat, 18 Jan 2020 10:45:38 +0000 (10:45 +0000)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3275>

src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c

index 3c0f226028833c03e8d1381dddbb350190fba35b..922ed8c81f558c7b28dcff3cc632a8b9300f28ce 100644 (file)
@@ -388,10 +388,13 @@ emit_sampler(struct ntv_context *ctx, struct nir_variable *var)
 {
    bool is_ms;
    SpvDim dimension = type_to_dim(glsl_get_sampler_dim(var->type), &is_ms);
-   SpvId float_type = spirv_builder_type_float(&ctx->builder, 32);
-   SpvId image_type = spirv_builder_type_image(&ctx->builder, float_type,
-                            dimension, false, glsl_sampler_type_is_array(var->type), is_ms, 1,
-                            SpvImageFormatUnknown);
+
+   SpvId result_type = get_glsl_basetype(ctx, glsl_get_sampler_result_type(var->type));
+   SpvId image_type = spirv_builder_type_image(&ctx->builder, result_type,
+                                               dimension, false,
+                                               glsl_sampler_type_is_array(var->type),
+                                               is_ms, 1,
+                                               SpvImageFormatUnknown);
 
    SpvId sampled_type = spirv_builder_type_sampled_image(&ctx->builder,
                                                          image_type);
@@ -1372,8 +1375,6 @@ emit_tex(struct ntv_context *ctx, nir_tex_instr *tex)
           tex->op == nir_texop_txd ||
           tex->op == nir_texop_txf ||
           tex->op == nir_texop_txs);
-   assert(tex->op == nir_texop_txs ||
-          nir_alu_type_get_base_type(tex->dest_type) == nir_type_float);
    assert(tex->texture_index == tex->sampler_index);
 
    SpvId coord = 0, proj = 0, bias = 0, lod = 0, dref = 0, dx = 0, dy = 0,