#ifndef _VKTIMAGETEXTURE_HPP #define _VKTIMAGETEXTURE_HPP /*------------------------------------------------------------------------ * Vulkan Conformance Tests * ------------------------ * * Copyright (c) 2016 The Khronos Group Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *//*! * \file * \brief Texture utility class *//*--------------------------------------------------------------------*/ #include "tcuDefs.hpp" #include "vktImageTestsUtil.hpp" namespace vkt { namespace image { //! Texture buffer/image abstraction. Helps managing size, number of layers and number of mipmap levels. class Texture { public: Texture (const ImageType imageType, const tcu::IVec3& imageLayerSize, const int layers, const int samples = 1, const int levels = 1); Texture (const Texture& other, const int samples); ImageType type (void) const { return m_type; } //!< Texture type tcu::IVec3 layerSize (const int mipLevel = 0) const; //!< Size of a single layer for mipmap level 0 int numLayers (void) const { return m_numLayers; } //!< Number of array layers (for array and cube types) int numSamples (void) const { return m_numSamples; } //!< Number of samples per texel (multisampled texture) tcu::IVec3 size (const int mipLevel = 0) const; //!< Size including number of layers in additional dimension (e.g. z in 2d texture) for mipmap level 0 int dimension (void) const; //!< Coordinate dimension used for addressing (e.g. 3 (x,y,z) for 2d array) int layerDimension (void) const; //!< Coordinate dimension used for addressing a single layer (e.g. 2 (x,y) for 2d array) int numMipmapLevels (void) const { return m_numMipmapLevels; } //!< Number of levels of detail (mipmap texture) private: void checkInvariants (void) const; const tcu::IVec3 m_layerSize; const ImageType m_type; const int m_numLayers; const int m_numSamples; const int m_numMipmapLevels; }; inline bool isCube (const Texture& texture) { return texture.type() == IMAGE_TYPE_CUBE || texture.type() == IMAGE_TYPE_CUBE_ARRAY; } } // image } // vkt #endif // _VKTIMAGETEXTURE_HPP