From: Karol Herbst <kher...@redhat.com> OpenCL kernels have parameters (see pipe_grid_info::input), and so we need a way to access them.
Signed-off-by: Rob Clark <robdcl...@gmail.com> --- src/compiler/nir/nir_intrinsics.h | 2 ++ src/compiler/nir/nir_lower_io.c | 13 ++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/compiler/nir/nir_intrinsics.h b/src/compiler/nir/nir_intrinsics.h index ede29277876..0915c5e809f 100644 --- a/src/compiler/nir/nir_intrinsics.h +++ b/src/compiler/nir/nir_intrinsics.h @@ -435,6 +435,8 @@ LOAD(ubo, 2, 0, xx, xx, xx, NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REOR LOAD(input, 1, 2, BASE, COMPONENT, xx, NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER) /* src[] = { vertex, offset }. const_index[] = { base, component } */ LOAD(per_vertex_input, 2, 2, BASE, COMPONENT, xx, NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER) +/* src[] = { }. const_index[] = { base } */ +LOAD(param, 0, 1, BASE, xx, xx, NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER) /* src[] = { barycoord, offset }. const_index[] = { base, component } */ INTRINSIC(load_interpolated_input, 2, ARR(2, 1), true, 0, 0, 2, BASE, COMPONENT, xx, diff --git a/src/compiler/nir/nir_lower_io.c b/src/compiler/nir/nir_lower_io.c index df91febd68d..febd28b560e 100644 --- a/src/compiler/nir/nir_lower_io.c +++ b/src/compiler/nir/nir_lower_io.c @@ -199,6 +199,9 @@ lower_load(nir_intrinsic_instr *intrin, struct lower_io_state *state, case nir_var_shared: op = nir_intrinsic_load_shared; break; + case nir_var_param: + op = nir_intrinsic_load_param; + break; default: unreachable("Unknown variable mode"); } @@ -207,7 +210,10 @@ lower_load(nir_intrinsic_instr *intrin, struct lower_io_state *state, nir_intrinsic_instr_create(state->builder.shader, op); load->num_components = intrin->num_components; - nir_intrinsic_set_base(load, var->data.driver_location); + if (mode == nir_var_param) + nir_intrinsic_set_base(load, var->data.location); + else + nir_intrinsic_set_base(load, var->data.driver_location); if (mode == nir_var_shader_in || mode == nir_var_shader_out) nir_intrinsic_set_component(load, component); @@ -220,7 +226,7 @@ lower_load(nir_intrinsic_instr *intrin, struct lower_io_state *state, } else if (barycentric) { load->src[0] = nir_src_for_ssa(barycentric); load->src[1] = nir_src_for_ssa(offset); - } else { + } else if (mode != nir_var_param) { load->src[0] = nir_src_for_ssa(offset); } @@ -407,7 +413,8 @@ nir_lower_io_block(nir_block *block, if (mode != nir_var_shader_in && mode != nir_var_shader_out && mode != nir_var_shared && - mode != nir_var_uniform) + mode != nir_var_uniform && + mode != nir_var_param) continue; b->cursor = nir_before_instr(instr); -- 2.14.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev