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