1c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski/*------------------------------------------------------------------------ 2c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * Vulkan Conformance Tests 3c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * ------------------------ 4c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * 59a869c2848d0419008cb99f72c9fa372e3af805dPyry Haulos * Copyright (c) 2016 The Khronos Group Inc. 6c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * 7978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License"); 8978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * you may not use this file except in compliance with the License. 9978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * You may obtain a copy of the License at 10c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * 11978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * http://www.apache.org/licenses/LICENSE-2.0 12c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * 13978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Unless required by applicable law or agreed to in writing, software 14978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS, 15978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * See the License for the specific language governing permissions and 17978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * limitations under the License. 18c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * 19c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *//*! 20c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * \file 21c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * \brief Texture utility class 22c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *//*--------------------------------------------------------------------*/ 23c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 240b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski#include "vktImageTexture.hpp" 25c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 26c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskinamespace vkt 27c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 28c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskinamespace image 29c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 30c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 3149c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry HaulosTexture::Texture (const ImageType type_, const tcu::IVec3& layerSize_, const int layers) 3249c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos : m_layerSize (layerSize_) 3349c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos , m_type (type_) 34c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski , m_numLayers (layers) 35c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 36c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers >= 1); 37c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.x() >= 1 && m_layerSize.y() >= 1 && m_layerSize.z() >= 1); 3849c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos 3949c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos switch (type_) 40c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 41c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 42c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 43c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 44c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1); 45c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 46c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 47c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 48c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1); 49c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 50c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 51c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 52c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 53c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 54c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 55c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 56c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 57c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 58c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 59c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 60c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 61c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 6); 62c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 63c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 64c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 65c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 66c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers >= 6 && m_numLayers % 6 == 0); 67c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 68c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 69c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 70c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 71c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 72c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 730b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski 740b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 750b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 760b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski break; 77c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski } 78c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 79c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 80c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskitcu::IVec3 Texture::size (void) const 81c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 82c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 83c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 84c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 85c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 86c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 87c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 88c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return m_layerSize; 89c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 90c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 91c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return tcu::IVec3(m_layerSize.x(), m_numLayers, 1); 92c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 93c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 94c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 95c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 96c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return tcu::IVec3(m_layerSize.x(), m_layerSize.y(), m_numLayers); 97c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 980b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 990b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 1000b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski return tcu::IVec3(); 1010b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski } 102c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 103c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 104c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::dimension (void) const 105c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 106c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 107c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 108c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 109c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 110c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 1; 111c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 112c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 113c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 114c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 2; 115c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 116c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 117c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 118c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 119c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 120c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 3; 121c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 1220b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 1230b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 1240b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski return 0; 1250b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski } 126c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 127c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 128c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::layerDimension (void) const 129c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 130c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 131c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 132c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 133c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 134c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 135c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 1; 136c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 137c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 138c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 139c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 140c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 141c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 2; 142c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 143c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 144c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 3; 145c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 1460b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 1470b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 1480b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski return 0; 1490b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski } 150c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 151c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 152c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // image 153c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // vkt 154