Lines Matching defs:params

292 	Move<VkImage>&			getResolvedFloatColorImage1(const TestParams& params)
294 return params.numFloatColor1Samples != VK_SAMPLE_COUNT_1_BIT ? floatResolve1.image : floatColor1.image;
296 Move<VkImage>& getResolvedFloatColorImage2(const TestParams& params)
298 return params.numFloatColor2Samples != VK_SAMPLE_COUNT_1_BIT ? floatResolve2.image : floatColor2.image;
300 Move<VkImage>& getResolvedIntColorImage(const TestParams& params)
302 return params.numIntColorSamples != VK_SAMPLE_COUNT_1_BIT ? intResolve.image : intColor.image;
304 Move<VkImage>& getResolvedDepthStencilImage(const TestParams& params)
306 return params.numDepthStencilSamples != VK_SAMPLE_COUNT_1_BIT ? depthStencilResolve.image : depthStencil.image;
309 Move<VkImageView>& getResolvedFloatColorImage1View(const TestParams& params)
311 return params.numFloatColor1Samples != VK_SAMPLE_COUNT_1_BIT ? floatResolve1.view : floatColor1.view;
313 Move<VkImageView>& getResolvedFloatColorImage2View(const TestParams& params)
315 return params.numFloatColor2Samples != VK_SAMPLE_COUNT_1_BIT ? floatResolve2.view : floatColor2.view;
317 Move<VkImageView>& getResolvedIntColorImageView(const TestParams& params)
319 return params.numIntColorSamples != VK_SAMPLE_COUNT_1_BIT ? intResolve.view : intColor.view;
321 Move<VkImageView>& getResolvedDepthOnlyImageView(const TestParams& params)
324 if (!isDepthFormat(params.depthStencilFormat))
325 return getResolvedStencilOnlyImageView(params);
326 return params.numDepthStencilSamples != VK_SAMPLE_COUNT_1_BIT ? depthOnlyResolveImageView : depthOnlyImageView;
328 Move<VkImageView>& getResolvedStencilOnlyImageView(const TestParams& params)
331 if (!isStencilFormat(params.depthStencilFormat))
332 return getResolvedDepthOnlyImageView(params);
333 return params.numDepthStencilSamples != VK_SAMPLE_COUNT_1_BIT ? stencilOnlyResolveImageView : stencilOnlyImageView;
639 const TestParams& params,
653 wd.framebufferSize.x() * wd.framebufferSize.y() * tcu::getPixelSize(mapVkFormat(params.floatColor1Format)),
654 wd.framebufferSize.x() * wd.framebufferSize.y() * tcu::getPixelSize(mapVkFormat(params.floatColor2Format)),
655 wd.framebufferSize.x() * wd.framebufferSize.y() * tcu::getPixelSize(mapVkFormat(params.intColorFormat)),
656 wd.framebufferSize.x() * wd.framebufferSize.y() * tcu::getPixelSize(mapVkFormat(params.depthStencilFormat)),
686 copyImageToBuffer(vk, *cmdBuffer, *wd.getResolvedFloatColorImage1(params), *buffer[0], size, VK_ACCESS_SHADER_WRITE_BIT, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, 1);
688 copyImageToBuffer(vk, *cmdBuffer, *wd.getResolvedFloatColorImage2(params), *buffer[1], size, VK_ACCESS_SHADER_WRITE_BIT, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, 1);
690 copyImageToBuffer(vk, *cmdBuffer, *wd.getResolvedIntColorImage(params), *buffer[2], size, VK_ACCESS_SHADER_WRITE_BIT, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, 1);
693 if (drawsToDepthStencil && isDepthFormat(params.depthStencilFormat))
695 copyImageToBuffer(vk, *cmdBuffer, *wd.getResolvedDepthStencilImage(params), *buffer[3], size, VK_ACCESS_SHADER_WRITE_BIT, depthStencilLayout, 1,
696 getDepthStencilAspectFlags(params.depthStencilFormat), VK_IMAGE_ASPECT_DEPTH_BIT);
699 if (drawsToDepthStencil && isStencilFormat(params.depthStencilFormat))
701 copyImageToBuffer(vk, *cmdBuffer, *wd.getResolvedDepthStencilImage(params), *buffer[4], size, VK_ACCESS_SHADER_WRITE_BIT, depthStencilLayout, 1,
702 getDepthStencilAspectFlags(params.depthStencilFormat), VK_IMAGE_ASPECT_STENCIL_BIT);
712 params.depthStencilFormat == VK_FORMAT_D16_UNORM ? tcu::TextureFormat::UNORM_INT16
718 { mapVkFormat(params.floatColor1Format), size.x(), size.y(), 1, bufferAlloc[0]->getHostPtr() },
719 { mapVkFormat(params.floatColor2Format), size.x(), size.y(), 1, bufferAlloc[1]->getHostPtr() },
720 { mapVkFormat(params.intColorFormat), size.x(), size.y(), 1, bufferAlloc[2]->getHostPtr() },
725 const tcu::ConstPixelBufferAccess testImageDataD24 = tcu::getEffectiveDepthStencilAccess(tcu::ConstPixelBufferAccess(mapVkFormat(params.depthStencilFormat),
736 if (isDepthFormat(params.depthStencilFormat))
737 log << tcu::TestLog::Image("Depth attachment", "Depth attachment", params.depthStencilFormat == VK_FORMAT_D24_UNORM_S8_UINT ? testImageDataD24 : testImageData[3]);
738 if (isStencilFormat(params.depthStencilFormat))
744 const TestParams& params,
781 if (drawsToDepthStencil && isDepthFormat(params.depthStencilFormat))
783 if (drawsToDepthStencil && isStencilFormat(params.depthStencilFormat))
872 void initializeAttachments(const TestParams& params, WorkingData& wd, std::vector<VkImage>& images, std::vector<VkImageView>& attachments, const size_t passNdx, deInt32 attachmentNdxes[8])
874 const bool includeAll = passNdx >= params.perPass.size();
878 if (includeAll || params.usesColor1InPass(passNdx))
884 if (includeAll || params.usesColor2InPass(passNdx))
890 if (includeAll || params.usesColor3InPass(passNdx))
896 if (includeAll || params.usesDepthStencilInPass(passNdx))
904 if (params.numFloatColor1Samples != VK_SAMPLE_COUNT_1_BIT && (includeAll || params.usesColor1InPass(passNdx)))
910 if (params.numFloatColor2Samples != VK_SAMPLE_COUNT_1_BIT && (includeAll || params.usesColor2InPass(passNdx)))
916 if (params.numIntColorSamples != VK_SAMPLE_COUNT_1_BIT && (includeAll || params.usesColor3InPass(passNdx)))
922 if (params.numDepthStencilSamples != VK_SAMPLE_COUNT_1_BIT && (includeAll || params.usesDepthStencilInPass(passNdx)))
930 void initializeAttachmentDescriptions(const TestParams& params, std::vector<VkAttachmentDescription2>& descs,
946 params.floatColor1Format, // VkFormat format;
947 params.numFloatColor1Samples, // VkSampleCountFlagBits samples;
968 params.floatColor2Format, // VkFormat format;
969 params.numFloatColor2Samples, // VkSampleCountFlagBits samples;
990 params.intColorFormat, // VkFormat format;
991 params.numIntColorSamples, // VkSampleCountFlagBits samples;
1012 params.depthStencilFormat, // VkFormat format;
1013 params.numDepthStencilSamples, // VkSampleCountFlagBits samples;
1036 params.floatColor1Format, // VkFormat format;
1051 params.floatColor2Format, // VkFormat format;
1066 params.intColorFormat, // VkFormat format;
1081 params.depthStencilFormat, // VkFormat format;
1092 void initializeRenderingAttachmentInfos (const TestParams& params,
1104 const VkAttachmentLoadOp loadOp = params.clearBeforeRenderPass ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_CLEAR;
1105 const TestParams::PerPass& perPass = params.perPass[passNdx];
1117 params.clearValues[0] // VkClearValue clearValue
1140 params.clearValues[0] // VkClearValue clearValue
1150 else if (params.numFloatColor1Samples == VK_SAMPLE_COUNT_1_BIT)
1156 colorAttachmentFormats[perPass.floatColor1Location] = params.floatColor1Format;
1174 params.clearValues[1] // VkClearValue clearValue
1183 else if (params.numFloatColor2Samples == VK_SAMPLE_COUNT_1_BIT)
1189 colorAttachmentFormats[perPass.floatColor2Location] = params.floatColor2Format;
1207 params.clearValues[2] // VkClearValue clearValue
1216 else if (params.numIntColorSamples == VK_SAMPLE_COUNT_1_BIT)
1222 colorAttachmentFormats[perPass.intColorLocation] = params.intColorFormat;
1241 params.clearValues[3] // VkClearValue clearValue
1246 renderingAttachmentInfo.resolveMode = params.perPass[passNdx].depthStencilResolveMode;
1250 else if (params.numDepthStencilSamples == VK_SAMPLE_COUNT_1_BIT)
1252 renderingAttachmentInfo.resolveMode = params.perPass[passNdx].depthStencilResolveMode;
1261 const TestParams& params,
1306 barriers.back().subresourceRange.aspectMask = getDepthStencilAspectFlags(params.depthStencilFormat);
1317 const TestParams& params,
1322 const bool preCleared = params.clearBeforeRenderPass;
1349 barriers[3].subresourceRange.aspectMask = getDepthStencilAspectFlags(params.depthStencilFormat);
1357 const TestParams& params,
1403 barriers.back().subresourceRange.aspectMask = getDepthStencilAspectFlags(params.depthStencilFormat);
1450 void addSubpassDescription(const TestParams& params,
1461 const TestParams::PerPass& perPass = params.perPass[passNdx];
1472 anySingleSampledAttachmentsUsed = anySingleSampledAttachmentsUsed || params.numFloatColor1Samples == VK_SAMPLE_COUNT_1_BIT;
1483 anySingleSampledAttachmentsUsed = anySingleSampledAttachmentsUsed || params.numFloatColor2Samples == VK_SAMPLE_COUNT_1_BIT;
1494 anySingleSampledAttachmentsUsed = anySingleSampledAttachmentsUsed || params.numIntColorSamples == VK_SAMPLE_COUNT_1_BIT;
1504 attachmentNdxes[3], params.depthStencilFormat, false);
1505 anySingleSampledAttachmentsUsed = anySingleSampledAttachmentsUsed || params.numDepthStencilSamples == VK_SAMPLE_COUNT_1_BIT;
1549 anySingleSampledAttachmentsUsed = anySingleSampledAttachmentsUsed || params.numFloatColor1Samples == VK_SAMPLE_COUNT_1_BIT;
1551 anySingleSampledAttachmentsUsed = anySingleSampledAttachmentsUsed || params.numFloatColor2Samples == VK_SAMPLE_COUNT_1_BIT;
1553 anySingleSampledAttachmentsUsed = anySingleSampledAttachmentsUsed || params.numIntColorSamples == VK_SAMPLE_COUNT_1_BIT;
1555 anySingleSampledAttachmentsUsed = anySingleSampledAttachmentsUsed || params.numDepthStencilSamples == VK_SAMPLE_COUNT_1_BIT;
1559 const bool needsDepthStencilResolve = perPass.resolveDepthStencil || (needsMsrtss && params.numDepthStencilSamples == VK_SAMPLE_COUNT_1_BIT && perPass.hasDepthStencil);
1566 attachmentNdxes[7], params.depthStencilFormat, false);
1682 void createWorkingData (Context& context, const TestParams& params, WorkingData& wd)
1691 wd.floatColor1.allocate (vk, device, allocator, params.floatColor1Format, wd.framebufferSize, params.numFloatColor1Samples, colorImageUsageFlags, VK_IMAGE_ASPECT_COLOR_BIT, 1, true);
1692 wd.floatColor2.allocate (vk, device, allocator, params.floatColor2Format, wd.framebufferSize, params.numFloatColor2Samples, colorImageUsageFlags, VK_IMAGE_ASPECT_COLOR_BIT, 1, true);
1693 wd.intColor.allocate (vk, device, allocator, params.intColorFormat, wd.framebufferSize, params.numIntColorSamples, colorImageUsageFlags, VK_IMAGE_ASPECT_COLOR_BIT, 1, true);
1694 wd.depthStencil.allocate(vk, device, allocator, params.depthStencilFormat, wd.framebufferSize, params.numDepthStencilSamples, depthStencilImageUsageFlags, getDepthStencilAspectFlags(params.depthStencilFormat), 1, true);
1696 if (isDepthFormat(params.depthStencilFormat))
1697 wd.depthOnlyImageView = wd.depthStencil.makeView(vk, device, params.depthStencilFormat, VK_IMAGE_ASPECT_DEPTH_BIT, 1);
1699 if (isStencilFormat(params.depthStencilFormat))
1700 wd.stencilOnlyImageView = wd.depthStencil.makeView(vk, device, params.depthStencilFormat, VK_IMAGE_ASPECT_STENCIL_BIT, 1);
1702 if (params.numFloatColor1Samples != VK_SAMPLE_COUNT_1_BIT)
1704 wd.floatResolve1.allocate(vk, device, allocator, params.floatColor1Format, wd.framebufferSize, VK_SAMPLE_COUNT_1_BIT, colorImageUsageFlags, VK_IMAGE_ASPECT_COLOR_BIT, 1, false);
1707 if (params.numFloatColor2Samples != VK_SAMPLE_COUNT_1_BIT)
1709 wd.floatResolve2.allocate(vk, device, allocator, params.floatColor2Format, wd.framebufferSize, VK_SAMPLE_COUNT_1_BIT, colorImageUsageFlags, VK_IMAGE_ASPECT_COLOR_BIT, 1, false);
1712 if (params.numIntColorSamples != VK_SAMPLE_COUNT_1_BIT)
1714 wd.intResolve.allocate(vk, device, allocator, params.intColorFormat, wd.framebufferSize, VK_SAMPLE_COUNT_1_BIT, colorImageUsageFlags, VK_IMAGE_ASPECT_COLOR_BIT, 1, false);
1717 if (params.numDepthStencilSamples != VK_SAMPLE_COUNT_1_BIT)
1719 wd.depthStencilResolve.allocate(vk, device, allocator, params.depthStencilFormat, wd.framebufferSize, VK_SAMPLE_COUNT_1_BIT, depthStencilImageUsageFlags, getDepthStencilAspectFlags(params.depthStencilFormat), 1, false);
1721 if (isDepthFormat(params.depthStencilFormat))
1722 wd.depthOnlyResolveImageView = wd.depthStencilResolve.makeView(vk, device, params.depthStencilFormat, VK_IMAGE_ASPECT_DEPTH_BIT, 1);
1724 if (isStencilFormat(params.depthStencilFormat))
1725 wd.stencilOnlyResolveImageView = wd.depthStencilResolve.makeView(vk, device, params.depthStencilFormat, VK_IMAGE_ASPECT_STENCIL_BIT, 1);
1766 void checkRequirements (Context& context, TestParams params)
1771 checkPipelineConstructionRequirements(instanceInterface, physicalDevice, params.pipelineConstructionType);
1776 if (params.dynamicRendering)
1779 if (params.isMultisampledRenderToSingleSampled)
1810 checkImageRequirements (context, params.floatColor1Format,
1812 colorImageUsageFlags, params.numFloatColor1Samples, imageProperties);
1813 if (params.numFloatColor1Samples == VK_SAMPLE_COUNT_1_BIT)
1814 for (const TestParams::PerPass& perPass : params.perPass)
1816 TCU_THROW(NotSupportedError, (de::toString(params.floatColor1Format) + ": sample count not supported").c_str());
1820 checkImageRequirements (context, params.floatColor2Format,
1822 colorImageUsageFlags, params.numFloatColor2Samples, imageProperties);
1823 if (params.numFloatColor1Samples == VK_SAMPLE_COUNT_1_BIT)
1824 for (const TestParams::PerPass& perPass : params.perPass)
1826 TCU_THROW(NotSupportedError, (de::toString(params.floatColor2Format) + ": sample count not supported").c_str());
1830 checkImageRequirements (context, params.intColorFormat,
1832 colorImageUsageFlags, params.numIntColorSamples, imageProperties);
1833 if (params.numFloatColor1Samples == VK_SAMPLE_COUNT_1_BIT)
1834 for (const TestParams::PerPass& perPass : params.perPass)
1836 TCU_THROW(NotSupportedError, (de::toString(params.intColorFormat) + ": sample count not supported").c_str());
1840 checkImageRequirements (context, params.depthStencilFormat,
1842 depthStencilImageUsageFlags, params.numDepthStencilSamples, imageProperties);
1843 if (params.numFloatColor1Samples == VK_SAMPLE_COUNT_1_BIT)
1844 for (const TestParams::PerPass& perPass : params.perPass)
1846 TCU_THROW(NotSupportedError, (de::toString(params.depthStencilFormat) + ": sample count not supported").c_str());
1859 for (const TestParams::PerPass& perPass : params.perPass)
1863 const bool checkDepth = perPass.hasDepthStencil && isDepthFormat(params.depthStencilFormat);
1864 const bool checkStencil = perPass.hasDepthStencil && isStencilFormat(params.depthStencilFormat);
1882 void generateRandomClearValues(de::Random& rng, const TestParams& params, VkClearValue clearValues[4], bool smallValues)
1884 const bool usesSignedIntFormat = params.intColorFormat == VK_FORMAT_R16G16B16A16_SINT;
1911 void clearImagesBeforeDraw(Context& context, const TestParams& params, WorkingData& wd, TestObjects& testObjects)
1934 preClearBarriers[3].subresourceRange.aspectMask = getDepthStencilAspectFlags(params.depthStencilFormat);
1939 vk.cmdClearColorImage(*testObjects.cmdBuffer, *wd.floatColor1.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &params.clearValues[0].color, 1, &preClearBarriers[0].subresourceRange);
1940 vk.cmdClearColorImage(*testObjects.cmdBuffer, *wd.floatColor2.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &params.clearValues[1].color, 1, &preClearBarriers[1].subresourceRange);
1941 vk.cmdClearColorImage(*testObjects.cmdBuffer, *wd.intColor.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &params.clearValues[2].color, 1, &preClearBarriers[2].subresourceRange);
1942 vk.cmdClearDepthStencilImage(*testObjects.cmdBuffer, *wd.depthStencil.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &params.clearValues[3].depthStencil, 1, &preClearBarriers[3].subresourceRange);
1988 const TestParams& params,
1997 const TestParams::PerPass& perPass = params.perPass[renderPassNdx];
2002 anySingleSampledAttachmentsUsed = anySingleSampledAttachmentsUsed || params.numFloatColor1Samples == VK_SAMPLE_COUNT_1_BIT;
2006 anySingleSampledAttachmentsUsed = anySingleSampledAttachmentsUsed || params.numFloatColor2Samples == VK_SAMPLE_COUNT_1_BIT;
2010 anySingleSampledAttachmentsUsed = anySingleSampledAttachmentsUsed || params.numIntColorSamples == VK_SAMPLE_COUNT_1_BIT;
2014 anySingleSampledAttachmentsUsed = anySingleSampledAttachmentsUsed || params.numDepthStencilSamples == VK_SAMPLE_COUNT_1_BIT;
2032 const bool useDepthStencil = params.usesDepthStencilInPass(renderPassNdx);
2044 useDepthStencil && isDepthFormat(params.depthStencilFormat) ?
2046 useDepthStencil && isStencilFormat(params.depthStencilFormat) ?
2073 void setupVerifyDescriptorSetAndPipeline(Context& context, const TestParams& params, WorkingData& wd, TestObjects& testObjects, const VkPushConstantRange* pushConstantRange,
2100 const VkDescriptorImageInfo color1ImageInfo = makeDescriptorImageInfo(DE_NULL, *wd.getResolvedFloatColorImage1View(params), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
2101 const VkDescriptorImageInfo color2ImageInfo = makeDescriptorImageInfo(DE_NULL, *wd.getResolvedFloatColorImage2View(params), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
2102 const VkDescriptorImageInfo color3ImageInfo = makeDescriptorImageInfo(DE_NULL, *wd.getResolvedIntColorImageView(params), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
2103 const VkDescriptorImageInfo depthImageInfo = makeDescriptorImageInfo(DE_NULL, *wd.getResolvedDepthOnlyImageView(params), VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL);
2104 const VkDescriptorImageInfo stencilImageInfo = makeDescriptorImageInfo(DE_NULL, *wd.getResolvedStencilOnlyImageView(params), VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL);
2229 void testStart(Context& context, const TestParams& params, WorkingData& wd, TestObjects& testObjects)
2231 de::Random rng(params.rngSeed);
2235 if (!params.renderToWholeFramebuffer)
2243 createWorkingData(context, params, wd);
2297 void testEnd(Context& context, const TestParams& params, WorkingData& wd, TestObjects& testObjects)
2300 const bool verifyOutsideRenderArea = params.clearBeforeRenderPass && !params.renderToWholeFramebuffer;
2315 if (params.numFloatColor1Samples == VK_SAMPLE_COUNT_1_BIT)
2320 Vec4(params.clearValues[0].color.float32[0], params.clearValues[0].color.float32[1], params.clearValues[0].color.float32[2], params.clearValues[0].color.float32[3]),
2323 dispatchVerifyConstantColor(context, testObjects, wd.getResolvedFloatColorImage1View(params), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, wd.verify.view, wd.singleVerificationBuffer,
2327 if (params.numFloatColor2Samples == VK_SAMPLE_COUNT_1_BIT)
2332 Vec4(params.clearValues[1].color.float32[0], params.clearValues[1].color.float32[1], params.clearValues[1].color.float32[2], params.clearValues[1].color.float32[3]),
2335 dispatchVerifyConstantColor(context, testObjects, wd.getResolvedFloatColorImage2View(params), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, wd.verify.view, wd.singleVerificationBuffer,
2339 if (params.numIntColorSamples == VK_SAMPLE_COUNT_1_BIT)
2344 IVec4(params.clearValues[2].color.int32[0], params.clearValues[2].color.int32[1], params.clearValues[2].color.int32[2], params.clearValues[2].color.int32[3]),
2347 dispatchVerifyConstantColor(context, testObjects, wd.getResolvedIntColorImageView(params), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, wd.verify.view, wd.singleVerificationBuffer,
2351 if (params.numDepthStencilSamples == VK_SAMPLE_COUNT_1_BIT && isDepthFormat(params.depthStencilFormat))
2356 params.clearValues[3].depthStencil.depth,
2358 dispatchVerifyConstantColor(context, testObjects, wd.getResolvedDepthOnlyImageView(params), VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, wd.verify.view, wd.singleVerificationBuffer,
2362 if (params.numDepthStencilSamples == VK_SAMPLE_COUNT_1_BIT && isStencilFormat(params.depthStencilFormat))
2367 params.clearValues[3].depthStencil.stencil,
2369 dispatchVerifyConstantColor(context, testObjects, wd.getResolvedStencilOnlyImageView(params), VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, wd.verify.view, wd.singleVerificationBuffer,
2380 tcu::TestStatus verify(Context& context, const TestParams& params, WorkingData& wd)
2386 for (const TestParams::PerPass& perPass : params.perPass)
2398 logTestImages(context, params, wd, drawsToColor1, drawsToColor2, drawsToColor3, drawsToDepthStencil);
2435 if (drawsToDepthStencil && isDepthFormat(params.depthStencilFormat))
2444 if (drawsToDepthStencil && isStencilFormat(params.depthStencilFormat))
2455 logVerifyImages(context, params, wd, drawsToColor1, drawsToColor2, drawsToColor3, drawsToDepthStencil);
2460 const bool verifyOutsideRenderArea = params.clearBeforeRenderPass && !params.renderToWholeFramebuffer;
2467 if (params.numFloatColor1Samples == VK_SAMPLE_COUNT_1_BIT)
2469 if (params.numFloatColor2Samples == VK_SAMPLE_COUNT_1_BIT)
2471 if (params.numIntColorSamples == VK_SAMPLE_COUNT_1_BIT)
2473 if (params.numDepthStencilSamples == VK_SAMPLE_COUNT_1_BIT && isDepthFormat(params.depthStencilFormat))
2475 if (params.numDepthStencilSamples == VK_SAMPLE_COUNT_1_BIT && isStencilFormat(params.depthStencilFormat))
2480 logVerifyImages(context, params, wd, drawsToColor1, drawsToColor2, drawsToColor3, drawsToDepthStencil);
2488 void initConstantColorVerifyPrograms (SourceCollections& programCollection, const TestParams params)
2490 const bool usesSignedIntFormat = params.intColorFormat == VK_FORMAT_R16G16B16A16_SINT;
2502 << "} params;\n"
2520 << " if (any(greaterThanEqual(gl_GlobalInvocationID.xy, params.area.zw)))\n"
2523 << " uvec2 coords = params.area.xy + gl_GlobalInvocationID.xy;\n"
2527 << " if (v4matches(color, params.color, 0.01))\n"
2529 << " atomicAdd(sb_out.colorVerification[params.attachmentNdx], 1);\n"
2532 << " imageStore(verify, ivec3(coords, params.attachmentNdx), result);\n"
2548 << "} params;\n"
2566 << " if (any(greaterThanEqual(gl_GlobalInvocationID.xy, params.area.zw)))\n"
2569 << " uvec2 coords = params.area.xy + gl_GlobalInvocationID.xy;\n"
2573 << " if (i4matches(color, params.color, 0))\n"
2575 << " atomicAdd(sb_out.colorVerification[params.attachmentNdx], 1);\n"
2578 << " imageStore(verify, ivec3(coords, params.attachmentNdx), result);\n"
2593 << "} params;\n"
2611 << " if (any(greaterThanEqual(gl_GlobalInvocationID.xy, params.area.zw)))\n"
2614 << " uvec2 coords = params.area.xy + gl_GlobalInvocationID.xy;\n"
2618 << " if (fmatches(depth, params.depthData, 0.01))\n"
2638 << "} params;\n"
2656 << " if (any(greaterThanEqual(gl_GlobalInvocationID.xy, params.area.zw)))\n"
2659 << " uvec2 coords = params.area.xy + gl_GlobalInvocationID.xy;\n"
2663 << " if (umatches(stencil, params.stencilData, 0))\n"
2675 void initBasicPrograms (SourceCollections& programCollection, const TestParams params)
2696 const bool usesSignedIntFormat = params.intColorFormat == VK_FORMAT_R16G16B16A16_SINT;
2718 const TestParams::PerPass &perPass = params.perPass[0];
2734 << "} params;\n"
2738 << " vec2 uv = (gl_FragCoord.xy - vec2(params.area.xy)) / vec2(params.area.zw);\n";
2793 const TestParams::PerPass &perPass = params.perPass[0];
2812 << "} params;\n"
2823 if (isDepthFormat(params.depthStencilFormat))
2825 if (isStencilFormat(params.depthStencilFormat))
2848 << " if (any(greaterThanEqual(gl_GlobalInvocationID.xy, params.area.zw)))\n"
2851 << " uvec2 coords = params.area.xy + gl_GlobalInvocationID.xy;\n"
2852 << " vec2 uv = (vec2(gl_GlobalInvocationID.xy) + vec2(0.5)) / vec2(params.area.zw);\n"
2866 << " if (v4matches(color1, expected1, max(expected1H / float(params.area.z), expected1V / float(params.area.w)) + 2.0/255.0))\n"
2876 << " if (v4matches(color2, expected1, max(expected1H / float(params.area.z), expected1V / float(params.area.w)) + 2.0/1024.0))\n"
2895 << intValue << " / int(params.area.z) + 1, "
2896 << intValue << " / int(params.area.w) + 1)" << (sampleID == numSamples - 1 ? ")" : "") << "\n";
2904 if (isDepthFormat(params.depthStencilFormat))
2917 if (isStencilFormat(params.depthStencilFormat))
2921 << " if (umatches(stencil, params.stencilExpect, 0))\n"
2934 initConstantColorVerifyPrograms(programCollection, params);
2937 void dispatchVerifyBasic(Context& context, const TestParams& params, WorkingData& wd, TestObjects& testObjects)
2952 setupVerifyDescriptorSetAndPipeline(context, params, wd, testObjects, &verifyPushConstantRange, verifyPipelineLayout);
2954 const deUint32 stencilExpect = params.clearValues[3].depthStencil.stencil + 1;
2965 void drawBasic (Context& context, const TestParams& params, WorkingData& wd, TestObjects& testObjects)
2976 DE_ASSERT(params.perPass.size() == 1);
2978 if (params.clearBeforeRenderPass)
2980 clearImagesBeforeDraw(context, params, wd, testObjects);
2983 if (params.dynamicRendering)
2985 preRenderingImageLayoutTransition(context, params, wd, testObjects);
2986 initResolveImageLayouts(context, params, wd, testObjects);
3003 initializeAttachments(params, wd, images, attachments, 0, attachmentNdxes);
3005 if (params.dynamicRendering)
3007 initializeRenderingAttachmentInfos(params,
3026 if (params.usesDepthStencilInPass(0))
3028 if (isDepthFormat(params.depthStencilFormat))
3029 pipelineRenderingCreateInfo.depthAttachmentFormat = params.depthStencilFormat;
3030 if (isStencilFormat(params.depthStencilFormat))
3031 pipelineRenderingCreateInfo.stencilAttachmentFormat = params.depthStencilFormat;
3036 initializeAttachmentDescriptions(params, attachmentDescriptions, params.clearBeforeRenderPass, attachmentNdxes, attachmentUseMask);
3038 addSubpassDescription(params,
3049 createRenderPassAndFramebuffer(context, wd, testObjects, params.pipelineConstructionType, images, attachments, attachmentDescriptions, subpasses, {});
3063 const PipelineLayoutWrapper pipelineLayout (params.pipelineConstructionType, vk, device, 0, DE_NULL, 1, &pushConstantRange);
3071 params.pipelineConstructionType,
3073 params.dynamicRendering ? DE_NULL : *testObjects.renderPassFramebuffers.back(),
3074 params.dynamicRendering ? &pipelineRenderingCreateInfo : DE_NULL,
3082 params.perPass[0].intColorLocation,
3085 params.perPass[0].numSamples,
3086 params.useGarbageAttachment));
3088 if (params.dynamicRendering)
3090 startRendering(context, params, wd, testObjects, static_cast<uint32_t>(colorAttachmentFormats.size()), colorAttachmentInfos, depthStencilAttachmentInfo, 0u);
3094 startRenderPass(context, wd, testObjects, DE_LENGTH_OF_ARRAY(params.clearValues), params.clearValues);
3104 if (params.dynamicRendering)
3114 if (params.dynamicRendering)
3116 postRenderingResolveImageLayoutTransition(context, params, wd, testObjects);
3120 dispatchVerifyBasic(context, params, wd, testObjects);
3124 tcu::TestStatus testBasic (Context& context, const TestParams params)
3128 testStart(context, params, wd, testObjects);
3130 drawBasic (context, params, wd, testObjects);
3132 testEnd(context, params, wd, testObjects);
3133 return verify(context, params, wd);
3136 void generateBasicTest (de::Random& rng, TestParams& params, const VkSampleCountFlagBits sampleCount, const VkResolveModeFlagBits resolveMode, const bool renderToWholeFramebuffer)
3138 params.perPass.resize(1);
3140 TestParams::PerPass& perPass = params.perPass[0];
3143 if (params.isMultisampledRenderToSingleSampled)
3145 params.numFloatColor1Samples = VK_SAMPLE_COUNT_1_BIT;
3146 params.numFloatColor2Samples = VK_SAMPLE_COUNT_1_BIT;
3147 params.numIntColorSamples = VK_SAMPLE_COUNT_1_BIT;
3148 params.numDepthStencilSamples = VK_SAMPLE_COUNT_1_BIT;
3157 params.numFloatColor1Samples = sampleCount;
3158 params.numFloatColor2Samples = sampleCount;
3159 params.numIntColorSamples = sampleCount;
3160 params.numDepthStencilSamples = sampleCount;
3180 params.clearBeforeRenderPass = true;
3181 params.renderToWholeFramebuffer = renderToWholeFramebuffer;
3182 params.testBlendsColors = false;
3185 generateRandomClearValues(rng, params, params.clearValues, false);
3187 params.rngSeed = rng.getUint32();
3190 void dispatchVerifyClearAttachments(Context& context, const TestParams& params, WorkingData& wd, TestObjects& testObjects, const UVec4 regions[RegionCount], const VkClearValue clearValues[RegionCount - 1][4])
3205 setupVerifyDescriptorSetAndPipeline(context, params, wd, testObjects, &verifyPushConstantRange, verifyPipelineLayout);
3210 params.clearValues[3].depthStencil.stencil + 1,
3238 dispatchVerifyConstantColor(context, testObjects, wd.getResolvedFloatColorImage1View(params), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, wd.verify.view, wd.verificationBuffer,
3249 dispatchVerifyConstantColor(context, testObjects, wd.getResolvedFloatColorImage2View(params), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, wd.verify.view, wd.verificationBuffer,
3260 dispatchVerifyConstantColor(context, testObjects, wd.getResolvedIntColorImageView(params), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, wd.verify.view, wd.verificationBuffer,
3264 if (isDepthFormat(params.depthStencilFormat))
3271 dispatchVerifyConstantColor(context, testObjects, wd.getResolvedDepthOnlyImageView(params), VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, wd.verify.view, wd.verificationBuffer,
3275 if (isStencilFormat(params.depthStencilFormat))
3282 dispatchVerifyConstantColor(context, testObjects, wd.getResolvedStencilOnlyImageView(params), VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, wd.verify.view, wd.verificationBuffer,
3290 void drawClearAttachments (Context& context, const TestParams& params, WorkingData& wd, TestObjects& testObjects)
3301 DE_ASSERT(params.perPass.size() == 1);
3303 if (params.clearBeforeRenderPass)
3305 clearImagesBeforeDraw(context, params, wd, testObjects);
3308 if (params.dynamicRendering)
3310 preRenderingImageLayoutTransition(context, params, wd, testObjects);
3311 initResolveImageLayouts(context, params, wd, testObjects);
3328 initializeAttachments(params, wd, images, attachments, 0, attachmentNdxes);
3330 if (params.dynamicRendering)
3332 initializeRenderingAttachmentInfos(params,
3351 if (params.usesDepthStencilInPass(0))
3353 if (isDepthFormat(params.depthStencilFormat))
3354 pipelineRenderingCreateInfo.depthAttachmentFormat = params.depthStencilFormat;
3355 if (isStencilFormat(params.depthStencilFormat))
3356 pipelineRenderingCreateInfo.stencilAttachmentFormat = params.depthStencilFormat;
3361 initializeAttachmentDescriptions(params, attachmentDescriptions, params.clearBeforeRenderPass, attachmentNdxes, attachmentUseMask);
3363 addSubpassDescription(params,
3374 createRenderPassAndFramebuffer(context, wd, testObjects, params.pipelineConstructionType, images, attachments, attachmentDescriptions, subpasses, {});
3382 de::Random rng(params.rngSeed);
3384 generateRandomClearValues(rng, params, clearValues[regionNdx], false);
3396 const PipelineLayoutWrapper pipelineLayout (params.pipelineConstructionType, vk, device, 0, DE_NULL, 1, &pushConstantRange);
3398 if (params.dynamicRendering)
3400 startRendering(context, params, wd, testObjects, static_cast<uint32_t>(colorAttachmentFormats.size()), colorAttachmentInfos, depthStencilAttachmentInfo, 0u);
3404 startRenderPass(context, wd, testObjects, DE_LENGTH_OF_ARRAY(params.clearValues), params.clearValues);
3414 params.pipelineConstructionType,
3416 params.dynamicRendering ? DE_NULL : *testObjects.renderPassFramebuffers.back(),
3417 params.dynamicRendering ? &pipelineRenderingCreateInfo : DE_NULL,
3425 params.perPass[0].intColorLocation,
3428 params.perPass[0].numSamples,
3429 params.useGarbageAttachment));
3443 { VK_IMAGE_ASPECT_COLOR_BIT, static_cast<deUint32>(params.perPass[0].floatColor1Location), clearValues[regionNdx][0], },
3444 { VK_IMAGE_ASPECT_COLOR_BIT, static_cast<deUint32>(params.perPass[0].floatColor2Location), clearValues[regionNdx][1], },
3445 { VK_IMAGE_ASPECT_COLOR_BIT, static_cast<deUint32>(params.perPass[0].intColorLocation), clearValues[regionNdx][2], },
3446 { getDepthStencilAspectFlags(params.depthStencilFormat), 0, clearValues[regionNdx][3], },
3468 params.pipelineConstructionType,
3470 params.dynamicRendering ? DE_NULL : *testObjects.renderPassFramebuffers.back(),
3471 params.dynamicRendering ? &pipelineRenderingCreateInfo : DE_NULL,
3479 params.perPass[0].intColorLocation,
3482 params.perPass[0].numSamples,
3483 params.useGarbageAttachment));
3489 if (params.dynamicRendering)
3499 if (params.dynamicRendering)
3501 postRenderingResolveImageLayoutTransition(context, params, wd, testObjects);
3505 dispatchVerifyClearAttachments(context, params, wd, testObjects, regions, clearValues);
3509 tcu::TestStatus testClearAttachments (Context& context, const TestParams params)
3513 testStart(context, params, wd, testObjects);
3515 drawClearAttachments (context, params, wd, testObjects);
3517 testEnd(context, params, wd, testObjects);
3518 return verify(context, params, wd);
3521 void drawOnePass(Context& context, const TestParams& params, WorkingData& wd, TestObjects& testObjects,
3533 const TestParams::PerPass& perPass = params.perPass[passNdx];
3564 params.pipelineConstructionType,
3566 params.dynamicRendering ? DE_NULL : *testObjects.renderPassFramebuffers.back(),
3567 params.dynamicRendering ? pipelineRenderingCreateInfo : DE_NULL,
3579 params.useGarbageAttachment));
3594 params.pipelineConstructionType,
3596 params.dynamicRendering ? DE_NULL : *testObjects.renderPassFramebuffers.back(),
3597 params.dynamicRendering ? pipelineRenderingCreateInfo : DE_NULL,
3609 params.useGarbageAttachment));
3619 void dispatchVerifyMultiPassRendering(Context& context, const TestParams& params, WorkingData& wd, TestObjects& testObjects, UVec4 regions[RegionCount])
3634 setupVerifyDescriptorSetAndPipeline(context, params, wd, testObjects, &verifyPushConstantRange, verifyPipelineLayout);
3654 vk.cmdPushConstants(*testObjects.cmdBuffer, *verifyPipelineLayout, VK_SHADER_STAGE_COMPUTE_BIT, sizeof(UVec4), sizeof(params.verifyConstants[regionNdx]), &params.verifyConstants[regionNdx]);
3663 void drawSingleRenderPass (Context& context, const TestParams& params, WorkingData& wd, TestObjects& testObjects)
3667 const deUint32 numSubpasses = static_cast<deUint32>(params.perPass.size());
3669 if (params.clearBeforeRenderPass)
3671 clearImagesBeforeDraw(context, params, wd, testObjects);
3690 initializeAttachments(params, wd, images, attachments, params.perPass.size(), attachmentNdxes);
3691 initializeAttachmentDescriptions(params, attachmentDescriptions, params.clearBeforeRenderPass, attachmentNdxes, attachmentUseMask);
3695 addSubpassDescription(params,
3710 createRenderPassAndFramebuffer(context, wd, testObjects, params.pipelineConstructionType, images, attachments, attachmentDescriptions, subpasses, subpassDependencies);
3721 const PipelineLayoutWrapper pipelineLayout (params.pipelineConstructionType, vk, device, 0, DE_NULL, 1, &pushConstantRange);
3726 startRenderPass(context, wd, testObjects, DE_LENGTH_OF_ARRAY(params.clearValues), params.clearValues);
3733 drawOnePass(context, params, wd, testObjects, vertexModule, pipelineLayout, passNdx, passNdx, regions, DE_NULL);
3739 dispatchVerifyMultiPassRendering(context, params, wd, testObjects, regions);
3743 tcu::TestStatus testSingleRenderPass (Context& context, const TestParams params)
3747 testStart(context, params, wd, testObjects);
3749 drawSingleRenderPass (context, params, wd, testObjects);
3751 testEnd(context, params, wd, testObjects);
3752 return verify(context, params, wd);
3755 void drawMultiRenderPass (Context& context, const TestParams& params, WorkingData& wd, TestObjects& testObjects)
3759 const deUint32 numRenderPasses = static_cast<deUint32>(params.perPass.size());
3761 if (params.clearBeforeRenderPass)
3763 clearImagesBeforeDraw(context, params, wd, testObjects);
3766 if (params.dynamicRendering)
3768 preRenderingImageLayoutTransition(context, params, wd, testObjects);
3769 initResolveImageLayouts(context, params, wd, testObjects);
3780 const PipelineLayoutWrapper pipelineLayout (params.pipelineConstructionType, vk, device, 0, DE_NULL, 1, &pushConstantRange);
3807 initializeAttachments(params, wd, images, attachments, renderPassNdx, attachmentNdxes);
3808 if (params.dynamicRendering)
3810 initializeRenderingAttachmentInfos(params,
3829 if (params.usesDepthStencilInPass(renderPassNdx))
3831 if (isDepthFormat(params.depthStencilFormat))
3832 pipelineRenderingCreateInfo.depthAttachmentFormat = params.depthStencilFormat;
3833 if (isStencilFormat(params.depthStencilFormat))
3834 pipelineRenderingCreateInfo.stencilAttachmentFormat = params.depthStencilFormat;
3839 initializeAttachmentDescriptions(params, attachmentDescriptions, params.clearBeforeRenderPass, attachmentNdxes, attachmentUseMask);
3841 addSubpassDescription(params,
3852 createRenderPassAndFramebuffer(context, wd, testObjects, params.pipelineConstructionType, images, attachments, attachmentDescriptions, subpasses, {});
3856 clearValues.push_back(params.clearValues[0]);
3858 clearValues.push_back(params.clearValues[1]);
3860 clearValues.push_back(params.clearValues[2]);
3862 clearValues.push_back(params.clearValues[3]);
3885 if (params.dynamicRendering)
3887 startRendering(context, params, wd, testObjects, static_cast<uint32_t>(colorAttachmentFormats.size()), colorAttachmentInfos, depthStencilAttachmentInfo, renderPassNdx);
3894 drawOnePass(context, params, wd, testObjects, vertexModule, pipelineLayout, renderPassNdx, 0, regions, &pipelineRenderingCreateInfo);
3896 if (params.dynamicRendering)
3906 if (params.dynamicRendering)
3908 postRenderingResolveImageLayoutTransition(context, params, wd, testObjects);
3912 dispatchVerifyMultiPassRendering(context, params, wd, testObjects, regions);
3916 tcu::TestStatus testMultiRenderPass (Context& context, const TestParams params)
3920 testStart(context, params, wd, testObjects);
3922 drawMultiRenderPass (context, params, wd, testObjects);
3924 testEnd(context, params, wd, testObjects);
3925 return verify(context, params, wd);
3928 void generateMultiPassTest (de::Random& rng, TestParams& params)
3953 params.perPass.resize(passCount);
3958 if (params.isMultisampledRenderToSingleSampled)
3976 const deUint32 singleSampledAttachmentsMask = params.isMultisampledRenderToSingleSampled ? rng.getInt(1, 15) | (~usedAttachmentMask & 0xF) : 0;
3982 params.numFloatColor1Samples = VK_SAMPLE_COUNT_1_BIT;
3984 params.numFloatColor2Samples = VK_SAMPLE_COUNT_1_BIT;
3986 params.numIntColorSamples = VK_SAMPLE_COUNT_1_BIT;
3988 params.numDepthStencilSamples = VK_SAMPLE_COUNT_1_BIT;
3992 TestParams::PerPass& perPass = params.perPass[passNdx];
4006 VkSampleCountFlagBits sampleCount = (multisampledAttachments & 1) != 0 && params.numFloatColor1Samples != 0 ? params.numFloatColor1Samples
4007 : (multisampledAttachments & 2) != 0 && params.numFloatColor2Samples != 0 ? params.numFloatColor2Samples
4008 : (multisampledAttachments & 4) != 0 && params.numIntColorSamples != 0 ? params.numIntColorSamples
4009 : (multisampledAttachments & 8) != 0 && params.numDepthStencilSamples != 0 ? params.numDepthStencilSamples
4013 params.numFloatColor1Samples, params.numFloatColor2Samples, params.numIntColorSamples, params.numDepthStencilSamples);
4024 params.numFloatColor1Samples = sampleCount;
4026 params.numFloatColor2Samples = sampleCount;
4028 params.numIntColorSamples = sampleCount;
4030 params.numDepthStencilSamples = sampleCount;
4059 DBG(" Sample counts: %u %u %u %u\n", params.numFloatColor1Samples, params.numFloatColor2Samples, params.numIntColorSamples, params.numDepthStencilSamples);
4064 const VkSampleCountFlagBits sampleCounts[4] = {params.numFloatColor1Samples, params.numFloatColor2Samples, params.numIntColorSamples, params.numDepthStencilSamples};
4073 ? params.perPass[passNdx].numSamples
4087 TestParams::PerPass& perPass = params.perPass[passNdx - 1];
4100 if (perPass.resolveDepthStencil || params.numDepthStencilSamples == VK_SAMPLE_COUNT_1_BIT)
4109 params.clearBeforeRenderPass = rng.getBool();
4111 params.renderToWholeFramebuffer = rng.getBool();
4113 params.testBlendsColors = true;
4116 generateRandomClearValues(rng, params, params.clearValues, true);
4121 TestParams::PerPass& perPass = params.perPass[passNdx];
4156 depthResult[regionNdx] = Vec2(params.clearValues[3].depthStencil.depth, params.clearValues[3].depthStencil.depth);
4157 stencilResult[regionNdx] = UVec2(params.clearValues[3].depthStencil.stencil, params.clearValues[3].depthStencil.stencil);
4162 TestParams::PerPass& perPass = params.perPass[passNdx];
4171 (!isDepthFormat(params.depthStencilFormat) || perPass.drawConstantsWithDepthTest[regionNdx].depthData[0] > perPass.drawConstantsWithDepthWrite[regionNdx].depthData[0]);
4173 (!isDepthFormat(params.depthStencilFormat) || perPass.drawConstantsWithDepthTest[regionNdx].depthData[1] > perPass.drawConstantsWithDepthWrite[regionNdx].depthData[1]);
4177 params.verifyConstants[regionNdx].color1Data[0] += perPass.drawConstantsWithDepthWrite[regionNdx].color1Data[0];
4178 params.verifyConstants[regionNdx].color1Data[1] += perPass.drawConstantsWithDepthWrite[regionNdx].color1Data[1];
4180 params.verifyConstants[regionNdx].color1Data[0] += perPass.drawConstantsWithDepthTest[regionNdx].color1Data[0];
4182 params.verifyConstants[regionNdx].color1Data[1] += perPass.drawConstantsWithDepthTest[regionNdx].color1Data[1];
4186 params.verifyConstants[regionNdx].color2Data[0] += perPass.drawConstantsWithDepthWrite[regionNdx].color2Data[0];
4187 params.verifyConstants[regionNdx].color2Data[1] += perPass.drawConstantsWithDepthWrite[regionNdx].color2Data[1];
4189 params.verifyConstants[regionNdx].color2Data[0] += perPass.drawConstantsWithDepthTest[regionNdx].color2Data[0];
4191 params.verifyConstants[regionNdx].color2Data[1] += perPass.drawConstantsWithDepthTest[regionNdx].color2Data[1];
4198 params.verifyConstants[regionNdx].color3Data[0] += perPass.drawConstantsWithDepthTest[regionNdx].color3Data[0];
4200 params.verifyConstants[regionNdx].color3Data[0] += perPass.drawConstantsWithDepthWrite[regionNdx].color3Data[0];
4203 params.verifyConstants[regionNdx].color3Data[1] += perPass.drawConstantsWithDepthTest[regionNdx].color3Data[1];
4205 params.verifyConstants[regionNdx].color3Data[1] += perPass.drawConstantsWithDepthWrite[regionNdx].color3Data[1];
4222 if (perPass.resolveDepthStencil || params.numDepthStencilSamples == VK_SAMPLE_COUNT_1_BIT)
4227 params.verifyConstants[regionNdx].depthData = depthResult[regionNdx][0];
4228 params.verifyConstants[regionNdx].stencilData = stencilResult[regionNdx][0];
4232 params.verifyConstants[regionNdx].depthData = std::max(depthResult[regionNdx][0], depthResult[regionNdx][1]);
4233 params.verifyConstants[regionNdx].stencilData = std::max(stencilResult[regionNdx][0], stencilResult[regionNdx][1]);
4237 depthResult[regionNdx][0] = depthResult[regionNdx][1] = params.verifyConstants[regionNdx].depthData;
4238 stencilResult[regionNdx][0] = stencilResult[regionNdx][1] = params.verifyConstants[regionNdx].stencilData;
4243 params.rngSeed = rng.getUint32();
4248 void initMultipassPrograms (SourceCollections& programCollection, const TestParams params)
4269 const bool usesSignedIntFormat = params.intColorFormat == VK_FORMAT_R16G16B16A16_SINT;
4273 for (size_t passNdx = 0; passNdx < params.perPass.size(); ++passNdx)
4275 const TestParams::PerPass &perPass = params.perPass[passNdx];
4304 << "} params;\n"
4308 << " vec2 uv = (gl_FragCoord.xy - vec2(params.area.xy)) / vec2(params.area.zw);\n"
4313 src << " o_color1 = params.color1Data[0] * uv.x;\n";
4315 src << " o_color2 = params.color2Data[0] * uv.x;\n";
4317 src << " o_color3 = " << intTypePrefix << "vec4(vec4(params.color3Data[0]) * uv.x);\n";
4319 src << " gl_FragDepth = params.depthData.x;\n";
4326 src << " o_color1 = params.color1Data[1] * uv.y;\n";
4328 src << " o_color2 = params.color2Data[1] * uv.y;\n";
4330 src << " o_color3 = " << intTypePrefix << "vec4(vec4(params.color3Data[1]) * uv.y);\n";
4332 src << " gl_FragDepth = params.depthData.y;\n";
4361 << "} params;\n"
4372 if (isDepthFormat(params.depthStencilFormat))
4374 if (isStencilFormat(params.depthStencilFormat))
4399 << " if (any(greaterThanEqual(gl_GlobalInvocationID.xy, params.area.zw)))\n"
4402 << " uvec2 coords = params.area.xy + gl_GlobalInvocationID.xy;\n"
4403 << " vec2 uv = (vec2(gl_GlobalInvocationID.xy) + vec2(0.5)) / vec2(params.area.zw);\n"
4407 << " vec4 expected1 = (params.color1Data[0] * uv.x + params.color1Data[1] * uv.y) / 2.0";
4408 if (params.testBlendsColors)
4409 src << " + vec4(" << params.clearValues[0].color.float32[0] << ", "
4410 << params.clearValues[0].color.float32[1] << ", "
4411 << params.clearValues[0].color.float32[2] << ", "
4412 << params.clearValues[0].color.float32[3] << ")";
4415 << " if (v4matches(color1, expected1, max(params.color1Data[0] / float(params.area.z), params.color1Data[1] / float(params.area.w)) + 2.0/255.0))\n"
4424 << " vec4 expected2 = (params.color2Data[0] * uv.x + params.color2Data[1] * uv.y) / 2.0";
4425 if (params.testBlendsColors)
4426 src << " + vec4(" << params.clearValues[1].color.float32[0] << ", "
4427 << params.clearValues[1].color.float32[1] << ", "
4428 << params.clearValues[1].color.float32[2] << ", "
4429 << params.clearValues[1].color.float32[3] << ")";
4432 << " if (v4matches(color2, expected2, max(params.color2Data[0] / float(params.area.z), params.color2Data[1] / float(params.area.w)) + 2.0/1024.0))\n"
4443 if (params.testBlendsColors)
4444 src << " ivec4 clearValue3 = ivec4(" << (params.perPass[0].intColorLocation < 0 ? params.clearValues[2].color.int32[0] : 0) << ", "
4445 << (params.perPass.size() < 2 || params.perPass[1].intColorLocation < 0 ? params.clearValues[2].color.int32[1] : 0) << ", "
4446 << (params.perPass.size() < 3 || params.perPass[2].intColorLocation < 0 ? params.clearValues[2].color.int32[2] : 0) << ", "
4447 << (params.perPass.size() < 4 || params.perPass[3].intColorLocation < 0 ? params.clearValues[2].color.int32[3] : 0) << ")" << ";\n";
4450 src << " ivec4 expected3_0 = ivec4(params.color3Data[0] * uv.x) + clearValue3;\n"
4451 << " ivec4 expected3_1 = ivec4(params.color3Data[1] * uv.y) + clearValue3;\n"
4453 << " if (i4matchesEither(color3, expected3_0, expected3_1, params.color3Data[0] / int(params.area.z), params.color3Data[1] / int(params.area.w)))\n"
4460 if (isDepthFormat(params.depthStencilFormat))
4463 << " if (fmatches(depth, params.depthData, 0.01))\n"
4469 if (isStencilFormat(params.depthStencilFormat))
4472 << " if (umatches(stencil, params.stencilData, 0))\n"
4483 const bool verifyOutsideRenderArea = params.clearBeforeRenderPass && !params.renderToWholeFramebuffer;
4485 initConstantColorVerifyPrograms(programCollection, params);
4488 void drawInputAttachments (Context& context, const TestParams& params, WorkingData& wd, TestObjects& testObjects)
4494 const deUint32 numSubpasses = static_cast<deUint32>(params.perPass.size());
4496 if (params.clearBeforeRenderPass)
4498 clearImagesBeforeDraw(context, params, wd, testObjects);
4518 initializeAttachments(params, wd, images, attachments, params.perPass.size(), attachmentNdxes);
4519 initializeAttachmentDescriptions(params, attachmentDescriptions, params.clearBeforeRenderPass, attachmentNdxes, attachmentUseMask);
4531 initializeAttachmentReference(inputAttachmentReferences[1], attachmentNdxes[3], params.depthStencilFormat, true);
4537 addSubpassDescription(params,
4569 createRenderPassAndFramebuffer(context, wd, testObjects, params.pipelineConstructionType, images, attachments, attachmentDescriptions, subpasses, subpassDependencies);
4582 const PipelineLayoutWrapper pipelineLayout (params.pipelineConstructionType, vk, device, 0, DE_NULL, 1, &pushConstantRange);
4602 const VkDescriptorImageInfo depthInfo = makeDescriptorImageInfo(DE_NULL, isDepthFormat(params.depthStencilFormat) ? *wd.depthOnlyImageView : *wd.stencilOnlyImageView, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
4603 const VkDescriptorImageInfo stencilInfo = makeDescriptorImageInfo(DE_NULL, isStencilFormat(params.depthStencilFormat) ? *wd.stencilOnlyImageView : *wd.depthOnlyImageView, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
4621 const PipelineLayoutWrapper inputPipelineLayout (params.pipelineConstructionType, vk, device, 1, &*descriptorSetLayout, 1, &inputPushConstantRange);
4626 startRenderPass(context, wd, testObjects, DE_LENGTH_OF_ARRAY(params.clearValues), params.clearValues);
4638 pipeline::makeGraphicsPipeline(vki, vk, physicalDevice, device, context.getDeviceExtensions(), params.pipelineConstructionType, pipelineLayout, *testObjects.renderPassFramebuffers.back(), DE_NULL, vertexModule, fragmentModule0, false, true, false, 0, 0,
4639 params.perPass[0].intColorLocation, regions[regionNdx], regions[regionNdx], params.perPass[0].numSamples, params.useGarbageAttachment));
4642 vk.cmdPushConstants(*testObjects.cmdBuffer, *pipelineLayout, VK_SHADER_STAGE_FRAGMENT_BIT, sizeof(UVec4), sizeof(params.perPass[0].drawConstantsWithDepthWrite[regionNdx]), &params.perPass[0].drawConstantsWithDepthWrite[regionNdx]);
4653 pipeline::makeGraphicsPipeline(vki, vk, physicalDevice, device, context.getDeviceExtensions(), params.pipelineConstructionType, inputPipelineLayout, *testObjects.renderPassFramebuffers.back(), DE_NULL, vertexModule, fragmentModuleIn, false, false, false, 0, 1,
4654 params.perPass[1].intColorLocation, regions[regionNdx], regions[regionNdx], params.perPass[1].numSamples, params.useGarbageAttachment));
4665 pipeline::makeGraphicsPipeline(vki, vk, physicalDevice, device, context.getDeviceExtensions(), params.pipelineConstructionType, pipelineLayout, *testObjects.renderPassFramebuffers.back(), DE_NULL, vertexModule, fragmentModule1, true, false, false, 0xC, 1,
4666 params.perPass[1].intColorLocation, regions[regionNdx], regions[regionNdx], params.perPass[1].numSamples, params.useGarbageAttachment));
4669 vk.cmdPushConstants(*testObjects.cmdBuffer, *pipelineLayout, VK_SHADER_STAGE_FRAGMENT_BIT, sizeof(UVec4), sizeof(params.perPass[1].drawConstantsWithDepthWrite[regionNdx]), &params.perPass[1].drawConstantsWithDepthWrite[regionNdx]);
4678 dispatchVerifyMultiPassRendering(context, params, wd, testObjects, regions);
4682 tcu::TestStatus testInputAttachments (Context& context, const TestParams params)
4686 testStart(context, params, wd, testObjects);
4688 drawInputAttachments (context, params, wd, testObjects);
4690 testEnd(context, params, wd, testObjects);
4691 return verify(context, params, wd);
4694 void generateInputAttachmentsTest (de::Random& rng, TestParams& params, const VkSampleCountFlagBits sampleCount, const VkResolveModeFlagBits resolveMode, const bool renderToWholeFramebuffer)
4696 params.perPass.resize(2);
4699 if (params.isMultisampledRenderToSingleSampled)
4701 params.numFloatColor1Samples = VK_SAMPLE_COUNT_1_BIT;
4702 params.numFloatColor2Samples = VK_SAMPLE_COUNT_1_BIT;
4703 params.numIntColorSamples = VK_SAMPLE_COUNT_1_BIT;
4704 params.numDepthStencilSamples = VK_SAMPLE_COUNT_1_BIT;
4706 params.perPass[0].resolveFloatColor1 = false;
4707 params.perPass[0].resolveDepthStencil = false;
4709 params.perPass[1].resolveFloatColor2 = false;
4710 params.perPass[1].resolveIntColor = false;
4714 params.numFloatColor1Samples = sampleCount;
4715 params.numFloatColor2Samples = sampleCount;
4716 params.numIntColorSamples = sampleCount;
4717 params.numDepthStencilSamples = sampleCount;
4719 params.perPass[0].resolveFloatColor1 = true;
4720 params.perPass[0].resolveDepthStencil = true;
4722 params.perPass[1].resolveFloatColor2 = true;
4723 params.perPass[1].resolveIntColor = true;
4727 params.perPass[0].resolveFloatColor2 = false;
4728 params.perPass[0].resolveIntColor = false;
4729 params.perPass[0].depthStencilResolveMode = resolveMode;
4731 params.perPass[0].numSamples = sampleCount;
4733 params.perPass[0].floatColor1Location = 0;
4734 params.perPass[0].floatColor2Location = -1;
4735 params.perPass[0].intColorLocation = -1;
4736 params.perPass[0].hasDepthStencil = true;
4739 params.perPass[1].resolveFloatColor1 = false;
4740 params.perPass[1].resolveDepthStencil = false;
4742 params.perPass[1].numSamples = params.isMultisampledRenderToSingleSampled ? VK_SAMPLE_COUNT_1_BIT : sampleCount;
4744 params.perPass[1].floatColor1Location = -1;
4745 params.perPass[1].floatColor2Location = 3;
4746 params.perPass[1].intColorLocation = 2;
4747 params.perPass[1].hasDepthStencil = false;
4750 params.clearBeforeRenderPass = true;
4751 params.renderToWholeFramebuffer = renderToWholeFramebuffer;
4752 params.testBlendsColors = false;
4755 generateRandomClearValues(rng, params, params.clearValues, true);
4761 params.perPass[0].drawConstantsWithDepthWrite[regionNdx] = DrawPushConstants{
4770 params.perPass[1].drawConstantsWithDepthWrite[regionNdx] = DrawPushConstants{
4780 params.perPass[0].drawConstantsWithDepthWrite[regionNdx].color3Data[0][0] = rng.getInt(1000, 5000);
4781 params.perPass[0].drawConstantsWithDepthWrite[regionNdx].color3Data[1][1] = rng.getInt(1000, 5000);
4782 params.perPass[1].drawConstantsWithDepthWrite[regionNdx].color3Data[0][2] = rng.getInt(1000, 5000);
4783 params.perPass[1].drawConstantsWithDepthWrite[regionNdx].color3Data[1][3] = rng.getInt(1000, 5000);
4790 params.verifyConstants[regionNdx].color1Data[0] = params.perPass[0].drawConstantsWithDepthWrite[regionNdx].color1Data[0];
4791 params.verifyConstants[regionNdx].color1Data[1] = params.perPass[0].drawConstantsWithDepthWrite[regionNdx].color1Data[1];
4797 params.verifyConstants[regionNdx].depthData = params.perPass[0].drawConstantsWithDepthWrite[regionNdx].depthData[0];
4801 params.verifyConstants[regionNdx].depthData = std::max(params.perPass[0].drawConstantsWithDepthWrite[regionNdx].depthData[0], params.perPass[0].drawConstantsWithDepthWrite[regionNdx].depthData[1]);
4803 params.verifyConstants[regionNdx].stencilData = params.clearValues[3].depthStencil.stencil + 1;
4806 params.verifyConstants[regionNdx].color2Data[0] = params.verifyConstants[regionNdx].color1Data[0];
4807 params.verifyConstants[regionNdx].color2Data[1] = params.verifyConstants[regionNdx].color1Data[1];
4809 if (isDepthFormat(params.depthStencilFormat))
4811 if (params.isMultisampledRenderToSingleSampled)
4813 params.verifyConstants[regionNdx].color3Data[0][0] = deInt32(10000 * params.verifyConstants[regionNdx].depthData);
4814 params.verifyConstants[regionNdx].color3Data[1][0] = deInt32(10000 * params.verifyConstants[regionNdx].depthData);
4818 params.verifyConstants[regionNdx].color3Data[0][0] = deInt32(10000 * params.perPass[0].drawConstantsWithDepthWrite[regionNdx].depthData[0]);
4819 params.verifyConstants[regionNdx].color3Data[1][0] = deInt32(10000 * params.perPass[0].drawConstantsWithDepthWrite[regionNdx].depthData[1]);
4823 if (isStencilFormat(params.depthStencilFormat))
4825 params.verifyConstants[regionNdx].color3Data[0][1] = 100 * params.verifyConstants[regionNdx].stencilData;
4826 params.verifyConstants[regionNdx].color3Data[1][1] = 100 * params.verifyConstants[regionNdx].stencilData;
4830 if (params.isMultisampledRenderToSingleSampled)
4841 params.verifyConstants[regionNdx].color2Data[0] += params.perPass[1].drawConstantsWithDepthWrite[regionNdx].color2Data[0] * Vec4(2, 2, 2, 2);
4845 params.verifyConstants[regionNdx].color2Data[0] += params.perPass[1].drawConstantsWithDepthWrite[regionNdx].color2Data[0];
4846 params.verifyConstants[regionNdx].color2Data[1] += params.perPass[1].drawConstantsWithDepthWrite[regionNdx].color2Data[1];
4849 params.verifyConstants[regionNdx].color3Data[0] += params.perPass[1].drawConstantsWithDepthWrite[regionNdx].color3Data[0];
4850 params.verifyConstants[regionNdx].color3Data[1] += params.perPass[1].drawConstantsWithDepthWrite[regionNdx].color3Data[1];
4853 params.rngSeed = rng.getUint32();
4856 void initInputAttachmentsPrograms (SourceCollections& programCollection, const TestParams params)
4859 initMultipassPrograms(programCollection, params);
4861 const bool usesSignedIntFormat = params.intColorFormat == VK_FORMAT_R16G16B16A16_SINT;
4863 const char* subpassInputSuffix = params.perPass[1].numSamples == VK_SAMPLE_COUNT_1_BIT ? "" : "MS";
4864 const char* subpassLoadParam = params.perPass[1].numSamples == VK_SAMPLE_COUNT_1_BIT ? "" : ", gl_SampleID";
4868 const TestParams::PerPass &perPass = params.perPass[1];
4879 if (isDepthFormat(params.depthStencilFormat))
4881 if (isStencilFormat(params.depthStencilFormat))
4886 << "} params;\n"
4890 << " vec2 uv = (gl_FragCoord.xy - vec2(params.area.xy)) / vec2(params.area.zw);\n"
4895 if (isDepthFormat(params.depthStencilFormat))
4897 if (isStencilFormat(params.depthStencilFormat))