From fb0093e20118225a5ffd07f2a608e7be40ea6c82 Mon Sep 17 00:00:00 2001 From: Peter Gal Date: Thu, 27 Aug 2015 16:15:07 +0200 Subject: [PATCH] ShaderRenderCase: Connect additional a_coords input attribute --- .../shaderrendercase/vktShaderRenderCase.cpp | 20 +++++++------ .../shaderrendercase/vktShaderRenderCaseTests.cpp | 33 ++++++++++++++++------ 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCase.cpp b/external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCase.cpp index b2d5cb0..bb2cb50 100644 --- a/external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCase.cpp +++ b/external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCase.cpp @@ -569,7 +569,7 @@ void ShaderRenderCaseInstance::render (Surface& result, const QuadGrid& quadGrid }; // TODO adapt input attribute locations!!! - const VkVertexInputAttributeDescription vertexInputAttributeDescriptions[1] = + const VkVertexInputAttributeDescription vertexInputAttributeDescriptions[2] = { { 0u, // deUint32 location; @@ -577,13 +577,12 @@ void ShaderRenderCaseInstance::render (Surface& result, const QuadGrid& quadGrid VK_FORMAT_R32G32B32A32_SFLOAT, // VkFormat format; 0u // deUint32 offsetInBytes; }, -/* { + { 1u, // deUint32 location; 0u, // deUint32 binding; VK_FORMAT_R32G32B32A32_SFLOAT, // VkFormat format; - DE_OFFSET_OF(Vertex4RGBA, color), // deUint32 offsetInBytes; + quadGrid.getNumVertices() * sizeof(Vec4), // deUint32 offsetInBytes; } -*/ }; const VkPipelineVertexInputStateCreateInfo vertexInputStateParams = @@ -592,7 +591,7 @@ void ShaderRenderCaseInstance::render (Surface& result, const QuadGrid& quadGrid DE_NULL, // const void* pNext; 1u, // deUint32 bindingCount; &vertexInputBindingDescription, // const VkVertexInputBindingDescription* pVertexBindingDescriptions; - 1u, // deUint32 attributeCount; + 2u, // deUint32 attributeCount; vertexInputAttributeDescriptions // const VkVertexInputAttributeDescription* pVertexAttributeDescriptions; }; @@ -726,7 +725,9 @@ void ShaderRenderCaseInstance::render (Surface& result, const QuadGrid& quadGrid // Create vertex buffer { // TODO: upload all inputs - const VkDeviceSize vertexBufferSize = quadGrid.getNumVertices() * sizeof(Vec4); + const VkDeviceSize vertexSize = quadGrid.getNumVertices() * sizeof(Vec4); + const VkDeviceSize coordSize = quadGrid.getNumVertices() * sizeof(Vec4); + const VkDeviceSize vertexBufferSize = vertexSize + coordSize; const VkBufferCreateInfo vertexBufferParams = { @@ -748,7 +749,8 @@ void ShaderRenderCaseInstance::render (Surface& result, const QuadGrid& quadGrid // Load vertices into vertex buffer void* bufferPtr; VK_CHECK(vk.mapMemory(vkDevice, m_vertexBufferAlloc->getMemory(), 0, vertexBufferSize, 0, &bufferPtr)); - deMemcpy(bufferPtr, quadGrid.getPositions(), vertexBufferSize); + deMemcpy(bufferPtr, quadGrid.getPositions(), vertexSize); + deMemcpy(bufferPtr + vertexSize, quadGrid.getCoords(), coordSize); VK_CHECK(vk.unmapMemory(vkDevice, m_vertexBufferAlloc->getMemory())); } @@ -987,11 +989,11 @@ void ShaderRenderCaseInstance::computeVertexReference (Surface& result, const Qu int gridSize = quadGrid.getGridSize(); int stride = gridSize + 1; //bool hasAlpha = m_context.getRenderTarget().getPixelFormat().alphaBits > 0; - bool hasAlpha = true; + bool hasAlpha = false; ShaderEvalContext evalCtx (quadGrid); // Evaluate color for each vertex. - vector colors((gridSize+1)*(gridSize+1)); + vector colors((gridSize + 1) * (gridSize + 1)); for (int y = 0; y < gridSize+1; y++) for (int x = 0; x < gridSize+1; x++) { diff --git a/external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCaseTests.cpp b/external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCaseTests.cpp index e646bbc..6a6efe8 100644 --- a/external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCaseTests.cpp +++ b/external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCaseTests.cpp @@ -19,15 +19,13 @@ public: const std::string& name, const std::string& description, bool isVertexCase, - ShaderEvalFunc evalFunc) + ShaderEvalFunc evalFunc, + std::string vertexShader, + std::string fragmentShader) : ShaderRenderCase(testCtx, name, description, isVertexCase, evalFunc) { - m_vertShaderSource = "#version 300 es\n" - "layout(location = 0) in highp vec4 a_position;\n" - "void main (void) { gl_Position = a_position; }\n"; - m_fragShaderSource = "#version 300 es\n" - "layout(location = 0) out lowp vec4 o_color;\n" - "void main (void) { o_color = vec4(1.0, 0.0, 1.0, 1.0); }\n"; + m_vertShaderSource = vertexShader; + m_fragShaderSource = fragmentShader; } }; @@ -35,8 +33,25 @@ tcu::TestCaseGroup* createTests (tcu::TestContext& testCtx) { de::MovePtr shaderRenderCaseTests (new tcu::TestCaseGroup(testCtx, "shaderRenderCase", "ShaderRenderCase Tests")); - shaderRenderCaseTests->addChild(new DummyTestRenderCase(testCtx, "testVertex", "testVertex", true, evalCoordsPassthrough)); - shaderRenderCaseTests->addChild(new DummyTestRenderCase(testCtx, "testFragment", "testFragment", false, eval_DEBUG)); + std::string base_vertex = "#version 300 es\n" + "layout(location = 0) in highp vec4 a_position;\n" + "layout(location = 1) in highp vec4 a_coords;\n" + "out mediump vec4 v_color;\n" + "void main (void) { gl_Position = a_position; v_color = vec4(a_coords.xyz, 1.0); }\n"; + + std::string base_fragment = "#version 300 es\n" + "layout(location = 0) out lowp vec4 o_color;\n" + "in mediump vec4 v_color;\n" + "void main (void) { o_color = v_color; }\n"; + + std::string debug_fragment = "#version 300 es\n" + "layout(location = 0) out lowp vec4 o_color;\n" + "in mediump vec4 v_color;\n" + "void main (void) { o_color = vec4(1,0,1,1); }\n"; + + + shaderRenderCaseTests->addChild(new DummyTestRenderCase(testCtx, "testVertex", "testVertex", true, evalCoordsPassthrough, base_vertex, base_fragment)); + shaderRenderCaseTests->addChild(new DummyTestRenderCase(testCtx, "testFragment", "testFragment", false, eval_DEBUG, base_vertex, debug_fragment)); return shaderRenderCaseTests.release(); } -- 2.7.4