From ad22b59722c8e19416cc9c9a9cc5cc377f7a848b Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Wed, 22 May 2019 14:00:25 -0500 Subject: [PATCH] VK_EXT_line_rasterization tests Components: Vulkan Affects: dEQP-VK.rasterization.* Change-Id: I69a3be4c19005f5f944da57285687cf564473da4 --- android/cts/master/vk-master.txt | 384 +++++++++++++++++++-- .../vulkan/rasterization/vktRasterizationTests.cpp | 358 +++++++++++++++++-- .../mustpass/master/vk-default-no-waivers.txt | 384 +++++++++++++++++++-- external/vulkancts/mustpass/master/vk-default.txt | 384 +++++++++++++++++++-- framework/common/tcuRasterizationVerifier.cpp | 178 ++++++++-- framework/common/tcuRasterizationVerifier.hpp | 15 + framework/referencerenderer/rrRasterizer.cpp | 120 ++++--- framework/referencerenderer/rrRasterizer.hpp | 7 +- framework/referencerenderer/rrRenderer.cpp | 2 +- 9 files changed, 1610 insertions(+), 222 deletions(-) diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index 52e4535..045c61d 100644 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -403677,14 +403677,58 @@ dEQP-VK.tessellation.geometry_interaction.point_size.vertex_set_evaluation_set dEQP-VK.tessellation.geometry_interaction.point_size.vertex_set_geometry_set dEQP-VK.tessellation.geometry_interaction.point_size.vertex_set_evaluation_set_geometry_set dEQP-VK.tessellation.geometry_interaction.point_size.vertex_set_control_pass_eval_add_geometry_add -dEQP-VK.rasterization.primitives.triangles -dEQP-VK.rasterization.primitives.triangle_strip -dEQP-VK.rasterization.primitives.triangle_fan -dEQP-VK.rasterization.primitives.lines -dEQP-VK.rasterization.primitives.line_strip -dEQP-VK.rasterization.primitives.lines_wide -dEQP-VK.rasterization.primitives.line_strip_wide -dEQP-VK.rasterization.primitives.points +dEQP-VK.rasterization.primitives.no_stipple.triangles +dEQP-VK.rasterization.primitives.no_stipple.triangle_strip +dEQP-VK.rasterization.primitives.no_stipple.triangle_fan +dEQP-VK.rasterization.primitives.no_stipple.points +dEQP-VK.rasterization.primitives.no_stipple.lines +dEQP-VK.rasterization.primitives.no_stipple.line_strip +dEQP-VK.rasterization.primitives.no_stipple.lines_wide +dEQP-VK.rasterization.primitives.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives.static_stipple.lines +dEQP-VK.rasterization.primitives.static_stipple.line_strip +dEQP-VK.rasterization.primitives.static_stipple.lines_wide +dEQP-VK.rasterization.primitives.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.lines +dEQP-VK.rasterization.primitives.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.primitive_size.points.point_size_128 dEQP-VK.rasterization.primitive_size.points.point_size_256 dEQP-VK.rasterization.primitive_size.points.point_size_512 @@ -403773,10 +403817,56 @@ dEQP-VK.rasterization.flatshading.lines dEQP-VK.rasterization.flatshading.line_strip dEQP-VK.rasterization.flatshading.lines_wide dEQP-VK.rasterization.flatshading.line_strip_wide -dEQP-VK.rasterization.primitives_multisample_2_bit.triangles -dEQP-VK.rasterization.primitives_multisample_2_bit.lines -dEQP-VK.rasterization.primitives_multisample_2_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_2_bit.points +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_2_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_2_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_2_bit.clipped_full @@ -403785,10 +403875,56 @@ dEQP-VK.rasterization.fill_rules_multisample_2_bit.projected dEQP-VK.rasterization.interpolation_multisample_2_bit.triangles dEQP-VK.rasterization.interpolation_multisample_2_bit.lines dEQP-VK.rasterization.interpolation_multisample_2_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_4_bit.triangles -dEQP-VK.rasterization.primitives_multisample_4_bit.lines -dEQP-VK.rasterization.primitives_multisample_4_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_4_bit.points +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_4_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_4_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_4_bit.clipped_full @@ -403797,10 +403933,56 @@ dEQP-VK.rasterization.fill_rules_multisample_4_bit.projected dEQP-VK.rasterization.interpolation_multisample_4_bit.triangles dEQP-VK.rasterization.interpolation_multisample_4_bit.lines dEQP-VK.rasterization.interpolation_multisample_4_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_8_bit.triangles -dEQP-VK.rasterization.primitives_multisample_8_bit.lines -dEQP-VK.rasterization.primitives_multisample_8_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_8_bit.points +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_8_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_8_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_8_bit.clipped_full @@ -403809,10 +403991,56 @@ dEQP-VK.rasterization.fill_rules_multisample_8_bit.projected dEQP-VK.rasterization.interpolation_multisample_8_bit.triangles dEQP-VK.rasterization.interpolation_multisample_8_bit.lines dEQP-VK.rasterization.interpolation_multisample_8_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_16_bit.triangles -dEQP-VK.rasterization.primitives_multisample_16_bit.lines -dEQP-VK.rasterization.primitives_multisample_16_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_16_bit.points +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_16_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_16_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_16_bit.clipped_full @@ -403821,10 +404049,56 @@ dEQP-VK.rasterization.fill_rules_multisample_16_bit.projected dEQP-VK.rasterization.interpolation_multisample_16_bit.triangles dEQP-VK.rasterization.interpolation_multisample_16_bit.lines dEQP-VK.rasterization.interpolation_multisample_16_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_32_bit.triangles -dEQP-VK.rasterization.primitives_multisample_32_bit.lines -dEQP-VK.rasterization.primitives_multisample_32_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_32_bit.points +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_32_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_32_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_32_bit.clipped_full @@ -403833,10 +404107,56 @@ dEQP-VK.rasterization.fill_rules_multisample_32_bit.projected dEQP-VK.rasterization.interpolation_multisample_32_bit.triangles dEQP-VK.rasterization.interpolation_multisample_32_bit.lines dEQP-VK.rasterization.interpolation_multisample_32_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_64_bit.triangles -dEQP-VK.rasterization.primitives_multisample_64_bit.lines -dEQP-VK.rasterization.primitives_multisample_64_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_64_bit.points +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_64_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_64_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_64_bit.clipped_full diff --git a/external/vulkancts/modules/vulkan/rasterization/vktRasterizationTests.cpp b/external/vulkancts/modules/vulkan/rasterization/vktRasterizationTests.cpp index 007f452..cc44dbe 100644 --- a/external/vulkancts/modules/vulkan/rasterization/vktRasterizationTests.cpp +++ b/external/vulkancts/modules/vulkan/rasterization/vktRasterizationTests.cpp @@ -100,6 +100,18 @@ enum PrimitiveWideness PRIMITIVEWIDENESS_LAST }; +enum LineStipple +{ + LINESTIPPLE_DISABLED = 0, + LINESTIPPLE_STATIC, + LINESTIPPLE_DYNAMIC, + + LINESTIPPLE_LAST +}; + +static const deUint32 lineStippleFactor = 2; +static const deUint32 lineStipplePattern = 0x0F0F; + class BaseRenderingTestCase : public TestCase { public: @@ -152,18 +164,22 @@ protected: void drawPrimitives (tcu::Surface& result, const std::vector& vertexData, const std::vector& coloDrata, VkPrimitiveTopology primitiveTopology); virtual float getLineWidth (void) const; virtual float getPointSize (void) const; + virtual bool getLineStippleDynamic (void) const { return false; }; virtual const VkPipelineRasterizationStateCreateInfo* getRasterizationStateCreateInfo (void) const; virtual + VkPipelineRasterizationLineStateCreateInfoEXT getLineRasterizationStateCreateInfo (void) const; + + virtual const VkPipelineColorBlendStateCreateInfo* getColorBlendStateCreateInfo (void) const; const tcu::TextureFormat& getTextureFormat (void) const; const deUint32 m_renderSize; const VkSampleCountFlagBits m_sampleCount; - const deUint32 m_subpixelBits; + deUint32 m_subpixelBits; const deBool m_multisampling; const VkFormat m_imageFormat; @@ -678,6 +694,29 @@ void BaseRenderingTestInstance::drawPrimitives (tcu::Surface& result, const std: VK_FALSE // VkBool32 alphaToOneEnable; }; + + VkPipelineRasterizationStateCreateInfo rasterizationStateInfo = *getRasterizationStateCreateInfo(); + + VkPipelineRasterizationLineStateCreateInfoEXT lineRasterizationStateInfo = getLineRasterizationStateCreateInfo(); + + rasterizationStateInfo.pNext = &lineRasterizationStateInfo; + + VkPipelineDynamicStateCreateInfo dynamicStateCreateInfo = + { + VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, // VkStructureType sType + DE_NULL, // const void* pNext + 0u, // VkPipelineDynamicStateCreateFlags flags + 0u, // deUint32 dynamicStateCount + DE_NULL // const VkDynamicState* pDynamicStates + }; + + VkDynamicState dynamicState = VK_DYNAMIC_STATE_LINE_STIPPLE_EXT; + if (getLineStippleDynamic()) + { + dynamicStateCreateInfo.dynamicStateCount = 1; + dynamicStateCreateInfo.pDynamicStates = &dynamicState; + } + graphicsPipeline = makeGraphicsPipeline(vkd, // const DeviceInterface& vk vkDevice, // const VkDevice device *m_pipelineLayout, // const VkPipelineLayout pipelineLayout @@ -693,10 +732,11 @@ void BaseRenderingTestInstance::drawPrimitives (tcu::Surface& result, const std: 0u, // const deUint32 subpass 0u, // const deUint32 patchControlPoints &vertexInputStateParams, // const VkPipelineVertexInputStateCreateInfo* vertexInputStateCreateInfo - getRasterizationStateCreateInfo(), // const VkPipelineRasterizationStateCreateInfo* rasterizationStateCreateInfo + &rasterizationStateInfo, // const VkPipelineRasterizationStateCreateInfo* rasterizationStateCreateInfo &multisampleStateParams, // const VkPipelineMultisampleStateCreateInfo* multisampleStateCreateInfo DE_NULL, // const VkPipelineDepthStencilStateCreateInfo* depthStencilStateCreateInfo, - getColorBlendStateCreateInfo()); // const VkPipelineColorBlendStateCreateInfo* colorBlendStateCreateInfo + getColorBlendStateCreateInfo(), // const VkPipelineColorBlendStateCreateInfo* colorBlendStateCreateInfo, + &dynamicStateCreateInfo); // const VkPipelineDynamicStateCreateInfo* dynamicStateCreateInfo } // Create Vertex Buffer @@ -756,6 +796,8 @@ void BaseRenderingTestInstance::drawPrimitives (tcu::Surface& result, const std: vkd.cmdBindPipeline(*commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *graphicsPipeline); vkd.cmdBindDescriptorSets(*commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipelineLayout, 0u, 1, &m_descriptorSet.get(), 0u, DE_NULL); vkd.cmdBindVertexBuffers(*commandBuffer, 0, 1, &vertexBuffer.get(), &vertexBufferOffset); + if (getLineStippleDynamic()) + vkd.cmdSetLineStippleEXT(*commandBuffer, lineStippleFactor, lineStipplePattern); vkd.cmdDraw(*commandBuffer, (deUint32)positionData.size(), 1, 0, 0); endRenderPass(vkd, *commandBuffer); @@ -811,6 +853,21 @@ const VkPipelineRasterizationStateCreateInfo* BaseRenderingTestInstance::getRast return &rasterizationStateCreateInfo; } +VkPipelineRasterizationLineStateCreateInfoEXT BaseRenderingTestInstance::getLineRasterizationStateCreateInfo (void) const +{ + VkPipelineRasterizationLineStateCreateInfoEXT lineRasterizationStateInfo = + { + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT, // VkStructureType sType; + DE_NULL, // const void* pNext; + VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT, // VkLineRasterizationModeEXT lineRasterizationMode; + VK_FALSE, // VkBool32 stippledLineEnable; + 1, // uint32_t lineStippleFactor; + 0xFFFF, // uint16_t lineStipplePattern; + }; + + return lineRasterizationStateInfo; +} + const VkPipelineColorBlendStateCreateInfo* BaseRenderingTestInstance::getColorBlendStateCreateInfo (void) const { static const VkPipelineColorBlendAttachmentState colorBlendAttachmentState = @@ -922,9 +979,19 @@ tcu::TestStatus BaseTriangleTestInstance::iterate (void) class BaseLineTestInstance : public BaseRenderingTestInstance { public: - BaseLineTestInstance (Context& context, VkPrimitiveTopology primitiveTopology, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount); + BaseLineTestInstance (Context& context, + VkPrimitiveTopology primitiveTopology, + PrimitiveWideness wideness, + VkSampleCountFlagBits sampleCount, + LineStipple stipple, + VkLineRasterizationModeEXT lineRasterizationMode); virtual tcu::TestStatus iterate (void); virtual float getLineWidth (void) const; + bool getLineStippleEnable (void) const { return m_stipple != LINESTIPPLE_DISABLED; } + virtual bool getLineStippleDynamic (void) const { return m_stipple == LINESTIPPLE_DYNAMIC; }; + + virtual + VkPipelineRasterizationLineStateCreateInfoEXT getLineRasterizationStateCreateInfo (void) const; private: virtual void generateLines (int iteration, std::vector& outData, std::vector& outLines) = DE_NULL; @@ -934,21 +1001,50 @@ private: VkPrimitiveTopology m_primitiveTopology; const PrimitiveWideness m_primitiveWideness; bool m_allIterationsPassed; + bool m_qualityWarning; float m_maxLineWidth; std::vector m_lineWidths; + LineStipple m_stipple; + VkLineRasterizationModeEXT m_lineRasterizationMode; }; -BaseLineTestInstance::BaseLineTestInstance (Context& context, VkPrimitiveTopology primitiveTopology, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount) +BaseLineTestInstance::BaseLineTestInstance (Context& context, + VkPrimitiveTopology primitiveTopology, + PrimitiveWideness wideness, + VkSampleCountFlagBits sampleCount, + LineStipple stipple, + VkLineRasterizationModeEXT lineRasterizationMode) : BaseRenderingTestInstance (context, sampleCount) , m_iteration (0) , m_iterationCount (3) , m_primitiveTopology (primitiveTopology) , m_primitiveWideness (wideness) , m_allIterationsPassed (true) + , m_qualityWarning (false) , m_maxLineWidth (1.0f) + , m_stipple (stipple) + , m_lineRasterizationMode (lineRasterizationMode) { DE_ASSERT(m_primitiveWideness < PRIMITIVEWIDENESS_LAST); + if (isDeviceExtensionSupported(context.getUsedApiVersion(), context.getDeviceExtensions(), "VK_EXT_line_rasterization")) + { + VkPhysicalDeviceLineRasterizationPropertiesEXT lineRasterizationProperties = + { + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT, // VkStructureType sType; + DE_NULL, // void* pNext; + 0u, // deUint32 lineSubPixelPrecisionBits; + }; + + VkPhysicalDeviceProperties2 deviceProperties2; + deviceProperties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + deviceProperties2.pNext = &lineRasterizationProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(m_context.getPhysicalDevice(), &deviceProperties2); + + m_subpixelBits = lineRasterizationProperties.lineSubPixelPrecisionBits; + } + // create line widths if (m_primitiveWideness == PRIMITIVEWIDENESS_NARROW) { @@ -1008,9 +1104,64 @@ tcu::TestStatus BaseLineTestInstance::iterate (void) scene.lines.swap(lines); scene.lineWidth = lineWidth; + scene.stippleEnable = getLineStippleEnable(); + scene.stippleFactor = getLineStippleEnable() ? lineStippleFactor : 1; + scene.stipplePattern = getLineStippleEnable() ? lineStipplePattern : 0xFFFF; + scene.isStrip = m_primitiveTopology == VK_PRIMITIVE_TOPOLOGY_LINE_STRIP; + scene.isSmooth = m_lineRasterizationMode == VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT; + + // Choose verification mode. Smooth lines assume mostly over-rasterization (bloated lines with a falloff). + // Stippled lines lose some precision across segments in a strip, so need a weaker threshold than normal + // lines. For simple cases, check for an exact match (STRICT). + if (scene.isSmooth) + scene.verificationMode = tcu::VERIFICATIONMODE_SMOOTH; + else if (scene.stippleEnable) + scene.verificationMode = tcu::VERIFICATIONMODE_WEAKER; + else + scene.verificationMode = tcu::VERIFICATIONMODE_STRICT; - if (!verifyRelaxedLineGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog())) - m_allIterationsPassed = false; + if (m_lineRasterizationMode == VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT) + { + // bresenham is "no AA" in GL, so set numSamples to zero. + args.numSamples = 0; + if (!verifyLineGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog())) + m_allIterationsPassed = false; + } + else + { + if (scene.isSmooth) + { + // Smooth lines get the fractional coverage multiplied into the alpha component, + // so do a sanity check to validate that there is at least one pixel in the image + // with a fractional opacity. + bool hasAlpha = false; + for (int y = 0; y < resultImage.getHeight() && !hasAlpha; ++y) + for (int x = 0; x < resultImage.getWidth(); ++x) + { + const tcu::RGBA color = resultImage.getPixel(x, y); + if (color.getAlpha() > 0 && color.getAlpha() < 0xFF) + { + hasAlpha = true; + break; + } + } + if (!hasAlpha) + { + m_context.getTestContext().getLog() << tcu::TestLog::Message << "Missing alpha transparency (failed)." << tcu::TestLog::EndMessage; + m_allIterationsPassed = false; + } + } + + if (!verifyRelaxedLineGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog())) + { + // Retry with weaker verification. If it passes, consider it a quality warning. + scene.verificationMode = tcu::VERIFICATIONMODE_WEAKER; + if (!verifyRelaxedLineGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog())) + m_allIterationsPassed = false; + else + m_qualityWarning = true; + } + } } } else @@ -1019,10 +1170,12 @@ tcu::TestStatus BaseLineTestInstance::iterate (void) // result if (++m_iteration == m_iterationCount) { - if (m_allIterationsPassed) - return tcu::TestStatus::pass("Pass"); - else + if (!m_allIterationsPassed) return tcu::TestStatus::fail("Incorrect rasterization"); + else if (m_qualityWarning) + return tcu::TestStatus(QP_TEST_RESULT_QUALITY_WARNING, "Low-quality line rasterization"); + else + return tcu::TestStatus::pass("Pass"); } else return tcu::TestStatus::incomplete(); @@ -1034,11 +1187,31 @@ float BaseLineTestInstance::getLineWidth (void) const return m_lineWidths[m_iteration]; } +VkPipelineRasterizationLineStateCreateInfoEXT BaseLineTestInstance::getLineRasterizationStateCreateInfo (void) const +{ + VkPipelineRasterizationLineStateCreateInfoEXT lineRasterizationStateInfo = + { + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT, // VkStructureType sType; + DE_NULL, // const void* pNext; + m_lineRasterizationMode, // VkLineRasterizationModeEXT lineRasterizationMode; + getLineStippleEnable() ? VK_TRUE : VK_FALSE, // VkBool32 stippledLineEnable; + 1, // uint32_t lineStippleFactor; + 0xFFFF, // uint16_t lineStipplePattern; + }; + + if (m_stipple == LINESTIPPLE_STATIC) + { + lineRasterizationStateInfo.lineStippleFactor = lineStippleFactor; + lineRasterizationStateInfo.lineStipplePattern = lineStipplePattern; + } + + return lineRasterizationStateInfo; +} class PointTestInstance : public BaseRenderingTestInstance { public: - PointTestInstance (Context& context, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount); + PointTestInstance (Context& context, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount, /*ignored*/LineStipple stipple, /*ignored*/VkLineRasterizationModeEXT lineRasterizationMode); virtual tcu::TestStatus iterate (void); virtual float getPointSize (void) const; @@ -1053,7 +1226,7 @@ private: std::vector m_pointSizes; }; -PointTestInstance::PointTestInstance (Context& context, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount) +PointTestInstance::PointTestInstance (Context& context, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount, /*ignored*/LineStipple stipple, /*ignored*/VkLineRasterizationModeEXT lineRasterizationMode) : BaseRenderingTestInstance (context, sampleCount) , m_iteration (0) , m_iterationCount (3) @@ -1061,6 +1234,8 @@ PointTestInstance::PointTestInstance (Context& context, PrimitiveWideness widene , m_allIterationsPassed (true) , m_maxPointSize (1.0f) { + (void)stipple; + (void)lineRasterizationMode; // create point sizes if (m_primitiveWideness == PRIMITIVEWIDENESS_NARROW) { @@ -1736,26 +1911,63 @@ template class WidenessTestCase : public BaseRenderingTestCase { public: - WidenessTestCase (tcu::TestContext& context, const std::string& name, const std::string& description, PrimitiveWideness wideness, bool isLineTest, VkSampleCountFlagBits sampleCount = VK_SAMPLE_COUNT_1_BIT) + WidenessTestCase (tcu::TestContext& context, const std::string& name, const std::string& description, PrimitiveWideness wideness, bool isLineTest, VkSampleCountFlagBits sampleCount, LineStipple stipple, VkLineRasterizationModeEXT lineRasterizationMode) : BaseRenderingTestCase(context, name, description, sampleCount) - , m_wideness (wideness) + , m_wideness(wideness) , m_isLineTest (isLineTest) + , m_stipple(stipple) + , m_lineRasterizationMode(lineRasterizationMode) {} virtual TestInstance* createInstance (Context& context) const { - return new ConcreteTestInstance(context, m_wideness, m_sampleCount); + return new ConcreteTestInstance(context, m_wideness, m_sampleCount, m_stipple, m_lineRasterizationMode); } virtual void checkSupport (Context& context) const { if (m_isLineTest) { - if (!context.getDeviceProperties().limits.strictLines) - TCU_THROW(NotSupportedError, "Strict rasterization is not supported"); - if (m_wideness == PRIMITIVEWIDENESS_WIDE) context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_WIDE_LINES); + + switch (m_lineRasterizationMode) + { + default: + DE_ASSERT(0); // fallthrough + case VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT: + if (!context.getDeviceProperties().limits.strictLines) + TCU_THROW(NotSupportedError, "Strict rasterization is not supported"); + + if (getLineStippleEnable() && + !context.getLineRasterizationFeatures().stippledRectangularLines) + TCU_THROW(NotSupportedError, "Stippled rectangular lines not supported"); + break; + case VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT: + if (!context.getLineRasterizationFeatures().rectangularLines) + TCU_THROW(NotSupportedError, "Rectangular lines not supported"); + + if (getLineStippleEnable() && + !context.getLineRasterizationFeatures().stippledRectangularLines) + TCU_THROW(NotSupportedError, "Stippled rectangular lines not supported"); + break; + case VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT: + if (!context.getLineRasterizationFeatures().bresenhamLines) + TCU_THROW(NotSupportedError, "Bresenham lines not supported"); + + if (getLineStippleEnable() && + !context.getLineRasterizationFeatures().stippledBresenhamLines) + TCU_THROW(NotSupportedError, "Stippled Bresenham lines not supported"); + break; + case VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT: + if (!context.getLineRasterizationFeatures().smoothLines) + TCU_THROW(NotSupportedError, "Smooth lines not supported"); + + if (getLineStippleEnable() && + !context.getLineRasterizationFeatures().stippledSmoothLines) + TCU_THROW(NotSupportedError, "Stippled smooth lines not supported"); + break; + } } else { @@ -1763,16 +1975,22 @@ public: context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_LARGE_POINTS); } } + + bool getLineStippleEnable (void) const { return m_stipple != LINESTIPPLE_DISABLED; } + virtual bool getLineStippleDynamic (void) const { return m_stipple == LINESTIPPLE_DYNAMIC; }; + protected: - const PrimitiveWideness m_wideness; - const bool m_isLineTest; + const PrimitiveWideness m_wideness; + const bool m_isLineTest; + const LineStipple m_stipple; + const VkLineRasterizationModeEXT m_lineRasterizationMode; }; class LinesTestInstance : public BaseLineTestInstance { public: - LinesTestInstance (Context& context, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount) - : BaseLineTestInstance(context, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, wideness, sampleCount) + LinesTestInstance (Context& context, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount, LineStipple stipple, VkLineRasterizationModeEXT lineRasterizationMode) + : BaseLineTestInstance(context, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, wideness, sampleCount, stipple, lineRasterizationMode) {} virtual void generateLines (int iteration, std::vector& outData, std::vector& outLines); @@ -1805,7 +2023,7 @@ void LinesTestInstance::generateLines (int iteration, std::vector& ou case 2: outData[0] = tcu::Vec4( -0.9f, -0.3f, 0.0f, 1.0f); - outData[1] = tcu::Vec4( 1.1f, -0.9f, 0.0f, 1.0f); + outData[1] = tcu::Vec4( 0.9f, -0.9f, 0.0f, 1.0f); outData[2] = tcu::Vec4( 0.7f, -0.1f, 0.0f, 1.0f); outData[3] = tcu::Vec4( 0.11f, 0.2f, 0.0f, 1.0f); outData[4] = tcu::Vec4( 0.88f, 0.7f, 0.0f, 1.0f); @@ -1837,8 +2055,8 @@ void LinesTestInstance::generateLines (int iteration, std::vector& ou class LineStripTestInstance : public BaseLineTestInstance { public: - LineStripTestInstance (Context& context, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount) - : BaseLineTestInstance(context, VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, wideness, sampleCount) + LineStripTestInstance (Context& context, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount, LineStipple stipple, VkLineRasterizationModeEXT lineRasterizationMode) + : BaseLineTestInstance(context, VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, wideness, sampleCount, stipple, lineRasterizationMode) {} virtual void generateLines (int iteration, std::vector& outData, std::vector& outLines); @@ -1867,7 +2085,7 @@ void LineStripTestInstance::generateLines (int iteration, std::vector case 2: outData[0] = tcu::Vec4( -0.9f, -0.3f, 0.0f, 1.0f); - outData[1] = tcu::Vec4( 1.1f, -0.9f, 0.0f, 1.0f); + outData[1] = tcu::Vec4( 0.9f, -0.9f, 0.0f, 1.0f); outData[2] = tcu::Vec4( 0.7f, -0.1f, 0.0f, 1.0f); outData[3] = tcu::Vec4( 0.11f, 0.2f, 0.0f, 1.0f); break; @@ -3469,14 +3687,45 @@ void createRasterizationTests (tcu::TestCaseGroup* rasterizationTests) rasterizationTests->addChild(primitives); - primitives->addChild(new BaseTestCase (testCtx, "triangles", "Render primitives as VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, verify rasterization result")); - primitives->addChild(new BaseTestCase (testCtx, "triangle_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, verify rasterization result")); - primitives->addChild(new BaseTestCase (testCtx, "triangle_fan", "Render primitives as VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN, verify rasterization result")); - primitives->addChild(new WidenessTestCase (testCtx, "lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true)); - primitives->addChild(new WidenessTestCase (testCtx, "line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true)); - primitives->addChild(new WidenessTestCase (testCtx, "lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true)); - primitives->addChild(new WidenessTestCase (testCtx, "line_strip_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true)); - primitives->addChild(new WidenessTestCase (testCtx, "points", "Render primitives as VK_PRIMITIVE_TOPOLOGY_POINT_LIST, verify rasterization result", PRIMITIVEWIDENESS_WIDE, false)); + tcu::TestCaseGroup* const nostippleTests = new tcu::TestCaseGroup(testCtx, "no_stipple", "No stipple"); + tcu::TestCaseGroup* const stippleStaticTests = new tcu::TestCaseGroup(testCtx, "static_stipple", "Line stipple static"); + tcu::TestCaseGroup* const stippleDynamicTests = new tcu::TestCaseGroup(testCtx, "dynamic_stipple", "Line stipple dynamic"); + + primitives->addChild(nostippleTests); + primitives->addChild(stippleStaticTests); + primitives->addChild(stippleDynamicTests); + + nostippleTests->addChild(new BaseTestCase (testCtx, "triangles", "Render primitives as VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, verify rasterization result")); + nostippleTests->addChild(new BaseTestCase (testCtx, "triangle_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, verify rasterization result")); + nostippleTests->addChild(new BaseTestCase (testCtx, "triangle_fan", "Render primitives as VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN, verify rasterization result")); + nostippleTests->addChild(new WidenessTestCase (testCtx, "points", "Render primitives as VK_PRIMITIVE_TOPOLOGY_POINT_LIST, verify rasterization result", PRIMITIVEWIDENESS_WIDE, false, VK_SAMPLE_COUNT_1_BIT, LINESTIPPLE_DISABLED, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT)); + + for (int i = 0; i < 3; ++i) { + + tcu::TestCaseGroup *g = i == 2 ? stippleDynamicTests : i == 1 ? stippleStaticTests : nostippleTests; + + LineStipple stipple = (LineStipple)i; + + g->addChild(new WidenessTestCase (testCtx, "lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT)); + g->addChild(new WidenessTestCase (testCtx, "line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT)); + g->addChild(new WidenessTestCase (testCtx, "lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT)); + g->addChild(new WidenessTestCase (testCtx, "line_strip_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT)); + + g->addChild(new WidenessTestCase (testCtx, "rectangular_lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT)); + g->addChild(new WidenessTestCase (testCtx, "rectangular_line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT)); + g->addChild(new WidenessTestCase (testCtx, "rectangular_lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT)); + g->addChild(new WidenessTestCase (testCtx, "rectangular_line_strip_wide","Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT)); + + g->addChild(new WidenessTestCase (testCtx, "bresenham_lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT)); + g->addChild(new WidenessTestCase (testCtx, "bresenham_line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT)); + g->addChild(new WidenessTestCase (testCtx, "bresenham_lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT)); + g->addChild(new WidenessTestCase (testCtx, "bresenham_line_strip_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT)); + + g->addChild(new WidenessTestCase (testCtx, "smooth_lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT)); + g->addChild(new WidenessTestCase (testCtx, "smooth_line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT)); + g->addChild(new WidenessTestCase (testCtx, "smooth_lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT)); + g->addChild(new WidenessTestCase (testCtx, "smooth_line_strip_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT)); + } } // .primitive_size @@ -3709,10 +3958,43 @@ void createRasterizationTests (tcu::TestCaseGroup* rasterizationTests) rasterizationTests->addChild(primitives); - primitives->addChild(new BaseTestCase (testCtx, "triangles", "Render primitives as VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, verify rasterization result", samples[samplesNdx])); - primitives->addChild(new WidenessTestCase (testCtx, "lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, samples[samplesNdx])); - primitives->addChild(new WidenessTestCase (testCtx, "lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, samples[samplesNdx])); - primitives->addChild(new WidenessTestCase (testCtx, "points", "Render primitives as VK_PRIMITIVE_TOPOLOGY_POINT_LIST, verify rasterization result", PRIMITIVEWIDENESS_WIDE, false, samples[samplesNdx])); + tcu::TestCaseGroup* const nostippleTests = new tcu::TestCaseGroup(testCtx, "no_stipple", "No stipple"); + tcu::TestCaseGroup* const stippleStaticTests = new tcu::TestCaseGroup(testCtx, "static_stipple", "Line stipple static"); + tcu::TestCaseGroup* const stippleDynamicTests = new tcu::TestCaseGroup(testCtx, "dynamic_stipple", "Line stipple dynamic"); + + primitives->addChild(nostippleTests); + primitives->addChild(stippleStaticTests); + primitives->addChild(stippleDynamicTests); + + nostippleTests->addChild(new BaseTestCase (testCtx, "triangles", "Render primitives as VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, verify rasterization result", samples[samplesNdx])); + nostippleTests->addChild(new WidenessTestCase (testCtx, "points", "Render primitives as VK_PRIMITIVE_TOPOLOGY_POINT_LIST, verify rasterization result", PRIMITIVEWIDENESS_WIDE, false, samples[samplesNdx], LINESTIPPLE_DISABLED, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT)); + + for (int i = 0; i < 3; ++i) { + + tcu::TestCaseGroup *g = i == 2 ? stippleDynamicTests : i == 1 ? stippleStaticTests : nostippleTests; + + LineStipple stipple = (LineStipple)i; + + g->addChild(new WidenessTestCase (testCtx, "lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT)); + g->addChild(new WidenessTestCase (testCtx, "line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT)); + g->addChild(new WidenessTestCase (testCtx, "lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT)); + g->addChild(new WidenessTestCase (testCtx, "line_strip_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT)); + + g->addChild(new WidenessTestCase (testCtx, "rectangular_lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT)); + g->addChild(new WidenessTestCase (testCtx, "rectangular_line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT)); + g->addChild(new WidenessTestCase (testCtx, "rectangular_lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT)); + g->addChild(new WidenessTestCase (testCtx, "rectangular_line_strip_wide","Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT)); + + g->addChild(new WidenessTestCase (testCtx, "bresenham_lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT)); + g->addChild(new WidenessTestCase (testCtx, "bresenham_line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT)); + g->addChild(new WidenessTestCase (testCtx, "bresenham_lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT)); + g->addChild(new WidenessTestCase (testCtx, "bresenham_line_strip_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT)); + + g->addChild(new WidenessTestCase (testCtx, "smooth_lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT)); + g->addChild(new WidenessTestCase (testCtx, "smooth_line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT)); + g->addChild(new WidenessTestCase (testCtx, "smooth_lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT)); + g->addChild(new WidenessTestCase (testCtx, "smooth_line_strip_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT)); + } } // .fill_rules diff --git a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt index e81407e..28bcb80 100644 --- a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt +++ b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt @@ -405712,14 +405712,58 @@ dEQP-VK.tessellation.geometry_interaction.point_size.vertex_set_evaluation_set dEQP-VK.tessellation.geometry_interaction.point_size.vertex_set_geometry_set dEQP-VK.tessellation.geometry_interaction.point_size.vertex_set_evaluation_set_geometry_set dEQP-VK.tessellation.geometry_interaction.point_size.vertex_set_control_pass_eval_add_geometry_add -dEQP-VK.rasterization.primitives.triangles -dEQP-VK.rasterization.primitives.triangle_strip -dEQP-VK.rasterization.primitives.triangle_fan -dEQP-VK.rasterization.primitives.lines -dEQP-VK.rasterization.primitives.line_strip -dEQP-VK.rasterization.primitives.lines_wide -dEQP-VK.rasterization.primitives.line_strip_wide -dEQP-VK.rasterization.primitives.points +dEQP-VK.rasterization.primitives.no_stipple.triangles +dEQP-VK.rasterization.primitives.no_stipple.triangle_strip +dEQP-VK.rasterization.primitives.no_stipple.triangle_fan +dEQP-VK.rasterization.primitives.no_stipple.points +dEQP-VK.rasterization.primitives.no_stipple.lines +dEQP-VK.rasterization.primitives.no_stipple.line_strip +dEQP-VK.rasterization.primitives.no_stipple.lines_wide +dEQP-VK.rasterization.primitives.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives.static_stipple.lines +dEQP-VK.rasterization.primitives.static_stipple.line_strip +dEQP-VK.rasterization.primitives.static_stipple.lines_wide +dEQP-VK.rasterization.primitives.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.lines +dEQP-VK.rasterization.primitives.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.primitive_size.points.point_size_128 dEQP-VK.rasterization.primitive_size.points.point_size_256 dEQP-VK.rasterization.primitive_size.points.point_size_512 @@ -405805,10 +405849,56 @@ dEQP-VK.rasterization.flatshading.triangle_fan dEQP-VK.rasterization.flatshading.lines dEQP-VK.rasterization.flatshading.line_strip dEQP-VK.rasterization.flatshading.line_strip_wide -dEQP-VK.rasterization.primitives_multisample_2_bit.triangles -dEQP-VK.rasterization.primitives_multisample_2_bit.lines -dEQP-VK.rasterization.primitives_multisample_2_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_2_bit.points +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_2_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_2_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_2_bit.clipped_full @@ -405817,10 +405907,56 @@ dEQP-VK.rasterization.fill_rules_multisample_2_bit.projected dEQP-VK.rasterization.interpolation_multisample_2_bit.triangles dEQP-VK.rasterization.interpolation_multisample_2_bit.lines dEQP-VK.rasterization.interpolation_multisample_2_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_4_bit.triangles -dEQP-VK.rasterization.primitives_multisample_4_bit.lines -dEQP-VK.rasterization.primitives_multisample_4_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_4_bit.points +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_4_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_4_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_4_bit.clipped_full @@ -405829,10 +405965,56 @@ dEQP-VK.rasterization.fill_rules_multisample_4_bit.projected dEQP-VK.rasterization.interpolation_multisample_4_bit.triangles dEQP-VK.rasterization.interpolation_multisample_4_bit.lines dEQP-VK.rasterization.interpolation_multisample_4_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_8_bit.triangles -dEQP-VK.rasterization.primitives_multisample_8_bit.lines -dEQP-VK.rasterization.primitives_multisample_8_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_8_bit.points +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_8_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_8_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_8_bit.clipped_full @@ -405841,10 +406023,56 @@ dEQP-VK.rasterization.fill_rules_multisample_8_bit.projected dEQP-VK.rasterization.interpolation_multisample_8_bit.triangles dEQP-VK.rasterization.interpolation_multisample_8_bit.lines dEQP-VK.rasterization.interpolation_multisample_8_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_16_bit.triangles -dEQP-VK.rasterization.primitives_multisample_16_bit.lines -dEQP-VK.rasterization.primitives_multisample_16_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_16_bit.points +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_16_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_16_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_16_bit.clipped_full @@ -405853,10 +406081,56 @@ dEQP-VK.rasterization.fill_rules_multisample_16_bit.projected dEQP-VK.rasterization.interpolation_multisample_16_bit.triangles dEQP-VK.rasterization.interpolation_multisample_16_bit.lines dEQP-VK.rasterization.interpolation_multisample_16_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_32_bit.triangles -dEQP-VK.rasterization.primitives_multisample_32_bit.lines -dEQP-VK.rasterization.primitives_multisample_32_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_32_bit.points +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_32_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_32_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_32_bit.clipped_full @@ -405865,10 +406139,56 @@ dEQP-VK.rasterization.fill_rules_multisample_32_bit.projected dEQP-VK.rasterization.interpolation_multisample_32_bit.triangles dEQP-VK.rasterization.interpolation_multisample_32_bit.lines dEQP-VK.rasterization.interpolation_multisample_32_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_64_bit.triangles -dEQP-VK.rasterization.primitives_multisample_64_bit.lines -dEQP-VK.rasterization.primitives_multisample_64_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_64_bit.points +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_64_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_64_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_64_bit.clipped_full diff --git a/external/vulkancts/mustpass/master/vk-default.txt b/external/vulkancts/mustpass/master/vk-default.txt index d7c8210..1c17f68 100644 --- a/external/vulkancts/mustpass/master/vk-default.txt +++ b/external/vulkancts/mustpass/master/vk-default.txt @@ -405673,14 +405673,58 @@ dEQP-VK.tessellation.geometry_interaction.point_size.vertex_set_evaluation_set dEQP-VK.tessellation.geometry_interaction.point_size.vertex_set_geometry_set dEQP-VK.tessellation.geometry_interaction.point_size.vertex_set_evaluation_set_geometry_set dEQP-VK.tessellation.geometry_interaction.point_size.vertex_set_control_pass_eval_add_geometry_add -dEQP-VK.rasterization.primitives.triangles -dEQP-VK.rasterization.primitives.triangle_strip -dEQP-VK.rasterization.primitives.triangle_fan -dEQP-VK.rasterization.primitives.lines -dEQP-VK.rasterization.primitives.line_strip -dEQP-VK.rasterization.primitives.lines_wide -dEQP-VK.rasterization.primitives.line_strip_wide -dEQP-VK.rasterization.primitives.points +dEQP-VK.rasterization.primitives.no_stipple.triangles +dEQP-VK.rasterization.primitives.no_stipple.triangle_strip +dEQP-VK.rasterization.primitives.no_stipple.triangle_fan +dEQP-VK.rasterization.primitives.no_stipple.points +dEQP-VK.rasterization.primitives.no_stipple.lines +dEQP-VK.rasterization.primitives.no_stipple.line_strip +dEQP-VK.rasterization.primitives.no_stipple.lines_wide +dEQP-VK.rasterization.primitives.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives.static_stipple.lines +dEQP-VK.rasterization.primitives.static_stipple.line_strip +dEQP-VK.rasterization.primitives.static_stipple.lines_wide +dEQP-VK.rasterization.primitives.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.lines +dEQP-VK.rasterization.primitives.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.primitive_size.points.point_size_128 dEQP-VK.rasterization.primitive_size.points.point_size_256 dEQP-VK.rasterization.primitive_size.points.point_size_512 @@ -405766,10 +405810,56 @@ dEQP-VK.rasterization.flatshading.triangle_fan dEQP-VK.rasterization.flatshading.lines dEQP-VK.rasterization.flatshading.line_strip dEQP-VK.rasterization.flatshading.line_strip_wide -dEQP-VK.rasterization.primitives_multisample_2_bit.triangles -dEQP-VK.rasterization.primitives_multisample_2_bit.lines -dEQP-VK.rasterization.primitives_multisample_2_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_2_bit.points +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_2_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_2_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_2_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_2_bit.clipped_full @@ -405778,10 +405868,56 @@ dEQP-VK.rasterization.fill_rules_multisample_2_bit.projected dEQP-VK.rasterization.interpolation_multisample_2_bit.triangles dEQP-VK.rasterization.interpolation_multisample_2_bit.lines dEQP-VK.rasterization.interpolation_multisample_2_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_4_bit.triangles -dEQP-VK.rasterization.primitives_multisample_4_bit.lines -dEQP-VK.rasterization.primitives_multisample_4_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_4_bit.points +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_4_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_4_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_4_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_4_bit.clipped_full @@ -405790,10 +405926,56 @@ dEQP-VK.rasterization.fill_rules_multisample_4_bit.projected dEQP-VK.rasterization.interpolation_multisample_4_bit.triangles dEQP-VK.rasterization.interpolation_multisample_4_bit.lines dEQP-VK.rasterization.interpolation_multisample_4_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_8_bit.triangles -dEQP-VK.rasterization.primitives_multisample_8_bit.lines -dEQP-VK.rasterization.primitives_multisample_8_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_8_bit.points +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_8_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_8_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_8_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_8_bit.clipped_full @@ -405802,10 +405984,56 @@ dEQP-VK.rasterization.fill_rules_multisample_8_bit.projected dEQP-VK.rasterization.interpolation_multisample_8_bit.triangles dEQP-VK.rasterization.interpolation_multisample_8_bit.lines dEQP-VK.rasterization.interpolation_multisample_8_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_16_bit.triangles -dEQP-VK.rasterization.primitives_multisample_16_bit.lines -dEQP-VK.rasterization.primitives_multisample_16_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_16_bit.points +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_16_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_16_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_16_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_16_bit.clipped_full @@ -405814,10 +406042,56 @@ dEQP-VK.rasterization.fill_rules_multisample_16_bit.projected dEQP-VK.rasterization.interpolation_multisample_16_bit.triangles dEQP-VK.rasterization.interpolation_multisample_16_bit.lines dEQP-VK.rasterization.interpolation_multisample_16_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_32_bit.triangles -dEQP-VK.rasterization.primitives_multisample_32_bit.lines -dEQP-VK.rasterization.primitives_multisample_32_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_32_bit.points +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_32_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_32_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_32_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_32_bit.clipped_full @@ -405826,10 +406100,56 @@ dEQP-VK.rasterization.fill_rules_multisample_32_bit.projected dEQP-VK.rasterization.interpolation_multisample_32_bit.triangles dEQP-VK.rasterization.interpolation_multisample_32_bit.lines dEQP-VK.rasterization.interpolation_multisample_32_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_64_bit.triangles -dEQP-VK.rasterization.primitives_multisample_64_bit.lines -dEQP-VK.rasterization.primitives_multisample_64_bit.lines_wide -dEQP-VK.rasterization.primitives_multisample_64_bit.points +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.triangles +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.points +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.lines +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.lines +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.static_stipple.smooth_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.lines +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.rectangular_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.rectangular_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.rectangular_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.rectangular_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.bresenham_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.bresenham_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.bresenham_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.bresenham_line_strip_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.smooth_lines +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.smooth_line_strip +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.smooth_lines_wide +dEQP-VK.rasterization.primitives_multisample_64_bit.dynamic_stipple.smooth_line_strip_wide dEQP-VK.rasterization.fill_rules_multisample_64_bit.basic_quad dEQP-VK.rasterization.fill_rules_multisample_64_bit.basic_quad_reverse dEQP-VK.rasterization.fill_rules_multisample_64_bit.clipped_full diff --git a/framework/common/tcuRasterizationVerifier.cpp b/framework/common/tcuRasterizationVerifier.cpp index 9ce4fe6..a8d7125 100644 --- a/framework/common/tcuRasterizationVerifier.cpp +++ b/framework/common/tcuRasterizationVerifier.cpp @@ -915,9 +915,20 @@ bool verifyMultisampleLineGroupRasterization (const tcu::Surface& surface, const const float halfLineWidth = scene.lineWidth * 0.5f; TriangleSceneSpec triangleScene; + deUint32 stippleCounter = 0; + float leftoverPhase = 0.0f; + triangleScene.triangles.resize(2 * scene.lines.size()); for (int lineNdx = 0; lineNdx < (int)scene.lines.size(); ++lineNdx) { + + if (!scene.isStrip) + { + // reset stipple at the start of each line segment + stippleCounter = 0; + leftoverPhase = 0; + } + // Transform to screen space, add pixel offsets, convert back to normalized device space, and test as triangles tcu::Vec2 lineNormalizedDeviceSpace[2] = { @@ -939,31 +950,117 @@ bool verifyMultisampleLineGroupRasterization (const tcu::Surface& surface, const const tcu::Vec2 lineDir = tcu::normalize(lineScreenSpace[1] - lineScreenSpace[0]); const tcu::Vec2 lineNormalDir = tcu::Vec2(lineDir.y(), -lineDir.x()); - const tcu::Vec2 lineQuadScreenSpace[4] = + if (scene.stippleEnable) { - lineScreenSpace[0] + lineNormalDir * halfLineWidth, - lineScreenSpace[0] - lineNormalDir * halfLineWidth, - lineScreenSpace[1] - lineNormalDir * halfLineWidth, - lineScreenSpace[1] + lineNormalDir * halfLineWidth, - }; - const tcu::Vec2 lineQuadNormalizedDeviceSpace[4] = - { - lineQuadScreenSpace[0] / viewportSize * 2.0f - tcu::Vec2(1.0f, 1.0f), - lineQuadScreenSpace[1] / viewportSize * 2.0f - tcu::Vec2(1.0f, 1.0f), - lineQuadScreenSpace[2] / viewportSize * 2.0f - tcu::Vec2(1.0f, 1.0f), - lineQuadScreenSpace[3] / viewportSize * 2.0f - tcu::Vec2(1.0f, 1.0f), - }; + float lineLength = tcu::distance(lineScreenSpace[0], lineScreenSpace[1]); + float lineOffset = 0.0f; - triangleScene.triangles[lineNdx*2 + 0].positions[0] = tcu::Vec4(lineQuadNormalizedDeviceSpace[0].x(), lineQuadNormalizedDeviceSpace[0].y(), 0.0f, 1.0f); triangleScene.triangles[lineNdx*2 + 0].sharedEdge[0] = false; - triangleScene.triangles[lineNdx*2 + 0].positions[1] = tcu::Vec4(lineQuadNormalizedDeviceSpace[1].x(), lineQuadNormalizedDeviceSpace[1].y(), 0.0f, 1.0f); triangleScene.triangles[lineNdx*2 + 0].sharedEdge[1] = false; - triangleScene.triangles[lineNdx*2 + 0].positions[2] = tcu::Vec4(lineQuadNormalizedDeviceSpace[2].x(), lineQuadNormalizedDeviceSpace[2].y(), 0.0f, 1.0f); triangleScene.triangles[lineNdx*2 + 0].sharedEdge[2] = true; + while (lineOffset < lineLength) + { + float d0 = (float)lineOffset; + float d1 = d0 + 1.0f; - triangleScene.triangles[lineNdx*2 + 1].positions[0] = tcu::Vec4(lineQuadNormalizedDeviceSpace[0].x(), lineQuadNormalizedDeviceSpace[0].y(), 0.0f, 1.0f); triangleScene.triangles[lineNdx*2 + 1].sharedEdge[0] = true; - triangleScene.triangles[lineNdx*2 + 1].positions[1] = tcu::Vec4(lineQuadNormalizedDeviceSpace[2].x(), lineQuadNormalizedDeviceSpace[2].y(), 0.0f, 1.0f); triangleScene.triangles[lineNdx*2 + 1].sharedEdge[1] = false; - triangleScene.triangles[lineNdx*2 + 1].positions[2] = tcu::Vec4(lineQuadNormalizedDeviceSpace[3].x(), lineQuadNormalizedDeviceSpace[3].y(), 0.0f, 1.0f); triangleScene.triangles[lineNdx*2 + 1].sharedEdge[2] = false; + // "leftoverPhase" carries over a fractional stipple phase that was "unused" + // by the last line segment in the strip, if it wasn't an integer length. + if (leftoverPhase > lineLength) + { + DE_ASSERT(d0 == 0.0f); + d1 = lineLength; + leftoverPhase -= lineLength; + } + else if (leftoverPhase != 0.0f) + { + DE_ASSERT(d0 == 0.0f); + d1 = leftoverPhase; + leftoverPhase = 0.0f; + } + else + { + if (d0 + 1.0f > lineLength) + { + d1 = lineLength; + leftoverPhase = d0 + 1.0f - lineLength; + } + else + d1 = d0 + 1.0f; + } + + // set offset for next iteration + lineOffset = d1; + + int stippleBit = (stippleCounter / scene.stippleFactor) % 16; + bool stipplePass = (scene.stipplePattern & (1 << stippleBit)) != 0; + + if (leftoverPhase == 0) + stippleCounter++; + + if (!stipplePass) + continue; + + d0 /= lineLength; + d1 /= lineLength; + + tcu::Vec2 l0 = mix(lineScreenSpace[0], lineScreenSpace[1], d0); + tcu::Vec2 l1 = mix(lineScreenSpace[0], lineScreenSpace[1], d1); + + const tcu::Vec2 lineQuadScreenSpace[4] = + { + l0 + lineNormalDir * halfLineWidth, + l0 - lineNormalDir * halfLineWidth, + l1 - lineNormalDir * halfLineWidth, + l1 + lineNormalDir * halfLineWidth, + }; + const tcu::Vec2 lineQuadNormalizedDeviceSpace[4] = + { + lineQuadScreenSpace[0] / viewportSize * 2.0f - tcu::Vec2(1.0f, 1.0f), + lineQuadScreenSpace[1] / viewportSize * 2.0f - tcu::Vec2(1.0f, 1.0f), + lineQuadScreenSpace[2] / viewportSize * 2.0f - tcu::Vec2(1.0f, 1.0f), + lineQuadScreenSpace[3] / viewportSize * 2.0f - tcu::Vec2(1.0f, 1.0f), + }; + + TriangleSceneSpec::SceneTriangle tri; + + tri.positions[0] = tcu::Vec4(lineQuadNormalizedDeviceSpace[0].x(), lineQuadNormalizedDeviceSpace[0].y(), 0.0f, 1.0f); tri.sharedEdge[0] = (d0 != 0.0f); + tri.positions[1] = tcu::Vec4(lineQuadNormalizedDeviceSpace[1].x(), lineQuadNormalizedDeviceSpace[1].y(), 0.0f, 1.0f); tri.sharedEdge[1] = false; + tri.positions[2] = tcu::Vec4(lineQuadNormalizedDeviceSpace[2].x(), lineQuadNormalizedDeviceSpace[2].y(), 0.0f, 1.0f); tri.sharedEdge[2] = true; + + triangleScene.triangles.push_back(tri); + + tri.positions[0] = tcu::Vec4(lineQuadNormalizedDeviceSpace[0].x(), lineQuadNormalizedDeviceSpace[0].y(), 0.0f, 1.0f); tri.sharedEdge[0] = true; + tri.positions[1] = tcu::Vec4(lineQuadNormalizedDeviceSpace[2].x(), lineQuadNormalizedDeviceSpace[2].y(), 0.0f, 1.0f); tri.sharedEdge[1] = (d1 != 1.0f); + tri.positions[2] = tcu::Vec4(lineQuadNormalizedDeviceSpace[3].x(), lineQuadNormalizedDeviceSpace[3].y(), 0.0f, 1.0f); tri.sharedEdge[2] = false; + + triangleScene.triangles.push_back(tri); + } + } + else + { + const tcu::Vec2 lineQuadScreenSpace[4] = + { + lineScreenSpace[0] + lineNormalDir * halfLineWidth, + lineScreenSpace[0] - lineNormalDir * halfLineWidth, + lineScreenSpace[1] - lineNormalDir * halfLineWidth, + lineScreenSpace[1] + lineNormalDir * halfLineWidth, + }; + const tcu::Vec2 lineQuadNormalizedDeviceSpace[4] = + { + lineQuadScreenSpace[0] / viewportSize * 2.0f - tcu::Vec2(1.0f, 1.0f), + lineQuadScreenSpace[1] / viewportSize * 2.0f - tcu::Vec2(1.0f, 1.0f), + lineQuadScreenSpace[2] / viewportSize * 2.0f - tcu::Vec2(1.0f, 1.0f), + lineQuadScreenSpace[3] / viewportSize * 2.0f - tcu::Vec2(1.0f, 1.0f), + }; + + triangleScene.triangles[lineNdx*2 + 0].positions[0] = tcu::Vec4(lineQuadNormalizedDeviceSpace[0].x(), lineQuadNormalizedDeviceSpace[0].y(), 0.0f, 1.0f); triangleScene.triangles[lineNdx*2 + 0].sharedEdge[0] = false; + triangleScene.triangles[lineNdx*2 + 0].positions[1] = tcu::Vec4(lineQuadNormalizedDeviceSpace[1].x(), lineQuadNormalizedDeviceSpace[1].y(), 0.0f, 1.0f); triangleScene.triangles[lineNdx*2 + 0].sharedEdge[1] = false; + triangleScene.triangles[lineNdx*2 + 0].positions[2] = tcu::Vec4(lineQuadNormalizedDeviceSpace[2].x(), lineQuadNormalizedDeviceSpace[2].y(), 0.0f, 1.0f); triangleScene.triangles[lineNdx*2 + 0].sharedEdge[2] = true; + + triangleScene.triangles[lineNdx*2 + 1].positions[0] = tcu::Vec4(lineQuadNormalizedDeviceSpace[0].x(), lineQuadNormalizedDeviceSpace[0].y(), 0.0f, 1.0f); triangleScene.triangles[lineNdx*2 + 1].sharedEdge[0] = true; + triangleScene.triangles[lineNdx*2 + 1].positions[1] = tcu::Vec4(lineQuadNormalizedDeviceSpace[2].x(), lineQuadNormalizedDeviceSpace[2].y(), 0.0f, 1.0f); triangleScene.triangles[lineNdx*2 + 1].sharedEdge[1] = false; + triangleScene.triangles[lineNdx*2 + 1].positions[2] = tcu::Vec4(lineQuadNormalizedDeviceSpace[3].x(), lineQuadNormalizedDeviceSpace[3].y(), 0.0f, 1.0f); triangleScene.triangles[lineNdx*2 + 1].sharedEdge[2] = false; + } } - return verifyTriangleGroupRasterization(surface, triangleScene, args, log, VERIFICATIONMODE_STRICT, logStash); + return verifyTriangleGroupRasterization(surface, triangleScene, args, log, scene.verificationMode, logStash); } bool verifyMultisampleLineGroupInterpolation (const tcu::Surface& surface, const LineSceneSpec& scene, const RasterizationArguments& args, tcu::TestLog& log) @@ -1100,7 +1197,6 @@ bool verifySinglesampleLineGroupRasterization (const tcu::Surface& surface, cons int referenceFragments = 0; int resultFragments = 0; int lineWidth = deFloorFloatToInt32(scene.lineWidth + 0.5f); - bool imageShown = false; std::vector lineIsXMajor (scene.lines.size()); std::vector screenspaceLines(scene.lines.size()); @@ -1110,9 +1206,9 @@ bool verifySinglesampleLineGroupRasterization (const tcu::Surface& surface, cons genScreenSpaceLines(screenspaceLines, scene.lines, tcu::IVec2(surface.getWidth(), surface.getHeight())); + rr::SingleSampleLineRasterizer rasterizer(tcu::IVec4(0, 0, surface.getWidth(), surface.getHeight()), args.subpixelBits); for (int lineNdx = 0; lineNdx < (int)scene.lines.size(); ++lineNdx) { - rr::SingleSampleLineRasterizer rasterizer(tcu::IVec4(0, 0, surface.getWidth(), surface.getHeight()), args.subpixelBits); rasterizer.init(tcu::Vec4(screenspaceLines[lineNdx][0], screenspaceLines[lineNdx][1], 0.0f, @@ -1121,7 +1217,12 @@ bool verifySinglesampleLineGroupRasterization (const tcu::Surface& surface, cons screenspaceLines[lineNdx][3], 0.0f, 1.0f), - scene.lineWidth); + scene.lineWidth, + scene.stippleFactor, + scene.stipplePattern); + + if (!scene.isStrip) + rasterizer.resetStipple(); // calculate majority of later use lineIsXMajor[lineNdx] = isPackedSSLineXMajor(screenspaceLines[lineNdx]); @@ -1209,13 +1310,6 @@ bool verifySinglesampleLineGroupRasterization (const tcu::Surface& surface, cons if (missingFragments) { - log << tcu::TestLog::Message << "Invalid deviation(s) found." << tcu::TestLog::EndMessage; - log << tcu::TestLog::ImageSet("Verification result", "Result of rendering") - << tcu::TestLog::Image("Result", "Result", surface) - << tcu::TestLog::Image("ErrorMask", "ErrorMask", errorMask) - << tcu::TestLog::EndImageSet; - - imageShown = true; allOK = false; } else @@ -1256,7 +1350,6 @@ bool verifySinglesampleLineGroupRasterization (const tcu::Surface& surface, cons << tcu::TestLog::EndImageSet; allOK = false; - imageShown = true; } else { @@ -1303,7 +1396,6 @@ bool verifySinglesampleLineGroupRasterization (const tcu::Surface& surface, cons { if (lineID && lineID != nearbyID) multipleNearbyLines = true; - lineID = nearbyID; } } @@ -1461,10 +1553,20 @@ bool verifySinglesampleLineGroupRasterization (const tcu::Surface& surface, cons //duplicate fragments, nor may any fragments be omitted so as to interrupt //continuity of the connected segments. - if (!imageShown) { + tcu::Surface reference(surface.getWidth(), surface.getHeight()); + + // show a helpful reference image + tcu::clear(reference.getAccess(), tcu::IVec4(0, 0, 0, 255)); + for (int y = 0; y < surface.getHeight(); ++y) + for (int x = 0; x < surface.getWidth(); ++x) + if (referenceLineMap.getAccess().getPixelInt(x, y).x()) + reference.setPixel(x, y, tcu::RGBA::white()); + + log << tcu::TestLog::Message << "Invalid fragment count in result image." << tcu::TestLog::EndMessage; log << tcu::TestLog::ImageSet("Verification result", "Result of rendering") - << tcu::TestLog::Image("Result", "Result", surface) + << tcu::TestLog::Image("Reference", "Reference", reference) + << tcu::TestLog::Image("Result", "Result", surface) << tcu::TestLog::EndImageSet; } @@ -1495,7 +1597,8 @@ void setMaskMapCoverageBitForLine (int bitNdx, const tcu::Vec2& screenSpaceP0, c rasterizer.init(tcu::Vec4(screenSpaceP0.x(), screenSpaceP0.y(), 0.0f, 1.0f), tcu::Vec4(screenSpaceP1.x(), screenSpaceP1.y(), 0.0f, 1.0f), - lineWidth); + lineWidth, + 1, 0xFFFF); while (numRasterized == MAX_PACKETS) { @@ -2279,6 +2382,7 @@ bool verifyTriangleGroupRasterization (const tcu::Surface& surface, const Triang const tcu::RGBA partialPixelColor = tcu::RGBA(255, 255, 0, 255); const tcu::RGBA primitivePixelColor = tcu::RGBA(30, 30, 30, 255); const int weakVerificationThreshold = 10; + const int weakerVerificationThreshold = 25; const bool multisampled = (args.numSamples != 0); const tcu::IVec2 viewportSize = tcu::IVec2(surface.getWidth(), surface.getHeight()); int missingPixels = 0; @@ -2404,7 +2508,9 @@ bool verifyTriangleGroupRasterization (const tcu::Surface& surface, const Triang } if (((mode == VERIFICATIONMODE_STRICT) && (missingPixels + unexpectedPixels > 0)) || - ((mode == VERIFICATIONMODE_WEAK) && (missingPixels + unexpectedPixels > weakVerificationThreshold))) + ((mode == VERIFICATIONMODE_WEAK) && (missingPixels + unexpectedPixels > weakVerificationThreshold)) || + ((mode == VERIFICATIONMODE_WEAKER) && (missingPixels + unexpectedPixels > weakerVerificationThreshold)) || + ((mode == VERIFICATIONMODE_SMOOTH) && (missingPixels > weakVerificationThreshold))) { result = false; } diff --git a/framework/common/tcuRasterizationVerifier.hpp b/framework/common/tcuRasterizationVerifier.hpp index 0815116..7d20bd9 100644 --- a/framework/common/tcuRasterizationVerifier.hpp +++ b/framework/common/tcuRasterizationVerifier.hpp @@ -46,6 +46,8 @@ enum VerificationMode { VERIFICATIONMODE_STRICT = 0, // !< do not allow even a single bad pixel VERIFICATIONMODE_WEAK, // !< allow some bad pixels + VERIFICATIONMODE_WEAKER, // !< allow more bad pixels + VERIFICATIONMODE_SMOOTH, // !< allow no missing pixels VERIFICATIONMODE_LAST }; @@ -71,6 +73,13 @@ struct TriangleSceneSpec struct LineSceneSpec { + LineSceneSpec() + : isStrip(false) + , isSmooth(false) + , stippleEnable(false) + , verificationMode(VERIFICATIONMODE_STRICT) + {} + struct SceneLine { tcu::Vec4 positions[2]; @@ -79,6 +88,12 @@ struct LineSceneSpec std::vector lines; float lineWidth; + bool isStrip; + bool isSmooth; + bool stippleEnable; + deUint32 stippleFactor; + deUint16 stipplePattern; + VerificationMode verificationMode; }; struct PointSceneSpec diff --git a/framework/referencerenderer/rrRasterizer.cpp b/framework/referencerenderer/rrRasterizer.cpp index 1f51410..a5efabc 100644 --- a/framework/referencerenderer/rrRasterizer.cpp +++ b/framework/referencerenderer/rrRasterizer.cpp @@ -860,6 +860,7 @@ SingleSampleLineRasterizer::SingleSampleLineRasterizer (const tcu::IVec4& viewpo , m_subpixelBits (subpixelBits) , m_curRowFragment (0) , m_lineWidth (0.0f) + , m_stippleCounter (0) { } @@ -867,7 +868,7 @@ SingleSampleLineRasterizer::~SingleSampleLineRasterizer (void) { } -void SingleSampleLineRasterizer::init (const tcu::Vec4& v0, const tcu::Vec4& v1, float lineWidth) +void SingleSampleLineRasterizer::init (const tcu::Vec4& v0, const tcu::Vec4& v1, float lineWidth, deUint32 stippleFactor, deUint16 stipplePattern) { const bool isXMajor = de::abs((v1 - v0).x()) >= de::abs((v1 - v0).y()); @@ -915,8 +916,17 @@ void SingleSampleLineRasterizer::init (const tcu::Vec4& v0, const tcu::Vec4& v1, m_v0 = v0; m_v1 = v1; - m_curPos = m_bboxMin; + // Choose direction of traversal and whether to start at bbox min or max. Direction matters + // for the stipple counter. + int xDelta = (m_v1 - m_v0).x() > 0 ? 1 : -1; + int yDelta = (m_v1 - m_v0).y() > 0 ? 1 : -1; + + m_curPos.x() = xDelta > 0 ? m_bboxMin.x() : m_bboxMax.x(); + m_curPos.y() = yDelta > 0 ? m_bboxMin.y() : m_bboxMax.y(); + m_curRowFragment = 0; + m_stippleFactor = stippleFactor; + m_stipplePattern = stipplePattern; } void SingleSampleLineRasterizer::rasterize (FragmentPacket* const fragmentPackets, float* const depthValues, const int maxFragmentPackets, int& numPacketsRasterized) @@ -935,8 +945,10 @@ void SingleSampleLineRasterizer::rasterize (FragmentPacket* const fragmentPacket const LineRasterUtil::SubpixelLineSegment line = LineRasterUtil::SubpixelLineSegment(pa, pb); int packetNdx = 0; + int xDelta = (m_v1 - m_v0).x() > 0 ? 1 : -1; + int yDelta = (m_v1 - m_v0).y() > 0 ? 1 : -1; - while (m_curPos.y() <= m_bboxMax.y() && packetNdx < maxFragmentPackets) + while (m_curPos.y() <= m_bboxMax.y() && m_curPos.y() >= m_bboxMin.y() && packetNdx < maxFragmentPackets) { const tcu::Vector diamondPosition = LineRasterUtil::toSubpixelVector(m_curPos, m_subpixelBits) + tcu::Vector(halfPixel,halfPixel); @@ -951,61 +963,69 @@ void SingleSampleLineRasterizer::rasterize (FragmentPacket* const fragmentPacket const int rowFragBegin = de::max(0, minViewportLimit - fragmentLocation); const int rowFragEnd = de::min(maxViewportLimit - fragmentLocation, lineWidth); - // Wide lines require multiple fragments. - for (; rowFragBegin + m_curRowFragment < rowFragEnd; m_curRowFragment++) - { - const int replicationId = rowFragBegin + m_curRowFragment; - const tcu::IVec2 fragmentPos = m_curPos + minorDirection * replicationId; - - // We only rasterize visible area - DE_ASSERT(LineRasterUtil::inViewport(fragmentPos, m_viewport)); + int stippleBit = (m_stippleCounter / m_stippleFactor) % 16; + bool stipplePass = (m_stipplePattern & (1 << stippleBit)) != 0; + m_stippleCounter++; - // Compute depth values. - if (depthValues) + if (stipplePass) + { + // Wide lines require multiple fragments. + for (; rowFragBegin + m_curRowFragment < rowFragEnd; m_curRowFragment++) { - const float za = m_v0.z(); - const float zb = m_v1.z(); - - depthValues[packetNdx*4+0] = (1 - t) * za + t * zb; - depthValues[packetNdx*4+1] = 0; - depthValues[packetNdx*4+2] = 0; - depthValues[packetNdx*4+3] = 0; + const int replicationId = rowFragBegin + m_curRowFragment; + const tcu::IVec2 fragmentPos = m_curPos + minorDirection * replicationId; + + // We only rasterize visible area + DE_ASSERT(LineRasterUtil::inViewport(fragmentPos, m_viewport)); + + // Compute depth values. + if (depthValues) + { + const float za = m_v0.z(); + const float zb = m_v1.z(); + + depthValues[packetNdx*4+0] = (1 - t) * za + t * zb; + depthValues[packetNdx*4+1] = 0; + depthValues[packetNdx*4+2] = 0; + depthValues[packetNdx*4+3] = 0; + } + + { + // output this fragment + // \note In order to make consistent output with multisampled line rasterization, output "barycentric" coordinates + FragmentPacket& packet = fragmentPackets[packetNdx]; + + const tcu::Vec4 b0 = tcu::Vec4(1 - t); + const tcu::Vec4 b1 = tcu::Vec4(t); + const tcu::Vec4 ooSum = 1.0f / (b0 + b1); + + packet.position = fragmentPos; + packet.coverage = getCoverageBit(1, 0, 0, 0); + packet.barycentric[0] = b0 * ooSum; + packet.barycentric[1] = b1 * ooSum; + packet.barycentric[2] = tcu::Vec4(0.0f); + + packetNdx += 1; + } + + if (packetNdx == maxFragmentPackets) + { + m_curRowFragment++; // don't redraw this fragment again next time + m_stippleCounter--; // reuse same stipple counter next time + numPacketsRasterized = packetNdx; + return; + } } - { - // output this fragment - // \note In order to make consistent output with multisampled line rasterization, output "barycentric" coordinates - FragmentPacket& packet = fragmentPackets[packetNdx]; - - const tcu::Vec4 b0 = tcu::Vec4(1 - t); - const tcu::Vec4 b1 = tcu::Vec4(t); - const tcu::Vec4 ooSum = 1.0f / (b0 + b1); - - packet.position = fragmentPos; - packet.coverage = getCoverageBit(1, 0, 0, 0); - packet.barycentric[0] = b0 * ooSum; - packet.barycentric[1] = b1 * ooSum; - packet.barycentric[2] = tcu::Vec4(0.0f); - - packetNdx += 1; - } - - if (packetNdx == maxFragmentPackets) - { - m_curRowFragment++; // don't redraw this fragment again next time - numPacketsRasterized = packetNdx; - return; - } + m_curRowFragment = 0; } - - m_curRowFragment = 0; } - ++m_curPos.x(); - if (m_curPos.x() > m_bboxMax.x()) + m_curPos.x() += xDelta; + if (m_curPos.x() > m_bboxMax.x() || m_curPos.x() < m_bboxMin.x()) { - ++m_curPos.y(); - m_curPos.x() = m_bboxMin.x(); + m_curPos.y() += yDelta; + m_curPos.x() = xDelta > 0 ? m_bboxMin.x() : m_bboxMax.x(); } } diff --git a/framework/referencerenderer/rrRasterizer.hpp b/framework/referencerenderer/rrRasterizer.hpp index da8800a..1f8bbb0 100644 --- a/framework/referencerenderer/rrRasterizer.hpp +++ b/framework/referencerenderer/rrRasterizer.hpp @@ -181,11 +181,13 @@ public: SingleSampleLineRasterizer (const tcu::IVec4& viewport, const int subpixelBits); ~SingleSampleLineRasterizer (void); - void init (const tcu::Vec4& v0, const tcu::Vec4& v1, float lineWidth); + void init (const tcu::Vec4& v0, const tcu::Vec4& v1, float lineWidth, deUint32 stippleFactor, deUint16 stipplePattern); // only available after init() void rasterize (FragmentPacket* const fragmentPackets, float* const depthValues, const int maxFragmentPackets, int& numPacketsRasterized); + void resetStipple () { m_stippleCounter = 0; } + private: SingleSampleLineRasterizer (const SingleSampleLineRasterizer&); // not allowed SingleSampleLineRasterizer& operator= (const SingleSampleLineRasterizer&); // not allowed @@ -202,6 +204,9 @@ private: tcu::IVec2 m_curPos; //!< Current rasterization position. deInt32 m_curRowFragment; //!< Current rasterization position of one fragment in column of lineWidth fragments float m_lineWidth; + deUint32 m_stippleFactor; + deUint16 m_stipplePattern; + deUint32 m_stippleCounter; } DE_WARN_UNUSED_TYPE; diff --git a/framework/referencerenderer/rrRenderer.cpp b/framework/referencerenderer/rrRenderer.cpp index 9b72c72..721cadc 100644 --- a/framework/referencerenderer/rrRenderer.cpp +++ b/framework/referencerenderer/rrRenderer.cpp @@ -1182,7 +1182,7 @@ void rasterizePrimitive (const RenderState& state, if (msaa) msaaRasterizer.init(line.v0->position, line.v1->position, state.line.lineWidth); else - aliasedRasterizer.init(line.v0->position, line.v1->position, state.line.lineWidth); + aliasedRasterizer.init(line.v0->position, line.v1->position, state.line.lineWidth, 1, 0xFFFF); for (;;) { -- 2.7.4