gallium/mesa: enhance PIPE_CAP_CLIP_PLANES to support override number

There exists hardware intel gen4 specifically that has only 6 clip planes
but supports GLSL 1.30. This enhances the CAP so that the current values
of 0,1 remain the same, but giving it a larger number will override the
max.

This allows the gen4 intel to set this to 6 and leave everyone else alone.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14344>
This commit is contained in:
Dave Airlie
2021-12-30 11:09:07 +10:00
parent f1c1fcfdce
commit af3cbc5379
2 changed files with 6 additions and 1 deletions

View File

@@ -602,7 +602,7 @@ The integer capabilities:
that backfacing primitives should use the back-side color as the FS input that backfacing primitives should use the back-side color as the FS input
color. If unset, mesa/st will lower it to gl_FrontFacing reads in the color. If unset, mesa/st will lower it to gl_FrontFacing reads in the
fragment shader. fragment shader.
* ``PIPE_CAP_CLIP_PLANES``: Driver supports user-defined clip-planes. * ``PIPE_CAP_CLIP_PLANES``: Driver supports user-defined clip-planes. 0 denotes none, 1 denotes MAX_CLIP_PLANES. > 1 overrides MAX.
* ``PIPE_CAP_MAX_VERTEX_BUFFERS``: Number of supported vertex buffers. * ``PIPE_CAP_MAX_VERTEX_BUFFERS``: Number of supported vertex buffers.
* ``PIPE_CAP_OPENCL_INTEGER_FUNCTIONS``: Driver supports extended OpenCL-style integer functions. This includes averge, saturating additiong, saturating subtraction, absolute difference, count leading zeros, and count trailing zeros. * ``PIPE_CAP_OPENCL_INTEGER_FUNCTIONS``: Driver supports extended OpenCL-style integer functions. This includes averge, saturating additiong, saturating subtraction, absolute difference, count leading zeros, and count trailing zeros.
* ``PIPE_CAP_INTEGER_MULTIPLY_32X16``: Driver supports integer multiplication between a 32-bit integer and a 16-bit integer. If the second operand is 32-bits, the upper 16-bits are ignored, and the low 16-bits are possibly sign extended as necessary. * ``PIPE_CAP_INTEGER_MULTIPLY_32X16``: Driver supports integer multiplication between a 32-bit integer and a 16-bit integer. If the second operand is 32-bits, the upper 16-bits are ignored, and the low 16-bits are possibly sign extended as necessary.

View File

@@ -1195,6 +1195,11 @@ void st_init_extensions(struct pipe_screen *screen,
consts->NativeIntegers = GL_TRUE; consts->NativeIntegers = GL_TRUE;
consts->MaxClipPlanes = 8; consts->MaxClipPlanes = 8;
uint32_t drv_clip_planes = screen->get_param(screen, PIPE_CAP_CLIP_PLANES);
/* only override for > 1 - 0 if none, 1 is MAX, >2 overrides MAX */
if (drv_clip_planes > 1)
consts->MaxClipPlanes = drv_clip_planes;
if (screen->get_param(screen, PIPE_CAP_VERTEXID_NOBASE)) { if (screen->get_param(screen, PIPE_CAP_VERTEXID_NOBASE)) {
consts->VertexID_is_zero_based = GL_TRUE; consts->VertexID_is_zero_based = GL_TRUE;
} }