1 /*------------------------------------------------------------------------ 2 * Vulkan Conformance Tests 3 * ------------------------ 4 * 5 * Copyright (c) 2016 The Khronos Group Inc. 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * 19 *//*! 20 * \file 21 * \brief Texture utility class 22 *//*--------------------------------------------------------------------*/ 23 24 #include "vktImageTexture.hpp" 25 26 namespace vkt 27 { 28 namespace image 29 { 30 31 Texture::Texture (const ImageType type_, const tcu::IVec3& layerSize_, const int layers) 32 : m_layerSize (layerSize_) 33 , m_type (type_) 34 , m_numLayers (layers) 35 { 36 DE_ASSERT(m_numLayers >= 1); 37 DE_ASSERT(m_layerSize.x() >= 1 && m_layerSize.y() >= 1 && m_layerSize.z() >= 1); 38 39 switch (type_) 40 { 41 case IMAGE_TYPE_1D: 42 case IMAGE_TYPE_BUFFER: 43 DE_ASSERT(m_numLayers == 1); 44 DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1); 45 break; 46 47 case IMAGE_TYPE_1D_ARRAY: 48 DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1); 49 break; 50 51 case IMAGE_TYPE_2D: 52 DE_ASSERT(m_numLayers == 1); 53 DE_ASSERT(m_layerSize.z() == 1); 54 break; 55 56 case IMAGE_TYPE_2D_ARRAY: 57 DE_ASSERT(m_layerSize.z() == 1); 58 break; 59 60 case IMAGE_TYPE_CUBE: 61 DE_ASSERT(m_numLayers == 6); 62 DE_ASSERT(m_layerSize.z() == 1); 63 break; 64 65 case IMAGE_TYPE_CUBE_ARRAY: 66 DE_ASSERT(m_numLayers >= 6 && m_numLayers % 6 == 0); 67 DE_ASSERT(m_layerSize.z() == 1); 68 break; 69 70 case IMAGE_TYPE_3D: 71 DE_ASSERT(m_numLayers == 1); 72 break; 73 74 default: 75 DE_FATAL("Internal error"); 76 break; 77 } 78 } 79 80 tcu::IVec3 Texture::size (void) const 81 { 82 switch (m_type) 83 { 84 case IMAGE_TYPE_1D: 85 case IMAGE_TYPE_BUFFER: 86 case IMAGE_TYPE_2D: 87 case IMAGE_TYPE_3D: 88 return m_layerSize; 89 90 case IMAGE_TYPE_1D_ARRAY: 91 return tcu::IVec3(m_layerSize.x(), m_numLayers, 1); 92 93 case IMAGE_TYPE_2D_ARRAY: 94 case IMAGE_TYPE_CUBE: 95 case IMAGE_TYPE_CUBE_ARRAY: 96 return tcu::IVec3(m_layerSize.x(), m_layerSize.y(), m_numLayers); 97 98 default: 99 DE_FATAL("Internal error"); 100 return tcu::IVec3(); 101 } 102 } 103 104 int Texture::dimension (void) const 105 { 106 switch (m_type) 107 { 108 case IMAGE_TYPE_1D: 109 case IMAGE_TYPE_BUFFER: 110 return 1; 111 112 case IMAGE_TYPE_1D_ARRAY: 113 case IMAGE_TYPE_2D: 114 return 2; 115 116 case IMAGE_TYPE_2D_ARRAY: 117 case IMAGE_TYPE_CUBE: 118 case IMAGE_TYPE_CUBE_ARRAY: 119 case IMAGE_TYPE_3D: 120 return 3; 121 122 default: 123 DE_FATAL("Internal error"); 124 return 0; 125 } 126 } 127 128 int Texture::layerDimension (void) const 129 { 130 switch (m_type) 131 { 132 case IMAGE_TYPE_1D: 133 case IMAGE_TYPE_BUFFER: 134 case IMAGE_TYPE_1D_ARRAY: 135 return 1; 136 137 case IMAGE_TYPE_2D: 138 case IMAGE_TYPE_2D_ARRAY: 139 case IMAGE_TYPE_CUBE: 140 case IMAGE_TYPE_CUBE_ARRAY: 141 return 2; 142 143 case IMAGE_TYPE_3D: 144 return 3; 145 146 default: 147 DE_FATAL("Internal error"); 148 return 0; 149 } 150 } 151 152 } // image 153 } // vkt 154