nvk: Convert system values for gl_PointCoord and PointCoord into inputs

Currently, any attempt to use gl_PointCoord (GLSL) or PointCoord (SPIR-V)
results in an assert in codegen:

ERROR: unknown nir_intrinsic_op load_point_coord

This patch addresses the error by converting nir_intrinsic_load_point_coord
system value into VARYING_SLOT_PNTC. The following tests now pass:

dEQP-VK.glsl.builtin_var.simple.pointcoord
dEQP-VK.glsl.builtin_var.simple.pointcoord_uniform_frag
dEQP-VK.glsl.builtin_var.simple.pointcoord_uniform_vert

Closes: https://gitlab.freedesktop.org/nouveau/mesa/-/issues/33
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>
This commit is contained in:
Rebecca Mckeever 2022-11-21 18:45:01 -06:00 committed by Marge Bot
parent a08ad59ea6
commit 45c2ebc341

View file

@ -203,6 +203,12 @@ lower_fragcoord_instr(nir_builder *b, nir_instr *instr, UNUSED void *_data)
VARYING_SLOT_POS);
val = nir_load_var(b, var);
break;
case nir_intrinsic_load_point_coord:
var = find_or_create_input(b, glsl_vector_type(GLSL_TYPE_FLOAT, 2),
"gl_PointCoord",
VARYING_SLOT_PNTC);
val = nir_load_var(b, var);
break;
case nir_intrinsic_load_sample_pos:
var = find_or_create_input(b, glsl_vec4_type(),
"gl_FragCoord",