vktImageTexture.cpp revision c56bfb7d0b64737b3fd543b792d3a5247611efe8
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 35c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski#include "vktTexture.hpp" 36c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 37c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiusing namespace vk; 38c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 39c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskinamespace vkt 40c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 41c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskinamespace image 42c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 43c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 44c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej JesionowskiTexture::Texture (const ImageType type, const tcu::IVec3& layerSize, const int layers) 45c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski : m_layerSize (layerSize) 46c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski , m_type (type) 47c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski , m_numLayers (layers) 48c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 49c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers >= 1); 50c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.x() >= 1 && m_layerSize.y() >= 1 && m_layerSize.z() >= 1); 51c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (type) 52c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 53c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 54c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 55c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 56c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1); 57c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 58c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 59c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 60c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1); 61c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 62c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 63c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 64c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 65c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 66c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 67c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 68c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 69c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 70c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 71c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 72c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 73c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 6); 74c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 75c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 76c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 77c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 78c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers >= 6 && m_numLayers % 6 == 0); 79c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 80c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 81c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 82c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 83c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 84c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 85c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski } 86c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 87c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 88c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskitcu::IVec3 Texture::size (void) const 89c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 90c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 91c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 92c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 93c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 94c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 95c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 96c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return m_layerSize; 97c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 98c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 99c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return tcu::IVec3(m_layerSize.x(), m_numLayers, 1); 100c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 101c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 102c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 103c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 104c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return tcu::IVec3(m_layerSize.x(), m_layerSize.y(), m_numLayers); 105c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski } 106c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 107c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_FATAL("Internal error"); 108c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return tcu::IVec3(); 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 } 129c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 130c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_FATAL("Internal error"); 131c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 0; 132c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 133c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 134c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::layerDimension (void) const 135c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 136c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 137c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 138c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 139c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 140c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 141c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 1; 142c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 143c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 144c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 145c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 146c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 147c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 2; 148c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 149c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 150c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 3; 151c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski } 152c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 153c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_FATAL("Internal error"); 154c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 0; 155c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 156c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 157c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // image 158c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // vkt 159