Module: Mesa
Branch: main
Commit: f7b2dbb2bdc366dd294407c5653654ad6059e2ac
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f7b2dbb2bdc366dd294407c5653654ad6059e2ac

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>

---

 src/gallium/drivers/zink/VP_ZINK_requirements.json | 37 ++++++++++++++++++----
 src/gallium/drivers/zink/zink_pipeline.c           |  7 ++--
 2 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/zink/VP_ZINK_requirements.json 
b/src/gallium/drivers/zink/VP_ZINK_requirements.json
index 91d2c20a9ee..5fa5a09e2d8 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
@@ -580,7 +590,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": {
@@ -592,6 +603,7 @@
                 "vulkan10requirements",
                 "gl21_baseline",
                 [ "gl21_baseline_vk10", "gl21_baseline_vk12" ],
+                [ "gl21_baseline_line_bresenham", 
"gl21_baseline_line_non_strict" ],
                 "gl30_baseline"
             ]
         },
@@ -604,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"
             ]
@@ -617,6 +630,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"
@@ -631,6 +645,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",
@@ -646,6 +661,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",
@@ -662,6 +678,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",
@@ -679,6 +696,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",
@@ -698,6 +716,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",
@@ -719,6 +738,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",
@@ -741,6 +761,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",
@@ -764,6 +785,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",
@@ -788,6 +810,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 c447c136488..8f57a9a417f 100644
--- a/src/gallium/drivers/zink/zink_pipeline.c
+++ b/src/gallium/drivers/zink/zink_pipeline.c
@@ -301,9 +301,12 @@ 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][0]);
-         } else
+         } 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]);
       }
 

Reply via email to