From 0b834b74caca736af6ce047424b18113c5b4fbf8 Mon Sep 17 00:00:00 2001 From: Maciej Jesionowski Date: Fri, 8 Apr 2016 11:17:04 +0200 Subject: [PATCH] Validation fixes in dEQP-VK.pipeline - Corrected out of range minDepthBounds value - Added missing image layout transitions - timestamp, cache tests: pass data through geometry shader - cache test: use correct initialLayout in attachment when starting a second render pass (cherry picked from commit 1d3585c5ec71cf90d6519913db6a01ef2c0f840c) Conflicts: external/vulkancts/modules/vulkan/pipeline/vktPipelineCacheTests.cpp --- .../vulkan/pipeline/vktPipelineBlendTests.cpp | 23 +++++++++- .../vulkan/pipeline/vktPipelineDepthTests.cpp | 46 +++++++++++++++++-- .../pipeline/vktPipelineImageSamplingInstance.cpp | 22 +++++++++- .../vulkan/pipeline/vktPipelineImageUtil.cpp | 2 +- .../pipeline/vktPipelineInputAssemblyTests.cpp | 22 +++++++++- .../pipeline/vktPipelineMultisampleTests.cpp | 38 +++++++++++++++- .../pipeline/vktPipelinePushConstantTests.cpp | 22 +++++++++- .../vulkan/pipeline/vktPipelineStencilTests.cpp | 46 +++++++++++++++++-- .../vulkan/pipeline/vktPipelineTimestampTests.cpp | 51 ++++++++++++++++++++-- .../pipeline/vktPipelineVertexInputTests.cpp | 22 +++++++++- 10 files changed, 271 insertions(+), 23 deletions(-) diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendTests.cpp index e306cb9..e6d6504 100644 --- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendTests.cpp +++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendTests.cpp @@ -594,8 +594,8 @@ BlendTestInstance::BlendTestInstance (Context& context, 0u, // deUint32 writeMask; 0u // deUint32 reference; }, - -1.0f, // float minDepthBounds; - +1.0f // float maxDepthBounds; + 0.0f, // float minDepthBounds; + 1.0f // float maxDepthBounds; }; // The color blend attachment will be set up before creating the graphics pipeline. @@ -744,9 +744,28 @@ BlendTestInstance::BlendTestInstance (Context& context, &attachmentClearValue // const VkClearValue* pClearValues; }; + // Color image layout transition + const VkImageMemoryBarrier imageLayoutBarrier = + { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; + DE_NULL, // const void* pNext; + (VkAccessFlags)0, // VkAccessFlags srcAccessMask; + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask; + VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout; + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout; + VK_QUEUE_FAMILY_IGNORED, // uint32_t srcQueueFamilyIndex; + VK_QUEUE_FAMILY_IGNORED, // uint32_t dstQueueFamilyIndex; + *m_colorImage, // VkImage image; + { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u } // VkImageSubresourceRange subresourceRange; + }; + m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo); VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo)); + + vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0, + 0u, DE_NULL, 0u, DE_NULL, 1u, &imageLayoutBarrier); + vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); const VkDeviceSize quadOffset = (m_vertices.size() / BlendTest::QUAD_COUNT) * sizeof(Vertex4RGBA); diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineDepthTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineDepthTests.cpp index 9981264..d7513f5 100644 --- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineDepthTests.cpp +++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineDepthTests.cpp @@ -35,6 +35,7 @@ #include "vkQueryUtil.hpp" #include "vkRef.hpp" #include "vkRefUtil.hpp" +#include "vkTypeUtil.hpp" #include "tcuImageCompare.hpp" #include "deUniquePtr.hpp" #include "deStringUtil.hpp" @@ -140,6 +141,7 @@ private: const tcu::UVec2 m_renderSize; const VkFormat m_colorFormat; const VkFormat m_depthFormat; + VkImageSubresourceRange m_depthImageSubresourceRange; Move m_colorImage; de::MovePtr m_colorImageAlloc; @@ -292,6 +294,10 @@ DepthTestInstance::DepthTestInstance (Context& context, // Allocate and bind depth image memory m_depthImageAlloc = memAlloc.allocate(getImageMemoryRequirements(vk, vkDevice, *m_depthImage), MemoryRequirement::Any); VK_CHECK(vk.bindImageMemory(vkDevice, *m_depthImage, m_depthImageAlloc->getMemory(), m_depthImageAlloc->getOffset())); + + const VkImageAspectFlags aspect = (mapVkFormat(m_depthFormat).order == tcu::TextureFormat::DS ? VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT + : VK_IMAGE_ASPECT_DEPTH_BIT); + m_depthImageSubresourceRange = makeImageSubresourceRange(aspect, 0u, depthImageParams.mipLevels, 0u, depthImageParams.arrayLayers); } // Create color attachment view @@ -322,7 +328,7 @@ DepthTestInstance::DepthTestInstance (Context& context, VK_IMAGE_VIEW_TYPE_2D, // VkImageViewType viewType; m_depthFormat, // VkFormat format; componentMappingRGBA, // VkComponentMapping components; - { VK_IMAGE_ASPECT_DEPTH_BIT, 0u, 1u, 0u, 1u } // VkImageSubresourceRange subresourceRange; + m_depthImageSubresourceRange, // VkImageSubresourceRange subresourceRange; }; m_depthAttachmentView = createImageView(vk, vkDevice, &depthAttachmentViewParams); @@ -634,8 +640,8 @@ DepthTestInstance::DepthTestInstance (Context& context, 0u, // deUint32 writeMask; 0u, // deUint32 reference; }, - -1.0f, // float minDepthBounds; - +1.0f, // float maxDepthBounds; + 0.0f, // float minDepthBounds; + 1.0f, // float maxDepthBounds; }; const VkGraphicsPipelineCreateInfo graphicsPipelineParams = @@ -747,9 +753,43 @@ DepthTestInstance::DepthTestInstance (Context& context, attachmentClearValues // const VkClearValue* pClearValues; }; + const VkImageMemoryBarrier imageLayoutBarriers[] = + { + // color image layout transition + { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; + DE_NULL, // const void* pNext; + (VkAccessFlags)0, // VkAccessFlags srcAccessMask; + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask; + VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout; + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout; + VK_QUEUE_FAMILY_IGNORED, // uint32_t srcQueueFamilyIndex; + VK_QUEUE_FAMILY_IGNORED, // uint32_t dstQueueFamilyIndex; + *m_colorImage, // VkImage image; + { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u } // VkImageSubresourceRange subresourceRange; + }, + // depth image layout transition + { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; + DE_NULL, // const void* pNext; + (VkAccessFlags)0, // VkAccessFlags srcAccessMask; + VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask; + VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout; + VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout; + VK_QUEUE_FAMILY_IGNORED, // uint32_t srcQueueFamilyIndex; + VK_QUEUE_FAMILY_IGNORED, // uint32_t dstQueueFamilyIndex; + *m_depthImage, // VkImage image; + m_depthImageSubresourceRange, // VkImageSubresourceRange subresourceRange; + }, + }; + m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo); VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo)); + + vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0, + 0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(imageLayoutBarriers), imageLayoutBarriers); + vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); const VkDeviceSize quadOffset = (m_vertices.size() / DepthTest::QUAD_COUNT) * sizeof(Vertex4RGBA); diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp index d799f42..b3be74f 100644 --- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp +++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp @@ -785,8 +785,8 @@ ImageSamplingInstance::ImageSamplingInstance (Context& context, 0u, // deUint32 writeMask; 0u // deUint32 reference; }, - -1.0f, // float minDepthBounds; - +1.0f // float maxDepthBounds; + 0.0f, // float minDepthBounds; + 1.0f // float maxDepthBounds; }; const VkPipelineDynamicStateCreateInfo dynamicStateParams = @@ -899,9 +899,27 @@ ImageSamplingInstance::ImageSamplingInstance (Context& context, &attachmentClearValue // const VkClearValue* pClearValues; }; + const VkImageMemoryBarrier preAttachmentBarrier = + { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; + DE_NULL, // const void* pNext; + 0u, // VkAccessFlags srcAccessMask; + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask; + VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout; + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout; + VK_QUEUE_FAMILY_IGNORED, // deUint32 srcQueueFamilyIndex; + VK_QUEUE_FAMILY_IGNORED, // deUint32 dstQueueFamilyIndex; + *m_colorImage, // VkImage image; + { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u } // VkImageSubresourceRange subresourceRange; + }; + m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo); VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo)); + + vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0, + 0u, DE_NULL, 0u, DE_NULL, 1u, &preAttachmentBarrier); + vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); vk.cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *m_graphicsPipeline); diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.cpp index 5d473d9..2636258 100644 --- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.cpp +++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.cpp @@ -414,7 +414,7 @@ void uploadTestTexture (const DeviceInterface& vk, 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; diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineInputAssemblyTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineInputAssemblyTests.cpp index d37cd1f..81aa144 100644 --- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineInputAssemblyTests.cpp +++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineInputAssemblyTests.cpp @@ -1253,8 +1253,8 @@ InputAssemblyInstance::InputAssemblyInstance (Context& context, 0u, // deUint32 writeMask; 0u, // deUint32 reference; }, - -1.0f, // float minDepthBounds; - +1.0f // float maxDepthBounds; + 0.0f, // float minDepthBounds; + 1.0f // float maxDepthBounds; }; const VkPipelineDynamicStateCreateInfo dynamicStateParams = @@ -1408,9 +1408,27 @@ InputAssemblyInstance::InputAssemblyInstance (Context& context, &attachmentClearValue // const VkClearValue* pClearValues; }; + const VkImageMemoryBarrier attachmentLayoutBarrier = + { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; + DE_NULL, // const void* pNext; + 0u, // VkAccessFlags srcAccessMask; + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask; + VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout; + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout; + VK_QUEUE_FAMILY_IGNORED, // deUint32 srcQueueFamilyIndex; + VK_QUEUE_FAMILY_IGNORED, // deUint32 dstQueueFamilyIndex; + *m_colorImage, // VkImage image; + { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u }, // VkImageSubresourceRange subresourceRange; + }; + m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo); VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo)); + + vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0, + 0u, DE_NULL, 0u, DE_NULL, 1u, &attachmentLayoutBarrier); + vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); const VkDeviceSize vertexBufferOffset = 0; diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTests.cpp index 912f482..e09885d 100644 --- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTests.cpp +++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTests.cpp @@ -1653,8 +1653,8 @@ MultisampleRenderer::MultisampleRenderer (Context& context, 0u, // deUint32 writeMask; 0u, // deUint32 reference; }, - -1.0f, // float minDepthBounds; - +1.0f, // float maxDepthBounds; + 0.0f, // float minDepthBounds; + 1.0f, // float maxDepthBounds; }; const VkGraphicsPipelineCreateInfo graphicsPipelineParams = @@ -1765,9 +1765,43 @@ MultisampleRenderer::MultisampleRenderer (Context& context, clearValues // const VkClearValue* pClearValues; }; + const VkImageMemoryBarrier imageLayoutBarriers[] = + { + // color attachment image + { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; + DE_NULL, // const void* pNext; + 0u, // VkAccessFlags srcAccessMask; + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask; + VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout; + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout; + VK_QUEUE_FAMILY_IGNORED, // deUint32 srcQueueFamilyIndex; + VK_QUEUE_FAMILY_IGNORED, // deUint32 dstQueueFamilyIndex; + *m_colorImage, // VkImage image; + { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u }, // VkImageSubresourceRange subresourceRange; + }, + // resolve attachment image + { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; + DE_NULL, // const void* pNext; + 0u, // VkAccessFlags srcAccessMask; + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask; + VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout; + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout; + VK_QUEUE_FAMILY_IGNORED, // deUint32 srcQueueFamilyIndex; + VK_QUEUE_FAMILY_IGNORED, // deUint32 dstQueueFamilyIndex; + *m_resolveImage, // VkImage image; + { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u }, // VkImageSubresourceRange subresourceRange; + }, + }; + m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo); VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo)); + + vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0, + 0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(imageLayoutBarriers), imageLayoutBarriers); + vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); VkDeviceSize vertexBufferOffset = 0u; diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp index 618dc43..e894350 100644 --- a/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp +++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp @@ -883,8 +883,8 @@ PushConstantGraphicsTestInstance::PushConstantGraphicsTestInstance (Context& 0u, // deUint32 stencilWriteMask; 0u, // deUint32 stencilReference; }, - -1.0f, // float minDepthBounds; - +1.0f, // float maxDepthBounds; + 0.0f, // float minDepthBounds; + 1.0f, // float maxDepthBounds; }; const VkPipelineTessellationStateCreateInfo tessellationStateParams = @@ -994,9 +994,27 @@ PushConstantGraphicsTestInstance::PushConstantGraphicsTestInstance (Context& attachmentClearValues // const VkClearValue* pClearValues; }; + const VkImageMemoryBarrier attachmentLayoutBarrier = + { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; + DE_NULL, // const void* pNext; + 0u, // VkAccessFlags srcAccessMask; + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask; + VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout; + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout; + VK_QUEUE_FAMILY_IGNORED, // deUint32 srcQueueFamilyIndex; + VK_QUEUE_FAMILY_IGNORED, // deUint32 dstQueueFamilyIndex; + *m_colorImage, // VkImage image; + { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u }, // VkImageSubresourceRange subresourceRange; + }; + m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo); VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo)); + + vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0, + 0u, DE_NULL, 0u, DE_NULL, 1u, &attachmentLayoutBarrier); + vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); // update push constant diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineStencilTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineStencilTests.cpp index fa57224..b45fb48 100644 --- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineStencilTests.cpp +++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineStencilTests.cpp @@ -35,6 +35,7 @@ #include "vkQueryUtil.hpp" #include "vkRef.hpp" #include "vkRefUtil.hpp" +#include "vkTypeUtil.hpp" #include "tcuImageCompare.hpp" #include "deMemory.h" #include "deRandom.hpp" @@ -143,6 +144,7 @@ private: const tcu::UVec2 m_renderSize; const VkFormat m_colorFormat; const VkFormat m_stencilFormat; + VkImageSubresourceRange m_stencilImageSubresourceRange; VkImageCreateInfo m_colorImageCreateInfo; Move m_colorImage; @@ -379,6 +381,10 @@ StencilTestInstance::StencilTestInstance (Context& context, // Allocate and bind stencil image memory m_stencilImageAlloc = memAlloc.allocate(getImageMemoryRequirements(vk, vkDevice, *m_stencilImage), MemoryRequirement::Any); VK_CHECK(vk.bindImageMemory(vkDevice, *m_stencilImage, m_stencilImageAlloc->getMemory(), m_stencilImageAlloc->getOffset())); + + const VkImageAspectFlags aspect = (mapVkFormat(m_stencilFormat).order == tcu::TextureFormat::DS ? VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_DEPTH_BIT + : VK_IMAGE_ASPECT_STENCIL_BIT); + m_stencilImageSubresourceRange = makeImageSubresourceRange(aspect, 0u, stencilImageParams.mipLevels, 0u, stencilImageParams.arrayLayers); } // Create color attachment view @@ -409,7 +415,7 @@ StencilTestInstance::StencilTestInstance (Context& context, VK_IMAGE_VIEW_TYPE_2D, // VkImageViewType viewType; m_stencilFormat, // VkFormat format; componentMappingRGBA, // VkComponentMapping components; - { VK_IMAGE_ASPECT_STENCIL_BIT, 0u, 1u, 0u, 1u }, // VkImageSubresourceRange subresourceRange; + m_stencilImageSubresourceRange, // VkImageSubresourceRange subresourceRange; }; m_stencilAttachmentView = createImageView(vk, vkDevice, &stencilAttachmentViewParams); @@ -689,8 +695,8 @@ StencilTestInstance::StencilTestInstance (Context& context, true, // VkBool32 stencilTestEnable; m_stencilOpStateFront, // VkStencilOpState front; m_stencilOpStateBack, // VkStencilOpState back; - -1.0f, // float minDepthBounds; - +1.0f // float maxDepthBounds; + 0.0f, // float minDepthBounds; + 1.0f // float maxDepthBounds; }; const VkPipelineDynamicStateCreateInfo dynamicStateParams = @@ -834,9 +840,43 @@ StencilTestInstance::StencilTestInstance (Context& context, attachmentClearValues // const VkClearValue* pClearValues; }; + const VkImageMemoryBarrier imageLayoutBarriers[] = + { + // color image layout transition + { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; + DE_NULL, // const void* pNext; + (VkAccessFlags)0, // VkAccessFlags srcAccessMask; + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask; + VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout; + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout; + VK_QUEUE_FAMILY_IGNORED, // uint32_t srcQueueFamilyIndex; + VK_QUEUE_FAMILY_IGNORED, // uint32_t dstQueueFamilyIndex; + *m_colorImage, // VkImage image; + { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u } // VkImageSubresourceRange subresourceRange; + }, + // stencil image layout transition + { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; + DE_NULL, // const void* pNext; + (VkAccessFlags)0, // VkAccessFlags srcAccessMask; + VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask; + VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout; + VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout; + VK_QUEUE_FAMILY_IGNORED, // uint32_t srcQueueFamilyIndex; + VK_QUEUE_FAMILY_IGNORED, // uint32_t dstQueueFamilyIndex; + *m_stencilImage, // VkImage image; + m_stencilImageSubresourceRange, // VkImageSubresourceRange subresourceRange; + }, + }; + m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo); VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo)); + + vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0, + 0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(imageLayoutBarriers), imageLayoutBarriers); + vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); const VkDeviceSize quadOffset = (m_vertices.size() / StencilTest::QUAD_COUNT) * sizeof(Vertex4RGBA); diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineTimestampTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineTimestampTests.cpp index 6dca81a..b732e3a 100755 --- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineTimestampTests.cpp +++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineTimestampTests.cpp @@ -552,8 +552,8 @@ Move SimpleGraphicsPipelineBuilder::buildPipeline(tcu::UVec2 renderS 0u, // deUint32 writeMask; 0u, // deUint32 reference; }, - -1.0f, // float minDepthBounds; - +1.0f, // float maxDepthBounds; + 0.0f, // float minDepthBounds; + 1.0f, // float maxDepthBounds; }; const VkPipelineTessellationStateCreateInfo* pTessCreateInfo = DE_NULL; @@ -992,6 +992,7 @@ protected: Move m_depthAttachmentView; Move m_renderPass; Move m_framebuffer; + VkImageMemoryBarrier m_imageLayoutBarriers[2]; de::MovePtr m_vertexBufferAlloc; Move m_vertexBuffer; @@ -1154,6 +1155,39 @@ void BasicGraphicsTestInstance::buildFrameBuffer(tcu::UVec2 renderSize, VkFormat &m_depthImageAlloc); } + // Set up image layout transition barriers + { + const VkImageMemoryBarrier colorImageBarrier = + { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; + DE_NULL, // const void* pNext; + 0u, // VkAccessFlags srcAccessMask; + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask; + VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout; + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout; + VK_QUEUE_FAMILY_IGNORED, // deUint32 srcQueueFamilyIndex; + VK_QUEUE_FAMILY_IGNORED, // deUint32 dstQueueFamilyIndex; + *m_colorImage, // VkImage image; + { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u }, // VkImageSubresourceRange subresourceRange; + }; + const VkImageMemoryBarrier depthImageBarrier = + { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; + DE_NULL, // const void* pNext; + 0u, // VkAccessFlags srcAccessMask; + VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask; + VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout; + VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout; + VK_QUEUE_FAMILY_IGNORED, // deUint32 srcQueueFamilyIndex; + VK_QUEUE_FAMILY_IGNORED, // deUint32 dstQueueFamilyIndex; + *m_depthImage, // VkImage image; + { VK_IMAGE_ASPECT_DEPTH_BIT, 0u, 1u, 0u, 1u }, // VkImageSubresourceRange subresourceRange; + }; + + m_imageLayoutBarriers[0] = colorImageBarrier; + m_imageLayoutBarriers[1] = depthImageBarrier; + } + // Create color attachment view { const VkImageViewCreateInfo colorAttachmentViewParams = @@ -1271,6 +1305,9 @@ void BasicGraphicsTestInstance::configCommandBuffer(void) VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo)); + vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0, + 0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(m_imageLayoutBarriers), m_imageLayoutBarriers); + vk.cmdResetQueryPool(*m_cmdBuffer, *m_queryPool, 0u, TimestampTest::ENTRY_COUNT); vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); @@ -1340,13 +1377,16 @@ void AdvGraphicsTest::initPrograms(SourceCollections& programCollection) const programCollection.glslSources.add("dummy_geo") << glu::GeometrySource( "#version 450 \n" - "layout (triangles) in;\n" - "layout (triangle_strip, max_vertices = 3) out;\n" + "layout(triangles) in;\n" + "layout(triangle_strip, max_vertices = 3) out;\n" + "layout(location = 0) in highp vec4 in_vtxColor[];\n" + "layout(location = 0) out highp vec4 vtxColor;\n" "void main (void)\n" "{\n" " for(int ndx=0; ndx<3; ndx++)\n" " {\n" " gl_Position = gl_in[ndx].gl_Position;\n" + " vtxColor = in_vtxColor[ndx];\n" " EmitVertex();\n" " }\n" " EndPrimitive();\n" @@ -1517,6 +1557,9 @@ void AdvGraphicsTestInstance::configCommandBuffer(void) VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo)); + vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0, + 0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(m_imageLayoutBarriers), m_imageLayoutBarriers); + vk.cmdResetQueryPool(*m_cmdBuffer, *m_queryPool, 0u, TimestampTest::ENTRY_COUNT); vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexInputTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexInputTests.cpp index f23921b..8b427e4 100644 --- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexInputTests.cpp +++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexInputTests.cpp @@ -957,8 +957,8 @@ VertexInputInstance::VertexInputInstance (Context& context, 0u, // deUint32 writeMask; 0u, // deUint32 reference; }, - -1.0f, // float minDepthBounds; - +1.0f, // float maxDepthBounds; + 0.0f, // float minDepthBounds; + 1.0f, // float maxDepthBounds; }; const VkGraphicsPipelineCreateInfo graphicsPipelineParams = @@ -1062,9 +1062,27 @@ VertexInputInstance::VertexInputInstance (Context& context, &attachmentClearValue // const VkClearValue* pClearValues; }; + const VkImageMemoryBarrier attachmentLayoutBarrier = + { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; + DE_NULL, // const void* pNext; + 0u, // VkAccessFlags srcAccessMask; + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask; + VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout; + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout; + VK_QUEUE_FAMILY_IGNORED, // deUint32 srcQueueFamilyIndex; + VK_QUEUE_FAMILY_IGNORED, // deUint32 dstQueueFamilyIndex; + *m_colorImage, // VkImage image; + { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u }, // VkImageSubresourceRange subresourceRange; + }; + m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo); VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo)); + + vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0, + 0u, DE_NULL, 0u, DE_NULL, 1u, &attachmentLayoutBarrier); + vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); vk.cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *m_graphicsPipeline); -- 2.7.4