vktPipelineVertexUtil.cpp revision 0bb5880e80be5e70bc68e56a9e21a197641ccd48
1342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch/*------------------------------------------------------------------------ 2342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * Vulkan Conformance Tests 3342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * ------------------------ 4342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * 5342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * Copyright (c) 2015 The Khronos Group Inc. 6342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * Copyright (c) 2015 Imagination Technologies Ltd. 7342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * 8342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * Permission is hereby granted, free of charge, to any person obtaining a 9342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * copy of this software and/or associated documentation files (the 10342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * "Materials"), to deal in the Materials without restriction, including 11342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * without limitation the rights to use, copy, modify, merge, publish, 12342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * distribute, sublicense, and/or sell copies of the Materials, and to 13342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * permit persons to whom the Materials are furnished to do so, subject to 14342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * the following conditions: 15342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * 16342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * The above copyright notice(s) and this permission notice shall be included 17342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * in all copies or substantial portions of the Materials. 18342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * 19342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * The Materials are Confidential Information as defined by the 20342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * Khronos Membership Agreement until designated non-confidential by Khronos, 21342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * at which point this condition clause shall be removed. 22342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * 23342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 26342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 27342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 28342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 29342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. 30342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * 31342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch *//*! 32342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * \file 33342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch * \brief Utilities for vertex buffers. 34342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch *//*--------------------------------------------------------------------*/ 35342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 36342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch#include "vktPipelineVertexUtil.hpp" 37342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch#include "vkStrUtil.hpp" 38342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch#include "tcuVectorUtil.hpp" 39342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch#include "deStringUtil.hpp" 40342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 41342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdochnamespace vkt 42342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch{ 43342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdochnamespace pipeline 44342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch{ 45342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 46342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdochusing namespace vk; 47342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 48342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen MurdochdeUint32 getVertexFormatSize (VkFormat format) 49342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch{ 50342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch switch (format) 51342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch { 52342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8_UNORM: 53342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8_SNORM: 54342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8_USCALED: 55342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8_SSCALED: 56342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8_UINT: 57342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8_SINT: 58342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8_SRGB: 59342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R4G4_UNORM_PACK8: 60342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch return 1; 61342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 62342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8_UNORM: 63342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8_SNORM: 64342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8_USCALED: 65342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8_SSCALED: 66342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8_UINT: 67342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8_SINT: 68342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8_SRGB: 69342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R16_UNORM: 70342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R16_SNORM: 71342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R16_USCALED: 72342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R16_SSCALED: 73342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R16_UINT: 74342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R16_SINT: 75342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R16_SFLOAT: 76342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R5G6B5_UNORM_PACK16: 77342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R5G5B5A1_UNORM_PACK16: 78342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch return 2; 79342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 80342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8B8_UNORM: 81342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8B8_SNORM: 82342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8B8_USCALED: 83342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8B8_SSCALED: 84342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8B8_UINT: 85342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8B8_SINT: 86342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8B8_SRGB: 87342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_B8G8R8_UNORM: 88342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_B8G8R8_SNORM: 89342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_B8G8R8_USCALED: 90342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_B8G8R8_SSCALED: 91342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_B8G8R8_UINT: 92342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_B8G8R8_SINT: 93342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_B8G8R8_SRGB: 94342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch return 3; 95342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 96342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8B8A8_UNORM: 97342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8B8A8_SNORM: 98342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8B8A8_USCALED: 99342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8B8A8_SSCALED: 100342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8B8A8_UINT: 101342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8B8A8_SINT: 102342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R8G8B8A8_SRGB: 103342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_A2R10G10B10_UNORM_PACK32: 104342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_A2R10G10B10_SNORM_PACK32: 105342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_A2R10G10B10_USCALED_PACK32: 106342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_A2R10G10B10_SSCALED_PACK32: 107342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_A2R10G10B10_UINT_PACK32: 108342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_A2R10G10B10_SINT_PACK32: 109342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R16G16_UNORM: 110342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R16G16_SNORM: 111342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R16G16_USCALED: 112342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R16G16_SSCALED: 113342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R16G16_UINT: 114342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R16G16_SINT: 115342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R16G16_SFLOAT: 116342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R32_UINT: 117342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R32_SINT: 118342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R32_SFLOAT: 119342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_B10G11R11_UFLOAT_PACK32: 120342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32: 121342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_B8G8R8A8_UNORM: 122342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_B8G8R8A8_SNORM: 123342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_B8G8R8A8_USCALED: 124342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_B8G8R8A8_SSCALED: 125342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_B8G8R8A8_UINT: 126342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_B8G8R8A8_SINT: 127342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_B8G8R8A8_SRGB: 128342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_A2B10G10R10_UNORM_PACK32: 129342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_A2B10G10R10_SNORM_PACK32: 130342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_A2B10G10R10_USCALED_PACK32: 131342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_A2B10G10R10_SSCALED_PACK32: 132342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_A2B10G10R10_UINT_PACK32: 133342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_A2B10G10R10_SINT_PACK32: 134342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch return 4; 135342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch 136342c50ce1624b485728b9a4fc41d8bbf37eb46cfBen Murdoch case VK_FORMAT_R16G16B16_UNORM: 137 case VK_FORMAT_R16G16B16_SNORM: 138 case VK_FORMAT_R16G16B16_USCALED: 139 case VK_FORMAT_R16G16B16_SSCALED: 140 case VK_FORMAT_R16G16B16_UINT: 141 case VK_FORMAT_R16G16B16_SINT: 142 case VK_FORMAT_R16G16B16_SFLOAT: 143 return 6; 144 145 case VK_FORMAT_R16G16B16A16_UNORM: 146 case VK_FORMAT_R16G16B16A16_SNORM: 147 case VK_FORMAT_R16G16B16A16_USCALED: 148 case VK_FORMAT_R16G16B16A16_SSCALED: 149 case VK_FORMAT_R16G16B16A16_UINT: 150 case VK_FORMAT_R16G16B16A16_SINT: 151 case VK_FORMAT_R16G16B16A16_SFLOAT: 152 case VK_FORMAT_R32G32_UINT: 153 case VK_FORMAT_R32G32_SINT: 154 case VK_FORMAT_R32G32_SFLOAT: 155 case VK_FORMAT_R64_SFLOAT: 156 return 8; 157 158 case VK_FORMAT_R32G32B32_UINT: 159 case VK_FORMAT_R32G32B32_SINT: 160 case VK_FORMAT_R32G32B32_SFLOAT: 161 return 12; 162 163 case VK_FORMAT_R32G32B32A32_UINT: 164 case VK_FORMAT_R32G32B32A32_SINT: 165 case VK_FORMAT_R32G32B32A32_SFLOAT: 166 case VK_FORMAT_R64G64_SFLOAT: 167 return 16; 168 169 case VK_FORMAT_R64G64B64_SFLOAT: 170 return 24; 171 172 case VK_FORMAT_R64G64B64A64_SFLOAT: 173 return 32; 174 175 default: 176 break; 177 } 178 179 DE_ASSERT(false); 180 return 0; 181} 182 183deUint32 getVertexFormatComponentCount (VkFormat format) 184{ 185 switch (format) 186 { 187 case VK_FORMAT_R8_USCALED: 188 case VK_FORMAT_R8_UNORM: 189 case VK_FORMAT_R8_UINT: 190 case VK_FORMAT_R8_SSCALED: 191 case VK_FORMAT_R8_SRGB: 192 case VK_FORMAT_R8_SNORM: 193 case VK_FORMAT_R8_SINT: 194 case VK_FORMAT_R16_USCALED: 195 case VK_FORMAT_R16_UNORM: 196 case VK_FORMAT_R16_UINT: 197 case VK_FORMAT_R16_SSCALED: 198 case VK_FORMAT_R16_SNORM: 199 case VK_FORMAT_R16_SINT: 200 case VK_FORMAT_R16_SFLOAT: 201 case VK_FORMAT_R32_UINT: 202 case VK_FORMAT_R32_SINT: 203 case VK_FORMAT_R32_SFLOAT: 204 case VK_FORMAT_R64_SFLOAT: 205 return 1; 206 207 case VK_FORMAT_R4G4_UNORM_PACK8: 208 case VK_FORMAT_R8G8_UNORM: 209 case VK_FORMAT_R8G8_SNORM: 210 case VK_FORMAT_R8G8_USCALED: 211 case VK_FORMAT_R8G8_SSCALED: 212 case VK_FORMAT_R8G8_UINT: 213 case VK_FORMAT_R8G8_SINT: 214 case VK_FORMAT_R8G8_SRGB: 215 case VK_FORMAT_R16G16_UNORM: 216 case VK_FORMAT_R16G16_SNORM: 217 case VK_FORMAT_R16G16_USCALED: 218 case VK_FORMAT_R16G16_SSCALED: 219 case VK_FORMAT_R16G16_UINT: 220 case VK_FORMAT_R16G16_SINT: 221 case VK_FORMAT_R16G16_SFLOAT: 222 case VK_FORMAT_R32G32_UINT: 223 case VK_FORMAT_R32G32_SINT: 224 case VK_FORMAT_R32G32_SFLOAT: 225 case VK_FORMAT_R64G64_SFLOAT: 226 return 2; 227 228 case VK_FORMAT_R8G8B8_UNORM: 229 case VK_FORMAT_R8G8B8_SNORM: 230 case VK_FORMAT_R8G8B8_USCALED: 231 case VK_FORMAT_R8G8B8_SSCALED: 232 case VK_FORMAT_R8G8B8_UINT: 233 case VK_FORMAT_R8G8B8_SINT: 234 case VK_FORMAT_R8G8B8_SRGB: 235 case VK_FORMAT_B8G8R8_UNORM: 236 case VK_FORMAT_B8G8R8_SNORM: 237 case VK_FORMAT_B8G8R8_USCALED: 238 case VK_FORMAT_B8G8R8_SSCALED: 239 case VK_FORMAT_B8G8R8_UINT: 240 case VK_FORMAT_B8G8R8_SINT: 241 case VK_FORMAT_B8G8R8_SRGB: 242 case VK_FORMAT_R16G16B16_UNORM: 243 case VK_FORMAT_R16G16B16_SNORM: 244 case VK_FORMAT_R16G16B16_USCALED: 245 case VK_FORMAT_R16G16B16_SSCALED: 246 case VK_FORMAT_R16G16B16_UINT: 247 case VK_FORMAT_R16G16B16_SINT: 248 case VK_FORMAT_R16G16B16_SFLOAT: 249 case VK_FORMAT_R32G32B32_UINT: 250 case VK_FORMAT_R32G32B32_SINT: 251 case VK_FORMAT_R32G32B32_SFLOAT: 252 case VK_FORMAT_R64G64B64_SFLOAT: 253 case VK_FORMAT_R5G6B5_UNORM_PACK16: 254 case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32: 255 case VK_FORMAT_B10G11R11_UFLOAT_PACK32: 256 return 3; 257 258 case VK_FORMAT_R8G8B8A8_UNORM: 259 case VK_FORMAT_R8G8B8A8_SNORM: 260 case VK_FORMAT_R8G8B8A8_USCALED: 261 case VK_FORMAT_R8G8B8A8_SSCALED: 262 case VK_FORMAT_R8G8B8A8_UINT: 263 case VK_FORMAT_R8G8B8A8_SINT: 264 case VK_FORMAT_R8G8B8A8_SRGB: 265 case VK_FORMAT_B8G8R8A8_UNORM: 266 case VK_FORMAT_B8G8R8A8_SNORM: 267 case VK_FORMAT_B8G8R8A8_USCALED: 268 case VK_FORMAT_B8G8R8A8_SSCALED: 269 case VK_FORMAT_B8G8R8A8_UINT: 270 case VK_FORMAT_B8G8R8A8_SINT: 271 case VK_FORMAT_B8G8R8A8_SRGB: 272 case VK_FORMAT_R16G16B16A16_UNORM: 273 case VK_FORMAT_R16G16B16A16_SNORM: 274 case VK_FORMAT_R16G16B16A16_USCALED: 275 case VK_FORMAT_R16G16B16A16_SSCALED: 276 case VK_FORMAT_R16G16B16A16_UINT: 277 case VK_FORMAT_R16G16B16A16_SINT: 278 case VK_FORMAT_R16G16B16A16_SFLOAT: 279 case VK_FORMAT_R32G32B32A32_UINT: 280 case VK_FORMAT_R32G32B32A32_SINT: 281 case VK_FORMAT_R32G32B32A32_SFLOAT: 282 case VK_FORMAT_R64G64B64A64_SFLOAT: 283 case VK_FORMAT_R5G5B5A1_UNORM_PACK16: 284 case VK_FORMAT_A2R10G10B10_UNORM_PACK32: 285 case VK_FORMAT_A2R10G10B10_SNORM_PACK32: 286 case VK_FORMAT_A2R10G10B10_USCALED_PACK32: 287 case VK_FORMAT_A2R10G10B10_SSCALED_PACK32: 288 case VK_FORMAT_A2R10G10B10_UINT_PACK32: 289 case VK_FORMAT_A2R10G10B10_SINT_PACK32: 290 case VK_FORMAT_A2B10G10R10_UNORM_PACK32: 291 case VK_FORMAT_A2B10G10R10_SNORM_PACK32: 292 case VK_FORMAT_A2B10G10R10_USCALED_PACK32: 293 case VK_FORMAT_A2B10G10R10_SSCALED_PACK32: 294 case VK_FORMAT_A2B10G10R10_UINT_PACK32: 295 case VK_FORMAT_A2B10G10R10_SINT_PACK32: 296 return 4; 297 298 default: 299 break; 300 } 301 302 DE_ASSERT(false); 303 return 0; 304} 305 306deUint32 getVertexFormatComponentSize (VkFormat format) 307{ 308 switch (format) 309 { 310 case VK_FORMAT_R8_UNORM: 311 case VK_FORMAT_R8_SNORM: 312 case VK_FORMAT_R8_USCALED: 313 case VK_FORMAT_R8_SSCALED: 314 case VK_FORMAT_R8_UINT: 315 case VK_FORMAT_R8_SINT: 316 case VK_FORMAT_R8_SRGB: 317 case VK_FORMAT_R8G8_UNORM: 318 case VK_FORMAT_R8G8_SNORM: 319 case VK_FORMAT_R8G8_USCALED: 320 case VK_FORMAT_R8G8_SSCALED: 321 case VK_FORMAT_R8G8_UINT: 322 case VK_FORMAT_R8G8_SINT: 323 case VK_FORMAT_R8G8_SRGB: 324 case VK_FORMAT_R8G8B8_UNORM: 325 case VK_FORMAT_R8G8B8_SNORM: 326 case VK_FORMAT_R8G8B8_USCALED: 327 case VK_FORMAT_R8G8B8_SSCALED: 328 case VK_FORMAT_R8G8B8_UINT: 329 case VK_FORMAT_R8G8B8_SINT: 330 case VK_FORMAT_R8G8B8_SRGB: 331 case VK_FORMAT_B8G8R8_UNORM: 332 case VK_FORMAT_B8G8R8_SNORM: 333 case VK_FORMAT_B8G8R8_USCALED: 334 case VK_FORMAT_B8G8R8_SSCALED: 335 case VK_FORMAT_B8G8R8_UINT: 336 case VK_FORMAT_B8G8R8_SINT: 337 case VK_FORMAT_B8G8R8_SRGB: 338 case VK_FORMAT_R8G8B8A8_UNORM: 339 case VK_FORMAT_R8G8B8A8_SNORM: 340 case VK_FORMAT_R8G8B8A8_USCALED: 341 case VK_FORMAT_R8G8B8A8_SSCALED: 342 case VK_FORMAT_R8G8B8A8_UINT: 343 case VK_FORMAT_R8G8B8A8_SINT: 344 case VK_FORMAT_R8G8B8A8_SRGB: 345 case VK_FORMAT_B8G8R8A8_UNORM: 346 case VK_FORMAT_B8G8R8A8_SNORM: 347 case VK_FORMAT_B8G8R8A8_USCALED: 348 case VK_FORMAT_B8G8R8A8_SSCALED: 349 case VK_FORMAT_B8G8R8A8_UINT: 350 case VK_FORMAT_B8G8R8A8_SINT: 351 case VK_FORMAT_B8G8R8A8_SRGB: 352 return 1; 353 354 case VK_FORMAT_R16_UNORM: 355 case VK_FORMAT_R16_SNORM: 356 case VK_FORMAT_R16_USCALED: 357 case VK_FORMAT_R16_SSCALED: 358 case VK_FORMAT_R16_UINT: 359 case VK_FORMAT_R16_SINT: 360 case VK_FORMAT_R16_SFLOAT: 361 case VK_FORMAT_R16G16_UNORM: 362 case VK_FORMAT_R16G16_SNORM: 363 case VK_FORMAT_R16G16_USCALED: 364 case VK_FORMAT_R16G16_SSCALED: 365 case VK_FORMAT_R16G16_UINT: 366 case VK_FORMAT_R16G16_SINT: 367 case VK_FORMAT_R16G16_SFLOAT: 368 case VK_FORMAT_R16G16B16_UNORM: 369 case VK_FORMAT_R16G16B16_SNORM: 370 case VK_FORMAT_R16G16B16_USCALED: 371 case VK_FORMAT_R16G16B16_SSCALED: 372 case VK_FORMAT_R16G16B16_UINT: 373 case VK_FORMAT_R16G16B16_SINT: 374 case VK_FORMAT_R16G16B16_SFLOAT: 375 case VK_FORMAT_R16G16B16A16_UNORM: 376 case VK_FORMAT_R16G16B16A16_SNORM: 377 case VK_FORMAT_R16G16B16A16_USCALED: 378 case VK_FORMAT_R16G16B16A16_SSCALED: 379 case VK_FORMAT_R16G16B16A16_UINT: 380 case VK_FORMAT_R16G16B16A16_SINT: 381 case VK_FORMAT_R16G16B16A16_SFLOAT: 382 return 2; 383 384 case VK_FORMAT_R32_UINT: 385 case VK_FORMAT_R32_SINT: 386 case VK_FORMAT_R32_SFLOAT: 387 case VK_FORMAT_R32G32_UINT: 388 case VK_FORMAT_R32G32_SINT: 389 case VK_FORMAT_R32G32_SFLOAT: 390 case VK_FORMAT_R32G32B32_UINT: 391 case VK_FORMAT_R32G32B32_SINT: 392 case VK_FORMAT_R32G32B32_SFLOAT: 393 case VK_FORMAT_R32G32B32A32_UINT: 394 case VK_FORMAT_R32G32B32A32_SINT: 395 case VK_FORMAT_R32G32B32A32_SFLOAT: 396 return 4; 397 398 case VK_FORMAT_R64_SFLOAT: 399 case VK_FORMAT_R64G64_SFLOAT: 400 case VK_FORMAT_R64G64B64_SFLOAT: 401 case VK_FORMAT_R64G64B64A64_SFLOAT: 402 return 8; 403 404 default: 405 break; 406 } 407 408 DE_ASSERT(false); 409 return 0; 410} 411 412bool isVertexFormatComponentOrderBGR (VkFormat format) 413{ 414 switch (format) 415 { 416 case VK_FORMAT_B8G8R8_UNORM: 417 case VK_FORMAT_B8G8R8_SNORM: 418 case VK_FORMAT_B8G8R8_USCALED: 419 case VK_FORMAT_B8G8R8_SSCALED: 420 case VK_FORMAT_B8G8R8_UINT: 421 case VK_FORMAT_B8G8R8_SINT: 422 case VK_FORMAT_B8G8R8_SRGB: 423 case VK_FORMAT_B8G8R8A8_UNORM: 424 case VK_FORMAT_B8G8R8A8_SNORM: 425 case VK_FORMAT_B8G8R8A8_USCALED: 426 case VK_FORMAT_B8G8R8A8_SSCALED: 427 case VK_FORMAT_B8G8R8A8_UINT: 428 case VK_FORMAT_B8G8R8A8_SINT: 429 case VK_FORMAT_B8G8R8A8_SRGB: 430 case VK_FORMAT_A2B10G10R10_UNORM_PACK32: 431 case VK_FORMAT_A2B10G10R10_SNORM_PACK32: 432 case VK_FORMAT_A2B10G10R10_USCALED_PACK32: 433 case VK_FORMAT_A2B10G10R10_SSCALED_PACK32: 434 case VK_FORMAT_A2B10G10R10_UINT_PACK32: 435 case VK_FORMAT_A2B10G10R10_SINT_PACK32: 436 return true; 437 438 default: 439 break; 440 } 441 return false; 442} 443 444bool isVertexFormatSint (VkFormat format) 445{ 446 switch (format) 447 { 448 case VK_FORMAT_R8_SINT: 449 case VK_FORMAT_R8G8_SINT: 450 case VK_FORMAT_R16_SINT: 451 case VK_FORMAT_R8G8B8_SINT: 452 case VK_FORMAT_B8G8R8_SINT: 453 case VK_FORMAT_R8G8B8A8_SINT: 454 case VK_FORMAT_A2R10G10B10_UNORM_PACK32: 455 case VK_FORMAT_R16G16_SINT: 456 case VK_FORMAT_R32_SINT: 457 case VK_FORMAT_B8G8R8A8_SINT: 458 case VK_FORMAT_A2B10G10R10_SINT_PACK32: 459 case VK_FORMAT_R16G16B16_SINT: 460 case VK_FORMAT_R16G16B16A16_SINT: 461 case VK_FORMAT_R32G32_SINT: 462 case VK_FORMAT_R32G32B32_SINT: 463 case VK_FORMAT_R32G32B32A32_SINT: 464 return true; 465 466 default: 467 break; 468 } 469 470 return false; 471} 472 473bool isVertexFormatUint (VkFormat format) 474{ 475 switch (format) 476 { 477 case VK_FORMAT_R8_UINT: 478 case VK_FORMAT_R8G8_UINT: 479 case VK_FORMAT_R16_UINT: 480 case VK_FORMAT_R8G8B8_UINT: 481 case VK_FORMAT_B8G8R8_UINT: 482 case VK_FORMAT_R8G8B8A8_UINT: 483 case VK_FORMAT_A2R10G10B10_UINT_PACK32: 484 case VK_FORMAT_R16G16_UINT: 485 case VK_FORMAT_R32_UINT: 486 case VK_FORMAT_B8G8R8A8_UINT: 487 case VK_FORMAT_A2B10G10R10_UINT_PACK32: 488 case VK_FORMAT_R16G16B16_UINT: 489 case VK_FORMAT_R16G16B16A16_UINT: 490 case VK_FORMAT_R32G32_UINT: 491 case VK_FORMAT_R32G32B32_UINT: 492 case VK_FORMAT_R32G32B32A32_UINT: 493 return true; 494 495 default: 496 break; 497 } 498 499 return false; 500 501} 502 503bool isVertexFormatSfloat (VkFormat format) 504{ 505 switch (format) 506 { 507 case VK_FORMAT_R16_SFLOAT: 508 case VK_FORMAT_R16G16_SFLOAT: 509 case VK_FORMAT_R32_SFLOAT: 510 case VK_FORMAT_R16G16B16_SFLOAT: 511 case VK_FORMAT_R16G16B16A16_SFLOAT: 512 case VK_FORMAT_R32G32_SFLOAT: 513 case VK_FORMAT_R64_SFLOAT: 514 case VK_FORMAT_R32G32B32_SFLOAT: 515 case VK_FORMAT_R32G32B32A32_SFLOAT: 516 case VK_FORMAT_R64G64_SFLOAT: 517 case VK_FORMAT_R64G64B64_SFLOAT: 518 case VK_FORMAT_R64G64B64A64_SFLOAT: 519 return true; 520 521 default: 522 break; 523 } 524 525 return false; 526 527} 528 529bool isVertexFormatUfloat (VkFormat format) 530{ 531 switch (format) 532 { 533 case VK_FORMAT_B10G11R11_UFLOAT_PACK32: 534 case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32: 535 return true; 536 537 default: 538 break; 539 } 540 541 return false; 542 543} 544 545bool isVertexFormatUnorm (VkFormat format) 546{ 547 switch (format) 548 { 549 case VK_FORMAT_R8_UNORM: 550 case VK_FORMAT_R4G4_UNORM_PACK8: 551 case VK_FORMAT_R8G8_UNORM: 552 case VK_FORMAT_R16_UNORM: 553 case VK_FORMAT_R5G6B5_UNORM_PACK16: 554 case VK_FORMAT_R5G5B5A1_UNORM_PACK16: 555 case VK_FORMAT_R8G8B8_UNORM: 556 case VK_FORMAT_B8G8R8_UNORM: 557 case VK_FORMAT_R8G8B8A8_UNORM: 558 case VK_FORMAT_A2R10G10B10_UNORM_PACK32: 559 case VK_FORMAT_R16G16_UNORM: 560 case VK_FORMAT_B8G8R8A8_UNORM: 561 case VK_FORMAT_A2B10G10R10_UNORM_PACK32: 562 case VK_FORMAT_R16G16B16_UNORM: 563 case VK_FORMAT_R16G16B16A16_UNORM: 564 return true; 565 566 default: 567 break; 568 } 569 570 return false; 571 572} 573 574bool isVertexFormatSnorm (VkFormat format) 575{ 576 switch (format) 577 { 578 case VK_FORMAT_R8_SNORM: 579 case VK_FORMAT_R8G8_SNORM: 580 case VK_FORMAT_R16_SNORM: 581 case VK_FORMAT_R8G8B8_SNORM: 582 case VK_FORMAT_B8G8R8_SNORM: 583 case VK_FORMAT_R8G8B8A8_SNORM: 584 case VK_FORMAT_A2R10G10B10_SNORM_PACK32: 585 case VK_FORMAT_R16G16_SNORM: 586 case VK_FORMAT_B8G8R8A8_SNORM: 587 case VK_FORMAT_A2B10G10R10_SNORM_PACK32: 588 case VK_FORMAT_R16G16B16_SNORM: 589 case VK_FORMAT_R16G16B16A16_SNORM: 590 return true; 591 592 default: 593 break; 594 } 595 596 return false; 597 598} 599 600bool isVertexFormatSRGB (VkFormat format) 601{ 602 switch (format) 603 { 604 case VK_FORMAT_R8_SRGB: 605 case VK_FORMAT_R8G8_SRGB: 606 case VK_FORMAT_R8G8B8_SRGB: 607 case VK_FORMAT_B8G8R8_SRGB: 608 case VK_FORMAT_R8G8B8A8_SRGB: 609 case VK_FORMAT_B8G8R8A8_SRGB: 610 return true; 611 612 default: 613 break; 614 } 615 616 return false; 617 618} 619 620bool isVertexFormatSscaled (VkFormat format) 621{ 622 switch (format) 623 { 624 case VK_FORMAT_R8_SSCALED: 625 case VK_FORMAT_R8G8_SSCALED: 626 case VK_FORMAT_R16_SSCALED: 627 case VK_FORMAT_R8G8B8_SSCALED: 628 case VK_FORMAT_B8G8R8_SSCALED: 629 case VK_FORMAT_R8G8B8A8_SSCALED: 630 case VK_FORMAT_A2R10G10B10_SSCALED_PACK32: 631 case VK_FORMAT_R16G16_SSCALED: 632 case VK_FORMAT_B8G8R8A8_SSCALED: 633 case VK_FORMAT_A2B10G10R10_SSCALED_PACK32: 634 case VK_FORMAT_R16G16B16_SSCALED: 635 case VK_FORMAT_R16G16B16A16_SSCALED: 636 return true; 637 638 default: 639 break; 640 } 641 642 return false; 643 644} 645 646bool isVertexFormatUscaled (VkFormat format) 647{ 648 switch (format) 649 { 650 case VK_FORMAT_R8_USCALED: 651 case VK_FORMAT_R8G8_USCALED: 652 case VK_FORMAT_R16_USCALED: 653 case VK_FORMAT_A1R5G5B5_UNORM_PACK16: 654 case VK_FORMAT_R8G8B8_USCALED: 655 case VK_FORMAT_B8G8R8_USCALED: 656 case VK_FORMAT_R8G8B8A8_USCALED: 657 case VK_FORMAT_A2R10G10B10_USCALED_PACK32: 658 case VK_FORMAT_R16G16_USCALED: 659 case VK_FORMAT_B8G8R8A8_USCALED: 660 case VK_FORMAT_A2B10G10R10_USCALED_PACK32: 661 case VK_FORMAT_R16G16B16_USCALED: 662 case VK_FORMAT_R16G16B16A16_USCALED: 663 return true; 664 665 default: 666 break; 667 } 668 669 return false; 670 671} 672 673std::vector<Vertex4RGBA> createOverlappingQuads (void) 674{ 675 using tcu::Vec2; 676 using tcu::Vec4; 677 678 std::vector<Vertex4RGBA> vertices; 679 680 const Vec2 translations[4] = 681 { 682 Vec2(-0.25f, -0.25f), 683 Vec2(-1.0f, -0.25f), 684 Vec2(-1.0f, -1.0f), 685 Vec2(-0.25f, -1.0f) 686 }; 687 688 const Vec4 quadColors[4] = 689 { 690 Vec4(1.0f, 0.0f, 0.0f, 1.0), 691 Vec4(0.0f, 1.0f, 0.0f, 1.0), 692 Vec4(0.0f, 0.0f, 1.0f, 1.0), 693 Vec4(1.0f, 0.0f, 1.0f, 1.0) 694 }; 695 696 const float quadSize = 1.25f; 697 698 for (int quadNdx = 0; quadNdx < 4; quadNdx++) 699 { 700 const Vec2& translation = translations[quadNdx]; 701 const Vec4& color = quadColors[quadNdx]; 702 703 const Vertex4RGBA lowerLeftVertex = 704 { 705 Vec4(translation.x(), translation.y(), 0.0f, 1.0f), 706 color 707 }; 708 const Vertex4RGBA upperLeftVertex = 709 { 710 Vec4(translation.x(), translation.y() + quadSize, 0.0f, 1.0f), 711 color 712 }; 713 const Vertex4RGBA lowerRightVertex = 714 { 715 Vec4(translation.x() + quadSize, translation.y(), 0.0f, 1.0f), 716 color 717 }; 718 const Vertex4RGBA upperRightVertex = 719 { 720 Vec4(translation.x() + quadSize, translation.y() + quadSize, 0.0f, 1.0f), 721 color 722 }; 723 724 // Triangle 1, CCW 725 vertices.push_back(lowerLeftVertex); 726 vertices.push_back(lowerRightVertex); 727 vertices.push_back(upperLeftVertex); 728 729 // Triangle 2, CW 730 vertices.push_back(lowerRightVertex); 731 vertices.push_back(upperLeftVertex); 732 vertices.push_back(upperRightVertex); 733 } 734 735 return vertices; 736} 737 738std::vector<Vertex4Tex4> createFullscreenQuad (void) 739{ 740 using tcu::Vec4; 741 742 const Vertex4Tex4 lowerLeftVertex = 743 { 744 Vec4(-1.0f, -1.0f, 0.0f, 1.0f), 745 Vec4(0.0f, 0.0f, 0.0f, 0.0f) 746 }; 747 const Vertex4Tex4 upperLeftVertex = 748 { 749 Vec4(-1.0f, 1.0f, 0.0f, 1.0f), 750 Vec4(0.0f, 1.0f, 0.0f, 0.0f) 751 }; 752 const Vertex4Tex4 lowerRightVertex = 753 { 754 Vec4(1.0f, -1.0f, 0.0f, 1.0f), 755 Vec4(1.0f, 0.0f, 0.0f, 0.0f) 756 }; 757 const Vertex4Tex4 upperRightVertex = 758 { 759 Vec4(1.0f, 1.0f, 0.0f, 1.0f), 760 Vec4(1.0f, 1.0f, 0.0f, 0.0f) 761 }; 762 763 const Vertex4Tex4 vertices[6] = 764 { 765 lowerLeftVertex, 766 lowerRightVertex, 767 upperLeftVertex, 768 769 upperLeftVertex, 770 lowerRightVertex, 771 upperRightVertex 772 }; 773 774 return std::vector<Vertex4Tex4>(vertices, vertices + DE_LENGTH_OF_ARRAY(vertices)); 775} 776 777std::vector<Vertex4Tex4> createQuadMosaic (int rows, int columns) 778{ 779 using tcu::Vec4; 780 781 DE_ASSERT(rows >= 1); 782 DE_ASSERT(columns >= 1); 783 784 std::vector<Vertex4Tex4> vertices; 785 const float rowSize = 2.0f / (float)rows; 786 const float columnSize = 2.0f / (float)columns; 787 int arrayIndex = 0; 788 789 for (int rowNdx = 0; rowNdx < rows; rowNdx++) 790 { 791 for (int columnNdx = 0; columnNdx < columns; columnNdx++) 792 { 793 const Vertex4Tex4 lowerLeftVertex = 794 { 795 Vec4(-1.0f + (float)columnNdx * columnSize, -1.0f + (float)rowNdx * rowSize, 0.0f, 1.0f), 796 Vec4(0.0f, 0.0f, (float)arrayIndex, 0.0f) 797 }; 798 const Vertex4Tex4 upperLeftVertex = 799 { 800 Vec4(lowerLeftVertex.position.x(), lowerLeftVertex.position.y() + rowSize, 0.0f, 1.0f), 801 Vec4(0.0f, 1.0f, (float)arrayIndex, 0.0f) 802 }; 803 const Vertex4Tex4 lowerRightVertex = 804 { 805 Vec4(lowerLeftVertex.position.x() + columnSize, lowerLeftVertex.position.y(), 0.0f, 1.0f), 806 Vec4(1.0f, 0.0f, (float)arrayIndex, 0.0f) 807 }; 808 const Vertex4Tex4 upperRightVertex = 809 { 810 Vec4(lowerLeftVertex.position.x() + columnSize, lowerLeftVertex.position.y() + rowSize, 0.0f, 1.0f), 811 Vec4(1.0f, 1.0f, (float)arrayIndex, 0.0f) 812 }; 813 814 vertices.push_back(lowerLeftVertex); 815 vertices.push_back(lowerRightVertex); 816 vertices.push_back(upperLeftVertex); 817 vertices.push_back(upperLeftVertex); 818 vertices.push_back(lowerRightVertex); 819 vertices.push_back(upperRightVertex); 820 821 arrayIndex++; 822 } 823 } 824 825 return vertices; 826} 827 828std::vector<Vertex4Tex4> createQuadMosaicCube (void) 829{ 830 using tcu::Vec3; 831 832 static const Vec3 texCoordsCube[8] = 833 { 834 Vec3(-1.0f, -1.0f, -1.0f), // 0: -X, -Y, -Z 835 Vec3(1.0f, -1.0f, -1.0f), // 1: X, -Y, -Z 836 Vec3(1.0f, -1.0f, 1.0f), // 2: X, -Y, Z 837 Vec3(-1.0f, -1.0f, 1.0f), // 3: -X, -Y, Z 838 839 Vec3(-1.0f, 1.0f, -1.0f), // 4: -X, Y, -Z 840 Vec3(1.0f, 1.0f, -1.0f), // 5: X, Y, -Z 841 Vec3(1.0f, 1.0f, 1.0f), // 6: X, Y, Z 842 Vec3(-1.0f, 1.0f, 1.0f), // 7: -X, Y, Z 843 }; 844 845 static const int texCoordCubeIndices[6][6] = 846 { 847 { 6, 5, 2, 2, 5, 1 }, // +X face 848 { 3, 0, 7, 7, 0, 4 }, // -X face 849 { 4, 5, 7, 7, 5, 6 }, // +Y face 850 { 3, 2, 0, 0, 2, 1 }, // -Y face 851 { 2, 3, 6, 6, 3, 7 }, // +Z face 852 { 0, 1, 4, 4, 1, 5 } // -Z face 853 }; 854 855 // Create 6 quads and set appropriate texture coordinates for cube mapping 856 857 std::vector<Vertex4Tex4> vertices = createQuadMosaic(2, 3); 858 std::vector<Vertex4Tex4>::iterator vertexItr = vertices.begin(); 859 860 for (int quadNdx = 0; quadNdx < 6; quadNdx++) 861 { 862 for (int vertexNdx = 0; vertexNdx < 6; vertexNdx++) 863 { 864 vertexItr->texCoord.xyz() = texCoordsCube[texCoordCubeIndices[quadNdx][vertexNdx]]; 865 vertexItr++; 866 } 867 } 868 869 return vertices; 870} 871 872std::vector<Vertex4Tex4> createQuadMosaicCubeArray (int faceArrayIndices[6]) 873{ 874 std::vector<Vertex4Tex4> vertices = createQuadMosaicCube(); 875 std::vector<Vertex4Tex4>::iterator vertexItr = vertices.begin(); 876 877 for (int quadNdx = 0; quadNdx < 6; quadNdx++) 878 { 879 for (int vertexNdx = 0; vertexNdx < 6; vertexNdx++) 880 { 881 vertexItr->texCoord.w() = (float)faceArrayIndices[quadNdx]; 882 vertexItr++; 883 } 884 } 885 886 return vertices; 887} 888 889std::vector<Vertex4Tex4> createTestQuadMosaic (vk::VkImageViewType viewType) 890{ 891 std::vector<Vertex4Tex4> vertices; 892 893 switch (viewType) 894 { 895 case vk::VK_IMAGE_VIEW_TYPE_1D: 896 case vk::VK_IMAGE_VIEW_TYPE_2D: 897 vertices = createFullscreenQuad(); 898 break; 899 900 case vk::VK_IMAGE_VIEW_TYPE_1D_ARRAY: 901 vertices = createQuadMosaic(2, 3); 902 903 // Set up array indices 904 for (size_t quadNdx = 0; quadNdx < 6; quadNdx++) 905 for (size_t vertexNdx = 0; vertexNdx < 6; vertexNdx++) 906 vertices[quadNdx * 6 + vertexNdx].texCoord.y() = (float)quadNdx; 907 908 break; 909 910 case vk::VK_IMAGE_VIEW_TYPE_2D_ARRAY: 911 vertices = createQuadMosaic(2, 3); 912 break; 913 914 case vk::VK_IMAGE_VIEW_TYPE_3D: 915 vertices = createQuadMosaic(2, 3); 916 917 // Use z between 0.0 and 1.0. 918 for (size_t vertexNdx = 0; vertexNdx < vertices.size(); vertexNdx++) 919 vertices[vertexNdx].texCoord.z() /= 5.0f; 920 921 break; 922 923 case vk::VK_IMAGE_VIEW_TYPE_CUBE: 924 vertices = createQuadMosaicCube(); 925 break; 926 927 case vk::VK_IMAGE_VIEW_TYPE_CUBE_ARRAY: 928 { 929 int faceArrayIndices[6] = { 0, 1, 2, 3, 4, 5 }; 930 vertices = createQuadMosaicCubeArray(faceArrayIndices); 931 } 932 break; 933 934 default: 935 DE_ASSERT(false); 936 break; 937 } 938 939 return vertices; 940} 941 942} // pipeline 943} // vkt 944