vktImageTexture.cpp revision 49c4f4f532ad8094b5de6fc6e2ec1c77db4066cc
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 4249c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry HaulosTexture::Texture (const ImageType type_, const tcu::IVec3& layerSize_, const int layers) 4349c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos : m_layerSize (layerSize_) 4449c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos , 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); 4949c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos 5049c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos switch (type_) 51c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 52c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 53c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 54c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 55c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1); 56c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 57c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 58c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 59c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1); 60c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 61c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 62c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 63c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 64c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 65c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 66c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 67c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 68c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 69c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 70c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 71c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 72c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 6); 73c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 74c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 75c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 76c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 77c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers >= 6 && m_numLayers % 6 == 0); 78c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 79c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 80c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 81c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 82c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 83c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 840b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski 850b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 860b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 870b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski break; 88c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski } 89c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 90c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 91c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskitcu::IVec3 Texture::size (void) const 92c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 93c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 94c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 95c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 96c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 97c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 98c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 99c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return m_layerSize; 100c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 101c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 102c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return tcu::IVec3(m_layerSize.x(), m_numLayers, 1); 103c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 104c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 105c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 106c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 107c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return tcu::IVec3(m_layerSize.x(), m_layerSize.y(), m_numLayers); 108c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 1090b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 1100b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 1110b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski return tcu::IVec3(); 1120b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski } 113c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 114c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 115c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::dimension (void) const 116c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 117c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 118c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 119c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 120c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 121c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 1; 122c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 123c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 124c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 125c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 2; 126c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 127c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 128c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 129c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 130c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 131c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 3; 132c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 1330b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 1340b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 1350b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski return 0; 1360b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski } 137c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 138c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 139c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::layerDimension (void) const 140c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 141c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 142c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 143c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 144c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 145c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 146c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 1; 147c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 148c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 149c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 150c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 151c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 152c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 2; 153c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 154c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 155c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 3; 156c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 1570b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 1580b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 1590b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski return 0; 1600b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski } 161c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 162c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 163c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // image 164c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // vkt 165