anv,nir: Move lower_input_attachments pass from ANV to NIR.
Reviewed-by: Connor Abbott <cwabbott0@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:

committed by
Connor Abbott

parent
1d327689f9
commit
c31f470066
@@ -256,6 +256,7 @@ NIR_FILES = \
|
|||||||
nir/nir_lower_locals_to_regs.c \
|
nir/nir_lower_locals_to_regs.c \
|
||||||
nir/nir_lower_idiv.c \
|
nir/nir_lower_idiv.c \
|
||||||
nir/nir_lower_indirect_derefs.c \
|
nir/nir_lower_indirect_derefs.c \
|
||||||
|
nir/nir_lower_input_attachments.c \
|
||||||
nir/nir_lower_int64.c \
|
nir/nir_lower_int64.c \
|
||||||
nir/nir_lower_interpolation.c \
|
nir/nir_lower_interpolation.c \
|
||||||
nir/nir_lower_int_to_float.c \
|
nir/nir_lower_int_to_float.c \
|
||||||
|
@@ -134,6 +134,7 @@ files_libnir = files(
|
|||||||
'nir_lower_locals_to_regs.c',
|
'nir_lower_locals_to_regs.c',
|
||||||
'nir_lower_idiv.c',
|
'nir_lower_idiv.c',
|
||||||
'nir_lower_indirect_derefs.c',
|
'nir_lower_indirect_derefs.c',
|
||||||
|
'nir_lower_input_attachments.c',
|
||||||
'nir_lower_int64.c',
|
'nir_lower_int64.c',
|
||||||
'nir_lower_interpolation.c',
|
'nir_lower_interpolation.c',
|
||||||
'nir_lower_int_to_float.c',
|
'nir_lower_int_to_float.c',
|
||||||
|
@@ -3494,6 +3494,8 @@ bool nir_lower_non_uniform_access(nir_shader *shader,
|
|||||||
|
|
||||||
bool nir_lower_idiv(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_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_fs(nir_shader *shader, unsigned ucp_enables);
|
||||||
bool nir_lower_clip_cull_distance_arrays(nir_shader *nir);
|
bool nir_lower_clip_cull_distance_arrays(nir_shader *nir);
|
||||||
|
@@ -21,8 +21,8 @@
|
|||||||
* IN THE SOFTWARE.
|
* IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "anv_nir.h"
|
#include "nir.h"
|
||||||
#include "nir/nir_builder.h"
|
#include "nir_builder.h"
|
||||||
|
|
||||||
static nir_ssa_def *
|
static nir_ssa_def *
|
||||||
load_frag_coord(nir_builder *b)
|
load_frag_coord(nir_builder *b)
|
||||||
@@ -47,7 +47,7 @@ load_frag_coord(nir_builder *b)
|
|||||||
return nir_load_var(b, pos);
|
return nir_load_var(b, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static bool
|
||||||
try_lower_input_load(nir_function_impl *impl, nir_intrinsic_instr *load)
|
try_lower_input_load(nir_function_impl *impl, nir_intrinsic_instr *load)
|
||||||
{
|
{
|
||||||
nir_deref_instr *deref = nir_src_as_deref(load->src[0]);
|
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);
|
enum glsl_sampler_dim image_dim = glsl_get_sampler_dim(deref->type);
|
||||||
if (image_dim != GLSL_SAMPLER_DIM_SUBPASS &&
|
if (image_dim != GLSL_SAMPLER_DIM_SUBPASS &&
|
||||||
image_dim != GLSL_SAMPLER_DIM_SUBPASS_MS)
|
image_dim != GLSL_SAMPLER_DIM_SUBPASS_MS)
|
||||||
return;
|
return false;
|
||||||
|
|
||||||
const bool multisampled = (image_dim == GLSL_SAMPLER_DIM_SUBPASS_MS);
|
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);
|
nir_tex_instr *tex = nir_tex_instr_create(b.shader, 3 + multisampled);
|
||||||
|
|
||||||
tex->op = nir_texop_txf;
|
tex->op = nir_texop_txf;
|
||||||
|
tex->sampler_dim = image_dim;
|
||||||
|
|
||||||
switch (glsl_get_sampler_result_type(deref->type)) {
|
switch (glsl_get_sampler_result_type(deref->type)) {
|
||||||
case GLSL_TYPE_FLOAT:
|
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_ssa_def_rewrite_uses(&load->dest.ssa,
|
||||||
nir_src_for_ssa(&tex->dest.ssa));
|
nir_src_for_ssa(&tex->dest.ssa));
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
bool
|
||||||
anv_nir_lower_input_attachments(nir_shader *shader)
|
nir_lower_input_attachments(nir_shader *shader)
|
||||||
{
|
{
|
||||||
assert(shader->info.stage == MESA_SHADER_FRAGMENT);
|
assert(shader->info.stage == MESA_SHADER_FRAGMENT);
|
||||||
|
bool progress = false;
|
||||||
|
|
||||||
nir_foreach_function(function, shader) {
|
nir_foreach_function(function, shader) {
|
||||||
if (!function->impl)
|
if (!function->impl)
|
||||||
@@ -137,8 +141,10 @@ anv_nir_lower_input_attachments(nir_shader *shader)
|
|||||||
if (load->intrinsic != nir_intrinsic_image_deref_load)
|
if (load->intrinsic != nir_intrinsic_image_deref_load)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
try_lower_input_load(function->impl, load);
|
progress |= try_lower_input_load(function->impl, load);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return progress;
|
||||||
}
|
}
|
@@ -245,7 +245,6 @@ VULKAN_FILES := \
|
|||||||
vulkan/anv_nir.h \
|
vulkan/anv_nir.h \
|
||||||
vulkan/anv_nir_add_base_work_group_id.c \
|
vulkan/anv_nir_add_base_work_group_id.c \
|
||||||
vulkan/anv_nir_apply_pipeline_layout.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_multiview.c \
|
||||||
vulkan/anv_nir_lower_push_constants.c \
|
vulkan/anv_nir_lower_push_constants.c \
|
||||||
vulkan/anv_nir_lower_ycbcr_textures.c \
|
vulkan/anv_nir_lower_ycbcr_textures.c \
|
||||||
|
@@ -31,8 +31,6 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void anv_nir_lower_input_attachments(nir_shader *shader);
|
|
||||||
|
|
||||||
void anv_nir_lower_push_constants(nir_shader *shader);
|
void anv_nir_lower_push_constants(nir_shader *shader);
|
||||||
|
|
||||||
bool anv_nir_lower_multiview(nir_shader *shader, uint32_t view_mask);
|
bool anv_nir_lower_multiview(nir_shader *shader, uint32_t view_mask);
|
||||||
|
@@ -607,7 +607,7 @@ anv_pipeline_lower_nir(struct anv_pipeline *pipeline,
|
|||||||
|
|
||||||
if (nir->info.stage == MESA_SHADER_FRAGMENT) {
|
if (nir->info.stage == MESA_SHADER_FRAGMENT) {
|
||||||
NIR_PASS_V(nir, nir_lower_wpos_center, pipeline->sample_shading_enable);
|
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);
|
NIR_PASS_V(nir, anv_nir_lower_ycbcr_textures, layout);
|
||||||
|
@@ -126,7 +126,6 @@ libanv_files = files(
|
|||||||
'anv_nir.h',
|
'anv_nir.h',
|
||||||
'anv_nir_add_base_work_group_id.c',
|
'anv_nir_add_base_work_group_id.c',
|
||||||
'anv_nir_apply_pipeline_layout.c',
|
'anv_nir_apply_pipeline_layout.c',
|
||||||
'anv_nir_lower_input_attachments.c',
|
|
||||||
'anv_nir_lower_multiview.c',
|
'anv_nir_lower_multiview.c',
|
||||||
'anv_nir_lower_push_constants.c',
|
'anv_nir_lower_push_constants.c',
|
||||||
'anv_nir_lower_ycbcr_textures.c',
|
'anv_nir_lower_ycbcr_textures.c',
|
||||||
|
Reference in New Issue
Block a user