From a33674066033892a2855aa970833158e424ec924 Mon Sep 17 00:00:00 2001 From: Nick Hamilton Date: Mon, 20 Apr 2026 15:44:46 +0100 Subject: [PATCH] pvr: Increase maxVertexOutputComponents limit for zink Zink reserves up to 60 varyings components for streamout which requires a maxVertexOutputComponents of at least 128 to avoid the exposed value for GL_MAX_VARYING_FLOATS been below the minimum value for GLES3.0 Fix for the follow gles cts tests: dEQP-GLES3.functional.state_query.integers.max_varying_components_getfloat dEQP-GLES3.functional.state_query.integers.max_varying_components_getinteger64 dEQP-GLES3.functional.state_query.integers.max_varying_vectors_getfloat dEQP-GLES3.functional.state_query.integers.max_varying_vectors_getinteger64 Backport-to: 26.0 Signed-off-by: Nick Hamilton --- src/imagination/vulkan/pvr_physical_device.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/imagination/vulkan/pvr_physical_device.c b/src/imagination/vulkan/pvr_physical_device.c index ccb1efc154e..83b11d89a02 100644 --- a/src/imagination/vulkan/pvr_physical_device.c +++ b/src/imagination/vulkan/pvr_physical_device.c @@ -599,7 +599,17 @@ static bool pvr_physical_device_get_properties( .maxVertexInputBindings = 16U, .maxVertexInputAttributeOffset = 2048U - 1U, .maxVertexInputBindingStride = 2048U, - .maxVertexOutputComponents = 64U, + + /* + * This should probably come from pvr_get_max_user_vertex_output_components + * however Zink reserves 64 of these for streamout and gles3 + * requires a min value of 64 meaning there is an implied minimum of 128. + * On cores where this value would be 64 we can get away with increasing + * this value to 128 as long as the extra 64 are only used for streamout + * which will always be the case as we don't support geometry or + * tesselation shaders on such cores. + */ + .maxVertexOutputComponents = 128U, /* Tessellation Limits */ /* Requires tessellationShader */