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 317ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowskivoid Texture::checkInvariants (void) const 32c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 337ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski DE_ASSERT((m_numSamples == 1) || (m_numSamples == 2) || (m_numSamples == 4) || (m_numSamples == 8) || 347ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski (m_numSamples == 16) || (m_numSamples == 32) || (m_numSamples == 64)); 35c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers >= 1); 36c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.x() >= 1 && m_layerSize.y() >= 1 && m_layerSize.z() >= 1); 3749c4f4f532ad8094b5de6fc6e2ec1c77db4066ccPyry Haulos 387ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski switch (m_type) 39c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 40c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 41c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 42c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 437ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski DE_ASSERT(m_numSamples == 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: 487ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski DE_ASSERT(m_numSamples == 1); 49c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.y() == 1 && m_layerSize.z() == 1); 50c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 51c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 52c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 53c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 54c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 55c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 56c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 57c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 58c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 59c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 60c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 61c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 627ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski DE_ASSERT(m_numSamples == 1); 63c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 6); 64c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 65c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 66c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 67c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 687ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski DE_ASSERT(m_numSamples == 1); 69c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers >= 6 && m_numLayers % 6 == 0); 70c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_layerSize.z() == 1); 71c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 72c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 73c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 747ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski DE_ASSERT(m_numSamples == 1); 75c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski DE_ASSERT(m_numLayers == 1); 76c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski break; 770b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski 780b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 790b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 800b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski break; 81c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski } 82c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 83c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 847ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej JesionowskiTexture::Texture (const ImageType imageType, const tcu::IVec3& imageLayerSize, const int layers, const int samples) 857ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski : m_layerSize (imageLayerSize) 867ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski , m_type (imageType) 877ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski , m_numLayers (layers) 887ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski , m_numSamples (samples) 897ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski{ 907ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski checkInvariants(); 917ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski} 927ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski 937ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej JesionowskiTexture::Texture (const Texture& other, const int samples) 947ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski : m_layerSize (other.m_layerSize) 957ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski , m_type (other.m_type) 967ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski , m_numLayers (other.m_numLayers) 977ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski , m_numSamples (samples) 987ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski{ 997ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski checkInvariants(); 1007ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski} 1017ac9a1f266eb171fa0eb411c300d2122f578a3a6Maciej Jesionowski 102c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskitcu::IVec3 Texture::size (void) const 103c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 104c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 105c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 106c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 107c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 108c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 109c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 110c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return m_layerSize; 111c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 112c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 113c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return tcu::IVec3(m_layerSize.x(), m_numLayers, 1); 114c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 115c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 116c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 117c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 118c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return tcu::IVec3(m_layerSize.x(), m_layerSize.y(), m_numLayers); 119c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 1200b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 1210b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 1220b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski return tcu::IVec3(); 1230b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski } 124c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 125c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 126c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::dimension (void) const 127c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 128c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 129c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 130c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 131c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 132c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 1; 133c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 134c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 135c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 136c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 2; 137c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 138c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 139c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 140c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 141c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 142c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 3; 143c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 1440b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 1450b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 1460b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski return 0; 1470b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski } 148c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 149c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 150c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowskiint Texture::layerDimension (void) const 151c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski{ 152c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski switch (m_type) 153c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski { 154c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D: 155c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_BUFFER: 156c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_1D_ARRAY: 157c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 1; 158c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 159c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D: 160c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_2D_ARRAY: 161c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE: 162c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_CUBE_ARRAY: 163c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 2; 164c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 165c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski case IMAGE_TYPE_3D: 166c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski return 3; 167c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 1680b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski default: 1690b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski DE_FATAL("Internal error"); 1700b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski return 0; 1710b28fcc70473fa4194a1dca3515c6dbb5ad26bd9Maciej Jesionowski } 172c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} 173c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski 174c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // image 175c56bfb7d0b64737b3fd543b792d3a5247611efe8Maciej Jesionowski} // vkt 176