Module: Mesa Branch: staging/22.3 Commit: 97b9ca648a0d1bf1429b388d90258b4cab66ff4b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=97b9ca648a0d1bf1429b388d90258b4cab66ff4b
Author: SoroushIMG <[email protected]> Date: Thu Nov 10 22:46:49 2022 +0000 zink: relax bresenhamLines requirement for non-strictLine drivers non-strictLine Vulkan drivers use either parallelogram or bresenham rasterization for default line modes. This method of rasterisation produces close enough results that it in practice is GL/GLES spec compliant (at least cts wise). Don't emit a feature missing warning for this case. cc: mesa-stable Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20985> (cherry picked from commit f7b2dbb2bdc366dd294407c5653654ad6059e2ac) --- .pick_status.json | 2 +- src/gallium/drivers/zink/VP_ZINK_requirements.json | 37 ++++++++++++++++++---- src/gallium/drivers/zink/zink_pipeline.c | 5 ++- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 17f481f7b0d..3eac6db8b11 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -706,7 +706,7 @@ "description": "zink: relax bresenhamLines requirement for non-strictLine drivers", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/gallium/drivers/zink/VP_ZINK_requirements.json b/src/gallium/drivers/zink/VP_ZINK_requirements.json index f42f4c8d7a9..bcfef42d428 100644 --- a/src/gallium/drivers/zink/VP_ZINK_requirements.json +++ b/src/gallium/drivers/zink/VP_ZINK_requirements.json @@ -33,12 +33,6 @@ }, "VkPhysicalDeviceLineRasterizationFeaturesEXT": { "rectangularLines": true, - "bresenhamLines": true - } - }, - "properties": { - "VkPhysicalDeviceProperties": { - } } }, @@ -59,6 +53,22 @@ } } }, + "gl21_baseline_line_bresenham": { + "features": { + "VkPhysicalDeviceLineRasterizationFeaturesEXT": { + "bresenhamLines": true + } + } + }, + "gl21_baseline_line_non_strict": { + "properties": { + "VkPhysicalDeviceProperties": { + "limits": { + "strictLines": false + } + } + } + }, "gl21_optional": { "extensions": { "VK_KHR_external_memory": 1 @@ -551,7 +561,8 @@ "capabilities": [ "vulkan10requirements", "gl21_baseline", - [ "gl21_baseline_vk10", "gl21_baseline_vk12" ] + [ "gl21_baseline_vk10", "gl21_baseline_vk12" ], + [ "gl21_baseline_line_bresenham", "gl21_baseline_line_non_strict" ] ] }, "VP_ZINK_gl30_baseline": { @@ -563,6 +574,7 @@ "vulkan10requirements", "gl21_baseline", [ "gl21_baseline_vk10", "gl21_baseline_vk12" ], + [ "gl21_baseline_line_bresenham", "gl21_baseline_line_non_strict" ], "gl30_baseline" ] }, @@ -575,6 +587,7 @@ "vulkan10requirements", "gl21_baseline", [ "gl21_baseline_vk10", "gl21_baseline_vk12" ], + [ "gl21_baseline_line_bresenham", "gl21_baseline_line_non_strict" ], "gl30_baseline", "gl31_baseline" ] @@ -588,6 +601,7 @@ "vulkan10requirements", "gl21_baseline", [ "gl21_baseline_vk10", "gl21_baseline_vk12" ], + [ "gl21_baseline_line_bresenham", "gl21_baseline_line_non_strict" ], "gl30_baseline", "gl31_baseline", "gl32_baseline" @@ -602,6 +616,7 @@ "vulkan10requirements", "gl21_baseline", [ "gl21_baseline_vk10", "gl21_baseline_vk12" ], + [ "gl21_baseline_line_bresenham", "gl21_baseline_line_non_strict" ], "gl30_baseline", "gl31_baseline", "gl32_baseline", @@ -617,6 +632,7 @@ "vulkan10requirements", "gl21_baseline", [ "gl21_baseline_vk10", "gl21_baseline_vk12" ], + [ "gl21_baseline_line_bresenham", "gl21_baseline_line_non_strict" ], "gl30_baseline", "gl31_baseline", "gl32_baseline", @@ -633,6 +649,7 @@ "vulkan10requirements", "gl21_baseline", [ "gl21_baseline_vk10", "gl21_baseline_vk12" ], + [ "gl21_baseline_line_bresenham", "gl21_baseline_line_non_strict" ], "gl30_baseline", "gl31_baseline", "gl32_baseline", @@ -650,6 +667,7 @@ "vulkan10requirements", "gl21_baseline", [ "gl21_baseline_vk10", "gl21_baseline_vk12" ], + [ "gl21_baseline_line_bresenham", "gl21_baseline_line_non_strict" ], "gl30_baseline", "gl31_baseline", "gl32_baseline", @@ -669,6 +687,7 @@ "vulkan10requirements", "gl21_baseline", [ "gl21_baseline_vk10", "gl21_baseline_vk12" ], + [ "gl21_baseline_line_bresenham", "gl21_baseline_line_non_strict" ], "gl30_baseline", "gl31_baseline", "gl32_baseline", @@ -689,6 +708,7 @@ "vulkan10requirements", "gl21_baseline", [ "gl21_baseline_vk10", "gl21_baseline_vk12" ], + [ "gl21_baseline_line_bresenham", "gl21_baseline_line_non_strict" ], "gl30_baseline", "gl31_baseline", "gl32_baseline", @@ -710,6 +730,7 @@ "vulkan10requirements", "gl21_baseline", [ "gl21_baseline_vk10", "gl21_baseline_vk12" ], + [ "gl21_baseline_line_bresenham", "gl21_baseline_line_non_strict" ], "gl30_baseline", "gl31_baseline", "gl32_baseline", @@ -732,6 +753,7 @@ "vulkan10requirements", "gl21_baseline", [ "gl21_baseline_vk10", "gl21_baseline_vk12" ], + [ "gl21_baseline_line_bresenham", "gl21_baseline_line_non_strict" ], "gl30_baseline", "gl31_baseline", "gl32_baseline", @@ -755,6 +777,7 @@ "vulkan10requirements", "gl21_baseline", [ "gl21_baseline_vk10", "gl21_baseline_vk12" ], + [ "gl21_baseline_line_bresenham", "gl21_baseline_line_non_strict" ], "gl30_baseline", "gl31_baseline", "gl32_baseline", diff --git a/src/gallium/drivers/zink/zink_pipeline.c b/src/gallium/drivers/zink/zink_pipeline.c index 12869a7ccc6..212e84920aa 100644 --- a/src/gallium/drivers/zink/zink_pipeline.c +++ b/src/gallium/drivers/zink/zink_pipeline.c @@ -294,7 +294,10 @@ zink_create_gfx_pipeline(struct zink_screen *screen, mode_idx += hw_rast_state->line_stipple_enable * 3; if (*(feat + mode_idx)) rast_line_state.lineRasterizationMode = hw_rast_state->line_mode; - else + /* non-strictLine default lines are either parallelogram or bresenham which while not in GL spec, + * in practice end up being within the two-pixel exception in the GL spec. + */ + else if (mode_idx || screen->info.props.limits.strictLines) warn_missing_feature(warned[mode_idx], features[hw_rast_state->line_mode][hw_rast_state->line_stipple_enable]); }
