From f8634fe5e664fce6248c181647efbd92fa3d405a Mon Sep 17 00:00:00 2001 From: Icenowy Zheng Date: Thu, 11 Dec 2025 09:10:58 +0800 Subject: [PATCH] zink: only warn about fillModeNonSolid when used The Vulkan feature fillModeNonSolid is used to implement OpenGL API glPolygonMode(), which does not exist in OpenGL ES and the hardware support is missing in many mobile GPUs. The use of this Vulkan feature is only triggered when glPolygonMode() is really called, and among current gallium drivers at least lima and panfrost do not properly handle polygon modes either. Only warn about this feature being missing when it's really needed, instead of warning at screen initialization time. This will prevent the warning from being raised when running OpenGL ES on Zink. Signed-off-by: Icenowy Zheng Part-of: --- src/gallium/drivers/zink/zink_screen.c | 2 -- src/gallium/drivers/zink/zink_state.c | 9 ++++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 52b75fe15a1..734bd60b503 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -2832,7 +2832,6 @@ check_base_requirements(struct zink_screen *screen) screen->info.have_EXT_scalar_block_layout = true; } if (!screen->info.feats.features.logicOp || - !screen->info.feats.features.fillModeNonSolid || !screen->info.feats.features.shaderClipDistance || !(screen->info.feats12.scalarBlockLayout || screen->info.have_EXT_scalar_block_layout) || @@ -2846,7 +2845,6 @@ check_base_requirements(struct zink_screen *screen) if (!screen->info.X) \ fprintf(stderr, "%s ", #X) CHECK_OR_PRINT(feats.features.logicOp); - CHECK_OR_PRINT(feats.features.fillModeNonSolid); CHECK_OR_PRINT(feats.features.shaderClipDistance); if (!screen->info.feats12.scalarBlockLayout && !screen->info.have_EXT_scalar_block_layout) fprintf(stderr, "scalarBlockLayout OR EXT_scalar_block_layout "); diff --git a/src/gallium/drivers/zink/zink_state.c b/src/gallium/drivers/zink/zink_state.c index 24175aceeed..f81a0c5ceb0 100644 --- a/src/gallium/drivers/zink/zink_state.c +++ b/src/gallium/drivers/zink/zink_state.c @@ -558,7 +558,14 @@ zink_create_rasterizer_state(struct pipe_context *pctx, state->hw_state.polygon_mode = VK_POLYGON_MODE_FILL; state->cull_mode = VK_CULL_MODE_NONE; } else { - state->hw_state.polygon_mode = rs_state->fill_front; // same values + if (rs_state->fill_front != PIPE_POLYGON_MODE_FILL && + !screen->info.feats.features.fillModeNonSolid) { + static bool warned = false; + warn_missing_feature(warned, "fillModeNonSolid"); + state->hw_state.polygon_mode = VK_POLYGON_MODE_FILL; + } else { + state->hw_state.polygon_mode = rs_state->fill_front; // same values + } state->cull_mode = rs_state->cull_face; // same bits }