1946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim/*------------------------------------------------------------------------ 2946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim * Vulkan Conformance Tests 3946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim * ------------------------ 4946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim * 5946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim * Copyright (c) 2015 The Khronos Group Inc. 6946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim * Copyright (c) 2015 Imagination Technologies Ltd. 7946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim * 8978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License"); 9978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * you may not use this file except in compliance with the License. 10978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * You may obtain a copy of the License at 11946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim * 12978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * http://www.apache.org/licenses/LICENSE-2.0 13946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim * 14978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Unless required by applicable law or agreed to in writing, software 15978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS, 16978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * See the License for the specific language governing permissions and 18978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * limitations under the License. 19946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim * 20946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim *//*! 21946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim * \file 22946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim * \brief Sampler Tests 23946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim *//*--------------------------------------------------------------------*/ 24946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 25946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim#include "vktPipelineSamplerTests.hpp" 26946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim#include "vktPipelineImageSamplingInstance.hpp" 27946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim#include "vktPipelineImageUtil.hpp" 28946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim#include "vktPipelineVertexUtil.hpp" 29946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim#include "vktTestCase.hpp" 30946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim#include "vkImageUtil.hpp" 31946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim#include "vkPrograms.hpp" 32946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim#include "tcuPlatform.hpp" 33946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim#include "tcuTextureUtil.hpp" 34946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim#include "deStringUtil.hpp" 35946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim#include "deMemory.h" 36946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 37946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim#include <iomanip> 38946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim#include <sstream> 39946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim#include <vector> 40946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 41946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimnamespace vkt 42946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 43946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimnamespace pipeline 44946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 45946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 46946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimusing namespace vk; 47946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimusing de::MovePtr; 48946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 49946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimnamespace 50946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 51946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 52946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimclass SamplerTest : public vkt::TestCase 53946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 54946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimpublic: 55946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim SamplerTest (tcu::TestContext& testContext, 56946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* name, 57946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* description, 58946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkImageViewType imageViewType, 59946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkFormat imageFormat, 60946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim int imageSize, 61946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim float samplerLod); 62946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim virtual ~SamplerTest (void) {} 63946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 64946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim virtual void initPrograms (SourceCollections& sourceCollections) const; 65946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim virtual TestInstance* createInstance (Context& context) const; 66689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos virtual tcu::UVec2 getRenderSize (VkImageViewType viewType) const; 67946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim virtual std::vector<Vertex4Tex4> createVertices (void) const; 68946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim virtual VkSamplerCreateInfo getSamplerCreateInfo (void) const; 69946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 70946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim static std::string getGlslSamplerType (const tcu::TextureFormat& format, VkImageViewType type); 71946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim static tcu::IVec3 getImageSize (VkImageViewType viewType, int size); 72946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim static int getArraySize (VkImageViewType viewType); 73946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 74946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimprotected: 75946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkImageViewType m_imageViewType; 76946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkFormat m_imageFormat; 77946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim int m_imageSize; 78946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkImageViewCreateInfo m_imageViewParams; 79946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkSamplerCreateInfo m_samplerParams; 80946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim float m_samplerLod; 81946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim}; 82946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 83946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimclass SamplerMagFilterTest : public SamplerTest 84946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 85946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimpublic: 86946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim SamplerMagFilterTest (tcu::TestContext& testContext, 87946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* name, 88946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* description, 89946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkImageViewType imageViewType, 90946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkFormat imageFormat, 91120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkFilter magFilter); 92946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim virtual ~SamplerMagFilterTest (void) {} 93946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim virtual VkSamplerCreateInfo getSamplerCreateInfo (void) const; 94946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 95946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimprivate: 96120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkFilter m_magFilter; 97946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim}; 98946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 99946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimclass SamplerMinFilterTest : public SamplerTest 100946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 101946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimpublic: 102946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim SamplerMinFilterTest (tcu::TestContext& testContext, 103946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* name, 104946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* description, 105946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkImageViewType imageViewType, 106946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkFormat imageFormat, 107120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkFilter minFilter); 108946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim virtual ~SamplerMinFilterTest (void) {} 109946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim virtual VkSamplerCreateInfo getSamplerCreateInfo (void) const; 110946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 111946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimprivate: 112120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkFilter m_minFilter; 113946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim}; 114946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 115946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimclass SamplerLodTest : public SamplerTest 116946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 117946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimpublic: 118120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim SamplerLodTest (tcu::TestContext& testContext, 119120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim const char* name, 120120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim const char* description, 121120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkImageViewType imageViewType, 122120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkFormat imageFormat, 123120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkSamplerMipmapMode mipmapMode, 124120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim float minLod, 125120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim float maxLod, 126120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim float mipLodBias, 127120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim float samplerLod); 128946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim virtual ~SamplerLodTest (void) {} 129946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim virtual VkSamplerCreateInfo getSamplerCreateInfo (void) const; 130946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 131946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimprivate: 132120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkSamplerMipmapMode m_mipmapMode; 133946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim float m_minLod; 134946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim float m_maxLod; 135946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim float m_mipLodBias; 136946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim}; 137946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 138946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimclass SamplerAddressModesTest : public SamplerTest 139946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 140946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimpublic: 141120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim SamplerAddressModesTest (tcu::TestContext& testContext, 142120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim const char* name, 143120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim const char* description, 144120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkImageViewType imageViewType, 145120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkFormat imageFormat, 146120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkSamplerAddressMode addressU, 147120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkSamplerAddressMode addressV, 148120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkSamplerAddressMode addressW, 149120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkBorderColor borderColor); 150946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim virtual ~SamplerAddressModesTest (void) {} 151689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos virtual tcu::UVec2 getRenderSize (VkImageViewType viewType) const; 152946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim virtual std::vector<Vertex4Tex4> createVertices (void) const; 153946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim virtual VkSamplerCreateInfo getSamplerCreateInfo (void) const; 154946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 155946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimprivate: 156120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkSamplerAddressMode m_addressU; 157120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkSamplerAddressMode m_addressV; 158120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkSamplerAddressMode m_addressW; 159946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkBorderColor m_borderColor; 160946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim}; 161946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 162946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 163946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim// SamplerTest 164946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 165946bdb68c496154333bb82671f8f26c1cf5da394Dae KimSamplerTest::SamplerTest (tcu::TestContext& testContext, 166946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* name, 167946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* description, 168946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkImageViewType imageViewType, 169946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkFormat imageFormat, 170946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim int imageSize, 171946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim float samplerLod) 172946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim : vkt::TestCase (testContext, name, description) 173946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim , m_imageViewType (imageViewType) 174946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim , m_imageFormat (imageFormat) 175946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim , m_imageSize (imageSize) 176946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim , m_samplerLod (samplerLod) 177946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 178946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 179946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 180946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimvoid SamplerTest::initPrograms (SourceCollections& sourceCollections) const 181946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 182946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim std::ostringstream vertexSrc; 183946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim std::ostringstream fragmentSrc; 184946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* texCoordSwizzle = DE_NULL; 185946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim tcu::TextureFormat format = (isCompressedFormat(m_imageFormat)) ? tcu::getUncompressedFormat(mapVkCompressedFormat(m_imageFormat)) 186946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim : mapVkFormat(m_imageFormat); 187387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulos tcu::Vec4 lookupScale; 188387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulos tcu::Vec4 lookupBias; 1893a40c1645672ac36c31e4275b9b00ec3effa02c8Pyry Haulos 190387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulos getLookupScaleBias(m_imageFormat, lookupScale, lookupBias); 191946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 192946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim switch (m_imageViewType) 193946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 194946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_1D: 195946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim texCoordSwizzle = "x"; 196946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 197946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_1D_ARRAY: 198946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_2D: 199946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim texCoordSwizzle = "xy"; 200946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 201946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_2D_ARRAY: 202946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_3D: 203946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_CUBE: 204946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim texCoordSwizzle = "xyz"; 205946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 206946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY: 207946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim texCoordSwizzle = "xyzw"; 208946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 209946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim default: 210946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim DE_ASSERT(false); 211946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 212946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 213946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 214946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim vertexSrc << "#version 440\n" 215946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << "layout(location = 0) in vec4 position;\n" 216946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << "layout(location = 1) in vec4 texCoords;\n" 217946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << "layout(location = 0) out highp vec4 vtxTexCoords;\n" 218946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << "out gl_PerVertex {\n" 219946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << " vec4 gl_Position;\n" 220946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << "};\n" 221946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << "void main (void)\n" 222946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << "{\n" 223946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << " gl_Position = position;\n" 224946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << " vtxTexCoords = texCoords;\n" 225946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << "}\n"; 226946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 227946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim fragmentSrc << "#version 440\n" 228946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << "layout(set = 0, binding = 0) uniform highp " << getGlslSamplerType(format, m_imageViewType) << " texSampler;\n" 229946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << "layout(location = 0) in highp vec4 vtxTexCoords;\n" 230946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << "layout(location = 0) out highp vec4 fragColor;\n" 231946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << "void main (void)\n" 232946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << "{\n" 233946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << " fragColor = "; 234946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 235946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim if (m_samplerLod > 0.0f) 236946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim fragmentSrc << "textureLod(texSampler, vtxTexCoords." << texCoordSwizzle << ", " << std::fixed << m_samplerLod << ")"; 237946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim else 238946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim fragmentSrc << "texture(texSampler, vtxTexCoords." << texCoordSwizzle << ")" << std::fixed; 239946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 240387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulos fragmentSrc << " * vec4" << std::scientific << lookupScale << " + vec4" << lookupBias << ";\n" 241946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim << "}\n"; 242946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 243946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim sourceCollections.glslSources.add("tex_vert") << glu::VertexSource(vertexSrc.str()); 244946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim sourceCollections.glslSources.add("tex_frag") << glu::FragmentSource(fragmentSrc.str()); 245946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 246946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 247946bdb68c496154333bb82671f8f26c1cf5da394Dae KimTestInstance* SamplerTest::createInstance (Context& context) const 248946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 249689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos const tcu::UVec2 renderSize = getRenderSize(m_imageViewType); 250946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const std::vector<Vertex4Tex4> vertices = createVertices(); 251946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const VkSamplerCreateInfo samplerParams = getSamplerCreateInfo(); 25242510ac1f81424905886acd7cf8553207c9772cePyry Haulos const VkComponentMapping componentMapping = { VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_A }; 253946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const VkImageSubresourceRange subresourceRange = 254946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 255946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_IMAGE_ASPECT_COLOR_BIT, // VkImageAspectFlags aspectMask; 256946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 0u, // deUint32 baseMipLevel; 257946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim (deUint32)deLog2Floor32(m_imageSize) + 1, // deUint32 mipLevels; 258946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 0u, // deUint32 baseArrayLayer; 259946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim (deUint32)SamplerTest::getArraySize(m_imageViewType) // deUint32 arraySize; 260946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim }; 261946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 262946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 263946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 264946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return new ImageSamplingInstance(context, renderSize, m_imageViewType, m_imageFormat, 265946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim getImageSize(m_imageViewType, m_imageSize), 266946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim getArraySize(m_imageViewType), 267120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim componentMapping, subresourceRange, 268946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerParams, m_samplerLod,vertices); 269946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 270946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 271689c095f881a410da6a315795452a8e00ad95a9dPyry Haulostcu::UVec2 SamplerTest::getRenderSize (VkImageViewType viewType) const 272946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 273946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim if (viewType == VK_IMAGE_VIEW_TYPE_1D || viewType == VK_IMAGE_VIEW_TYPE_2D) 274946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 275689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos return tcu::UVec2(16u, 16u); 276946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 277946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim else 278946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 279689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos return tcu::UVec2(16u * 3u, 16u * 2u); 280946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 281946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 282946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 283946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimstd::vector<Vertex4Tex4> SamplerTest::createVertices (void) const 284946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 285812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz std::vector<Vertex4Tex4> vertices = createTestQuadMosaic(m_imageViewType); 286812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz // Adjust texture coordinate to avoid doing NEAREST filtering exactly on texel boundaries. 287812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz // TODO: Would be nice to base this on number of texels and subtexel precision. But this 288812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz // seems to work. 289812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz for (unsigned int i = 0; i < vertices.size(); ++i) { 29034602b69f1b6bcf8c0ec42aa02eb5c761002bd14Dominik Witczak vertices[i].texCoord += tcu::Vec4(0.002f, 0.002f, 0.002f, 0.0f); 291812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz } 292812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz return vertices; 293946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 294946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 295946bdb68c496154333bb82671f8f26c1cf5da394Dae KimVkSamplerCreateInfo SamplerTest::getSamplerCreateInfo (void) const 296946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 297946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const VkSamplerCreateInfo defaultSamplerParams = 298946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 299120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, // VkStructureType sType; 300120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim DE_NULL, // const void* pNext; 301120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim 0u, // VkSamplerCreateFlags flags; 302120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FILTER_NEAREST, // VkFilter magFilter; 303120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FILTER_NEAREST, // VkFilter minFilter; 304689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos VK_SAMPLER_MIPMAP_MODE_NEAREST, // VkSamplerMipmapMode mipmapMode; 305120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, // VkSamplerAddressMode addressModeU; 306120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, // VkSamplerAddressMode addressModeV; 307120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, // VkSamplerAddressMode addressModeW; 308120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim 0.0f, // float mipLodBias; 309689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos VK_FALSE, // VkBool32 anisotropyEnable; 310120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim 1.0f, // float maxAnisotropy; 311120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim false, // VkBool32 compareEnable; 312120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_COMPARE_OP_NEVER, // VkCompareOp compareOp; 313120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim 0.0f, // float minLod; 314689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos 0.25f, // float maxLod; 315120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim getFormatBorderColor(BORDER_COLOR_TRANSPARENT_BLACK, m_imageFormat), // VkBorderColor borderColor; 316120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim false // VkBool32 unnormalizedCoordinates; 317946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim }; 318946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 319946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return defaultSamplerParams; 320946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 321946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 322946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimstd::string SamplerTest::getGlslSamplerType (const tcu::TextureFormat& format, VkImageViewType type) 323946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 324946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim std::ostringstream samplerType; 325946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 326946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim if (tcu::getTextureChannelClass(format.type) == tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER) 327946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerType << "u"; 328946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim else if (tcu::getTextureChannelClass(format.type) == tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER) 329946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerType << "i"; 330946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 331946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim switch (type) 332946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 333946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_1D: 334946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerType << "sampler1D"; 335946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 336946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 337946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_1D_ARRAY: 338946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerType << "sampler1DArray"; 339946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 340946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 341946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_2D: 342946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerType << "sampler2D"; 343946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 344946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 345946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_2D_ARRAY: 346946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerType << "sampler2DArray"; 347946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 348946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 349946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_3D: 350946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerType << "sampler3D"; 351946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 352946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 353946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_CUBE: 354946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerType << "samplerCube"; 355946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 356946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 357946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY: 358946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerType << "samplerCubeArray"; 359946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 360946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 361946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim default: 362946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim DE_FATAL("Unknown image view type"); 363946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 364946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 365946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 366946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return samplerType.str(); 367946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 368946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 369946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimtcu::IVec3 SamplerTest::getImageSize (VkImageViewType viewType, int size) 370946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 371946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim switch (viewType) 372946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 373946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_1D: 374946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_1D_ARRAY: 375946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return tcu::IVec3(size, 1, 1); 376946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 377946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_3D: 378946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return tcu::IVec3(size, size, 4); 379946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 380946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim default: 381946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 382946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 383946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 384946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return tcu::IVec3(size, size, 1); 385946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 386946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 387946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimint SamplerTest::getArraySize (VkImageViewType viewType) 388946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 389946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim switch (viewType) 390946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 391946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_1D_ARRAY: 392946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_2D_ARRAY: 393946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_CUBE: 394946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return 6; 395946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 396946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY: 397946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return 36; 398946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 399946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim default: 400946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 401946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 402946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 403946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return 1; 404946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 405946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 406946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 407946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim// SamplerMagFilterTest 408946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 409946bdb68c496154333bb82671f8f26c1cf5da394Dae KimSamplerMagFilterTest::SamplerMagFilterTest (tcu::TestContext& testContext, 410946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* name, 411946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* description, 412946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkImageViewType imageViewType, 413946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkFormat imageFormat, 414120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkFilter magFilter) 415946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim : SamplerTest (testContext, name, description, imageViewType, imageFormat, 8, 0.0f) 416946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim , m_magFilter (magFilter) 417946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 418946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 419946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 420946bdb68c496154333bb82671f8f26c1cf5da394Dae KimVkSamplerCreateInfo SamplerMagFilterTest::getSamplerCreateInfo (void) const 421946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 422946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkSamplerCreateInfo samplerParams = SamplerTest::getSamplerCreateInfo(); 423946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerParams.magFilter = m_magFilter; 424946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 425946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return samplerParams; 426946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 427946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 428946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 429946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim// SamplerMinFilterTest 430946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 431946bdb68c496154333bb82671f8f26c1cf5da394Dae KimSamplerMinFilterTest::SamplerMinFilterTest (tcu::TestContext& testContext, 432946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* name, 433946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* description, 434946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkImageViewType imageViewType, 435946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkFormat imageFormat, 436120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkFilter minFilter) 437946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim : SamplerTest (testContext, name, description, imageViewType, imageFormat, 32, 0.0f) 438946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim , m_minFilter (minFilter) 439946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 440946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 441946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 442946bdb68c496154333bb82671f8f26c1cf5da394Dae KimVkSamplerCreateInfo SamplerMinFilterTest::getSamplerCreateInfo (void) const 443946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 444946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkSamplerCreateInfo samplerParams = SamplerTest::getSamplerCreateInfo(); 445946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerParams.minFilter = m_minFilter; 446812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz // set minLod to epsilon, to force use of the minFilter 447812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz samplerParams.minLod = 0.01f; 448946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 449946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return samplerParams; 450946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 451946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 452946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 453946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim// SamplerLodTest 454946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 455946bdb68c496154333bb82671f8f26c1cf5da394Dae KimSamplerLodTest::SamplerLodTest (tcu::TestContext& testContext, 456946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* name, 457946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* description, 458946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkImageViewType imageViewType, 459946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkFormat imageFormat, 460120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkSamplerMipmapMode mipmapMode, 461946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim float minLod, 462946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim float maxLod, 463946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim float mipLodBias, 464946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim float samplerLod) 465946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim : SamplerTest (testContext, name, description, imageViewType, imageFormat, 32, samplerLod) 466120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim , m_mipmapMode (mipmapMode) 467946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim , m_minLod (minLod) 468946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim , m_maxLod (maxLod) 469946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim , m_mipLodBias (mipLodBias) 470946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 471946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 472946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 473946bdb68c496154333bb82671f8f26c1cf5da394Dae KimVkSamplerCreateInfo SamplerLodTest::getSamplerCreateInfo (void) const 474946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 475946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkSamplerCreateInfo samplerParams = SamplerTest::getSamplerCreateInfo(); 476946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 477120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim samplerParams.mipmapMode = m_mipmapMode; 478946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerParams.minLod = m_minLod; 479946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerParams.maxLod = m_maxLod; 480946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerParams.mipLodBias = m_mipLodBias; 481946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 482946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return samplerParams; 483946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 484946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 485946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 486946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim// SamplerAddressModesTest 487946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 488120ed2c44030b05409d5b1164a0676389dfe87c3Dae KimSamplerAddressModesTest::SamplerAddressModesTest (tcu::TestContext& testContext, 489120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim const char* name, 490120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim const char* description, 491120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkImageViewType imageViewType, 492120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkFormat imageFormat, 493120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkSamplerAddressMode addressU, 494120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkSamplerAddressMode addressV, 495120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkSamplerAddressMode addressW, 496120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkBorderColor borderColor) 497946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim : SamplerTest (testContext, name, description, imageViewType, imageFormat, 8, 0.0f) 498946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim , m_addressU (addressU) 499946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim , m_addressV (addressV) 500946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim , m_addressW (addressW) 501946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim , m_borderColor (borderColor) 502946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 503946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 504946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 505689c095f881a410da6a315795452a8e00ad95a9dPyry Haulostcu::UVec2 SamplerAddressModesTest::getRenderSize (VkImageViewType viewType) const 506946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 507689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos return 4u * SamplerTest::getRenderSize(viewType); 508946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 509946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 510946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimstd::vector<Vertex4Tex4> SamplerAddressModesTest::createVertices (void) const 511946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 512946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim std::vector<Vertex4Tex4> vertices = SamplerTest::createVertices(); 513946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 514946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim switch (m_imageViewType) 515946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 516946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_1D: case VK_IMAGE_VIEW_TYPE_1D_ARRAY: 517946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim for (size_t vertexNdx = 0; vertexNdx < vertices.size(); vertexNdx++) 518946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim vertices[vertexNdx].texCoord.x() = (vertices[vertexNdx].texCoord.x() - 0.5f) * 4.0f; 519946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 520946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 521946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 522946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_2D: 523946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_2D_ARRAY: 524946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim for (size_t vertexNdx = 0; vertexNdx < vertices.size(); vertexNdx++) 525946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim vertices[vertexNdx].texCoord.xy() = (vertices[vertexNdx].texCoord.swizzle(0, 1) - tcu::Vec2(0.5f)) * 4.0f; 526946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 527946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 528946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 529946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_3D: 530946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim for (size_t vertexNdx = 0; vertexNdx < vertices.size(); vertexNdx++) 531946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim vertices[vertexNdx].texCoord.xyz() = (vertices[vertexNdx].texCoord.swizzle(0, 1, 2) - tcu::Vec3(0.5f)) * 4.0f; 532946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 533946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 534946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 535946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_CUBE: 536946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY: 537946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim break; 538946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 539946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim default: 540946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim DE_ASSERT(false); 541946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 542946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 543946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return vertices; 544946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 545946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 546946bdb68c496154333bb82671f8f26c1cf5da394Dae KimVkSamplerCreateInfo SamplerAddressModesTest::getSamplerCreateInfo (void) const 547946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 548946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkSamplerCreateInfo samplerParams = SamplerTest::getSamplerCreateInfo(); 549946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerParams.addressModeU = m_addressU; 550946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerParams.addressModeV = m_addressV; 551946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerParams.addressModeW = m_addressW; 552946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerParams.borderColor = m_borderColor; 553946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 554946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return samplerParams; 555946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 556946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 557946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 558946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim// Utilities to create test nodes 559946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 560946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimstd::string getFormatCaseName (const VkFormat format) 561946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 562946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const std::string fullName = getFormatName(format); 563946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 564946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim DE_ASSERT(de::beginsWith(fullName, "VK_FORMAT_")); 565946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 566946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return de::toLower(fullName.substr(10)); 567946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 568946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 569946bdb68c496154333bb82671f8f26c1cf5da394Dae KimMovePtr<tcu::TestCaseGroup> createSamplerMagFilterTests (tcu::TestContext& testCtx, VkImageViewType imageViewType, VkFormat imageFormat) 570946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 571946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim MovePtr<tcu::TestCaseGroup> samplerMagFilterTests (new tcu::TestCaseGroup(testCtx, "mag_filter", "Tests for magnification filter")); 572946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 573812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz if (isCompressedFormat(imageFormat) || (!isIntFormat(imageFormat) && !isUintFormat(imageFormat))) 574812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz samplerMagFilterTests->addChild(new SamplerMagFilterTest(testCtx, "linear", "Magnifies image using VK_TEX_FILTER_LINEAR", imageViewType, imageFormat, VK_FILTER_LINEAR)); 575120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim samplerMagFilterTests->addChild(new SamplerMagFilterTest(testCtx, "nearest", "Magnifies image using VK_TEX_FILTER_NEAREST", imageViewType, imageFormat, VK_FILTER_NEAREST)); 576946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 577946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return samplerMagFilterTests; 578946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 579946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 580946bdb68c496154333bb82671f8f26c1cf5da394Dae KimMovePtr<tcu::TestCaseGroup> createSamplerMinFilterTests (tcu::TestContext& testCtx, VkImageViewType imageViewType, VkFormat imageFormat) 581946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 582946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim MovePtr<tcu::TestCaseGroup> samplerMinFilterTests (new tcu::TestCaseGroup(testCtx, "min_filter", "Tests for minification filter")); 583946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 584812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz if (isCompressedFormat(imageFormat) || (!isIntFormat(imageFormat) && !isUintFormat(imageFormat))) 585812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz samplerMinFilterTests->addChild(new SamplerMinFilterTest(testCtx, "linear", "Minifies image using VK_TEX_FILTER_LINEAR", imageViewType, imageFormat, VK_FILTER_LINEAR)); 586120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim samplerMinFilterTests->addChild(new SamplerMinFilterTest(testCtx, "nearest", "Minifies image using VK_TEX_FILTER_NEAREST", imageViewType, imageFormat, VK_FILTER_NEAREST)); 587946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 588946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return samplerMinFilterTests; 589946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 590946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 591120ed2c44030b05409d5b1164a0676389dfe87c3Dae KimMovePtr<tcu::TestCaseGroup> createSamplerLodTests (tcu::TestContext& testCtx, VkImageViewType imageViewType, VkFormat imageFormat, VkSamplerMipmapMode mipmapMode) 592946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 593946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim struct TestCaseConfig 594946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 595946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* name; 596946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* description; 597946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim float minLod; 598946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim float maxLod; 599946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim float mipLodBias; 600946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim float lod; 601946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim }; 602946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 603946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim TestCaseConfig testCaseConfigs [] = 604946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 605946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { "equal_min_3_max_3", "minLod = 3, maxLod = 3, mipLodBias = 0, lod = 0", 3.0f, 3.0f, 0.0f, 0.0f }, 606946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { "select_min_1", "minLod = 1, maxLod = 5, mipLodBias = 0, lod = 0", 1.0f, 5.0f, 0.0f, 0.0f }, 607946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { "select_max_4", "minLod = 0, maxLod = 4, mipLodBias = 0, lod = 5", 0.0f, 4.0f, 0.0f, 5.0f }, 608946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { "select_bias_2_1", "minLod = 0, maxLod = 2.1, mipLodBias = 5.0, lod = 0", 0.0f, 2.1f, 5.0f, 0.0f }, 609946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { "select_bias_2_5", "minLod = 0, maxLod = 5, mipLodBias = 2.5, lod = 0", 0.0f, 5.0f, 2.5f, 0.00001f }, 610946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { "select_bias_3_1", "minLod = 0, maxLod = 5, mipLodBias = -0.9, lod = 4.0", 0.0f, 5.0f, -0.9f, 4.0f }, 611946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { "select_bias_3_7", "minLod = 0, maxLod = 5, mipLodBias = 3.0, lod = 0.7", 0.0f, 5.0f, 3.0f, 0.7f }, 612946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim }; 613946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 614946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim MovePtr<tcu::TestCaseGroup> samplerLodTests (new tcu::TestCaseGroup(testCtx, "lod", "Tests for sampler LOD")); 615946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 616946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim for (int configNdx = 0; configNdx < DE_LENGTH_OF_ARRAY(testCaseConfigs); configNdx++) 617946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 618946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const TestCaseConfig& config = testCaseConfigs[configNdx]; 619946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 620946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerLodTests->addChild(new SamplerLodTest(testCtx, config.name, config.description, imageViewType, imageFormat, mipmapMode, config.minLod, config.maxLod, config.mipLodBias, config.lod)); 621946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 622946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 623946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return samplerLodTests; 624946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 625946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 626946bdb68c496154333bb82671f8f26c1cf5da394Dae KimMovePtr<tcu::TestCaseGroup> createSamplerMipmapTests (tcu::TestContext& testCtx, VkImageViewType imageViewType, VkFormat imageFormat) 627946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 628946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim MovePtr<tcu::TestCaseGroup> samplerMipmapTests (new tcu::TestCaseGroup(testCtx, "mipmap", "Tests for mipmap modes")); 629946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 630946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim // Mipmap mode: nearest 631946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim MovePtr<tcu::TestCaseGroup> mipmapNearestTests (new tcu::TestCaseGroup(testCtx, "nearest", "Uses VK_TEX_MIPMAP_MODE_NEAREST")); 632120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim mipmapNearestTests->addChild(createSamplerLodTests(testCtx, imageViewType, imageFormat, VK_SAMPLER_MIPMAP_MODE_NEAREST).release()); 633946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerMipmapTests->addChild(mipmapNearestTests.release()); 634946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 635946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim // Mipmap mode: linear 636812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz if (isCompressedFormat(imageFormat) || (!isIntFormat(imageFormat) && !isUintFormat(imageFormat))) 637812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz { 638812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz MovePtr<tcu::TestCaseGroup> mipmapLinearTests(new tcu::TestCaseGroup(testCtx, "linear", "Uses VK_TEX_MIPMAP_MODE_LINEAR")); 639812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz mipmapLinearTests->addChild(createSamplerLodTests(testCtx, imageViewType, imageFormat, VK_SAMPLER_MIPMAP_MODE_LINEAR).release()); 640812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz samplerMipmapTests->addChild(mipmapLinearTests.release()); 641812054568e397caf9a7bd6b76b827f7a440610ceJeff Bolz } 642946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 643946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return samplerMipmapTests; 644946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 645946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 646120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kimstd::string getAddressModesCaseName (VkSamplerAddressMode u, VkSamplerAddressMode v, VkSamplerAddressMode w, BorderColor border) 647946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 648946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim static const char* borderColorNames[BORDER_COLOR_COUNT] = 649946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 650946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim "opaque_black", 651946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim "opaque_white", 652946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim "transparent_black", 653946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim }; 654946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 655946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim std::ostringstream caseName; 656946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 657946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim if (u == v && v == w) 658946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 659120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim const std::string fullName = getSamplerAddressModeName(u); 660120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim DE_ASSERT(de::beginsWith(fullName, "VK_SAMPLER_ADDRESS_")); 661946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 662946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim caseName << "all_"; 663120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim caseName << de::toLower(fullName.substr(19)); 664946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 665120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim if (u == VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER) 666946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 667946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim caseName << "_" << borderColorNames[border]; 668946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 669946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 670946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim else 671946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 672120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim const std::string fullNameU = getSamplerAddressModeName(u); 673120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim const std::string fullNameV = getSamplerAddressModeName(v); 674120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim const std::string fullNameW = getSamplerAddressModeName(w); 675946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 676120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim DE_ASSERT(de::beginsWith(fullNameU, "VK_SAMPLER_ADDRESS_")); 677120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim DE_ASSERT(de::beginsWith(fullNameV, "VK_SAMPLER_ADDRESS_")); 678120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim DE_ASSERT(de::beginsWith(fullNameW, "VK_SAMPLER_ADDRESS_")); 679946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 680946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim caseName << "uvw" 681120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim << "_" << de::toLower(fullNameU.substr(19)) 682120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim << "_" << de::toLower(fullNameV.substr(19)) 683120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim << "_" << de::toLower(fullNameW.substr(19)); 684946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 685946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 686946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return caseName.str(); 687946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 688946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 689946bdb68c496154333bb82671f8f26c1cf5da394Dae KimMovePtr<tcu::TestCaseGroup> createSamplerAddressModesTests (tcu::TestContext& testCtx, VkImageViewType imageViewType, VkFormat imageFormat) 690946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 691946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim struct TestCaseConfig 692946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 693120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkSamplerAddressMode u; 694120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkSamplerAddressMode v; 695120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VkSamplerAddressMode w; 696120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim BorderColor border; 697946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim }; 698946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 699946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const TestCaseConfig testCaseConfigs[] = 700946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 701946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim // All address modes equal 702120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, BORDER_COLOR_TRANSPARENT_BLACK }, 703120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_ADDRESS_MODE_REPEAT, BORDER_COLOR_TRANSPARENT_BLACK }, 704120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, BORDER_COLOR_TRANSPARENT_BLACK }, 705120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, BORDER_COLOR_TRANSPARENT_BLACK }, 706946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 707946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim // All address modes equal using border color 708120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, BORDER_COLOR_TRANSPARENT_BLACK }, 709120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, BORDER_COLOR_OPAQUE_BLACK }, 710120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, BORDER_COLOR_OPAQUE_WHITE }, 711946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 712946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim // Pairwise combinations of address modes not covered by previous tests 713120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_REPEAT, BORDER_COLOR_OPAQUE_WHITE}, 714120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, BORDER_COLOR_OPAQUE_WHITE }, 715120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, BORDER_COLOR_OPAQUE_WHITE }, 716120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, BORDER_COLOR_OPAQUE_WHITE }, 717120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, BORDER_COLOR_OPAQUE_WHITE }, 718120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, BORDER_COLOR_OPAQUE_WHITE }, 719120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, VK_SAMPLER_ADDRESS_MODE_REPEAT, BORDER_COLOR_OPAQUE_WHITE }, 720120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, BORDER_COLOR_OPAQUE_WHITE }, 721120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, BORDER_COLOR_OPAQUE_WHITE }, 722120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, BORDER_COLOR_OPAQUE_WHITE }, 723120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, BORDER_COLOR_OPAQUE_WHITE }, 724120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, BORDER_COLOR_OPAQUE_WHITE }, 725120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_REPEAT, BORDER_COLOR_OPAQUE_WHITE }, 726120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, BORDER_COLOR_OPAQUE_WHITE }, 727120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, BORDER_COLOR_OPAQUE_WHITE }, 728120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, BORDER_COLOR_OPAQUE_WHITE }, 729120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, BORDER_COLOR_OPAQUE_WHITE }, 730120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, BORDER_COLOR_OPAQUE_WHITE }, 731120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, VK_SAMPLER_ADDRESS_MODE_REPEAT, BORDER_COLOR_OPAQUE_WHITE }, 732120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, BORDER_COLOR_OPAQUE_WHITE }, 733120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, BORDER_COLOR_OPAQUE_WHITE }, 734120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim { VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, BORDER_COLOR_OPAQUE_WHITE }, 735946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim }; 736946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 737946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim MovePtr<tcu::TestCaseGroup> samplerAddressModesTests (new tcu::TestCaseGroup(testCtx, "address_modes", "Tests for address modes")); 738946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 739946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim for (int configNdx = 0; configNdx < DE_LENGTH_OF_ARRAY(testCaseConfigs); configNdx++) 740946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 741946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const TestCaseConfig& config = testCaseConfigs[configNdx]; 742946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 743946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerAddressModesTests->addChild(new SamplerAddressModesTest(testCtx, 744946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim getAddressModesCaseName(config.u, config.v, config.w, config.border).c_str(), 745946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim "", 746946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim imageViewType, 747946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim imageFormat, 748946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim config.u, config.v, config.w, 749946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim getFormatBorderColor(config.border, imageFormat))); 750946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 751946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 752946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return samplerAddressModesTests; 753946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 754946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 755946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} // anonymous 756946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 757946bdb68c496154333bb82671f8f26c1cf5da394Dae Kimtcu::TestCaseGroup* createSamplerTests (tcu::TestContext& testCtx) 758946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim{ 759946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const struct 760946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 761946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VkImageViewType type; 762946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const char* name; 763946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 764946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim imageViewTypes[] = 765946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 766946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { VK_IMAGE_VIEW_TYPE_1D, "1d" }, 767946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { VK_IMAGE_VIEW_TYPE_1D_ARRAY, "1d_array" }, 768946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { VK_IMAGE_VIEW_TYPE_2D, "2d" }, 769946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { VK_IMAGE_VIEW_TYPE_2D_ARRAY, "2d_array" }, 770946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { VK_IMAGE_VIEW_TYPE_3D, "3d" }, 771946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { VK_IMAGE_VIEW_TYPE_CUBE, "cube" }, 772946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, "cube_array" } 773946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim }; 774946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 775946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const VkFormat formats[] = 776946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 777946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim // Packed formats 778120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_R4G4_UNORM_PACK8, 779120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_R4G4B4A4_UNORM_PACK16, 780120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_R5G6B5_UNORM_PACK16, 781120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_R5G5B5A1_UNORM_PACK16, 782120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_A2B10G10R10_UNORM_PACK32, 783120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_A2R10G10B10_UINT_PACK32, 784120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_B10G11R11_UFLOAT_PACK32, 785120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, 786120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_B4G4R4A4_UNORM_PACK16, 787120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_B5G5R5A1_UNORM_PACK16, 788946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 789946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim // Pairwise combinations of 8-bit channel formats, UNORM/SNORM/SINT/UINT/SRGB type x 1-to-4 channels x RGBA/BGRA order 790946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R8_SRGB, 791946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R8G8B8_UINT, 792946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_B8G8R8A8_SINT, 793946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R8G8_UNORM, 794946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_B8G8R8_SNORM, 795946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R8G8B8A8_SNORM, 796946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R8G8_UINT, 797946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R8_SINT, 798946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R8G8B8A8_SRGB, 799946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R8G8B8A8_UNORM, 800946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_B8G8R8A8_UNORM, 801946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_B8G8R8_SRGB, 802946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R8G8_SRGB, 803946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R8_UINT, 804946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R8G8B8A8_UINT, 805946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R8G8_SINT, 806946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R8_SNORM, 807946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_B8G8R8_SINT, 808946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R8G8_SNORM, 809946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_B8G8R8_UNORM, 810946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R8_UNORM, 811946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 812946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim // Pairwise combinations of 16/32-bit channel formats x SINT/UINT/SFLOAT type x 1-to-4 channels 813946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R32G32_SFLOAT, 814946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R32G32B32_UINT, 815946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R16G16B16A16_SFLOAT, 816946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R16G16_UINT, 817946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R32G32B32A32_SINT, 818946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R16G16B16_SINT, 819946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R16_SFLOAT, 820946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R32_SINT, 821946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R32_UINT, 822946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R16G16B16_SFLOAT, 823946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R16G16_SINT, 824946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 825946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim // Scaled formats 826946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim VK_FORMAT_R8G8B8A8_SSCALED, 827120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_A2R10G10B10_USCALED_PACK32, 828946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 829946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim // Compressed formats 830120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, 831120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK, 832120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, 833120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK, 834120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, 835120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK, 836120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_EAC_R11_UNORM_BLOCK, 837120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_EAC_R11_SNORM_BLOCK, 838120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_EAC_R11G11_UNORM_BLOCK, 839120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_EAC_R11G11_SNORM_BLOCK, 840120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_ASTC_4x4_UNORM_BLOCK, 841120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_ASTC_5x4_SRGB_BLOCK, 842120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_ASTC_6x5_UNORM_BLOCK, 843120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_ASTC_6x6_SRGB_BLOCK, 844120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_ASTC_8x6_UNORM_BLOCK, 845120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_ASTC_8x8_SRGB_BLOCK, 846120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_ASTC_10x6_UNORM_BLOCK, 847120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_ASTC_10x8_SRGB_BLOCK, 848120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_ASTC_12x10_UNORM_BLOCK, 849120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kim VK_FORMAT_ASTC_12x12_SRGB_BLOCK, 850946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim }; 851946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 852946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim de::MovePtr<tcu::TestCaseGroup> samplerTests (new tcu::TestCaseGroup(testCtx, "sampler", "Sampler tests")); 853946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim de::MovePtr<tcu::TestCaseGroup> viewTypeTests (new tcu::TestCaseGroup(testCtx, "view_type", "")); 854946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 855946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim for (int viewTypeNdx = 0; viewTypeNdx < DE_LENGTH_OF_ARRAY(imageViewTypes); viewTypeNdx++) 856946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 857946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const VkImageViewType viewType = imageViewTypes[viewTypeNdx].type; 858946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim de::MovePtr<tcu::TestCaseGroup> viewTypeGroup (new tcu::TestCaseGroup(testCtx, imageViewTypes[viewTypeNdx].name, (std::string("Uses a ") + imageViewTypes[viewTypeNdx].name + " view").c_str())); 859946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim de::MovePtr<tcu::TestCaseGroup> formatTests (new tcu::TestCaseGroup(testCtx, "format", "Tests samplable formats")); 860946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 861946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim for (size_t formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(formats); formatNdx++) 862946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 863946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const VkFormat format = formats[formatNdx]; 864946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim const bool isCompressed = isCompressedFormat(format); 865946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 86603fe05c46eb7bc19a046622528332e7d3ccfd778Dae Kim if (isCompressed) 867946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 868946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim // Do not use compressed formats with 1D and 1D array textures. 86903fe05c46eb7bc19a046622528332e7d3ccfd778Dae Kim if (viewType == VK_IMAGE_VIEW_TYPE_1D || viewType == VK_IMAGE_VIEW_TYPE_1D_ARRAY) 87003fe05c46eb7bc19a046622528332e7d3ccfd778Dae Kim break; 871946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 872946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 873946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim de::MovePtr<tcu::TestCaseGroup> formatGroup (new tcu::TestCaseGroup(testCtx, 874946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim getFormatCaseName(format).c_str(), 875946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim (std::string("Samples a texture of format ") + getFormatName(format)).c_str())); 876946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 877946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim if (!isCompressed) 878946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 879946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim // Do not include minFilter tests with compressed formats. 880946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim // Randomly generated compressed textures are too noisy and will derive in false positives. 881946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim de::MovePtr<tcu::TestCaseGroup> minFilterTests = createSamplerMinFilterTests(testCtx, viewType, format); 882946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim formatGroup->addChild(minFilterTests.release()); 883946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 884946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 885946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim de::MovePtr<tcu::TestCaseGroup> magFilterTests = createSamplerMagFilterTests(testCtx, viewType, format); 886946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim de::MovePtr<tcu::TestCaseGroup> mipmapTests = createSamplerMipmapTests(testCtx, viewType, format); 887946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 888946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim formatGroup->addChild(magFilterTests.release()); 889946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim formatGroup->addChild(mipmapTests.release()); 890946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 891946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim if (viewType != VK_IMAGE_VIEW_TYPE_CUBE && viewType != VK_IMAGE_VIEW_TYPE_CUBE_ARRAY) 892946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim { 893946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim de::MovePtr<tcu::TestCaseGroup> addressModesTests = createSamplerAddressModesTests(testCtx, viewType, format); 894946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim formatGroup->addChild(addressModesTests.release()); 895946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 896946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 897946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim formatTests->addChild(formatGroup.release()); 898946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 899946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 900946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim viewTypeGroup->addChild(formatTests.release()); 901946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim viewTypeTests->addChild(viewTypeGroup.release()); 902946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim } 903946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 904946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim samplerTests->addChild(viewTypeTests.release()); 905946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 906946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim return samplerTests.release(); 907946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} 908946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim 909946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} // pipeline 910946bdb68c496154333bb82671f8f26c1cf5da394Dae Kim} // vkt 911