vktImageTexture.cpp revision 0b28fcc70473fa4194a1dca3515c6dbb5ad26bd9
1c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski/*------------------------------------------------------------------------ 2c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * Vulkan Conformance Tests 3c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * ------------------------ 4c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * 5c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * Copyright (c) 2015 Mobica Ltd. 6c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * 7c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * Permission is hereby granted, free of charge, to any person obtaining a 8c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * copy of this software and/or associated documentation files (the 9c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * "Materials"), to deal in the Materials without restriction, including 10c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * without limitation the rights to use, copy, modify, merge, publish, 11c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * distribute, sublicense, and/or sell copies of the Materials, and to 12c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * permit persons to whom the Materials are furnished to do so, subject to 13c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * the following conditions: 14c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * 15c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * The above copyright notice(s) and this permission notice shall be included 16c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * in all copies or substantial portions of the Materials. 17c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * 18c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * The Materials are Confidential Information as defined by the 19c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * Khronos Membership Agreement until designated non-confidential by Khronos, 20c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * at which point this condition clause shall be removed. 21c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * 22c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 23c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 24c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 25c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 26c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 27c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 28c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. 29c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * 30c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *//*! 31c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * \file 32c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * \brief Texture utility class 33c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *//*--------------------------------------------------------------------*/ 34c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 350b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski#include "vktImageTexture.hpp" 36c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 37c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskinamespace vkt 38c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 39c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskinamespace image 40c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 41c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 42c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej JesionowskiTexture::Texture (const ImageType type, const tcu::IVec3& layerSize, const int layers) 43c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski : m_layerSize (layerSize) 44c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski , m_type (type) 45c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski , m_numLayers (layers) 46c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 47c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers >= 1); 48c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.x() >= 1 && m_layerSize.y() >= 1 && m_layerSize.z() >= 1); 49c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (type) 50c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 51c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 52c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 53c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 54c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1); 55c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 56c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 57c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 58c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1); 59c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 60c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 61c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 62c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 63c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 64c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 65c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 66c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 67c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 68c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 69c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 70c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 71c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 6); 72c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 73c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 74c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 75c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 76c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers >= 6 && m_numLayers % 6 == 0); 77c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 78c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 79c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 80c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 81c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 82c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 830b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski 840b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 850b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 860b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski break; 87c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski } 88c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 89c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 90c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskitcu::IVec3 Texture::size (void) const 91c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 92c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 93c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 94c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 95c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 96c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 97c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 98c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return m_layerSize; 99c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 100c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 101c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return tcu::IVec3(m_layerSize.x(), m_numLayers, 1); 102c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 103c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 104c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 105c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 106c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return tcu::IVec3(m_layerSize.x(), m_layerSize.y(), m_numLayers); 107c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 1080b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 1090b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 1100b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski return tcu::IVec3(); 1110b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski } 112c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 113c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 114c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::dimension (void) const 115c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 116c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 117c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 118c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 119c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 120c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 1; 121c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 122c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 123c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 124c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 2; 125c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 126c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 127c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 128c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 129c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 130c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 3; 131c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 1320b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 1330b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 1340b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski return 0; 1350b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski } 136c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 137c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 138c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::layerDimension (void) const 139c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 140c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 141c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 142c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 143c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 144c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 145c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 1; 146c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 147c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 148c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 149c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 150c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 151c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 2; 152c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 153c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 154c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 3; 155c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 1560b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 1570b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 1580b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski return 0; 1590b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski } 160c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 161c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 162c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // image 163c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // vkt 164