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]);
       }
 

Reply via email to