Some of the operations in descriptor_indexing caused image contents to be discarded.
Affects tests:
dEQP-VK.descriptor_indexing.*
Components: Vulkan
VK-GL-CTS issue: 1803
Change-Id: If368012d5b8524ef81dd07da8d9be2f1cfb9a907
*(variables.descriptorsImages[infoIdx]->image), // image
variables.descriptorsImages[infoIdx]->extent, // imageExtent
variables.descriptorsImages[infoIdx]->format, // imageFormat
- variables.descriptorsImages[infoIdx]->layout, // oldImageLayout
- VK_IMAGE_LAYOUT_GENERAL, // newImageLayout
+ VK_IMAGE_LAYOUT_UNDEFINED, // oldImageLayout
+ VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, // newImageLayout
variables.descriptorsImages[infoIdx]->levels); // mipLevelCount
-
- variables.descriptorsImages[infoIdx]->layout = VK_IMAGE_LAYOUT_GENERAL;
}
}
*(variables.descriptorsImages[infoIdx]->image), // image
variables.descriptorsImages[infoIdx]->extent, // imageExtent
variables.descriptorsImages[infoIdx]->format, // imageFormat
- variables.descriptorsImages[infoIdx]->layout, // oldImageLayout
- VK_IMAGE_LAYOUT_GENERAL, // newImageLayout
+ VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, // oldImageLayout
+ VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, // newImageLayout
variables.descriptorsBufferInfos[infoIdx]); // bufferInfo
}
}
0u, // baseMipLevel
1u, // levelCount
0u, // baseArrayLayer
- 1u, // layerCount
+ 1u // layerCount
};
- const VkImageMemoryBarrier imageBarrier =
+ const VkImageMemoryBarrier barrierBefore =
{
VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType;
DE_NULL, // pNext;
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // srcAccessMask;
VK_ACCESS_TRANSFER_READ_BIT, // dstAccessMask;
- VK_IMAGE_LAYOUT_UNDEFINED, // oldLayout
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // oldLayout
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, // newLayout;
VK_QUEUE_FAMILY_IGNORED, // srcQueueFamilyIndex;
VK_QUEUE_FAMILY_IGNORED, // dstQueueFamilyIndex;
image, // image;
- subresourceRange, // subresourceRange;
+ subresourceRange // subresourceRange;
};
const VkBufferImageCopy copyRegion =
bufferSize // size;
};
+ const VkImageMemoryBarrier barrierAfter =
+ {
+ VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType;
+ DE_NULL, // pNext;
+ VK_ACCESS_TRANSFER_READ_BIT, // srcAccessMask;
+ VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // dstAccessMask;
+ VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, // oldLayout;
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // newLayout;
+ VK_QUEUE_FAMILY_IGNORED, // srcQueueFamilyIndex;
+ VK_QUEUE_FAMILY_IGNORED, // dstQueueFamilyIndex;
+ image, // image
+ subresourceRange // subresourceRange
+ };
+
+
m_vki.cmdPipelineBarrier(commandBuffer, // commandBuffer
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, // srcStageMask, dstStageMask
(VkDependencyFlags)0, // dependencyFlags
- 0u, (const VkMemoryBarrier*)DE_NULL, // memoryBarrierCount, pMemoryBarriers
- 0u, (const VkBufferMemoryBarrier*)DE_NULL, // bufferBarrierCount, pBufferBarriers
- 1u, &imageBarrier); // imageBarrierCount, pImageBarriers
+ 0u, DE_NULL, // memoryBarrierCount, pMemoryBarriers
+ 0u, DE_NULL, // bufferBarrierCount, pBufferBarriers
+ 1u, &barrierBefore); // imageBarrierCount, pImageBarriers
m_vki.cmdCopyImageToBuffer(commandBuffer, image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *buffer, 1u, ©Region);
m_vki.cmdPipelineBarrier(commandBuffer,
- VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT,
+ VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT | VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
(VkDependencyFlags)0,
- 0, DE_NULL,
- 1, &bufferBarrier,
- 0u, DE_NULL);
+ 0u, DE_NULL,
+ 1u, &bufferBarrier,
+ 1u, &barrierAfter);
content = ut::BufferHandleAllocSp(new ut::BufferHandleAlloc(buffer, allocation));
}
void InputAttachmentInstance::createAndPopulateDescriptors (IterateCommonVariables& variables)
{
createImages(variables.descriptorsImages, variables.descriptorsBufferInfos, variables.descriptorsBuffer,
- (VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT), m_testParams.frameResolution, m_colorFormat, VK_IMAGE_LAYOUT_UNDEFINED, variables.validDescriptorCount);
+ VK_BUFFER_USAGE_TRANSFER_SRC_BIT, m_testParams.frameResolution, m_colorFormat, VK_IMAGE_LAYOUT_UNDEFINED, variables.validDescriptorCount);
createImagesViews(variables.descriptorImageViews, variables.descriptorsImages, m_colorFormat);
for (deUint32 descriptorIdx = 0; descriptorIdx < variables.validDescriptorCount; ++descriptorIdx)
const tcu::PixelBufferAccess pa = getPixelAccess(descriptorIdx, m_testParams.frameResolution, m_colorFormat, variables.descriptorsBufferInfos, variables.descriptorsBuffer);
tcu::clear(pa, tcu::Vec4(component, component, component, 1.0f));
}
+ vk::flushAlloc(m_vki, m_vkd, *variables.descriptorsBuffer->alloc);
}
Move<VkRenderPass> InputAttachmentInstance::createRenderPass (const IterateCommonVariables& variables)
variables.descriptorsImages[inputIdx]->format, // VkFormat format;
VK_SAMPLE_COUNT_1_BIT, // VkSampleCountFlagBits samples;
VK_ATTACHMENT_LOAD_OP_LOAD, // VkAttachmentLoadOp loadOp;
- VK_ATTACHMENT_STORE_OP_DONT_CARE, // VkAttachmentStoreOp storeOp;
+ VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp storeOp;
VK_ATTACHMENT_LOAD_OP_DONT_CARE, // VkAttachmentLoadOp stencilLoadOp;
VK_ATTACHMENT_STORE_OP_DONT_CARE, // VkAttachmentStoreOp stencilStoreOp;
- variables.descriptorsImages[inputIdx]->layout, // VkImageLayout initialLayout;
- VK_IMAGE_LAYOUT_GENERAL, // VkImageLayout finalLayout;
+ VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, // VkImageLayout initialLayout;
+ VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL // VkImageLayout finalLayout;
};
const VkAttachmentReference inputAttachmentRef =
{
inputIdx + 1, // deUint32 attachment;
- VK_IMAGE_LAYOUT_GENERAL // VkImageLayout layout;
+ VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL // VkImageLayout layout;
};
inputAttachmentRefs.push_back(inputAttachmentRef);
};
createImages(variables.descriptorsImages, variables.descriptorsBufferInfos, variables.descriptorsBuffer,
- (VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT), imageExtent, m_colorFormat, VK_IMAGE_LAYOUT_UNDEFINED, 1, m_testParams.usesMipMaps);
+ VK_BUFFER_USAGE_TRANSFER_SRC_BIT, imageExtent, m_colorFormat, VK_IMAGE_LAYOUT_UNDEFINED, 1, m_testParams.usesMipMaps);
createImagesViews(variables.descriptorImageViews, variables.descriptorsImages, m_colorFormat);
PixelBufferAccess pa = getPixelAccess(0, imageExtent, m_colorFormat, variables.descriptorsBufferInfos, variables.descriptorsBuffer, m_testParams.usesMipMaps ? 1 : 0);
const VkExtent3D& imageExtent = m_testParams.usesMipMaps ? bigImageExtent : smallImageExtent;
createImages(variables.descriptorsImages, variables.descriptorsBufferInfos, variables.descriptorsBuffer,
- (VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT), imageExtent, m_colorFormat, VK_IMAGE_LAYOUT_UNDEFINED, variables.validDescriptorCount, m_testParams.usesMipMaps);
+ VK_BUFFER_USAGE_TRANSFER_SRC_BIT, imageExtent, m_colorFormat, VK_IMAGE_LAYOUT_UNDEFINED, variables.validDescriptorCount, m_testParams.usesMipMaps);
createImagesViews(variables.descriptorImageViews, variables.descriptorsImages, m_colorFormat);
PixelBufferAccess pixelAccess;
variables.descriptorSamplers.push_back(ut::SamplerSp(new Move<VkSampler>(vk::createSampler(m_vki, m_vkd, &createInfo))));
const VkExtent3D& imageExtent = m_testParams.usesMipMaps ? bigImageExtent : smallImageExtent;
- createImages(variables.descriptorsImages, variables.descriptorsBufferInfos, variables.descriptorsBuffer, (VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT),
+ createImages(variables.descriptorsImages, variables.descriptorsBufferInfos, variables.descriptorsBuffer, VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
imageExtent, m_colorFormat, VK_IMAGE_LAYOUT_UNDEFINED, variables.validDescriptorCount, m_testParams.usesMipMaps);
createImagesViews(variables.descriptorImageViews, variables.descriptorsImages, m_colorFormat);
AllocMv alloc;
VkExtent3D extent;
VkFormat format;
- VkImageLayout layout;
deUint32 levels;
bool usesMipMaps (void) const { return levels > 0; }
AllocMv& alloc_,
const VkExtent3D& extent_,
VkFormat format_,
- VkImageLayout layout_,
bool usesMipMaps_ = false);
private:
ImageHandleAlloc (const ImageHandleAlloc&) {}
VkImageLayout newImageLayout,
const VkDescriptorBufferInfo& bufferInfo);
-VkAccessFlags pipelineAcceesFromStage (VkPipelineStageFlagBits stage,
+VkAccessFlags pipelineAccessFromStage (VkPipelineStageFlagBits stage,
bool readORwrite);
bool isDynamicDescriptor (VkDescriptorType descriptorType);
AllocMv& alloc_,
const VkExtent3D& extent_,
VkFormat format_,
- VkImageLayout layout_,
bool usesMipMaps_)
: image (image_)
, alloc (alloc_)
, extent (extent_)
, format (format_)
- , layout (layout_)
, levels (usesMipMaps_ ? computeMipMapCount(extent_) : 1)
{
}
VK_CHECK(dinterface.bindImageMemory(device, *image, allocation->getMemory(), allocation->getOffset()));
- output = ImageHandleAllocSp(new ImageHandleAlloc(image, allocation, extent, colorFormat, initialLayout, withMipMaps));
+ output = ImageHandleAllocSp(new ImageHandleAlloc(image, allocation, extent, colorFormat, withMipMaps));
}
void recordCopyBufferToImage (VkCommandBuffer cmd,
1u, // layerCount
};
- const VkImageMemoryBarrier transitionBarrier =
+ const VkImageMemoryBarrier barrierBefore =
{
VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType;
DE_NULL, // pNext;
0, // srcAccessMask;
VK_ACCESS_TRANSFER_WRITE_BIT, // dstAccessMask;
oldImageLayout, // oldLayout;
- newImageLayout, // newLayout;
+ VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, // newLayout;
VK_QUEUE_FAMILY_IGNORED, // srcQueueFamilyIndex;
VK_QUEUE_FAMILY_IGNORED, // dstQueueFamilyIndex;
image, // image
{
VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, // sType;
DE_NULL, // pNext;
- pipelineAcceesFromStage(srcStageMask, false), // srcAccessMask;
+ pipelineAccessFromStage(srcStageMask, false), // srcAccessMask;
VK_ACCESS_TRANSFER_READ_BIT, // dstAccessMask;
VK_QUEUE_FAMILY_IGNORED, // srcQueueFamilyIndex;
VK_QUEUE_FAMILY_IGNORED, // dstQueueFamilyIndex;
bufferInfo.range // size;
};
- const VkImageMemoryBarrier imageBarrier =
+ const VkImageMemoryBarrier barrierAfter =
{
VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType;
DE_NULL, // pNext;
VK_ACCESS_TRANSFER_WRITE_BIT, // srcAccessMask;
- pipelineAcceesFromStage(dstStageMask, true)
- | pipelineAcceesFromStage(dstStageMask, false), // dstAccessMask;
- oldImageLayout, // oldLayout;
+ pipelineAccessFromStage(dstStageMask, true)
+ | pipelineAccessFromStage(dstStageMask, false), // dstAccessMask;
+ VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, // oldLayout;
newImageLayout, // newLayout;
VK_QUEUE_FAMILY_IGNORED, // srcQueueFamilyIndex;
VK_QUEUE_FAMILY_IGNORED, // dstQueueFamilyIndex;
interface.cmdPipelineBarrier(cmd,
srcStageMask, VK_PIPELINE_STAGE_TRANSFER_BIT, // srcStageMask, dstStageMask
(VkDependencyFlags)0, // dependencyFlags
- 0u, (const VkMemoryBarrier*)DE_NULL, // memoryBarrierCount, pMemoryBarriers
+ 0u, DE_NULL, // memoryBarrierCount, pMemoryBarriers
1u, &bufferBarrier, // bufferBarrierCount, pBufferBarriers
- 1u, &transitionBarrier); // imageBarrierCount, pImageBarriers
+ 1u, &barrierBefore); // imageBarrierCount, pImageBarriers
- interface.cmdCopyBufferToImage(cmd, bufferInfo.buffer, image, newImageLayout, static_cast<deUint32>(copyRegions.size()), copyRegions.data());
+ interface.cmdCopyBufferToImage(cmd, bufferInfo.buffer, image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, static_cast<deUint32>(copyRegions.size()), copyRegions.data());
interface.cmdPipelineBarrier(cmd,
VK_PIPELINE_STAGE_TRANSFER_BIT, dstStageMask, // srcStageMask, dstStageMask
(VkDependencyFlags)0, // dependencyFlags
- 0u, (const VkMemoryBarrier*)DE_NULL, // memoryBarrierCount, pMemoryBarriers
- 0u, (const VkBufferMemoryBarrier*)DE_NULL, // bufferBarrierCount, pBufferBarriers
- 1u, &imageBarrier); // imageBarrierCount, pImageBarriers
+ 0u, DE_NULL, // memoryBarrierCount, pMemoryBarriers
+ 0u, DE_NULL, // bufferBarrierCount, pBufferBarriers
+ 1u, &barrierAfter); // imageBarrierCount, pImageBarriers
}
void recordCopyImageToBuffer (VkCommandBuffer cmd,
1u, // layerCount
};
- const VkImageMemoryBarrier imageBarrier =
+ const VkImageMemoryBarrier barrierBefore =
{
VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType;
DE_NULL, // pNext;
- pipelineAcceesFromStage(srcStageMask, false), // srcAccessMask;
+ pipelineAccessFromStage(srcStageMask, false), // srcAccessMask;
VK_ACCESS_TRANSFER_READ_BIT, // dstAccessMask;
oldImageLayout, // oldLayout
- newImageLayout, // newLayout;
+ VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, // newLayout;
VK_QUEUE_FAMILY_IGNORED, // srcQueueFamilyIndex;
VK_QUEUE_FAMILY_IGNORED, // dstQueueFamilyIndex;
image, // image;
subresourceRange, // subresourceRange;
};
- const VkBufferMemoryBarrier bufferBarrier =
+ const VkImageMemoryBarrier barrierAfter =
{
- VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, // sType;
+ VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType;
DE_NULL, // pNext;
- VK_ACCESS_TRANSFER_WRITE_BIT, // srcAccessMask;
- pipelineAcceesFromStage(dstStageMask, true), // dstAccessMask;
+ VK_ACCESS_TRANSFER_READ_BIT, // srcAccessMask;
+ pipelineAccessFromStage(dstStageMask, true)
+ | pipelineAccessFromStage(dstStageMask, false), // dstAccessMask;
+ VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, // oldLayout;
+ newImageLayout, // newLayout;
VK_QUEUE_FAMILY_IGNORED, // srcQueueFamilyIndex;
VK_QUEUE_FAMILY_IGNORED, // dstQueueFamilyIndex;
- bufferInfo.buffer, // buffer;
- bufferInfo.offset, // offset;
- bufferInfo.range // size;
+ image, // image
+ subresourceRange // subresourceRange
};
interface.cmdPipelineBarrier(cmd, // commandBuffer
srcStageMask, VK_PIPELINE_STAGE_TRANSFER_BIT, // srcStageMask, dstStageMask
(VkDependencyFlags)0, // dependencyFlags
- 0u, (const VkMemoryBarrier*)DE_NULL, // memoryBarrierCount, pMemoryBarriers
- 0u, (const VkBufferMemoryBarrier*)DE_NULL, // bufferBarrierCount, pBufferBarriers
- 1u, &imageBarrier); // imageBarrierCount, pImageBarriers
+ 0u, DE_NULL, // memoryBarrierCount, pMemoryBarriers
+ 0u, DE_NULL, // bufferBarrierCount, pBufferBarriers
+ 1u, &barrierBefore); // imageBarrierCount, pImageBarriers
- interface.cmdCopyImageToBuffer(cmd, image, newImageLayout, bufferInfo.buffer, 1u, ©Region);
+ interface.cmdCopyImageToBuffer(cmd, image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, bufferInfo.buffer, 1u, ©Region);
interface.cmdPipelineBarrier(cmd,
VK_PIPELINE_STAGE_TRANSFER_BIT, dstStageMask,
(VkDependencyFlags)0,
- 0, DE_NULL,
- 1, &bufferBarrier,
- 0u, DE_NULL);
+ 0u, DE_NULL,
+ 0u, DE_NULL,
+ 0u, &barrierAfter);
}
-VkAccessFlags pipelineAcceesFromStage (VkPipelineStageFlagBits stage, bool readORwrite)
+VkAccessFlags pipelineAccessFromStage (VkPipelineStageFlagBits stage, bool readORwrite)
{
VkAccessFlags access[2];
VkAccessFlags& readAccess = access[1];