Add tests for non strict lines
Tests for strict and non-strict lines rasterization:
* dEQP-VK.rasterization.*.strict_*
* dEQP-VK.rasterization.*.non_strict_*
Components: Vulkan
VK-GL-CTS issue: 1024
Change-Id: If2c4dbe359be0e2550b063216dbd427f80c980db
diff --git a/android/cts/master/vk-master-2020-03-01.txt b/android/cts/master/vk-master-2020-03-01.txt
index fd13827..9c8fa32 100644
--- a/android/cts/master/vk-master-2020-03-01.txt
+++ b/android/cts/master/vk-master-2020-03-01.txt
@@ -152502,6 +152502,14 @@
dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g16_b16_r16_3plane_444_unorm.128_128_8
dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g16_b16_r16_3plane_444_unorm.503_137_3
dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g16_b16_r16_3plane_444_unorm.11_37_3
+dEQP-VK.rasterization.primitives.no_stipple.strict_lines
+dEQP-VK.rasterization.primitives.no_stipple.strict_line_strip
+dEQP-VK.rasterization.primitives.no_stipple.strict_lines_wide
+dEQP-VK.rasterization.primitives.no_stipple.strict_line_strip_wide
+dEQP-VK.rasterization.primitives.no_stipple.non_strict_lines
+dEQP-VK.rasterization.primitives.no_stipple.non_strict_line_strip
+dEQP-VK.rasterization.primitives.no_stipple.non_strict_lines_wide
+dEQP-VK.rasterization.primitives.no_stipple.non_strict_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
@@ -152554,6 +152562,34 @@
dEQP-VK.rasterization.primitive_size.points.point_size_4096
dEQP-VK.rasterization.primitive_size.points.point_size_8192
dEQP-VK.rasterization.primitive_size.points.point_size_10000
+dEQP-VK.rasterization.interpolation.basic.strict_lines
+dEQP-VK.rasterization.interpolation.basic.strict_line_strip
+dEQP-VK.rasterization.interpolation.basic.strict_lines_wide
+dEQP-VK.rasterization.interpolation.basic.strict_line_strip_wide
+dEQP-VK.rasterization.interpolation.basic.non_strict_lines
+dEQP-VK.rasterization.interpolation.basic.non_strict_line_strip
+dEQP-VK.rasterization.interpolation.basic.non_strict_lines_wide
+dEQP-VK.rasterization.interpolation.basic.non_strict_line_strip_wide
+dEQP-VK.rasterization.interpolation.projected.strict_lines
+dEQP-VK.rasterization.interpolation.projected.strict_line_strip
+dEQP-VK.rasterization.interpolation.projected.strict_lines_wide
+dEQP-VK.rasterization.interpolation.projected.strict_line_strip_wide
+dEQP-VK.rasterization.interpolation.projected.non_strict_lines
+dEQP-VK.rasterization.interpolation.projected.non_strict_line_strip
+dEQP-VK.rasterization.interpolation.projected.non_strict_lines_wide
+dEQP-VK.rasterization.interpolation.projected.non_strict_line_strip_wide
+dEQP-VK.rasterization.flatshading.strict_lines
+dEQP-VK.rasterization.flatshading.strict_line_strip
+dEQP-VK.rasterization.flatshading.strict_lines_wide
+dEQP-VK.rasterization.flatshading.strict_line_strip_wide
+dEQP-VK.rasterization.flatshading.non_strict_lines
+dEQP-VK.rasterization.flatshading.non_strict_line_strip
+dEQP-VK.rasterization.flatshading.non_strict_lines_wide
+dEQP-VK.rasterization.flatshading.non_strict_line_strip_wide
+dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.strict_lines
+dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.strict_lines_wide
+dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.non_strict_lines
+dEQP-VK.rasterization.primitives_multisample_2_bit.no_stipple.non_strict_lines_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
@@ -152598,6 +152634,14 @@
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.interpolation_multisample_2_bit.strict_lines
+dEQP-VK.rasterization.interpolation_multisample_2_bit.strict_lines_wide
+dEQP-VK.rasterization.interpolation_multisample_2_bit.non_strict_lines
+dEQP-VK.rasterization.interpolation_multisample_2_bit.non_strict_lines_wide
+dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.strict_lines
+dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.strict_lines_wide
+dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.non_strict_lines
+dEQP-VK.rasterization.primitives_multisample_4_bit.no_stipple.non_strict_lines_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
@@ -152642,6 +152686,14 @@
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.interpolation_multisample_4_bit.strict_lines
+dEQP-VK.rasterization.interpolation_multisample_4_bit.strict_lines_wide
+dEQP-VK.rasterization.interpolation_multisample_4_bit.non_strict_lines
+dEQP-VK.rasterization.interpolation_multisample_4_bit.non_strict_lines_wide
+dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.strict_lines
+dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.strict_lines_wide
+dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.non_strict_lines
+dEQP-VK.rasterization.primitives_multisample_8_bit.no_stipple.non_strict_lines_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
@@ -152686,6 +152738,14 @@
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.interpolation_multisample_8_bit.strict_lines
+dEQP-VK.rasterization.interpolation_multisample_8_bit.strict_lines_wide
+dEQP-VK.rasterization.interpolation_multisample_8_bit.non_strict_lines
+dEQP-VK.rasterization.interpolation_multisample_8_bit.non_strict_lines_wide
+dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.strict_lines
+dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.strict_lines_wide
+dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.non_strict_lines
+dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.non_strict_lines_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
@@ -152730,6 +152790,14 @@
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.interpolation_multisample_16_bit.strict_lines
+dEQP-VK.rasterization.interpolation_multisample_16_bit.strict_lines_wide
+dEQP-VK.rasterization.interpolation_multisample_16_bit.non_strict_lines
+dEQP-VK.rasterization.interpolation_multisample_16_bit.non_strict_lines_wide
+dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.strict_lines
+dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.strict_lines_wide
+dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.non_strict_lines
+dEQP-VK.rasterization.primitives_multisample_32_bit.no_stipple.non_strict_lines_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
@@ -152774,6 +152842,14 @@
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.interpolation_multisample_32_bit.strict_lines
+dEQP-VK.rasterization.interpolation_multisample_32_bit.strict_lines_wide
+dEQP-VK.rasterization.interpolation_multisample_32_bit.non_strict_lines
+dEQP-VK.rasterization.interpolation_multisample_32_bit.non_strict_lines_wide
+dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.strict_lines
+dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.strict_lines_wide
+dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.non_strict_lines
+dEQP-VK.rasterization.primitives_multisample_64_bit.no_stipple.non_strict_lines_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
@@ -152818,6 +152894,10 @@
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.interpolation_multisample_64_bit.strict_lines
+dEQP-VK.rasterization.interpolation_multisample_64_bit.strict_lines_wide
+dEQP-VK.rasterization.interpolation_multisample_64_bit.non_strict_lines
+dEQP-VK.rasterization.interpolation_multisample_64_bit.non_strict_lines_wide
dEQP-VK.rasterization.provoking_vertex.triangle_list
dEQP-VK.rasterization.provoking_vertex.triangle_list_with_adjacency
dEQP-VK.rasterization.provoking_vertex.triangle_strip
diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt
index 321a139..ddd227b 100644
--- a/android/cts/master/vk-master.txt
+++ b/android/cts/master/vk-master.txt
Binary files differ
diff --git a/external/vulkancts/modules/vulkan/rasterization/vktRasterizationTests.cpp b/external/vulkancts/modules/vulkan/rasterization/vktRasterizationTests.cpp
index 5f35a7d..173dc2b 100644
--- a/external/vulkancts/modules/vulkan/rasterization/vktRasterizationTests.cpp
+++ b/external/vulkancts/modules/vulkan/rasterization/vktRasterizationTests.cpp
@@ -118,6 +118,15 @@
static const deUint32 lineStippleFactor = 2;
static const deUint32 lineStipplePattern = 0x0F0F;
+enum PrimitiveStrictness
+{
+ PRIMITIVESTRICTNESS_STRICT = 0,
+ PRIMITIVESTRICTNESS_NONSTRICT,
+ PRIMITIVESTRICTNESS_IGNORE,
+
+ PRIMITIVESTRICTNESS_LAST
+};
+
class BaseRenderingTestCase : public TestCase
{
public:
@@ -174,7 +183,7 @@
const VkPipelineRasterizationStateCreateInfo* getRasterizationStateCreateInfo (void) const;
virtual
- VkPipelineRasterizationLineStateCreateInfoEXT getLineRasterizationStateCreateInfo (void) const;
+ VkPipelineRasterizationLineStateCreateInfoEXT* getLineRasterizationStateCreateInfo (void);
virtual
const VkPipelineColorBlendStateCreateInfo* getColorBlendStateCreateInfo (void) const;
@@ -220,6 +229,8 @@
const deUint32 m_additionalRenderSize;
const VkDeviceSize m_additionalResultBufferSize;
+
+ VkPipelineRasterizationLineStateCreateInfoEXT m_lineRasterizationStateInfo;
};
BaseRenderingTestInstance::BaseRenderingTestInstance (Context& context, VkSampleCountFlagBits sampleCount, deUint32 renderSize, VkFormat imageFormat, deUint32 additionalRenderSize)
@@ -242,6 +253,8 @@
DescriptorPoolBuilder descriptorPoolBuilder;
DescriptorSetLayoutBuilder descriptorSetLayoutBuilder;
+ deMemset(&m_lineRasterizationStateInfo, 0, sizeof(m_lineRasterizationStateInfo));
+
// Command Pool
m_commandPool = createCommandPool(vkd, vkDevice, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, queueFamilyIndex);
@@ -711,9 +724,7 @@
VkPipelineRasterizationStateCreateInfo rasterizationStateInfo = *getRasterizationStateCreateInfo();
- VkPipelineRasterizationLineStateCreateInfoEXT lineRasterizationStateInfo = getLineRasterizationStateCreateInfo();
-
- rasterizationStateInfo.pNext = &lineRasterizationStateInfo;
+ rasterizationStateInfo.pNext = getLineRasterizationStateCreateInfo();
VkPipelineDynamicStateCreateInfo dynamicStateCreateInfo =
{
@@ -867,9 +878,9 @@
return &rasterizationStateCreateInfo;
}
-VkPipelineRasterizationLineStateCreateInfoEXT BaseRenderingTestInstance::getLineRasterizationStateCreateInfo (void) const
+VkPipelineRasterizationLineStateCreateInfoEXT* BaseRenderingTestInstance::getLineRasterizationStateCreateInfo (void)
{
- VkPipelineRasterizationLineStateCreateInfoEXT lineRasterizationStateInfo =
+ m_lineRasterizationStateInfo =
{
VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT, // VkStructureType sType;
DE_NULL, // const void* pNext;
@@ -879,7 +890,7 @@
0xFFFF, // uint16_t lineStipplePattern;
};
- return lineRasterizationStateInfo;
+ return &m_lineRasterizationStateInfo;
}
const VkPipelineColorBlendStateCreateInfo* BaseRenderingTestInstance::getColorBlendStateCreateInfo (void) const
@@ -993,83 +1004,90 @@
class BaseLineTestInstance : public BaseRenderingTestInstance
{
public:
- BaseLineTestInstance (Context& context,
- VkPrimitiveTopology primitiveTopology,
- PrimitiveWideness wideness,
- VkSampleCountFlagBits sampleCount,
- LineStipple stipple,
- VkLineRasterizationModeEXT lineRasterizationMode,
- const deUint32 additionalRenderSize = 0);
- 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; };
+ BaseLineTestInstance (Context& context,
+ VkPrimitiveTopology primitiveTopology,
+ PrimitiveWideness wideness,
+ PrimitiveStrictness strictness,
+ VkSampleCountFlagBits sampleCount,
+ LineStipple stipple,
+ VkLineRasterizationModeEXT lineRasterizationMode,
+ const deUint32 additionalRenderSize = 0);
+ 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;
+ VkPipelineRasterizationLineStateCreateInfoEXT* getLineRasterizationStateCreateInfo (void);
private:
- virtual void generateLines (int iteration, std::vector<tcu::Vec4>& outData, std::vector<LineSceneSpec::SceneLine>& outLines) = DE_NULL;
+ virtual void generateLines (int iteration, std::vector<tcu::Vec4>& outData, std::vector<LineSceneSpec::SceneLine>& outLines) = DE_NULL;
- bool resultHasAlpha (tcu::Surface& result);
+ bool resultHasAlpha (tcu::Surface& result);
- int m_iteration;
- const int m_iterationCount;
- VkPrimitiveTopology m_primitiveTopology;
- const PrimitiveWideness m_primitiveWideness;
- bool m_allIterationsPassed;
- bool m_qualityWarning;
- float m_maxLineWidth;
- std::vector<float> m_lineWidths;
- LineStipple m_stipple;
+ int m_iteration;
+ const int m_iterationCount;
+ VkPrimitiveTopology m_primitiveTopology;
+ const PrimitiveWideness m_primitiveWideness;
+ const PrimitiveStrictness m_primitiveStrictness;
+ bool m_allIterationsPassed;
+ bool m_qualityWarning;
+ float m_maxLineWidth;
+ std::vector<float> m_lineWidths;
+ LineStipple m_stipple;
VkLineRasterizationModeEXT m_lineRasterizationMode;
- Move<VkImage> m_additionalImage;
- de::MovePtr<Allocation> m_additionalImageMemory;
- Move<VkImageView> m_additionalImageView;
- Move<VkImage> m_additionalResolvedImage;
- de::MovePtr<Allocation> m_additionalResolvedImageMemory;
- Move<VkImageView> m_additionalResolvedImageView;
- Move<VkFramebuffer> m_additionalFrameBuffer;
- Move<VkBuffer> m_additionalResultBuffer;
- de::MovePtr<Allocation> m_additionalResultBufferMemory;
+ Move<VkImage> m_additionalImage;
+ de::MovePtr<Allocation> m_additionalImageMemory;
+ Move<VkImageView> m_additionalImageView;
+ Move<VkImage> m_additionalResolvedImage;
+ de::MovePtr<Allocation> m_additionalResolvedImageMemory;
+ Move<VkImageView> m_additionalResolvedImageView;
+ Move<VkFramebuffer> m_additionalFrameBuffer;
+ Move<VkBuffer> m_additionalResultBuffer;
+ de::MovePtr<Allocation> m_additionalResultBufferMemory;
};
-BaseLineTestInstance::BaseLineTestInstance (Context& context,
- VkPrimitiveTopology primitiveTopology,
- PrimitiveWideness wideness,
- VkSampleCountFlagBits sampleCount,
- LineStipple stipple,
+BaseLineTestInstance::BaseLineTestInstance (Context& context,
+ VkPrimitiveTopology primitiveTopology,
+ PrimitiveWideness wideness,
+ PrimitiveStrictness strictness,
+ VkSampleCountFlagBits sampleCount,
+ LineStipple stipple,
VkLineRasterizationModeEXT lineRasterizationMode,
const deUint32 additionalRenderSize)
- : BaseRenderingTestInstance (context, sampleCount, RESOLUTION_POT, VK_FORMAT_R8G8B8A8_UNORM, additionalRenderSize)
- , 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)
+ : BaseRenderingTestInstance (context, sampleCount, RESOLUTION_POT, VK_FORMAT_R8G8B8A8_UNORM, additionalRenderSize)
+ , m_iteration (0)
+ , m_iterationCount (3)
+ , m_primitiveTopology (primitiveTopology)
+ , m_primitiveWideness (wideness)
+ , m_primitiveStrictness (strictness)
+ , m_allIterationsPassed (true)
+ , m_qualityWarning (false)
+ , m_maxLineWidth (1.0f)
+ , m_stipple (stipple)
+ , m_lineRasterizationMode (lineRasterizationMode)
{
DE_ASSERT(m_primitiveWideness < PRIMITIVEWIDENESS_LAST);
- if (context.isDeviceFunctionalitySupported("VK_EXT_line_rasterization"))
+ if (m_lineRasterizationMode != VK_LINE_RASTERIZATION_MODE_EXT_LAST)
{
- VkPhysicalDeviceLineRasterizationPropertiesEXT lineRasterizationProperties =
+ if (context.isDeviceFunctionalitySupported("VK_EXT_line_rasterization"))
{
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT, // VkStructureType sType;
- DE_NULL, // void* pNext;
- 0u, // deUint32 lineSubPixelPrecisionBits;
- };
+ 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;
+ VkPhysicalDeviceProperties2 deviceProperties2;
+ deviceProperties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
+ deviceProperties2.pNext = &lineRasterizationProperties;
- context.getInstanceInterface().getPhysicalDeviceProperties2(m_context.getPhysicalDevice(), &deviceProperties2);
+ context.getInstanceInterface().getPhysicalDeviceProperties2(m_context.getPhysicalDevice(), &deviceProperties2);
- m_subpixelBits = lineRasterizationProperties.lineSubPixelPrecisionBits;
+ m_subpixelBits = lineRasterizationProperties.lineSubPixelPrecisionBits;
+ }
}
// create line widths
@@ -1288,8 +1306,8 @@
// compare
RasterizationArguments args;
LineSceneSpec scene;
-
- tcu::IVec4 colorBits = tcu::getTextureFormatBitDepth(getTextureFormat());
+ tcu::IVec4 colorBits = tcu::getTextureFormatBitDepth(getTextureFormat());
+ bool strict = m_primitiveStrictness == PRIMITIVESTRICTNESS_STRICT;
args.numSamples = m_multisampling ? 1 : 0;
args.subpixelBits = m_subpixelBits;
@@ -1337,11 +1355,11 @@
}
}
- if (!verifyRelaxedLineGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog(), (0 == m_multisampling)))
+ if (!verifyRelaxedLineGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog(), (0 == m_multisampling), strict))
{
// 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()))
+ if (!verifyRelaxedLineGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog(), false, strict))
m_allIterationsPassed = false;
else
m_qualityWarning = true;
@@ -1361,14 +1379,21 @@
drawPrimitives(additionalResultImage, drawBuffer, colorData, m_primitiveTopology, *m_additionalImage, *m_additionalResolvedImage, *m_additionalFrameBuffer, m_additionalRenderSize, *m_additionalResultBuffer, *m_additionalResultBufferMemory);
// Compare
- if (!verifyRelaxedLineGroupRasterization(additionalResultImage, scene, args, m_context.getTestContext().getLog(), (0 == m_multisampling)))
+ if (!verifyRelaxedLineGroupRasterization(additionalResultImage, scene, args, m_context.getTestContext().getLog(), (0 == m_multisampling), strict))
{
- // 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(), (0 == m_multisampling)))
+ if (strict)
+ {
m_allIterationsPassed = false;
+ }
else
- m_qualityWarning = true;
+ {
+ // 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(), (0 == m_multisampling), strict))
+ m_allIterationsPassed = false;
+ else
+ m_qualityWarning = true;
+ }
}
}
}
@@ -1396,9 +1421,12 @@
return m_lineWidths[m_iteration];
}
-VkPipelineRasterizationLineStateCreateInfoEXT BaseLineTestInstance::getLineRasterizationStateCreateInfo (void) const
+VkPipelineRasterizationLineStateCreateInfoEXT* BaseLineTestInstance::getLineRasterizationStateCreateInfo (void)
{
- VkPipelineRasterizationLineStateCreateInfoEXT lineRasterizationStateInfo =
+ if (m_lineRasterizationMode == VK_LINE_RASTERIZATION_MODE_EXT_LAST)
+ return DE_NULL;
+
+ m_lineRasterizationStateInfo =
{
VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT, // VkStructureType sType;
DE_NULL, // const void* pNext;
@@ -1410,17 +1438,23 @@
if (m_stipple == LINESTIPPLE_STATIC)
{
- lineRasterizationStateInfo.lineStippleFactor = lineStippleFactor;
- lineRasterizationStateInfo.lineStipplePattern = lineStipplePattern;
+ m_lineRasterizationStateInfo.lineStippleFactor = lineStippleFactor;
+ m_lineRasterizationStateInfo.lineStipplePattern = lineStipplePattern;
}
- return lineRasterizationStateInfo;
+ return &m_lineRasterizationStateInfo;
}
class PointTestInstance : public BaseRenderingTestInstance
{
public:
- PointTestInstance (Context& context, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount, /*ignored*/LineStipple stipple, /*ignored*/VkLineRasterizationModeEXT lineRasterizationMode, deUint32 renderSize);
+ PointTestInstance (Context& context,
+ PrimitiveWideness wideness,
+ PrimitiveStrictness strictness, // ignored
+ VkSampleCountFlagBits sampleCount,
+ LineStipple stipple, // ignored
+ VkLineRasterizationModeEXT lineRasterizationMode, // ignored
+ deUint32 renderSize); // ignored
virtual tcu::TestStatus iterate (void);
virtual float getPointSize (void) const;
@@ -1435,7 +1469,13 @@
std::vector<float> m_pointSizes;
};
-PointTestInstance::PointTestInstance (Context& context, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount, /*ignored*/LineStipple stipple, /*ignored*/VkLineRasterizationModeEXT lineRasterizationMode, deUint32)
+PointTestInstance::PointTestInstance (Context& context,
+ PrimitiveWideness wideness,
+ PrimitiveStrictness strictness,
+ VkSampleCountFlagBits sampleCount,
+ LineStipple stipple,
+ VkLineRasterizationModeEXT lineRasterizationMode,
+ deUint32 renderSize)
: BaseRenderingTestInstance (context, sampleCount)
, m_iteration (0)
, m_iterationCount (3)
@@ -1443,8 +1483,11 @@
, m_allIterationsPassed (true)
, m_maxPointSize (1.0f)
{
- (void)stipple;
- (void)lineRasterizationMode;
+ DE_UNREF(strictness);
+ DE_UNREF(stipple);
+ DE_UNREF(lineRasterizationMode);
+ DE_UNREF(renderSize);
+
// create point sizes
if (m_primitiveWideness == PRIMITIVEWIDENESS_NARROW)
{
@@ -2120,18 +2163,28 @@
class WidenessTestCase : public BaseRenderingTestCase
{
public:
- WidenessTestCase (tcu::TestContext& context, const std::string& name, const std::string& description, PrimitiveWideness wideness, bool isLineTest, VkSampleCountFlagBits sampleCount, LineStipple stipple, VkLineRasterizationModeEXT lineRasterizationMode, deUint32 additionalRenderSize = 0)
- : BaseRenderingTestCase(context, name, description, sampleCount)
- , m_wideness (wideness)
- , m_isLineTest (isLineTest)
- , m_stipple(stipple)
- , m_lineRasterizationMode(lineRasterizationMode)
+ WidenessTestCase (tcu::TestContext& context,
+ const std::string& name,
+ const std::string& description,
+ PrimitiveWideness wideness,
+ PrimitiveStrictness strictness,
+ bool isLineTest,
+ VkSampleCountFlagBits sampleCount,
+ LineStipple stipple,
+ VkLineRasterizationModeEXT lineRasterizationMode,
+ deUint32 additionalRenderSize = 0)
+ : BaseRenderingTestCase (context, name, description, sampleCount)
+ , m_wideness(wideness)
+ , m_strictness (strictness)
+ , m_isLineTest (isLineTest)
+ , m_stipple (stipple)
+ , m_lineRasterizationMode (lineRasterizationMode)
, m_additionalRenderSize (additionalRenderSize)
{}
virtual TestInstance* createInstance (Context& context) const
{
- return new ConcreteTestInstance(context, m_wideness, m_sampleCount, m_stipple, m_lineRasterizationMode, m_additionalRenderSize);
+ return new ConcreteTestInstance(context, m_wideness, m_strictness, m_sampleCount, m_stipple, m_lineRasterizationMode, m_additionalRenderSize);
}
virtual void checkSupport (Context& context) const
@@ -2143,40 +2196,65 @@
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");
+ default:
+ TCU_THROW(InternalError, "Unknown line rasterization mode");
- if (getLineStippleEnable() &&
- !context.getLineRasterizationFeaturesEXT().stippledRectangularLines)
- TCU_THROW(NotSupportedError, "Stippled rectangular lines not supported");
- break;
- case VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT:
- if (!context.getLineRasterizationFeaturesEXT().rectangularLines)
- TCU_THROW(NotSupportedError, "Rectangular lines not supported");
+ case VK_LINE_RASTERIZATION_MODE_EXT_LAST:
+ {
+ if (m_strictness == PRIMITIVESTRICTNESS_STRICT)
+ if (!context.getDeviceProperties().limits.strictLines)
+ TCU_THROW(NotSupportedError, "Strict rasterization is not supported");
- if (getLineStippleEnable() &&
- !context.getLineRasterizationFeaturesEXT().stippledRectangularLines)
- TCU_THROW(NotSupportedError, "Stippled rectangular lines not supported");
- break;
- case VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT:
- if (!context.getLineRasterizationFeaturesEXT().bresenhamLines)
- TCU_THROW(NotSupportedError, "Bresenham lines not supported");
+ if (m_strictness == PRIMITIVESTRICTNESS_NONSTRICT)
+ if (context.getDeviceProperties().limits.strictLines)
+ TCU_THROW(NotSupportedError, "Nonstrict rasterization is not supported");
- if (getLineStippleEnable() &&
- !context.getLineRasterizationFeaturesEXT().stippledBresenhamLines)
- TCU_THROW(NotSupportedError, "Stippled Bresenham lines not supported");
- break;
- case VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT:
- if (!context.getLineRasterizationFeaturesEXT().smoothLines)
- TCU_THROW(NotSupportedError, "Smooth lines not supported");
+ break;
+ }
- if (getLineStippleEnable() &&
- !context.getLineRasterizationFeaturesEXT().stippledSmoothLines)
- TCU_THROW(NotSupportedError, "Stippled smooth lines not supported");
- break;
+ case VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT:
+ {
+ if (!context.getDeviceProperties().limits.strictLines)
+ TCU_THROW(NotSupportedError, "Strict rasterization is not supported");
+
+ if (getLineStippleEnable() &&
+ !context.getLineRasterizationFeaturesEXT().stippledRectangularLines)
+ TCU_THROW(NotSupportedError, "Stippled rectangular lines not supported");
+ break;
+ }
+
+ case VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT:
+ {
+ if (!context.getLineRasterizationFeaturesEXT().rectangularLines)
+ TCU_THROW(NotSupportedError, "Rectangular lines not supported");
+
+ if (getLineStippleEnable() &&
+ !context.getLineRasterizationFeaturesEXT().stippledRectangularLines)
+ TCU_THROW(NotSupportedError, "Stippled rectangular lines not supported");
+ break;
+ }
+
+ case VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT:
+ {
+ if (!context.getLineRasterizationFeaturesEXT().bresenhamLines)
+ TCU_THROW(NotSupportedError, "Bresenham lines not supported");
+
+ if (getLineStippleEnable() &&
+ !context.getLineRasterizationFeaturesEXT().stippledBresenhamLines)
+ TCU_THROW(NotSupportedError, "Stippled Bresenham lines not supported");
+ break;
+ }
+
+ case VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT:
+ {
+ if (!context.getLineRasterizationFeaturesEXT().smoothLines)
+ TCU_THROW(NotSupportedError, "Smooth lines not supported");
+
+ if (getLineStippleEnable() &&
+ !context.getLineRasterizationFeaturesEXT().stippledSmoothLines)
+ TCU_THROW(NotSupportedError, "Stippled smooth lines not supported");
+ break;
+ }
}
}
else
@@ -2190,18 +2268,19 @@
virtual bool getLineStippleDynamic (void) const { return m_stipple == LINESTIPPLE_DYNAMIC; };
protected:
- const PrimitiveWideness m_wideness;
- const bool m_isLineTest;
+ const PrimitiveWideness m_wideness;
+ const PrimitiveStrictness m_strictness;
+ const bool m_isLineTest;
const LineStipple m_stipple;
const VkLineRasterizationModeEXT m_lineRasterizationMode;
- const deUint32 m_additionalRenderSize;
+ const deUint32 m_additionalRenderSize;
};
class LinesTestInstance : public BaseLineTestInstance
{
public:
- LinesTestInstance (Context& context, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount, LineStipple stipple, VkLineRasterizationModeEXT lineRasterizationMode, deUint32 additionalRenderSize = 0)
- : BaseLineTestInstance(context, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, wideness, sampleCount, stipple, lineRasterizationMode, additionalRenderSize)
+ LinesTestInstance (Context& context, PrimitiveWideness wideness, PrimitiveStrictness strictness, VkSampleCountFlagBits sampleCount, LineStipple stipple, VkLineRasterizationModeEXT lineRasterizationMode, deUint32 additionalRenderSize = 0)
+ : BaseLineTestInstance(context, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, wideness, strictness, sampleCount, stipple, lineRasterizationMode, additionalRenderSize)
{}
virtual void generateLines (int iteration, std::vector<tcu::Vec4>& outData, std::vector<LineSceneSpec::SceneLine>& outLines);
@@ -2274,8 +2353,8 @@
class LineStripTestInstance : public BaseLineTestInstance
{
public:
- LineStripTestInstance (Context& context, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount, LineStipple stipple, VkLineRasterizationModeEXT lineRasterizationMode, deUint32)
- : BaseLineTestInstance(context, VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, wideness, sampleCount, stipple, lineRasterizationMode)
+ LineStripTestInstance (Context& context, PrimitiveWideness wideness, PrimitiveStrictness strictness, VkSampleCountFlagBits sampleCount, LineStipple stipple, VkLineRasterizationModeEXT lineRasterizationMode, deUint32)
+ : BaseLineTestInstance(context, VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, wideness, strictness, sampleCount, stipple, lineRasterizationMode)
{}
virtual void generateLines (int iteration, std::vector<tcu::Vec4>& outData, std::vector<LineSceneSpec::SceneLine>& outLines);
@@ -3647,7 +3726,7 @@
class LineInterpolationTestInstance : public BaseRenderingTestInstance
{
public:
- LineInterpolationTestInstance (Context& context, VkPrimitiveTopology primitiveTopology, int flags, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount);
+ LineInterpolationTestInstance (Context& context, VkPrimitiveTopology primitiveTopology, int flags, PrimitiveWideness wideness, PrimitiveStrictness strictness, VkSampleCountFlagBits sampleCount);
virtual tcu::TestStatus iterate (void);
@@ -3666,9 +3745,10 @@
float m_maxLineWidth;
std::vector<float> m_lineWidths;
bool m_flatshade;
+ PrimitiveStrictness m_strictness;
};
-LineInterpolationTestInstance::LineInterpolationTestInstance (Context& context, VkPrimitiveTopology primitiveTopology, int flags, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount)
+LineInterpolationTestInstance::LineInterpolationTestInstance (Context& context, VkPrimitiveTopology primitiveTopology, int flags, PrimitiveWideness wideness, PrimitiveStrictness strictness, VkSampleCountFlagBits sampleCount)
: BaseRenderingTestInstance (context, sampleCount)
, m_primitiveTopology (primitiveTopology)
, m_projective ((flags & INTERPOLATIONFLAGS_PROJECTED) != 0)
@@ -3678,6 +3758,7 @@
, m_allIterationsPassed (true)
, m_maxLineWidth (1.0f)
, m_flatshade ((flags & INTERPOLATIONFLAGS_FLATSHADE) != 0)
+ , m_strictness (strictness)
{
DE_ASSERT(m_primitiveWideness < PRIMITIVEWIDENESS_LAST);
@@ -3749,8 +3830,28 @@
scene.lines.swap(lines);
scene.lineWidth = getLineWidth();
- if (!verifyTriangulatedLineGroupInterpolation(resultImage, scene, args, m_context.getTestContext().getLog()))
- m_allIterationsPassed = false;
+ switch (m_strictness)
+ {
+ case PRIMITIVESTRICTNESS_STRICT:
+ {
+ if (!verifyTriangulatedLineGroupInterpolation(resultImage, scene, args, m_context.getTestContext().getLog(), true))
+ m_allIterationsPassed = false;
+
+ break;
+ }
+
+ case PRIMITIVESTRICTNESS_NONSTRICT:
+ case PRIMITIVESTRICTNESS_IGNORE:
+ {
+ if (!verifyTriangulatedLineGroupInterpolation(resultImage, scene, args, m_context.getTestContext().getLog(), false))
+ m_allIterationsPassed = false;
+
+ break;
+ }
+
+ default:
+ TCU_THROW(InternalError, "Not implemented");
+ }
}
}
else
@@ -3870,21 +3971,30 @@
class LineInterpolationTestCase : public BaseRenderingTestCase
{
public:
- LineInterpolationTestCase (tcu::TestContext& context, const std::string& name, const std::string& description, VkPrimitiveTopology primitiveTopology, int flags, PrimitiveWideness wideness, VkSampleCountFlagBits sampleCount = VK_SAMPLE_COUNT_1_BIT)
+ LineInterpolationTestCase (tcu::TestContext& context,
+ const std::string& name,
+ const std::string& description,
+ VkPrimitiveTopology primitiveTopology,
+ int flags,
+ PrimitiveWideness wideness,
+ PrimitiveStrictness strictness,
+ VkSampleCountFlagBits sampleCount = VK_SAMPLE_COUNT_1_BIT)
: BaseRenderingTestCase (context, name, description, sampleCount, (flags & INTERPOLATIONFLAGS_FLATSHADE) != 0)
, m_primitiveTopology (primitiveTopology)
, m_flags (flags)
, m_wideness (wideness)
+ , m_strictness (strictness)
{}
virtual TestInstance* createInstance (Context& context) const
{
- return new LineInterpolationTestInstance(context, m_primitiveTopology, m_flags, m_wideness, m_sampleCount);
+ return new LineInterpolationTestInstance(context, m_primitiveTopology, m_flags, m_wideness, m_strictness, m_sampleCount);
}
virtual void checkSupport (Context& context) const
{
- if (!context.getDeviceProperties().limits.strictLines)
+ if (m_strictness == PRIMITIVESTRICTNESS_STRICT &&
+ !context.getDeviceProperties().limits.strictLines)
TCU_THROW(NotSupportedError, "Strict rasterization is not supported");
if (m_wideness == PRIMITIVEWIDENESS_WIDE)
@@ -3894,6 +4004,7 @@
const VkPrimitiveTopology m_primitiveTopology;
const int m_flags;
const PrimitiveWideness m_wideness;
+ const PrimitiveStrictness m_strictness;
};
void createRasterizationTests (tcu::TestCaseGroup* rasterizationTests)
@@ -3917,7 +4028,17 @@
nostippleTests->addChild(new BaseTestCase<TrianglesTestInstance> (testCtx, "triangles", "Render primitives as VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, verify rasterization result"));
nostippleTests->addChild(new BaseTestCase<TriangleStripTestInstance> (testCtx, "triangle_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, verify rasterization result"));
nostippleTests->addChild(new BaseTestCase<TriangleFanTestInstance> (testCtx, "triangle_fan", "Render primitives as VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN, verify rasterization result"));
- nostippleTests->addChild(new WidenessTestCase<PointTestInstance> (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));
+ nostippleTests->addChild(new WidenessTestCase<PointTestInstance> (testCtx, "points", "Render primitives as VK_PRIMITIVE_TOPOLOGY_POINT_LIST, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, false, VK_SAMPLE_COUNT_1_BIT, LINESTIPPLE_DISABLED, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT));
+
+ nostippleTests->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "strict_lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST in strict mode, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_STRICT, true, VK_SAMPLE_COUNT_1_BIT, LINESTIPPLE_DISABLED, VK_LINE_RASTERIZATION_MODE_EXT_LAST));
+ nostippleTests->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "strict_line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP in strict mode, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_STRICT, true, VK_SAMPLE_COUNT_1_BIT, LINESTIPPLE_DISABLED, VK_LINE_RASTERIZATION_MODE_EXT_LAST));
+ nostippleTests->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "strict_lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST in strict mode with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_STRICT, true, VK_SAMPLE_COUNT_1_BIT, LINESTIPPLE_DISABLED, VK_LINE_RASTERIZATION_MODE_EXT_LAST));
+ nostippleTests->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "strict_line_strip_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP in strict mode with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_STRICT, true, VK_SAMPLE_COUNT_1_BIT, LINESTIPPLE_DISABLED, VK_LINE_RASTERIZATION_MODE_EXT_LAST));
+
+ nostippleTests->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "non_strict_lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST in nonstrict mode, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_NONSTRICT, true, VK_SAMPLE_COUNT_1_BIT, LINESTIPPLE_DISABLED, VK_LINE_RASTERIZATION_MODE_EXT_LAST));
+ nostippleTests->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "non_strict_line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP in nonstrict mode, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_NONSTRICT, true, VK_SAMPLE_COUNT_1_BIT, LINESTIPPLE_DISABLED, VK_LINE_RASTERIZATION_MODE_EXT_LAST));
+ nostippleTests->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "non_strict_lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST in nonstrict mode with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_NONSTRICT, true, VK_SAMPLE_COUNT_1_BIT, LINESTIPPLE_DISABLED, VK_LINE_RASTERIZATION_MODE_EXT_LAST));
+ nostippleTests->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "non_strict_line_strip_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP in nonstrict mode with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_NONSTRICT, true, VK_SAMPLE_COUNT_1_BIT, LINESTIPPLE_DISABLED, VK_LINE_RASTERIZATION_MODE_EXT_LAST));
for (int i = 0; i < 3; ++i) {
@@ -3925,25 +4046,25 @@
LineStipple stipple = (LineStipple)i;
- g->addChild(new WidenessTestCase<LinesTestInstance> (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, i == 0 ? RESOLUTION_NPOT : 0));
- g->addChild(new WidenessTestCase<LineStripTestInstance> (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<LinesTestInstance> (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<LineStripTestInstance> (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<LinesTestInstance> (testCtx, "lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT, i == 0 ? RESOLUTION_NPOT : 0));
+ g->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT));
+ g->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT));
+ g->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "line_strip_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT));
- g->addChild(new WidenessTestCase<LinesTestInstance> (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<LineStripTestInstance> (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<LinesTestInstance> (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<LineStripTestInstance> (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<LinesTestInstance> (testCtx, "rectangular_lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT));
+ g->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "rectangular_line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT));
+ g->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "rectangular_lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT));
+ g->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "rectangular_line_strip_wide","Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT));
- g->addChild(new WidenessTestCase<LinesTestInstance> (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<LineStripTestInstance> (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<LinesTestInstance> (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<LineStripTestInstance> (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<LinesTestInstance> (testCtx, "bresenham_lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT));
+ g->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "bresenham_line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT));
+ g->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "bresenham_lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT));
+ g->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "bresenham_line_strip_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT));
- g->addChild(new WidenessTestCase<LinesTestInstance> (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<LineStripTestInstance> (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<LinesTestInstance> (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<LineStripTestInstance> (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));
+ g->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "smooth_lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT));
+ g->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "smooth_line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT));
+ g->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "smooth_lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT));
+ g->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "smooth_line_strip_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, true, VK_SAMPLE_COUNT_1_BIT, stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT));
}
}
@@ -4118,10 +4239,20 @@
basic->addChild(new TriangleInterpolationTestCase (testCtx, "triangles", "Verify triangle interpolation", VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, INTERPOLATIONFLAGS_NONE));
basic->addChild(new TriangleInterpolationTestCase (testCtx, "triangle_strip", "Verify triangle strip interpolation", VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, INTERPOLATIONFLAGS_NONE));
basic->addChild(new TriangleInterpolationTestCase (testCtx, "triangle_fan", "Verify triangle fan interpolation", VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN, INTERPOLATIONFLAGS_NONE));
- basic->addChild(new LineInterpolationTestCase (testCtx, "lines", "Verify line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_NARROW));
- basic->addChild(new LineInterpolationTestCase (testCtx, "line_strip", "Verify line strip interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_NARROW));
- basic->addChild(new LineInterpolationTestCase (testCtx, "lines_wide", "Verify wide line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_WIDE));
- basic->addChild(new LineInterpolationTestCase (testCtx, "line_strip_wide","Verify wide line strip interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_WIDE));
+ basic->addChild(new LineInterpolationTestCase (testCtx, "lines", "Verify line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE));
+ basic->addChild(new LineInterpolationTestCase (testCtx, "line_strip", "Verify line strip interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE));
+ basic->addChild(new LineInterpolationTestCase (testCtx, "lines_wide", "Verify wide line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE));
+ basic->addChild(new LineInterpolationTestCase (testCtx, "line_strip_wide","Verify wide line strip interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE));
+
+ basic->addChild(new LineInterpolationTestCase (testCtx, "strict_lines", "Verify strict line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_STRICT));
+ basic->addChild(new LineInterpolationTestCase (testCtx, "strict_line_strip", "Verify strict line strip interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_STRICT));
+ basic->addChild(new LineInterpolationTestCase (testCtx, "strict_lines_wide", "Verify strict wide line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_STRICT));
+ basic->addChild(new LineInterpolationTestCase (testCtx, "strict_line_strip_wide", "Verify strict wide line strip interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_STRICT));
+
+ basic->addChild(new LineInterpolationTestCase (testCtx, "non_strict_lines", "Verify non-strict line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_NONSTRICT));
+ basic->addChild(new LineInterpolationTestCase (testCtx, "non_strict_line_strip", "Verify non-strict line strip interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_NONSTRICT));
+ basic->addChild(new LineInterpolationTestCase (testCtx, "non_strict_lines_wide", "Verify non-strict wide line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_NONSTRICT));
+ basic->addChild(new LineInterpolationTestCase (testCtx, "non_strict_line_strip_wide", "Verify non-strict wide line strip interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_NONSTRICT));
}
// .projected
@@ -4133,10 +4264,20 @@
projected->addChild(new TriangleInterpolationTestCase (testCtx, "triangles", "Verify triangle interpolation", VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, INTERPOLATIONFLAGS_PROJECTED));
projected->addChild(new TriangleInterpolationTestCase (testCtx, "triangle_strip", "Verify triangle strip interpolation", VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, INTERPOLATIONFLAGS_PROJECTED));
projected->addChild(new TriangleInterpolationTestCase (testCtx, "triangle_fan", "Verify triangle fan interpolation", VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN, INTERPOLATIONFLAGS_PROJECTED));
- projected->addChild(new LineInterpolationTestCase (testCtx, "lines", "Verify line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_PROJECTED, PRIMITIVEWIDENESS_NARROW));
- projected->addChild(new LineInterpolationTestCase (testCtx, "line_strip", "Verify line strip interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_PROJECTED, PRIMITIVEWIDENESS_NARROW));
- projected->addChild(new LineInterpolationTestCase (testCtx, "lines_wide", "Verify wide line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_PROJECTED, PRIMITIVEWIDENESS_WIDE));
- projected->addChild(new LineInterpolationTestCase (testCtx, "line_strip_wide","Verify wide line strip interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_PROJECTED, PRIMITIVEWIDENESS_WIDE));
+ projected->addChild(new LineInterpolationTestCase (testCtx, "lines", "Verify line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_PROJECTED, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE));
+ projected->addChild(new LineInterpolationTestCase (testCtx, "line_strip", "Verify line strip interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_PROJECTED, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE));
+ projected->addChild(new LineInterpolationTestCase (testCtx, "lines_wide", "Verify wide line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_PROJECTED, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE));
+ projected->addChild(new LineInterpolationTestCase (testCtx, "line_strip_wide","Verify wide line strip interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_PROJECTED, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE));
+
+ projected->addChild(new LineInterpolationTestCase (testCtx, "strict_lines", "Verify strict line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_PROJECTED, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_STRICT));
+ projected->addChild(new LineInterpolationTestCase (testCtx, "strict_line_strip", "Verify strict line strip interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_PROJECTED, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_STRICT));
+ projected->addChild(new LineInterpolationTestCase (testCtx, "strict_lines_wide", "Verify strict wide line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_PROJECTED, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_STRICT));
+ projected->addChild(new LineInterpolationTestCase (testCtx, "strict_line_strip_wide", "Verify strict wide line strip interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_PROJECTED, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_STRICT));
+
+ projected->addChild(new LineInterpolationTestCase (testCtx, "non_strict_lines", "Verify non-strict line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_PROJECTED, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_NONSTRICT));
+ projected->addChild(new LineInterpolationTestCase (testCtx, "non_strict_line_strip", "Verify non-strict line strip interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_PROJECTED, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_NONSTRICT));
+ projected->addChild(new LineInterpolationTestCase (testCtx, "non_strict_lines_wide", "Verify non-strict wide line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_PROJECTED, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_NONSTRICT));
+ projected->addChild(new LineInterpolationTestCase (testCtx, "non_strict_line_strip_wide", "Verify non-strict wide line strip interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_PROJECTED, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_NONSTRICT));
}
}
@@ -4149,10 +4290,20 @@
flatshading->addChild(new TriangleInterpolationTestCase (testCtx, "triangles", "Verify triangle flatshading", VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, INTERPOLATIONFLAGS_FLATSHADE));
flatshading->addChild(new TriangleInterpolationTestCase (testCtx, "triangle_strip", "Verify triangle strip flatshading", VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, INTERPOLATIONFLAGS_FLATSHADE));
flatshading->addChild(new TriangleInterpolationTestCase (testCtx, "triangle_fan", "Verify triangle fan flatshading", VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN, INTERPOLATIONFLAGS_FLATSHADE));
- flatshading->addChild(new LineInterpolationTestCase (testCtx, "lines", "Verify line flatshading", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_FLATSHADE, PRIMITIVEWIDENESS_NARROW));
- flatshading->addChild(new LineInterpolationTestCase (testCtx, "line_strip", "Verify line strip flatshading", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_FLATSHADE, PRIMITIVEWIDENESS_NARROW));
- flatshading->addChild(new LineInterpolationTestCase (testCtx, "lines_wide", "Verify wide line flatshading", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_FLATSHADE, PRIMITIVEWIDENESS_WIDE));
- flatshading->addChild(new LineInterpolationTestCase (testCtx, "line_strip_wide","Verify wide line strip flatshading", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_FLATSHADE, PRIMITIVEWIDENESS_WIDE));
+ flatshading->addChild(new LineInterpolationTestCase (testCtx, "lines", "Verify line flatshading", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_FLATSHADE, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE));
+ flatshading->addChild(new LineInterpolationTestCase (testCtx, "line_strip", "Verify line strip flatshading", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_FLATSHADE, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE));
+ flatshading->addChild(new LineInterpolationTestCase (testCtx, "lines_wide", "Verify wide line flatshading", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_FLATSHADE, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE));
+ flatshading->addChild(new LineInterpolationTestCase (testCtx, "line_strip_wide","Verify wide line strip flatshading", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_FLATSHADE, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE));
+
+ flatshading->addChild(new LineInterpolationTestCase (testCtx, "strict_lines", "Verify strict line flatshading", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_FLATSHADE, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_STRICT));
+ flatshading->addChild(new LineInterpolationTestCase (testCtx, "strict_line_strip", "Verify strict line strip flatshading", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_FLATSHADE, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_STRICT));
+ flatshading->addChild(new LineInterpolationTestCase (testCtx, "strict_lines_wide", "Verify strict wide line flatshading", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_FLATSHADE, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_STRICT));
+ flatshading->addChild(new LineInterpolationTestCase (testCtx, "strict_line_strip_wide", "Verify strict wide line strip flatshading", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_FLATSHADE, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_STRICT));
+
+ flatshading->addChild(new LineInterpolationTestCase (testCtx, "non_strict_lines", "Verify non-strict line flatshading", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_FLATSHADE, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_NONSTRICT));
+ flatshading->addChild(new LineInterpolationTestCase (testCtx, "non_strict_line_strip", "Verify non-strict line strip flatshading", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_FLATSHADE, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_NONSTRICT));
+ flatshading->addChild(new LineInterpolationTestCase (testCtx, "non_strict_lines_wide", "Verify non-strict wide line flatshading", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_FLATSHADE, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_NONSTRICT));
+ flatshading->addChild(new LineInterpolationTestCase (testCtx, "non_strict_line_strip_wide", "Verify non-strict wide line strip flatshading", VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, INTERPOLATIONFLAGS_FLATSHADE, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_NONSTRICT));
}
const VkSampleCountFlagBits samples[] =
@@ -4186,7 +4337,13 @@
primitives->addChild(stippleDynamicTests);
nostippleTests->addChild(new BaseTestCase<TrianglesTestInstance> (testCtx, "triangles", "Render primitives as VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, verify rasterization result", samples[samplesNdx]));
- nostippleTests->addChild(new WidenessTestCase<PointTestInstance> (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));
+ nostippleTests->addChild(new WidenessTestCase<PointTestInstance> (testCtx, "points", "Render primitives as VK_PRIMITIVE_TOPOLOGY_POINT_LIST, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, false, samples[samplesNdx], LINESTIPPLE_DISABLED, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT));
+
+ nostippleTests->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "strict_lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST in strict mode, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_STRICT, true, samples[samplesNdx], LINESTIPPLE_DISABLED, VK_LINE_RASTERIZATION_MODE_EXT_LAST));
+ nostippleTests->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "strict_lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST in strict mode with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_STRICT, true, samples[samplesNdx], LINESTIPPLE_DISABLED, VK_LINE_RASTERIZATION_MODE_EXT_LAST));
+
+ nostippleTests->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "non_strict_lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST in nonstrict mode, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_NONSTRICT, true, samples[samplesNdx], LINESTIPPLE_DISABLED, VK_LINE_RASTERIZATION_MODE_EXT_LAST));
+ nostippleTests->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "non_strict_lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST in nonstrict mode with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_NONSTRICT, true, samples[samplesNdx], LINESTIPPLE_DISABLED, VK_LINE_RASTERIZATION_MODE_EXT_LAST));
for (int i = 0; i < 3; ++i) {
@@ -4194,25 +4351,25 @@
LineStipple stipple = (LineStipple)i;
- g->addChild(new WidenessTestCase<LinesTestInstance> (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, i == 0 ? RESOLUTION_NPOT : 0));
- g->addChild(new WidenessTestCase<LineStripTestInstance> (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<LinesTestInstance> (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<LineStripTestInstance> (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<LinesTestInstance> (testCtx, "lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT, i == 0 ? RESOLUTION_NPOT : 0));
+ g->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT));
+ g->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT));
+ g->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "line_strip_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT));
- g->addChild(new WidenessTestCase<LinesTestInstance> (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<LineStripTestInstance> (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<LinesTestInstance> (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<LineStripTestInstance> (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<LinesTestInstance> (testCtx, "rectangular_lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT));
+ g->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "rectangular_line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT));
+ g->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "rectangular_lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT));
+ g->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "rectangular_line_strip_wide","Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT));
- g->addChild(new WidenessTestCase<LinesTestInstance> (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<LineStripTestInstance> (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<LinesTestInstance> (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<LineStripTestInstance> (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<LinesTestInstance> (testCtx, "bresenham_lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT));
+ g->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "bresenham_line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT));
+ g->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "bresenham_lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT));
+ g->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "bresenham_line_strip_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT));
- g->addChild(new WidenessTestCase<LinesTestInstance> (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<LineStripTestInstance> (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<LinesTestInstance> (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<LineStripTestInstance> (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));
+ g->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "smooth_lines", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT));
+ g->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "smooth_line_strip", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, verify rasterization result", PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT));
+ g->addChild(new WidenessTestCase<LinesTestInstance> (testCtx, "smooth_lines_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_LIST with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT));
+ g->addChild(new WidenessTestCase<LineStripTestInstance> (testCtx, "smooth_line_strip_wide", "Render primitives as VK_PRIMITIVE_TOPOLOGY_LINE_STRIP with wide lines, verify rasterization result", PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, true, samples[samplesNdx], stipple, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT));
}
}
@@ -4235,9 +4392,15 @@
rasterizationTests->addChild(interpolation);
- interpolation->addChild(new TriangleInterpolationTestCase (testCtx, "triangles", "Verify triangle interpolation", VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, INTERPOLATIONFLAGS_NONE, samples[samplesNdx]));
- interpolation->addChild(new LineInterpolationTestCase (testCtx, "lines", "Verify line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_NARROW, samples[samplesNdx]));
- interpolation->addChild(new LineInterpolationTestCase (testCtx, "lines_wide", "Verify wide line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_WIDE, samples[samplesNdx]));
+ interpolation->addChild(new TriangleInterpolationTestCase (testCtx, "triangles", "Verify triangle interpolation", VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, INTERPOLATIONFLAGS_NONE, samples[samplesNdx]));
+ interpolation->addChild(new LineInterpolationTestCase (testCtx, "lines", "Verify line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_IGNORE, samples[samplesNdx]));
+ interpolation->addChild(new LineInterpolationTestCase (testCtx, "lines_wide", "Verify wide line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_IGNORE, samples[samplesNdx]));
+
+ interpolation->addChild(new LineInterpolationTestCase (testCtx, "strict_lines", "Verify strict line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_STRICT, samples[samplesNdx]));
+ interpolation->addChild(new LineInterpolationTestCase (testCtx, "strict_lines_wide", "Verify strict wide line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_STRICT, samples[samplesNdx]));
+
+ interpolation->addChild(new LineInterpolationTestCase (testCtx, "non_strict_lines", "Verify non-strict line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_NARROW, PRIMITIVESTRICTNESS_NONSTRICT, samples[samplesNdx]));
+ interpolation->addChild(new LineInterpolationTestCase (testCtx, "non_strict_lines_wide", "Verify non-strict wide line interpolation", VK_PRIMITIVE_TOPOLOGY_LINE_LIST, INTERPOLATIONFLAGS_NONE, PRIMITIVEWIDENESS_WIDE, PRIMITIVESTRICTNESS_NONSTRICT, samples[samplesNdx]));
}
}
diff --git a/external/vulkancts/mustpass/master/src/excluded-tests.txt b/external/vulkancts/mustpass/master/src/excluded-tests.txt
index 2d2dc32..160f3df 100644
--- a/external/vulkancts/mustpass/master/src/excluded-tests.txt
+++ b/external/vulkancts/mustpass/master/src/excluded-tests.txt
@@ -15,4 +15,9 @@
# VK-GL-CTS 1829
# Test shader length is excessive, excluding until such time as the test case can be re-visited.
-dEQP-VK.ssbo.layout.random.scalar.75
\ No newline at end of file
+dEQP-VK.ssbo.layout.random.scalar.75
+
+# VK-GL-CTS 1024
+dEQP-VK.rasterization.interpolation_multisample_16_bit.lines_wide
+dEQP-VK.rasterization.interpolation_multisample_16_bit.non_strict_lines_wide
+dEQP-VK.rasterization.primitives_multisample_16_bit.no_stipple.non_strict_lines_wide
diff --git a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt
index 18cb4e6..73512ef 100644
--- a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt
+++ b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt
Binary files differ
diff --git a/external/vulkancts/mustpass/master/vk-default.txt b/external/vulkancts/mustpass/master/vk-default.txt
index b0acfc5..c2f97fb 100644
--- a/external/vulkancts/mustpass/master/vk-default.txt
+++ b/external/vulkancts/mustpass/master/vk-default.txt
Binary files differ
diff --git a/framework/common/tcuRasterizationVerifier.cpp b/framework/common/tcuRasterizationVerifier.cpp
index 3945bce..8fe7cf3 100644
--- a/framework/common/tcuRasterizationVerifier.cpp
+++ b/framework/common/tcuRasterizationVerifier.cpp
@@ -28,7 +28,9 @@
#include "tcuTextureUtil.hpp"
#include "tcuVectorUtil.hpp"
#include "tcuFloat.hpp"
+
#include "deMath.h"
+#include "deStringUtil.hpp"
#include "rrRasterizer.hpp"
@@ -651,7 +653,11 @@
};
template <typename Interpolator>
-bool verifyTriangleGroupInterpolationWithInterpolator (const tcu::Surface& surface, const TriangleSceneSpec& scene, const RasterizationArguments& args, tcu::TestLog& log, const Interpolator& interpolator)
+bool verifyTriangleGroupInterpolationWithInterpolator (const tcu::Surface& surface,
+ const TriangleSceneSpec& scene,
+ const RasterizationArguments& args,
+ VerifyTriangleGroupInterpolationLogStash& logStash,
+ const Interpolator& interpolator)
{
const tcu::RGBA invalidPixelColor = tcu::RGBA(255, 0, 0, 255);
const bool multisampled = (args.numSamples != 0);
@@ -666,21 +672,22 @@
// log format
- log << tcu::TestLog::Message << "Verifying rasterization result. Native format is RGB" << args.redBits << args.greenBits << args.blueBits << tcu::TestLog::EndMessage;
+ logStash.messages.push_back(std::string("Verifying rasterization result. Native format is RGB" + de::toString(args.redBits) + de::toString(args.greenBits) + de::toString(args.blueBits)));
if (args.redBits > 8 || args.greenBits > 8 || args.blueBits > 8)
- log << tcu::TestLog::Message << "Warning! More than 8 bits in a color channel, this may produce false negatives." << tcu::TestLog::EndMessage;
+ logStash.messages.push_back(std::string("Warning! More than 8 bits in a color channel, this may produce false negatives."));
// subpixel bits in a valid range?
if (subPixelBits < 0)
{
- log << tcu::TestLog::Message << "Invalid subpixel count (" << subPixelBits << "), assuming 0" << tcu::TestLog::EndMessage;
+ logStash.messages.push_back(std::string("Invalid subpixel count (" + de::toString(subPixelBits) + "), assuming 0"));
subPixelBits = 0;
}
else if (subPixelBits > 16)
{
// At high subpixel bit counts we might overflow. Checking at lower bit count is ok, but is less strict
- log << tcu::TestLog::Message << "Subpixel count is greater than 16 (" << subPixelBits << "). Checking results using less strict 16 bit requirements. This may produce false positives." << tcu::TestLog::EndMessage;
+ logStash.messages.push_back(std::string("Subpixel count is greater than 16 (" + de::toString(subPixelBits) + ")."
+ " Checking results using less strict 16 bit requirements. This may produce false positives."));
subPixelBits = 16;
}
@@ -763,11 +770,13 @@
// don't fill the logs with too much data
if (errorCount < errorFloodThreshold)
{
- log << tcu::TestLog::Message
- << "Found an invalid pixel at (" << x << "," << y << ")\n"
+ std::ostringstream str;
+
+ str << "Found an invalid pixel at (" << x << "," << y << ")\n"
<< "\tPixel color:\t\t" << color << "\n"
- << "\tExpected background color.\n"
- << tcu::TestLog::EndMessage;
+ << "\tExpected background color.\n";
+
+ logStash.messages.push_back(str.str());
}
++invalidPixels;
@@ -816,8 +825,9 @@
// don't fill the logs with too much data
if (errorCount <= errorFloodThreshold)
{
- log << tcu::TestLog::Message
- << "Found an invalid pixel at (" << x << "," << y << ")\n"
+ std::ostringstream str;
+
+ str << "Found an invalid pixel at (" << x << "," << y << ")\n"
<< "\tPixel color:\t\t" << color << "\n"
<< "\tNative color:\t\t" << pixelNativeColor << "\n"
<< "\tAllowed error:\t\t" << tcu::IVec3(thresholdRed, thresholdGreen, thresholdBlue) << "\n"
@@ -826,8 +836,8 @@
<< "\tReference native float min: " << tcu::clamp(colorMinF - tcu::IVec3(thresholdRed, thresholdGreen, thresholdBlue).cast<float>(), tcu::Vec3(0.0f, 0.0f, 0.0f), formatLimit.cast<float>()) << "\n"
<< "\tReference native float max: " << tcu::clamp(colorMaxF + tcu::IVec3(thresholdRed, thresholdGreen, thresholdBlue).cast<float>(), tcu::Vec3(0.0f, 0.0f, 0.0f), formatLimit.cast<float>()) << "\n"
<< "\tFmin:\t" << tcu::clamp(valueRangeMin, tcu::Vec3(0.0f, 0.0f, 0.0f), tcu::Vec3(1.0f, 1.0f, 1.0f)) << "\n"
- << "\tFmax:\t" << tcu::clamp(valueRangeMax, tcu::Vec3(0.0f, 0.0f, 0.0f), tcu::Vec3(1.0f, 1.0f, 1.0f)) << "\n"
- << tcu::TestLog::EndMessage;
+ << "\tFmax:\t" << tcu::clamp(valueRangeMax, tcu::Vec3(0.0f, 0.0f, 0.0f), tcu::Vec3(1.0f, 1.0f, 1.0f)) << "\n";
+ logStash.messages.push_back(str.str());
}
++invalidPixels;
@@ -838,28 +848,16 @@
// don't just hide failures
if (errorCount > errorFloodThreshold)
- log << tcu::TestLog::Message << "Omitted " << (errorCount-errorFloodThreshold) << " pixel error description(s)." << tcu::TestLog::EndMessage;
+ logStash.messages.push_back(std::string("Omitted " + de::toString(errorCount - errorFloodThreshold) + " pixel error description(s)."));
+
+ logStash.success = (invalidPixels == 0);
+ logStash.invalidPixels = invalidPixels;
// report result
- if (invalidPixels)
- {
- log << tcu::TestLog::Message << invalidPixels << " invalid pixel(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;
+ if (!logStash.success)
+ logStash.errorMask = errorMask;
- return false;
- }
- else
- {
- log << tcu::TestLog::Message << "No invalid pixels found." << tcu::TestLog::EndMessage;
- log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
- << tcu::TestLog::Image("Result", "Result", surface)
- << tcu::TestLog::EndImageSet;
-
- return true;
- }
+ return logStash.success;
}
@@ -907,7 +905,14 @@
CLIPMODE_LAST
};
-bool verifyMultisampleLineGroupRasterization (const tcu::Surface& surface, const LineSceneSpec& scene, const RasterizationArguments& args, tcu::TestLog& log, ClipMode clipMode, VerifyTriangleGroupRasterizationLogStash* logStash = DE_NULL, const bool vulkanLinesTest = false)
+bool verifyMultisampleLineGroupRasterization (const tcu::Surface& surface,
+ const LineSceneSpec& scene,
+ const RasterizationArguments& args,
+ tcu::TestLog& log,
+ ClipMode clipMode,
+ VerifyTriangleGroupRasterizationLogStash* logStash,
+ const bool vulkanLinesTest,
+ const bool strictMode)
{
// Multisampled line == 2 triangles
@@ -948,7 +953,9 @@
};
const tcu::Vec2 lineDir = tcu::normalize(lineScreenSpace[1] - lineScreenSpace[0]);
- const tcu::Vec2 lineNormalDir = tcu::Vec2(lineDir.y(), -lineDir.x());
+ const tcu::Vec2 lineNormalDir = strictMode ? tcu::Vec2(lineDir.y(), -lineDir.x())
+ : isLineXMajor(lineScreenSpace[0], lineScreenSpace[1]) ? tcu::Vec2(0.0f, 1.0f)
+ : tcu::Vec2(1.0f, 0.0f);
if (scene.stippleEnable)
{
@@ -1060,10 +1067,20 @@
}
}
- return verifyTriangleGroupRasterization(surface, triangleScene, args, log, scene.verificationMode, logStash, vulkanLinesTest);
+ if (logStash != DE_NULL)
+ {
+ logStash->messages.push_back("Rasterization clipping mode: " + std::string(clipMode == CLIPMODE_USE_CLIPPING_BOX ? "CLIPMODE_USE_CLIPPING_BOX" : "CLIPMODE_NO_CLIPPING") + ".");
+ logStash->messages.push_back("Rasterization line draw strictness mode: " + std::string(strictMode ? "strict" : "non-strict") + ".");
+ }
+
+ return verifyTriangleGroupRasterization(surface, triangleScene, args, log, VERIFICATIONMODE_STRICT, logStash, vulkanLinesTest);
}
-bool verifyMultisampleLineGroupInterpolation (const tcu::Surface& surface, const LineSceneSpec& scene, const RasterizationArguments& args, tcu::TestLog& log)
+bool verifyMultisampleLineGroupInterpolationInternal (const tcu::Surface& surface,
+ const LineSceneSpec& scene,
+ const RasterizationArguments& args,
+ VerifyTriangleGroupInterpolationLogStash& logStash,
+ const bool strictMode)
{
// Multisampled line == 2 triangles
@@ -1087,7 +1104,9 @@
};
const tcu::Vec2 lineDir = tcu::normalize(lineScreenSpace[1] - lineScreenSpace[0]);
- const tcu::Vec2 lineNormalDir = tcu::Vec2(lineDir.y(), -lineDir.x());
+ const tcu::Vec2 lineNormalDir = strictMode ? tcu::Vec2(lineDir.y(), -lineDir.x())
+ : isLineXMajor(lineScreenSpace[0], lineScreenSpace[1]) ? tcu::Vec2(0.0f, 1.0f)
+ : tcu::Vec2(1.0f, 0.0f);
const tcu::Vec2 lineQuadScreenSpace[4] =
{
@@ -1129,7 +1148,76 @@
triangleScene.triangles[lineNdx*2 + 1].colors[2] = scene.lines[lineNdx].colors[1];
}
- return verifyTriangleGroupInterpolationWithInterpolator(surface, triangleScene, args, log, MultisampleLineInterpolator(scene));
+ return verifyTriangleGroupInterpolationWithInterpolator(surface, triangleScene, args, logStash, MultisampleLineInterpolator(scene));
+}
+
+static void logTriangleGroupnterpolationStash (const tcu::Surface& surface, tcu::TestLog& log, VerifyTriangleGroupInterpolationLogStash& logStash)
+{
+ // Output results
+ log << tcu::TestLog::Message << "Verifying rasterization result." << tcu::TestLog::EndMessage;
+
+ for (size_t msgNdx = 0; msgNdx < logStash.messages.size(); ++msgNdx)
+ log << tcu::TestLog::Message << logStash.messages[msgNdx] << tcu::TestLog::EndMessage;
+
+ // report result
+ if (!logStash.success)
+ {
+ log << tcu::TestLog::Message << logStash.invalidPixels << " invalid pixel(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", logStash.errorMask)
+ << tcu::TestLog::EndImageSet;
+ }
+ else
+ {
+ log << tcu::TestLog::Message << "No invalid pixels found." << tcu::TestLog::EndMessage;
+ log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+ << tcu::TestLog::Image("Result", "Result", surface)
+ << tcu::TestLog::EndImageSet;
+ }
+}
+
+static bool verifyMultisampleLineGroupInterpolation (const tcu::Surface& surface,
+ const LineSceneSpec& scene,
+ const RasterizationArguments& args,
+ tcu::TestLog& log,
+ const bool strictMode = true)
+{
+ bool result = false;
+ VerifyTriangleGroupInterpolationLogStash nonStrictModeLogStash;
+ VerifyTriangleGroupInterpolationLogStash strictModeLogStash;
+
+ nonStrictModeLogStash.messages.push_back("Non-strict line draw mode.");
+ strictModeLogStash.messages.push_back("Strict mode line draw mode.");
+
+ if (strictMode)
+ {
+ result = verifyMultisampleLineGroupInterpolationInternal(surface,scene, args, strictModeLogStash, strictMode);
+
+ logTriangleGroupnterpolationStash(surface, log, strictModeLogStash);
+ }
+ else
+ {
+ if (verifyMultisampleLineGroupInterpolationInternal(surface,scene, args, nonStrictModeLogStash, false))
+ {
+ logTriangleGroupnterpolationStash(surface, log, nonStrictModeLogStash);
+
+ result = true;
+ }
+ else if (verifyMultisampleLineGroupInterpolationInternal(surface,scene, args, strictModeLogStash, true))
+ {
+ logTriangleGroupnterpolationStash(surface, log, strictModeLogStash);
+
+ result = true;
+ }
+ else
+ {
+ logTriangleGroupnterpolationStash(surface, log, nonStrictModeLogStash);
+ logTriangleGroupnterpolationStash(surface, log, strictModeLogStash);
+ }
+ }
+
+ return result;
}
bool verifyMultisamplePointGroupRasterization (const tcu::Surface& surface, const PointSceneSpec& scene, const RasterizationArguments& args, tcu::TestLog& log)
@@ -2346,11 +2434,14 @@
}
}
-static void verifyTriangleGroupRasterizationLog (const tcu::Surface& surface, tcu::TestLog& log, VerifyTriangleGroupRasterizationLogStash& logStash)
+static void logTriangleGroupRasterizationStash (const tcu::Surface& surface, tcu::TestLog& log, VerifyTriangleGroupRasterizationLogStash& logStash)
{
// Output results
log << tcu::TestLog::Message << "Verifying rasterization result." << tcu::TestLog::EndMessage;
+ for (size_t msgNdx = 0; msgNdx < logStash.messages.size(); ++msgNdx)
+ log << tcu::TestLog::Message << logStash.messages[msgNdx] << tcu::TestLog::EndMessage;
+
if (!logStash.result)
{
log << tcu::TestLog::Message << "Invalid pixels found:\n\t"
@@ -2563,7 +2654,7 @@
if (logStash == DE_NULL)
{
- verifyTriangleGroupRasterizationLog(surface, log, *tempLogStash);
+ logTriangleGroupRasterizationStash(surface, log, *tempLogStash);
delete tempLogStash;
}
}
@@ -2576,34 +2667,44 @@
const bool multisampled = args.numSamples != 0;
if (multisampled)
- return verifyMultisampleLineGroupRasterization(surface, scene, args, log, CLIPMODE_NO_CLIPPING, DE_NULL);
+ return verifyMultisampleLineGroupRasterization(surface, scene, args, log, CLIPMODE_NO_CLIPPING, DE_NULL, false, true);
else
return verifySinglesampleLineGroupRasterization(surface, scene, args, log);
}
bool verifyClippedTriangulatedLineGroupRasterization (const tcu::Surface& surface, const LineSceneSpec& scene, const RasterizationArguments& args, tcu::TestLog& log)
{
- return verifyMultisampleLineGroupRasterization(surface, scene, args, log, CLIPMODE_USE_CLIPPING_BOX, DE_NULL);
+ return verifyMultisampleLineGroupRasterization(surface, scene, args, log, CLIPMODE_USE_CLIPPING_BOX, DE_NULL, false, true);
}
-bool verifyRelaxedLineGroupRasterization (const tcu::Surface& surface, const LineSceneSpec& scene, const RasterizationArguments& args, tcu::TestLog& log, const bool vulkanLinesTest)
+bool verifyRelaxedLineGroupRasterization (const tcu::Surface& surface, const LineSceneSpec& scene, const RasterizationArguments& args, tcu::TestLog& log, const bool vulkanLinesTest, const bool strict)
{
- VerifyTriangleGroupRasterizationLogStash noClippingLogStash;
VerifyTriangleGroupRasterizationLogStash useClippingLogStash;
+ VerifyTriangleGroupRasterizationLogStash noClippingLogStash;
+ VerifyTriangleGroupRasterizationLogStash useClippingForcedStrictLogStash;
+ VerifyTriangleGroupRasterizationLogStash noClippingForcedStrictLogStash;
- if (verifyMultisampleLineGroupRasterization(surface, scene, args, log, CLIPMODE_USE_CLIPPING_BOX, &useClippingLogStash, vulkanLinesTest))
+ if (verifyMultisampleLineGroupRasterization(surface, scene, args, log, CLIPMODE_USE_CLIPPING_BOX, &useClippingLogStash, vulkanLinesTest, strict))
{
- log << tcu::TestLog::Message << "Relaxed rasterization succeeded with CLIPMODE_USE_CLIPPING_BOX, details follow." << tcu::TestLog::EndMessage;
-
- verifyTriangleGroupRasterizationLog(surface, log, useClippingLogStash);
+ logTriangleGroupRasterizationStash(surface, log, useClippingLogStash);
return true;
}
- else if (verifyMultisampleLineGroupRasterization(surface, scene, args, log, CLIPMODE_NO_CLIPPING, &noClippingLogStash, vulkanLinesTest))
+ else if (verifyMultisampleLineGroupRasterization(surface, scene, args, log, CLIPMODE_NO_CLIPPING, &noClippingLogStash, vulkanLinesTest, strict))
{
- log << tcu::TestLog::Message << "Relaxed rasterization succeeded with CLIPMODE_NO_CLIPPING, details follow." << tcu::TestLog::EndMessage;
+ logTriangleGroupRasterizationStash(surface, log, noClippingLogStash);
- verifyTriangleGroupRasterizationLog(surface, log, noClippingLogStash);
+ return true;
+ }
+ else if (strict == false && verifyMultisampleLineGroupRasterization(surface, scene, args, log, CLIPMODE_USE_CLIPPING_BOX, &useClippingForcedStrictLogStash, vulkanLinesTest, true))
+ {
+ logTriangleGroupRasterizationStash(surface, log, useClippingForcedStrictLogStash);
+
+ return true;
+ }
+ else if (strict == false && verifyMultisampleLineGroupRasterization(surface, scene, args, log, CLIPMODE_NO_CLIPPING, &noClippingForcedStrictLogStash, vulkanLinesTest, true))
+ {
+ logTriangleGroupRasterizationStash(surface, log, noClippingForcedStrictLogStash);
return true;
}
@@ -2611,8 +2712,14 @@
{
log << tcu::TestLog::Message << "Relaxed rasterization failed, details follow." << tcu::TestLog::EndMessage;
- verifyTriangleGroupRasterizationLog(surface, log, useClippingLogStash);
- verifyTriangleGroupRasterizationLog(surface, log, noClippingLogStash);
+ logTriangleGroupRasterizationStash(surface, log, useClippingLogStash);
+ logTriangleGroupRasterizationStash(surface, log, noClippingLogStash);
+
+ if (strict == false)
+ {
+ logTriangleGroupRasterizationStash(surface, log, useClippingForcedStrictLogStash);
+ logTriangleGroupRasterizationStash(surface, log, noClippingForcedStrictLogStash);
+ }
return false;
}
@@ -2626,7 +2733,12 @@
bool verifyTriangleGroupInterpolation (const tcu::Surface& surface, const TriangleSceneSpec& scene, const RasterizationArguments& args, tcu::TestLog& log)
{
- return verifyTriangleGroupInterpolationWithInterpolator(surface, scene, args, log, TriangleInterpolator(scene));
+ VerifyTriangleGroupInterpolationLogStash logStash;
+ const bool result = verifyTriangleGroupInterpolationWithInterpolator(surface, scene, args, logStash, TriangleInterpolator(scene));
+
+ logTriangleGroupnterpolationStash(surface, log, logStash);
+
+ return result;
}
LineInterpolationMethod verifyLineGroupInterpolation (const tcu::Surface& surface, const LineSceneSpec& scene, const RasterizationArguments& args, tcu::TestLog& log)
@@ -2664,9 +2776,9 @@
}
}
-bool verifyTriangulatedLineGroupInterpolation (const tcu::Surface& surface, const LineSceneSpec& scene, const RasterizationArguments& args, tcu::TestLog& log)
+bool verifyTriangulatedLineGroupInterpolation (const tcu::Surface& surface, const LineSceneSpec& scene, const RasterizationArguments& args, tcu::TestLog& log, const bool strictMode)
{
- return verifyMultisampleLineGroupInterpolation(surface, scene, args, log);
+ return verifyMultisampleLineGroupInterpolation(surface, scene, args, log, strictMode);
}
} // tcu
diff --git a/framework/common/tcuRasterizationVerifier.hpp b/framework/common/tcuRasterizationVerifier.hpp
index ffff501..eb8323c 100644
--- a/framework/common/tcuRasterizationVerifier.hpp
+++ b/framework/common/tcuRasterizationVerifier.hpp
@@ -119,10 +119,19 @@
struct VerifyTriangleGroupRasterizationLogStash
{
- int missingPixels;
- int unexpectedPixels;
- tcu::Surface errorMask;
- bool result;
+ std::vector<std::string> messages;
+ int missingPixels;
+ int unexpectedPixels;
+ tcu::Surface errorMask;
+ bool result;
+};
+
+struct VerifyTriangleGroupInterpolationLogStash
+{
+ std::vector<std::string> messages;
+ int invalidPixels;
+ tcu::Surface errorMask;
+ bool success;
};
/*--------------------------------------------------------------------*//*!
@@ -178,7 +187,7 @@
*
* Returns false if both rasterizations are invalid.
*//*--------------------------------------------------------------------*/
-bool verifyRelaxedLineGroupRasterization (const tcu::Surface& surface, const LineSceneSpec& scene, const RasterizationArguments& args, tcu::TestLog& log, const bool vulkanLinesTest = false);
+bool verifyRelaxedLineGroupRasterization (const tcu::Surface& surface, const LineSceneSpec& scene, const RasterizationArguments& args, tcu::TestLog& log, const bool vulkanLinesTest = false, const bool strict = true);
/*--------------------------------------------------------------------*//*!
* \brief Verify point rasterization result
@@ -223,7 +232,7 @@
*
* Returns false if invalid rasterization interpolation is found.
*//*--------------------------------------------------------------------*/
-bool verifyTriangulatedLineGroupInterpolation (const tcu::Surface& surface, const LineSceneSpec& scene, const RasterizationArguments& args, tcu::TestLog& log);
+bool verifyTriangulatedLineGroupInterpolation (const tcu::Surface& surface, const LineSceneSpec& scene, const RasterizationArguments& args, tcu::TestLog& log, const bool strictMode = true);
} // tcu