<< tcu::TestLog::Message << "Stencil clear value: " << m_clearValue.depthStencil.stencil << tcu::TestLog::EndMessage;
// Validate resulting image
- if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat))
+ if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat, vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL))
return tcu::TestStatus::pass("Everything went OK");
else
return tcu::TestStatus::fail("Something went really wrong");
<< tcu::TestLog::Message << "Stencil clear value: " << m_clearValue.depthStencil.stencil << tcu::TestLog::EndMessage;
// Validate resulting image
- if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat))
+ if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat, vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL))
return tcu::TestStatus::pass("Everything went OK");
else
return tcu::TestStatus::fail("Something went really wrong");
<< tcu::TestLog::Message << "Color clear value: " << tcu::Vec4(m_clearColorValue.float32) << tcu::TestLog::EndMessage;
// Validate resulting image
- if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat))
+ if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat, vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL))
return tcu::TestStatus::pass("Everything went OK");
else
return tcu::TestStatus::fail("Something went really wrong");
<< tcu::TestLog::Message << "Color clear value: " << tcu::Vec4(m_clearColorValue.float32) << tcu::TestLog::EndMessage;
// Validate resulting image
- if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat))
+ if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat, vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL))
return tcu::TestStatus::pass("Everything went OK");
else
return tcu::TestStatus::fail("Something went really wrong");
<< tcu::TestLog::Message << "Fill value: " << m_fillValue << tcu::TestLog::EndMessage;
// Validate resulting image
- if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat))
+ if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat, vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL))
return tcu::TestStatus::pass("Everything went OK");
else
return tcu::TestStatus::fail("Something went really wrong");
<< tcu::TestLog::Message << "Color clear value: " << tcu::Vec4(m_clearColorValue.float32) << tcu::TestLog::EndMessage;
// Validate resulting image
- if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat))
+ if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat, vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL))
return tcu::TestStatus::pass("Everything went OK");
else
return tcu::TestStatus::fail("Something went really wrong");
}
bool ImageValidator::validateImage (ProtectedContext& ctx, const ValidationData& refData,
- const vk::VkImage image, const vk::VkFormat imageFormat) const
+ const vk::VkImage image, const vk::VkFormat imageFormat, const vk::VkImageLayout imageLayout) const
{
// Log out a few reference info
{
{
vk::VkDescriptorBufferInfo descRefUniform = makeDescriptorBufferInfo(**refUniform, 0, refUniformSize);
vk::VkDescriptorBufferInfo descBuffer = makeDescriptorBufferInfo(**helperBuffer, 0, helperBufferSize);
- vk::VkDescriptorImageInfo descSampledImg = makeDescriptorImageInfo(*sampler, *imageView, vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
+ vk::VkDescriptorImageInfo descSampledImg = makeDescriptorImageInfo(*sampler, *imageView, imageLayout);
vk::DescriptorSetUpdateBuilder()
.writeSingle(*descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(0u), vk::VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, &descSampledImg)
bool validateImage (ProtectedContext& ctx,
const ValidationData& refData,
const vk::VkImage image,
- const vk::VkFormat imageFormat) const;
+ const vk::VkFormat imageFormat,
+ const vk::VkImageLayout imageLayout) const;
private:
const vk::VkFormat m_imageFormat;
de::MovePtr<tcu::Texture2D> createTestTexture2D (void);
void calculateAtomicRef (tcu::Texture2D& texture2D);
tcu::TestStatus validateResult (vk::VkImage image,
+ vk::VkImageLayout imageLayout,
const tcu::Texture2D& texture2D,
const tcu::Sampler& refSampler);
// Upload data to an unprotected image
uploadImage(m_protectedContext, **unprotectedImage, *texture2D);
+ // Select vkImageLayout based upon accessType
+ vk::VkImageLayout imageSrcLayout = vk::VK_IMAGE_LAYOUT_UNDEFINED;
+
+ switch (m_params.accessType)
+ {
+ case ACCESS_TYPE_SAMPLING:
+ case ACCESS_TYPE_TEXEL_FETCH:
+ {
+ imageSrcLayout = vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
+ break;
+ }
+ case ACCESS_TYPE_IMAGE_LOAD:
+ case ACCESS_TYPE_IMAGE_STORE:
+ case ACCESS_TYPE_IMAGE_ATOMICS:
+ {
+ imageSrcLayout = vk::VK_IMAGE_LAYOUT_GENERAL;
+ break;
+ }
+ default:
+ DE_FATAL("Impossible");
+ break;
+ }
+
// Copy unprotected image to protected image
- copyToProtectedImage(m_protectedContext, **unprotectedImage, **imageSrc, IMAGE_WIDTH, IMAGE_HEIGHT);
+ copyToProtectedImage(m_protectedContext, **unprotectedImage, **imageSrc, imageSrcLayout, IMAGE_WIDTH, IMAGE_HEIGHT);
}
// Clear dst image
{
const vk::VkImage resultImage = m_params.accessType == ACCESS_TYPE_IMAGE_ATOMICS ? **imageSrc : **imageDst;
- return validateResult(resultImage, *texture2D, refSampler);
+ return validateResult(resultImage, vk::VK_IMAGE_LAYOUT_GENERAL, *texture2D, refSampler);
}
}
}
}
+ // Select vkImageLayout based upon accessType
+ vk::VkImageLayout imageLayout = vk::VK_IMAGE_LAYOUT_UNDEFINED;
+
+ switch (m_params.accessType)
+ {
+ case ACCESS_TYPE_SAMPLING:
+ case ACCESS_TYPE_TEXEL_FETCH:
+ {
+ imageLayout = vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
+ break;
+ }
+ case ACCESS_TYPE_IMAGE_LOAD:
+ case ACCESS_TYPE_IMAGE_STORE:
+ case ACCESS_TYPE_IMAGE_ATOMICS:
+ {
+ imageLayout = vk::VK_IMAGE_LAYOUT_GENERAL;
+ break;
+ }
+ default:
+ DE_FATAL("Impossible");
+ break;
+ }
+
// Upload source image
{
de::MovePtr<vk::ImageWithMemory> unprotectedImage = createImage2D(ctx, PROTECTION_DISABLED, queueFamilyIndex,
uploadImage(m_protectedContext, **unprotectedImage, *texture2D);
// Copy unprotected image to protected image
- copyToProtectedImage(m_protectedContext, **unprotectedImage, **imageSrc, IMAGE_WIDTH, IMAGE_HEIGHT);
+ copyToProtectedImage(m_protectedContext, **unprotectedImage, **imageSrc, imageLayout, IMAGE_WIDTH, IMAGE_HEIGHT);
}
// Clear dst image
vk::VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // srcAccessMask
vk::VK_ACCESS_SHADER_READ_BIT, // dstAccessMask
vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // oldLayout
- vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, // newLayout
+ imageLayout, // newLayout
queueFamilyIndex, // srcQueueFamilyIndex
queueFamilyIndex, // dstQueueFamilyIndex
**colorImage, // image
const vk::VkImage resultImage = m_params.accessType == ACCESS_TYPE_IMAGE_ATOMICS ? **imageSrc :
m_params.accessType == ACCESS_TYPE_IMAGE_STORE ? **imageDst : **colorImage;
- return validateResult(resultImage, *texture2D, refSampler);
+ return validateResult(resultImage, imageLayout, *texture2D, refSampler);
}
}
}
}
-tcu::TestStatus ImageAccessTestInstance::validateResult (vk::VkImage image, const tcu::Texture2D& texture2D, const tcu::Sampler& refSampler)
+tcu::TestStatus ImageAccessTestInstance::validateResult (vk::VkImage image, vk::VkImageLayout imageLayout, const tcu::Texture2D& texture2D, const tcu::Sampler& refSampler)
{
de::Random rnd (getSeedValue(m_params));
ValidationData refData;
refData.values[ndx] = texture2D.sample(refSampler, cx, cy, lod);
}
- if (!m_validator.validateImage(m_protectedContext, refData, image, m_params.imageFormat))
+ if (!m_validator.validateImage(m_protectedContext, refData, image, m_params.imageFormat, imageLayout))
return tcu::TestStatus::fail("Something went really wrong");
else
return tcu::TestStatus::pass("Everything went OK");
}
}
-void copyToProtectedImage (ProtectedContext& ctx, vk::VkImage srcImage, vk::VkImage dstImage, deUint32 width, deUint32 height)
+void copyToProtectedImage (ProtectedContext& ctx, vk::VkImage srcImage, vk::VkImage dstImage, vk::VkImageLayout dstImageLayout, deUint32 width, deUint32 height)
{
const vk::DeviceInterface& vk = ctx.getDeviceInterface();
const vk::VkDevice device = ctx.getDevice();
vk::VK_ACCESS_TRANSFER_WRITE_BIT, // VkAccessFlags srcAccessMask;
vk::VK_ACCESS_SHADER_READ_BIT, // VkAccessFlags dstAccessMask;
vk::VK_IMAGE_LAYOUT_GENERAL, // VkImageLayout oldLayout;
- vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, // VkImageLayout newLayout;
+ dstImageLayout, // VkImageLayout newLayout;
queueFamilyIndex, // deUint32 srcQueueFamilyIndex;
queueFamilyIndex, // deUint32 dstQueueFamilyIndex;
dstImage, // VkImage image;
void copyToProtectedImage (ProtectedContext& ctx,
vk::VkImage srcImage,
vk::VkImage dstImage,
+ vk::VkImageLayout dstImageLayout,
deUint32 width,
deUint32 height);
private:
de::MovePtr<tcu::Texture2D> createTestTexture2D (void);
tcu::TestStatus validateResult (vk::VkImage image,
+ vk::VkImageLayout imageLayout,
const tcu::Texture2D& texture2D,
const tcu::Sampler& refSampler);
void calculateRef (tcu::Texture2D& texture2D);
uploadImage(m_protectedContext, **unprotectedImage, *texture2D);
// Copy unprotected image to protected image
- copyToProtectedImage(m_protectedContext, **unprotectedImage, **imageSrc, m_params.imageWidth, m_params.imageHeight);
+ copyToProtectedImage(m_protectedContext, **unprotectedImage, **imageSrc, vk::VK_IMAGE_LAYOUT_GENERAL, m_params.imageWidth, m_params.imageHeight);
}
// Clear dst image
calculateRef(*texture2D);
// Validate result
- return validateResult(**imageDst, *texture2D, refSampler);
+ return validateResult(**imageDst, vk::VK_IMAGE_LAYOUT_GENERAL, *texture2D, refSampler);
}
void WorkgroupStorageTestInstance::calculateRef (tcu::Texture2D& texture2D)
}
}
-tcu::TestStatus WorkgroupStorageTestInstance::validateResult (vk::VkImage image, const tcu::Texture2D& texture2D, const tcu::Sampler& refSampler)
+tcu::TestStatus WorkgroupStorageTestInstance::validateResult (vk::VkImage image, vk::VkImageLayout imageLayout, const tcu::Texture2D& texture2D, const tcu::Sampler& refSampler)
{
de::Random rnd (getSeedValue(m_params));
ValidationData refData;
refData.values[ndx] = texture2D.sample(refSampler, cx, cy, lod);
}
- if (!m_validator.validateImage(m_protectedContext, refData, image, vk::VK_FORMAT_R8G8B8A8_UNORM))
+ if (!m_validator.validateImage(m_protectedContext, refData, image, vk::VK_FORMAT_R8G8B8A8_UNORM, imageLayout))
return tcu::TestStatus::fail("Result validation failed");
else
return tcu::TestStatus::pass("Pass");