Validation fixes for dEQP-VK.glsl
authorMaciej Jesionowski <maciej.jesionowski@mobica.com>
Tue, 19 Apr 2016 13:21:12 +0000 (15:21 +0200)
committerPyry Haulos <phaulos@google.com>
Thu, 19 May 2016 21:46:51 +0000 (14:46 -0700)
- Use uint type for booleans to match attribute format
- Don't bind descriptor set when it's not updated
- Use correct number of vertex input bindings
- Use correct color attachment format and layout
- Use correct access flags and layout in image barriers

(cherry picked from commit 5533f025bb144cdeee813ebabba2885e14b33b2e)

external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.cpp
external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.cpp
external/vulkancts/modules/vulkan/vktShaderLibrary.cpp

index 10e2bfd..4302e28 100644 (file)
@@ -764,9 +764,10 @@ void FragmentOutExecutor::execute (const Context& ctx, int numValues, const void
 
                for (int outNdx = 0; outNdx < (int)m_outputLayout.locationSymbols.size(); ++outNdx)
                {
-                       bool                                                                                            isFloat = isDataTypeFloatOrVec(m_shaderSpec.outputs[outNdx].varType.getBasicType());
-                       bool                                                                                            isSigned = isDataTypeIntOrIVec(m_shaderSpec.outputs[outNdx].varType.getBasicType());
-                       VkFormat                                                                                        colorFormat = isFloat ? VK_FORMAT_R32G32B32A32_SFLOAT : (isSigned ? VK_FORMAT_R32G32B32A32_SINT : VK_FORMAT_R32G32B32A32_UINT);
+                       const bool              isFloat         = isDataTypeFloatOrVec(m_shaderSpec.outputs[outNdx].varType.getBasicType());
+                       const bool              isSigned        = isDataTypeIntOrIVec (m_shaderSpec.outputs[outNdx].varType.getBasicType());
+                       const bool              isBool          = isDataTypeBoolOrBVec(m_shaderSpec.outputs[outNdx].varType.getBasicType());
+                       const VkFormat  colorFormat = isFloat ? VK_FORMAT_R32G32B32A32_SFLOAT : (isSigned || isBool ? VK_FORMAT_R32G32B32A32_SINT : VK_FORMAT_R32G32B32A32_UINT);
 
                        const VkImageCreateInfo  colorImageParams =
                        {
@@ -2284,7 +2285,7 @@ void TessellationExecutor::renderTess (const Context& ctx, deUint32 numValues, d
                        VK_ATTACHMENT_STORE_OP_STORE,                                           // VkAttachmentStoreOp                  storeOp;
                        VK_ATTACHMENT_LOAD_OP_DONT_CARE,                                        // VkAttachmentLoadOp                   stencilLoadOp;
                        VK_ATTACHMENT_STORE_OP_DONT_CARE,                                       // VkAttachmentStoreOp                  stencilStoreOp;
-                       VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                       // VkImageLayout                                initialLayout;
+                       VK_IMAGE_LAYOUT_UNDEFINED,                                                      // VkImageLayout                                initialLayout;
                        VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL                        // VkImageLayout                                finalLayout
                };
 
@@ -3234,7 +3235,7 @@ void ShaderExecutor::uploadImage (const VkDevice&                         vkDevice,
                VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // VkStructureType                      sType;
                DE_NULL,                                                                                // const void*                          pNext;
                0u,                                                                                             // VkAccessFlags                        srcAccessMask;
-               0u,                                                                                             // VkAccessFlags                        dstAccessMask;
+               VK_ACCESS_TRANSFER_WRITE_BIT,                                   // VkAccessFlags                        dstAccessMask;
                VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                        oldLayout;
                VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                   // VkImageLayout                        newLayout;
                VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     srcQueueFamilyIndex;
index 07a1a97..37d526b 100644 (file)
@@ -1552,9 +1552,7 @@ void ShaderRenderCaseInstance::render (tcu::Surface& result, const QuadGrid& qua
                        }
 
                        const SamplerUniform*           sampler                 = static_cast<const SamplerUniform*>(uniformInfo);
-
-                       const VkAccessFlags                     outputMask              = VK_ACCESS_HOST_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT;
-                       const VkImageMemoryBarrier      textureBarrier  = createImageMemoryBarrier(sampler->image->get(), outputMask, 0u, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
+                       const VkImageMemoryBarrier      textureBarrier  = createImageMemoryBarrier(sampler->image->get(), 0u, VK_ACCESS_SHADER_READ_BIT, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
 
                        barriers.push_back(textureBarrier);
                }
@@ -1690,7 +1688,7 @@ void ShaderRenderCaseInstance::render (tcu::Surface& result, const QuadGrid& qua
                {
                        VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,         // VkStructureType                      sType;
                        DE_NULL,                                                                        // const void*                          pNext;
-                       VK_ACCESS_TRANSFER_WRITE_BIT,                           // VkAccessFlags                        srcAccessMask;
+                       VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,           // VkAccessFlags                        srcAccessMask;
                        VK_ACCESS_TRANSFER_READ_BIT,                            // VkAccessFlags                        dstAccessMask;
                        VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,       // VkImageLayout                        oldLayout;
                        VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,           // VkImageLayout                        newLayout;
index 24b22a1..37a5b59 100644 (file)
@@ -135,7 +135,7 @@ void declareUniforms (ostringstream& out, const ValueBlock& valueBlock)
 DataType getTransportType (DataType valueType)
 {
        if (isDataTypeBoolOrBVec(valueType))
-               return glu::getDataTypeIntVec(getDataTypeScalarSize(valueType));
+               return glu::getDataTypeUintVec(getDataTypeScalarSize(valueType));
        else
                return valueType;
 }
@@ -1162,7 +1162,7 @@ Move<vk::VkPipeline> createPipeline (Context&                                     context,
                vk::VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,          // sType
                DE_NULL,                                                                                                                        // pNext
                (vk::VkPipelineVertexInputStateCreateFlags)0,
-               DE_LENGTH_OF_ARRAY(vertexBindings),                                                                     // bindingCount
+               (inputValues.empty() ? 1u : 2u),                                                                        // bindingCount
                vertexBindings,                                                                                                         // pVertexBindingDescriptions
                (deUint32)vertexAttribParams.size(),                                                            // attributeCount
                &vertexAttribParams[0],                                                                                         // pVertexAttributeDescriptions
@@ -1540,8 +1540,10 @@ ShaderCaseInstance::ShaderCaseInstance (Context& context, const ShaderCaseSpecif
                vkd.cmdBeginRenderPass(*m_cmdBuffer, &passBeginInfo, vk::VK_SUBPASS_CONTENTS_INLINE);
        }
 
-       vkd.cmdBindPipeline                     (*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
-       vkd.cmdBindDescriptorSets       (*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipelineLayout, 0u, 1u, &*m_descriptorSet, 0u, DE_NULL);
+       vkd.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
+
+       if (!m_spec.values.uniforms.empty() || !m_spec.values.outputs.empty())
+               vkd.cmdBindDescriptorSets(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipelineLayout, 0u, 1u, &*m_descriptorSet, 0u, DE_NULL);
 
        {
                const vk::VkBuffer              buffers[]       = { *m_posNdxBuffer, *m_inputBuffer };