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>
This commit is contained in:
SoroushIMG 2022-11-10 22:46:49 +00:00 committed by Marge Bot
parent b4383821e7
commit f7b2dbb2bd
2 changed files with 35 additions and 9 deletions

View file

@ -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",

View file

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