OSDN Git Service

intel,nir: Lower TXD with a bindless sampler
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 8 Feb 2019 23:56:52 +0000 (17:56 -0600)
committerJason Ekstrand <jason@jlekstrand.net>
Fri, 19 Apr 2019 19:56:42 +0000 (19:56 +0000)
When we have a bindless sampler, we need an instruction header.  Even in
SIMD8, this pushes the instruction over the sampler message size maximum
of 11 registers.  Instead, we have to lower TXD to TXL.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
src/compiler/nir/nir.h
src/compiler/nir/nir_lower_tex.c
src/intel/compiler/brw_nir.c

index 9d210ac..20f4db0 100644 (file)
@@ -3284,6 +3284,12 @@ typedef struct nir_lower_tex_options {
 
    /**
     * If true, lower nir_texop_txd with min_lod to a nir_texop_txl if the
+    * sampler is bindless.
+    */
+   bool lower_txd_clamp_bindless_sampler;
+
+   /**
+    * If true, lower nir_texop_txd with min_lod to a nir_texop_txl if the
     * sampler index is not statically determinable to be less than 16.
     */
    bool lower_txd_clamp_if_sampler_index_not_lt_16;
index 8a37ec9..c5762b8 100644 (file)
@@ -1100,6 +1100,8 @@ nir_lower_tex_block(nir_block *block, nir_builder *b,
            (options->lower_txd_shadow && tex->is_shadow) ||
            (options->lower_txd_shadow_clamp && tex->is_shadow && has_min_lod) ||
            (options->lower_txd_offset_clamp && has_offset && has_min_lod) ||
+           (options->lower_txd_clamp_bindless_sampler && has_min_lod &&
+            nir_tex_instr_src_index(tex, nir_tex_src_sampler_handle) != -1) ||
            (options->lower_txd_clamp_if_sampler_index_not_lt_16 &&
             has_min_lod && !sampler_index_lt(tex, 16)) ||
            (options->lower_txd_cube_map &&
index 4aa7905..e0a393f 100644 (file)
@@ -949,6 +949,7 @@ brw_nir_apply_sampler_key(nir_shader *nir,
 {
    const struct gen_device_info *devinfo = compiler->devinfo;
    nir_lower_tex_options tex_options = {
+      .lower_txd_clamp_bindless_sampler = true,
       .lower_txd_clamp_if_sampler_index_not_lt_16 = true,
    };