From 812054568e397caf9a7bd6b76b827f7a440610ce Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sun, 13 Dec 2015 19:34:07 +0000 Subject: [PATCH] Fix mapping of VK filter modes to Sampler::filter modes. Fix LOD calculation for VK_SAMPLER_MIPMAP_MODE_BASE. Adjust texcoords to avoid tiebreaking rules. Clamp lodMid to .01 for minfilter tests. Disable linear filtering tests for integer formats. --- .../vulkancts/framework/vulkan/vkImageUtil.cpp | 4 ++-- .../pipeline/vktPipelineImageSamplingInstance.cpp | 5 +---- .../vulkan/pipeline/vktPipelineSamplerTests.cpp | 26 +++++++++++++++++----- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/external/vulkancts/framework/vulkan/vkImageUtil.cpp b/external/vulkancts/framework/vulkan/vkImageUtil.cpp index 1bc1d1a..01eb215 100644 --- a/external/vulkancts/framework/vulkan/vkImageUtil.cpp +++ b/external/vulkancts/framework/vulkan/vkImageUtil.cpp @@ -814,7 +814,7 @@ tcu::Sampler::FilterMode mapVkMinTexFilter (VkFilter filter, VkSamplerMipmapMode case VK_FILTER_LINEAR: switch (mipMode) { - case VK_SAMPLER_MIPMAP_MODE_BASE: return tcu::Sampler::LINEAR_MIPMAP_NEAREST; + case VK_SAMPLER_MIPMAP_MODE_BASE: return tcu::Sampler::LINEAR; case VK_SAMPLER_MIPMAP_MODE_LINEAR: return tcu::Sampler::LINEAR_MIPMAP_LINEAR; case VK_SAMPLER_MIPMAP_MODE_NEAREST: return tcu::Sampler::LINEAR_MIPMAP_NEAREST; default: @@ -825,7 +825,7 @@ tcu::Sampler::FilterMode mapVkMinTexFilter (VkFilter filter, VkSamplerMipmapMode case VK_FILTER_NEAREST: switch (mipMode) { - case VK_SAMPLER_MIPMAP_MODE_BASE: return tcu::Sampler::NEAREST_MIPMAP_NEAREST; + case VK_SAMPLER_MIPMAP_MODE_BASE: return tcu::Sampler::NEAREST; case VK_SAMPLER_MIPMAP_MODE_LINEAR: return tcu::Sampler::NEAREST_MIPMAP_LINEAR; case VK_SAMPLER_MIPMAP_MODE_NEAREST: return tcu::Sampler::NEAREST_MIPMAP_NEAREST; default: diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp index 2a3ea7c..cd0caff 100644 --- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp +++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp @@ -904,10 +904,7 @@ tcu::TestStatus ImageSamplingInstance::verifyImage (void) MovePtr refRenderer; // Set up LOD of reference sampler - if (m_samplerParams.mipmapMode == VK_SAMPLER_MIPMAP_MODE_BASE) - samplerLod = 0.0f; - else - samplerLod = de::max(m_samplerParams.minLod, de::min(m_samplerParams.maxLod, m_samplerParams.mipLodBias + m_samplerLod)); + samplerLod = de::max(m_samplerParams.minLod, de::min(m_samplerParams.maxLod, m_samplerParams.mipLodBias + m_samplerLod)); // Create reference program that uses image subresource range program = createRefProgram(colorFormat, sampler, samplerLod, componentMapping, *m_texture, m_imageViewType, m_layerCount, m_subresourceRange); diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineSamplerTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineSamplerTests.cpp index 51bef25..75ba321 100644 --- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineSamplerTests.cpp +++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineSamplerTests.cpp @@ -290,7 +290,14 @@ tcu::IVec2 SamplerTest::getRenderSize (VkImageViewType viewType) const std::vector SamplerTest::createVertices (void) const { - return createTestQuadMosaic(m_imageViewType); + std::vector vertices = createTestQuadMosaic(m_imageViewType); + // Adjust texture coordinate to avoid doing NEAREST filtering exactly on texel boundaries. + // TODO: Would be nice to base this on number of texels and subtexel precision. But this + // seems to work. + for (unsigned int i = 0; i < vertices.size(); ++i) { + vertices[i].texCoord += tcu::Vec4(0.001f, 0.001f, 0.001f, 0.0f); + } + return vertices; } VkSamplerCreateInfo SamplerTest::getSamplerCreateInfo (void) const @@ -443,6 +450,8 @@ VkSamplerCreateInfo SamplerMinFilterTest::getSamplerCreateInfo (void) const { VkSamplerCreateInfo samplerParams = SamplerTest::getSamplerCreateInfo(); samplerParams.minFilter = m_minFilter; + // set minLod to epsilon, to force use of the minFilter + samplerParams.minLod = 0.01f; return samplerParams; } @@ -568,7 +577,8 @@ MovePtr createSamplerMagFilterTests (tcu::TestContext& testC { MovePtr samplerMagFilterTests (new tcu::TestCaseGroup(testCtx, "mag_filter", "Tests for magnification filter")); - samplerMagFilterTests->addChild(new SamplerMagFilterTest(testCtx, "linear", "Magnifies image using VK_TEX_FILTER_LINEAR", imageViewType, imageFormat, VK_FILTER_LINEAR)); + if (isCompressedFormat(imageFormat) || (!isIntFormat(imageFormat) && !isUintFormat(imageFormat))) + samplerMagFilterTests->addChild(new SamplerMagFilterTest(testCtx, "linear", "Magnifies image using VK_TEX_FILTER_LINEAR", imageViewType, imageFormat, VK_FILTER_LINEAR)); samplerMagFilterTests->addChild(new SamplerMagFilterTest(testCtx, "nearest", "Magnifies image using VK_TEX_FILTER_NEAREST", imageViewType, imageFormat, VK_FILTER_NEAREST)); return samplerMagFilterTests; @@ -578,7 +588,8 @@ MovePtr createSamplerMinFilterTests (tcu::TestContext& testC { MovePtr samplerMinFilterTests (new tcu::TestCaseGroup(testCtx, "min_filter", "Tests for minification filter")); - samplerMinFilterTests->addChild(new SamplerMinFilterTest(testCtx, "linear", "Minifies image using VK_TEX_FILTER_LINEAR", imageViewType, imageFormat, VK_FILTER_LINEAR)); + if (isCompressedFormat(imageFormat) || (!isIntFormat(imageFormat) && !isUintFormat(imageFormat))) + samplerMinFilterTests->addChild(new SamplerMinFilterTest(testCtx, "linear", "Minifies image using VK_TEX_FILTER_LINEAR", imageViewType, imageFormat, VK_FILTER_LINEAR)); samplerMinFilterTests->addChild(new SamplerMinFilterTest(testCtx, "nearest", "Minifies image using VK_TEX_FILTER_NEAREST", imageViewType, imageFormat, VK_FILTER_NEAREST)); return samplerMinFilterTests; @@ -629,9 +640,12 @@ MovePtr createSamplerMipmapTests (tcu::TestContext& testCtx, samplerMipmapTests->addChild(mipmapNearestTests.release()); // Mipmap mode: linear - MovePtr mipmapLinearTests (new tcu::TestCaseGroup(testCtx, "linear", "Uses VK_TEX_MIPMAP_MODE_LINEAR")); - mipmapLinearTests->addChild(createSamplerLodTests(testCtx, imageViewType, imageFormat, VK_SAMPLER_MIPMAP_MODE_LINEAR).release()); - samplerMipmapTests->addChild(mipmapLinearTests.release()); + if (isCompressedFormat(imageFormat) || (!isIntFormat(imageFormat) && !isUintFormat(imageFormat))) + { + MovePtr mipmapLinearTests(new tcu::TestCaseGroup(testCtx, "linear", "Uses VK_TEX_MIPMAP_MODE_LINEAR")); + mipmapLinearTests->addChild(createSamplerLodTests(testCtx, imageViewType, imageFormat, VK_SAMPLER_MIPMAP_MODE_LINEAR).release()); + samplerMipmapTests->addChild(mipmapLinearTests.release()); + } return samplerMipmapTests; } -- 2.7.4