We've been talking about switching frag_coord to an intrinsic in i965 for a while. It'll take a bit of work, but it's probably good to have the intrinsic anyway.
Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net> On Wed, Jul 5, 2017 at 3:47 AM, Nicolai Hähnle <nhaeh...@gmail.com> wrote: > From: Nicolai Hähnle <nicolai.haeh...@amd.com> > > Some drivers prefer to treat gl_FragCoord as a system value rather than > a fragment shader input, see Const.GLSLFragCoordIsSysVal. > --- > src/compiler/nir/nir.c | 4 ++++ > src/compiler/nir/nir_gather_info.c | 1 + > src/compiler/nir/nir_intrinsics.h | 1 + > 3 files changed, 6 insertions(+) > > diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c > index f81f4ee..bb4e684 100644 > --- a/src/compiler/nir/nir.c > +++ b/src/compiler/nir/nir.c > @@ -1884,20 +1884,22 @@ nir_intrinsic_from_system_value(gl_system_value > val) > case SYSTEM_VALUE_DRAW_ID: > return nir_intrinsic_load_draw_id; > case SYSTEM_VALUE_BASE_INSTANCE: > return nir_intrinsic_load_base_instance; > case SYSTEM_VALUE_VERTEX_ID_ZERO_BASE: > return nir_intrinsic_load_vertex_id_zero_base; > case SYSTEM_VALUE_BASE_VERTEX: > return nir_intrinsic_load_base_vertex; > case SYSTEM_VALUE_INVOCATION_ID: > return nir_intrinsic_load_invocation_id; > + case SYSTEM_VALUE_FRAG_COORD: > + return nir_intrinsic_load_frag_coord; > case SYSTEM_VALUE_FRONT_FACE: > return nir_intrinsic_load_front_face; > case SYSTEM_VALUE_SAMPLE_ID: > return nir_intrinsic_load_sample_id; > case SYSTEM_VALUE_SAMPLE_POS: > return nir_intrinsic_load_sample_pos; > case SYSTEM_VALUE_SAMPLE_MASK_IN: > return nir_intrinsic_load_sample_mask_in; > case SYSTEM_VALUE_LOCAL_INVOCATION_ID: > return nir_intrinsic_load_local_invocation_id; > @@ -1937,20 +1939,22 @@ nir_system_value_from_intrinsic(nir_intrinsic_op > intrin) > case nir_intrinsic_load_draw_id: > return SYSTEM_VALUE_DRAW_ID; > case nir_intrinsic_load_base_instance: > return SYSTEM_VALUE_BASE_INSTANCE; > case nir_intrinsic_load_vertex_id_zero_base: > return SYSTEM_VALUE_VERTEX_ID_ZERO_BASE; > case nir_intrinsic_load_base_vertex: > return SYSTEM_VALUE_BASE_VERTEX; > case nir_intrinsic_load_invocation_id: > return SYSTEM_VALUE_INVOCATION_ID; > + case nir_intrinsic_load_frag_coord: > + return SYSTEM_VALUE_FRAG_COORD; > case nir_intrinsic_load_front_face: > return SYSTEM_VALUE_FRONT_FACE; > case nir_intrinsic_load_sample_id: > return SYSTEM_VALUE_SAMPLE_ID; > case nir_intrinsic_load_sample_pos: > return SYSTEM_VALUE_SAMPLE_POS; > case nir_intrinsic_load_sample_mask_in: > return SYSTEM_VALUE_SAMPLE_MASK_IN; > case nir_intrinsic_load_local_invocation_id: > return SYSTEM_VALUE_LOCAL_INVOCATION_ID; > diff --git a/src/compiler/nir/nir_gather_info.c > b/src/compiler/nir/nir_gather_info.c > index 24ac74e..ac87bec 100644 > --- a/src/compiler/nir/nir_gather_info.c > +++ b/src/compiler/nir/nir_gather_info.c > @@ -220,20 +220,21 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, > nir_shader *shader) > for (uint i = 0; i < glsl_count_attribute_slots(var->type, > false); i++) { > int idx = var->data.location + i; > shader->info.double_inputs_read |= BITFIELD64_BIT(idx); > } > } > } > break; > } > > case nir_intrinsic_load_draw_id: > + case nir_intrinsic_load_frag_coord: > case nir_intrinsic_load_front_face: > case nir_intrinsic_load_vertex_id: > case nir_intrinsic_load_vertex_id_zero_base: > case nir_intrinsic_load_base_vertex: > case nir_intrinsic_load_base_instance: > case nir_intrinsic_load_instance_id: > case nir_intrinsic_load_sample_id: > case nir_intrinsic_load_sample_pos: > case nir_intrinsic_load_sample_mask_in: > case nir_intrinsic_load_primitive_id: > diff --git a/src/compiler/nir/nir_intrinsics.h b/src/compiler/nir/nir_ > intrinsics.h > index 21e7d90..dcd9642 100644 > --- a/src/compiler/nir/nir_intrinsics.h > +++ b/src/compiler/nir/nir_intrinsics.h > @@ -297,20 +297,21 @@ INTRINSIC(shared_atomic_comp_swap, 3, ARR(1, 1, 1), > true, 1, 0, 1, BASE, xx, xx, > #ifndef DEFINE_SYSTEM_VALUE > #define DEFINE_SYSTEM_VALUE(name) > #endif > > #define SYSTEM_VALUE(name, components, num_indices, idx0, idx1, idx2) \ > DEFINE_SYSTEM_VALUE(name) \ > INTRINSIC(load_##name, 0, ARR(0), true, components, 0, num_indices, \ > idx0, idx1, idx2, \ > NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER) > > +SYSTEM_VALUE(frag_coord, 4, 0, xx, xx, xx) > SYSTEM_VALUE(front_face, 1, 0, xx, xx, xx) > SYSTEM_VALUE(vertex_id, 1, 0, xx, xx, xx) > SYSTEM_VALUE(vertex_id_zero_base, 1, 0, xx, xx, xx) > SYSTEM_VALUE(base_vertex, 1, 0, xx, xx, xx) > SYSTEM_VALUE(instance_id, 1, 0, xx, xx, xx) > SYSTEM_VALUE(base_instance, 1, 0, xx, xx, xx) > SYSTEM_VALUE(draw_id, 1, 0, xx, xx, xx) > SYSTEM_VALUE(sample_id, 1, 0, xx, xx, xx) > SYSTEM_VALUE(sample_pos, 2, 0, xx, xx, xx) > SYSTEM_VALUE(sample_mask_in, 1, 0, xx, xx, xx) > -- > 2.9.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev