From c31f470066b7534d6bff03674aed78bb3bf7408b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20Sch=C3=BCrmann?= Date: Wed, 3 Apr 2019 17:29:20 +0200 Subject: [PATCH] anv,nir: Move lower_input_attachments pass from ANV to NIR. Reviewed-by: Connor Abbott Reviewed-by: Bas Nieuwenhuizen --- src/compiler/Makefile.sources | 1 + src/compiler/nir/meson.build | 1 + src/compiler/nir/nir.h | 2 ++ .../nir/nir_lower_input_attachments.c} | 20 ++++++++++++------- src/intel/Makefile.sources | 1 - src/intel/vulkan/anv_nir.h | 2 -- src/intel/vulkan/anv_pipeline.c | 2 +- src/intel/vulkan/meson.build | 1 - 8 files changed, 18 insertions(+), 12 deletions(-) rename src/{intel/vulkan/anv_nir_lower_input_attachments.c => compiler/nir/nir_lower_input_attachments.c} (93%) diff --git a/src/compiler/Makefile.sources b/src/compiler/Makefile.sources index 213c04840e7..552a7d64fea 100644 --- a/src/compiler/Makefile.sources +++ b/src/compiler/Makefile.sources @@ -256,6 +256,7 @@ NIR_FILES = \ nir/nir_lower_locals_to_regs.c \ nir/nir_lower_idiv.c \ nir/nir_lower_indirect_derefs.c \ + nir/nir_lower_input_attachments.c \ nir/nir_lower_int64.c \ nir/nir_lower_interpolation.c \ nir/nir_lower_int_to_float.c \ diff --git a/src/compiler/nir/meson.build b/src/compiler/nir/meson.build index 75dbd2809d0..01ddcdf0ea0 100644 --- a/src/compiler/nir/meson.build +++ b/src/compiler/nir/meson.build @@ -134,6 +134,7 @@ files_libnir = files( 'nir_lower_locals_to_regs.c', 'nir_lower_idiv.c', 'nir_lower_indirect_derefs.c', + 'nir_lower_input_attachments.c', 'nir_lower_int64.c', 'nir_lower_interpolation.c', 'nir_lower_int_to_float.c', diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 700174ca02a..ffb6908073b 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -3494,6 +3494,8 @@ bool nir_lower_non_uniform_access(nir_shader *shader, bool nir_lower_idiv(nir_shader *shader); +bool nir_lower_input_attachments(nir_shader *shader); + bool nir_lower_clip_vs(nir_shader *shader, unsigned ucp_enables, bool use_vars); bool nir_lower_clip_fs(nir_shader *shader, unsigned ucp_enables); bool nir_lower_clip_cull_distance_arrays(nir_shader *nir); diff --git a/src/intel/vulkan/anv_nir_lower_input_attachments.c b/src/compiler/nir/nir_lower_input_attachments.c similarity index 93% rename from src/intel/vulkan/anv_nir_lower_input_attachments.c rename to src/compiler/nir/nir_lower_input_attachments.c index 9c6f9f434d7..25473eab558 100644 --- a/src/intel/vulkan/anv_nir_lower_input_attachments.c +++ b/src/compiler/nir/nir_lower_input_attachments.c @@ -21,8 +21,8 @@ * IN THE SOFTWARE. */ -#include "anv_nir.h" -#include "nir/nir_builder.h" +#include "nir.h" +#include "nir_builder.h" static nir_ssa_def * load_frag_coord(nir_builder *b) @@ -47,7 +47,7 @@ load_frag_coord(nir_builder *b) return nir_load_var(b, pos); } -static void +static bool try_lower_input_load(nir_function_impl *impl, nir_intrinsic_instr *load) { nir_deref_instr *deref = nir_src_as_deref(load->src[0]); @@ -56,7 +56,7 @@ try_lower_input_load(nir_function_impl *impl, nir_intrinsic_instr *load) enum glsl_sampler_dim image_dim = glsl_get_sampler_dim(deref->type); if (image_dim != GLSL_SAMPLER_DIM_SUBPASS && image_dim != GLSL_SAMPLER_DIM_SUBPASS_MS) - return; + return false; const bool multisampled = (image_dim == GLSL_SAMPLER_DIM_SUBPASS_MS); @@ -75,6 +75,7 @@ try_lower_input_load(nir_function_impl *impl, nir_intrinsic_instr *load) nir_tex_instr *tex = nir_tex_instr_create(b.shader, 3 + multisampled); tex->op = nir_texop_txf; + tex->sampler_dim = image_dim; switch (glsl_get_sampler_result_type(deref->type)) { case GLSL_TYPE_FLOAT: @@ -116,12 +117,15 @@ try_lower_input_load(nir_function_impl *impl, nir_intrinsic_instr *load) nir_ssa_def_rewrite_uses(&load->dest.ssa, nir_src_for_ssa(&tex->dest.ssa)); + + return true; } -void -anv_nir_lower_input_attachments(nir_shader *shader) +bool +nir_lower_input_attachments(nir_shader *shader) { assert(shader->info.stage == MESA_SHADER_FRAGMENT); + bool progress = false; nir_foreach_function(function, shader) { if (!function->impl) @@ -137,8 +141,10 @@ anv_nir_lower_input_attachments(nir_shader *shader) if (load->intrinsic != nir_intrinsic_image_deref_load) continue; - try_lower_input_load(function->impl, load); + progress |= try_lower_input_load(function->impl, load); } } } + + return progress; } diff --git a/src/intel/Makefile.sources b/src/intel/Makefile.sources index 7a44b72f449..86d900a0bac 100644 --- a/src/intel/Makefile.sources +++ b/src/intel/Makefile.sources @@ -245,7 +245,6 @@ VULKAN_FILES := \ vulkan/anv_nir.h \ vulkan/anv_nir_add_base_work_group_id.c \ vulkan/anv_nir_apply_pipeline_layout.c \ - vulkan/anv_nir_lower_input_attachments.c \ vulkan/anv_nir_lower_multiview.c \ vulkan/anv_nir_lower_push_constants.c \ vulkan/anv_nir_lower_ycbcr_textures.c \ diff --git a/src/intel/vulkan/anv_nir.h b/src/intel/vulkan/anv_nir.h index c132264b299..844e5b0bfd4 100644 --- a/src/intel/vulkan/anv_nir.h +++ b/src/intel/vulkan/anv_nir.h @@ -31,8 +31,6 @@ extern "C" { #endif -void anv_nir_lower_input_attachments(nir_shader *shader); - void anv_nir_lower_push_constants(nir_shader *shader); bool anv_nir_lower_multiview(nir_shader *shader, uint32_t view_mask); diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index ea01b2f04f9..8fa02aedfa1 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -607,7 +607,7 @@ anv_pipeline_lower_nir(struct anv_pipeline *pipeline, if (nir->info.stage == MESA_SHADER_FRAGMENT) { NIR_PASS_V(nir, nir_lower_wpos_center, pipeline->sample_shading_enable); - NIR_PASS_V(nir, anv_nir_lower_input_attachments); + NIR_PASS_V(nir, nir_lower_input_attachments); } NIR_PASS_V(nir, anv_nir_lower_ycbcr_textures, layout); diff --git a/src/intel/vulkan/meson.build b/src/intel/vulkan/meson.build index 7fe660983d9..6aa35f3ab3a 100644 --- a/src/intel/vulkan/meson.build +++ b/src/intel/vulkan/meson.build @@ -126,7 +126,6 @@ libanv_files = files( 'anv_nir.h', 'anv_nir_add_base_work_group_id.c', 'anv_nir_apply_pipeline_layout.c', - 'anv_nir_lower_input_attachments.c', 'anv_nir_lower_multiview.c', 'anv_nir_lower_push_constants.c', 'anv_nir_lower_ycbcr_textures.c', -- 2.30.2