From d644b64ff24de00f9cebd7fdb3ea5aee495512b3 Mon Sep 17 00:00:00 2001 From: "duncan.hopkins" Date: Wed, 22 Nov 2023 08:35:32 +0000 Subject: [PATCH] zink: removed `MESA_PRIM_QUADS` from the supported `PIPE_CAP_SUPPORTED_PRIM_MODES`. Vulkan does not support quads, removal of this type forces quads to be converted in `primconvert_init_draw()`. In cases where `screen->have_triangle_fans` excludes MESA_PRIM_TRIANGLE_FAN, `u_index_generator()` is accessing a NULL entry in 'generate_quads' for converting MESA_PRIM_TRIANGLE_FAN to MESA_PRIM_QUADS. Which seems like an odd conversion to do (might be why it is missing). Reviewed-By: Mike Blumenkrantz Part-of: --- src/gallium/drivers/zink/zink_screen.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 44c960b6e00..34bfe1fc04e 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -566,6 +566,8 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param) } case PIPE_CAP_SUPPORTED_PRIM_MODES: { uint32_t modes = BITFIELD_MASK(MESA_PRIM_COUNT); + if (!screen->have_triangle_fans) + modes &= ~BITFIELD_BIT(MESA_PRIM_QUADS); modes &= ~BITFIELD_BIT(MESA_PRIM_QUAD_STRIP); modes &= ~BITFIELD_BIT(MESA_PRIM_POLYGON); modes &= ~BITFIELD_BIT(MESA_PRIM_LINE_LOOP);