vktImageTexture.cpp revision 9a869c2848d0419008cb99f72c9fa372e3af805d
1c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski/*------------------------------------------------------------------------ 2c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * Vulkan Conformance Tests 3c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * ------------------------ 4c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * 59a869c2848d0419008cb99f72c9fa372e3af805dPyry Haulos * Copyright (c) 2016 The Khronos Group Inc. 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 PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. 25c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * 26c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *//*! 27c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * \file 28c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski * \brief Texture utility class 29c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski *//*--------------------------------------------------------------------*/ 30c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 310b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski#include "vktImageTexture.hpp" 32c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 33c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskinamespace vkt 34c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 35c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskinamespace image 36c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 37c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 3849c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry HaulosTexture::Texture (const ImageType type_, const tcu::IVec3& layerSize_, const int layers) 3949c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos : m_layerSize (layerSize_) 4049c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos , m_type (type_) 41c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski , m_numLayers (layers) 42c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 43c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers >= 1); 44c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.x() >= 1 && m_layerSize.y() >= 1 && m_layerSize.z() >= 1); 4549c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos 4649c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos switch (type_) 47c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 48c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 49c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 50c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 51c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1); 52c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 53c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 54c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 55c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1); 56c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 57c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 58c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 59c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 60c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 61c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 62c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 63c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 64c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 65c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 66c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 67c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 68c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 6); 69c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 70c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 71c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 72c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 73c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers >= 6 && m_numLayers % 6 == 0); 74c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 75c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 76c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 77c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 78c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 79c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 800b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski 810b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 820b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 830b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski break; 84c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski } 85c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 86c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 87c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskitcu::IVec3 Texture::size (void) const 88c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 89c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 90c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 91c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 92c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 93c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 94c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 95c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return m_layerSize; 96c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 97c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 98c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return tcu::IVec3(m_layerSize.x(), m_numLayers, 1); 99c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 100c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 101c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 102c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 103c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return tcu::IVec3(m_layerSize.x(), m_layerSize.y(), m_numLayers); 104c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 1050b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 1060b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 1070b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski return tcu::IVec3(); 1080b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski } 109c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 110c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 111c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::dimension (void) const 112c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 113c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 114c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 115c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 116c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 117c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 1; 118c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 119c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 120c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 121c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 2; 122c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 123c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 124c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 125c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 126c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 127c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 3; 128c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 1290b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 1300b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 1310b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski return 0; 1320b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski } 133c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 134c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 135c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::layerDimension (void) const 136c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 137c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 138c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 139c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 140c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 141c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 142c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 1; 143c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 144c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 145c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 146c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 147c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 148c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 2; 149c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 150c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 151c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 3; 152c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 1530b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 1540b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 1550b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski return 0; 1560b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski } 157c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 158c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 159c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // image 160c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // vkt 161