From 446a2fdc65c554d54b4cb58327a8ed9190486463 Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Thu, 2 Feb 2017 10:09:53 +0100 Subject: [PATCH] Fix crashes in dEQP-VK.glsl.matrix.inverse.* This is a regression caused by altering the value of the GRID_SIZE in commit 2ba66fa2, which results in the inverse() tests generating input matrices which determinant is zero, and thus, cannot be inverted, which makes the tests hit an assertion. This patch adds a mechanism for shader tests to specify a grid size different from the default. This allows shader testst that are sensitive to this value, such as matrix inverse tests, to define their own requirements. Fixes VK-GL-CTS isssue: 66 Components: Vulkan Affects: dEQP-VK.glsl.matrix.inverse.* Change-Id: I31a34c2d156ee5b98d2de1b10ac4cec1a90d480e --- .../vulkan/shaderrender/vktShaderRender.cpp | 20 +++++++++++++++---- .../vulkan/shaderrender/vktShaderRender.hpp | 23 ++++++++++++++++++++-- .../shaderrender/vktShaderRenderMatrixTests.cpp | 2 +- 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.cpp b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.cpp index b11d133..c1884d2 100644 --- a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.cpp +++ b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.cpp @@ -58,7 +58,6 @@ using namespace vk; namespace { -static const int GRID_SIZE = 90; static const deUint32 MAX_RENDER_WIDTH = 128; static const deUint32 MAX_RENDER_HEIGHT = 128; static const tcu::Vec4 DEFAULT_CLEAR_COLOR = tcu::Vec4(0.125f, 0.25f, 0.5f, 1.0f); @@ -535,6 +534,7 @@ TestInstance* ShaderRenderCase::createInstance (Context& context) const ShaderRenderCaseInstance::ShaderRenderCaseInstance (Context& context) : vkt::TestInstance (context) , m_imageBackingMode (IMAGE_BACKING_MODE_REGULAR) + , m_quadGridSize (static_cast(GRID_SIZE_DEFAULT_FRAGMENT)) , m_sparseContext (createSparseContext()) , m_memAlloc (getAllocator()) , m_clearColor (DEFAULT_CLEAR_COLOR) @@ -556,9 +556,15 @@ ShaderRenderCaseInstance::ShaderRenderCaseInstance (Context& context, const ShaderEvaluator& evaluator, const UniformSetup& uniformSetup, const AttributeSetupFunc attribFunc, - const ImageBackingMode imageBackingMode) + const ImageBackingMode imageBackingMode, + const deUint32 gridSize) : vkt::TestInstance (context) , m_imageBackingMode (imageBackingMode) + , m_quadGridSize (gridSize == static_cast(GRID_SIZE_DEFAULTS) + ? (isVertexCase + ? static_cast(GRID_SIZE_DEFAULT_VERTEX) + : static_cast(GRID_SIZE_DEFAULT_FRAGMENT)) + : gridSize) , m_sparseContext (createSparseContext()) , m_memAlloc (getAllocator()) , m_clearColor (DEFAULT_CLEAR_COLOR) @@ -579,9 +585,15 @@ ShaderRenderCaseInstance::ShaderRenderCaseInstance (Context& context, const ShaderEvaluator* evaluator, const UniformSetup* uniformSetup, const AttributeSetupFunc attribFunc, - const ImageBackingMode imageBackingMode) + const ImageBackingMode imageBackingMode, + const deUint32 gridSize) : vkt::TestInstance (context) , m_imageBackingMode (imageBackingMode) + , m_quadGridSize (gridSize == static_cast(GRID_SIZE_DEFAULTS) + ? (isVertexCase + ? static_cast(GRID_SIZE_DEFAULT_VERTEX) + : static_cast(GRID_SIZE_DEFAULT_FRAGMENT)) + : gridSize) , m_sparseContext (createSparseContext()) , m_memAlloc (getAllocator()) , m_clearColor (DEFAULT_CLEAR_COLOR) @@ -737,7 +749,7 @@ tcu::TestStatus ShaderRenderCaseInstance::iterate (void) const int width = viewportSize.x(); const int height = viewportSize.y(); - m_quadGrid = de::MovePtr(new QuadGrid(m_isVertexCase ? GRID_SIZE : 4, width, height, getDefaultConstCoords(), m_userAttribTransforms, m_textures)); + m_quadGrid = de::MovePtr(new QuadGrid(m_quadGridSize, width, height, getDefaultConstCoords(), m_userAttribTransforms, m_textures)); // Render result. tcu::Surface resImage (width, height); diff --git a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.hpp b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.hpp index 6d8ac05..f639cb0 100644 --- a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.hpp +++ b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.hpp @@ -437,13 +437,29 @@ public: IMAGE_BACKING_MODE_SPARSE, }; + // Default wertex and fragment grid sizes are used by a large collection of tests + // to generate input sets. Some tests might change their behavior if the + // default grid size values are altered, so care should be taken to confirm that + // any changes to default values do not produce regressions. + // If a particular tests needs to use a different grid size value, rather than + // modifying the default grid size values for all tests, it is recommended that + // the test specifies the required grid size using the gridSize parameter in the + // ShaderRenderCaseInstance constuctor instead. + enum + { + GRID_SIZE_DEFAULTS = 0, + GRID_SIZE_DEFAULT_VERTEX = 90, + GRID_SIZE_DEFAULT_FRAGMENT = 4, + }; + ShaderRenderCaseInstance (Context& context); ShaderRenderCaseInstance (Context& context, const bool isVertexCase, const ShaderEvaluator& evaluator, const UniformSetup& uniformSetup, const AttributeSetupFunc attribFunc, - const ImageBackingMode imageBackingMode = IMAGE_BACKING_MODE_REGULAR); + const ImageBackingMode imageBackingMode = IMAGE_BACKING_MODE_REGULAR, + const deUint32 gridSize = static_cast(GRID_SIZE_DEFAULTS)); virtual ~ShaderRenderCaseInstance (void); virtual tcu::TestStatus iterate (void); @@ -479,7 +495,8 @@ protected: const ShaderEvaluator* evaluator, const UniformSetup* uniformSetup, const AttributeSetupFunc attribFunc, - const ImageBackingMode imageBackingMode = IMAGE_BACKING_MODE_REGULAR); + const ImageBackingMode imageBackingMode = IMAGE_BACKING_MODE_REGULAR, + const deUint32 gridSize = static_cast(GRID_SIZE_DEFAULTS)); virtual void setup (void); virtual void setupUniforms (const tcu::Vec4& constCoords); @@ -505,6 +522,8 @@ protected: bool isMultiSampling (void) const; ImageBackingMode m_imageBackingMode; + + uint32_t m_quadGridSize; private: struct SparseContext diff --git a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderMatrixTests.cpp b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderMatrixTests.cpp index ea69bde..d26ce3b 100644 --- a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderMatrixTests.cpp +++ b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderMatrixTests.cpp @@ -1411,7 +1411,7 @@ ShaderMatrixInstance::ShaderMatrixInstance (Context& context, const ShaderInput in0, const ShaderInput in1, const MatrixOp op) - : ShaderRenderCaseInstance (context, isVertex, evaluator, DE_NULL, DE_NULL) + : ShaderRenderCaseInstance (context, isVertex, evaluator, DE_NULL, DE_NULL, IMAGE_BACKING_MODE_REGULAR, isVertex && op == OP_INVERSE ? 64 : GRID_SIZE_DEFAULTS) , m_in0 (in0) , m_in1 (in1) , m_op (op) -- 2.7.4