189deda324d50f27dfe095cbfd698956fd9972847Dae Kim#ifndef _VKIMAGEUTIL_HPP 289deda324d50f27dfe095cbfd698956fd9972847Dae Kim#define _VKIMAGEUTIL_HPP 3a8426a390a1bf56e17db7565b07f9ea4f1646d4bMika Isojärvi/*------------------------------------------------------------------------- 4a8426a390a1bf56e17db7565b07f9ea4f1646d4bMika Isojärvi * Vulkan CTS Framework 5a8426a390a1bf56e17db7565b07f9ea4f1646d4bMika Isojärvi * -------------------- 689deda324d50f27dfe095cbfd698956fd9972847Dae Kim * 789deda324d50f27dfe095cbfd698956fd9972847Dae Kim * Copyright (c) 2015 The Khronos Group Inc. 889deda324d50f27dfe095cbfd698956fd9972847Dae Kim * Copyright (c) 2015 Imagination Technologies Ltd. 9a8426a390a1bf56e17db7565b07f9ea4f1646d4bMika Isojärvi * Copyright (c) 2015 Google Inc. 1089deda324d50f27dfe095cbfd698956fd9972847Dae Kim * 11978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License"); 12978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * you may not use this file except in compliance with the License. 13978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * You may obtain a copy of the License at 1489deda324d50f27dfe095cbfd698956fd9972847Dae Kim * 15978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * http://www.apache.org/licenses/LICENSE-2.0 1689deda324d50f27dfe095cbfd698956fd9972847Dae Kim * 17978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Unless required by applicable law or agreed to in writing, software 18978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS, 19978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 20978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * See the License for the specific language governing permissions and 21978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * limitations under the License. 2289deda324d50f27dfe095cbfd698956fd9972847Dae Kim * 2389deda324d50f27dfe095cbfd698956fd9972847Dae Kim *//*! 2489deda324d50f27dfe095cbfd698956fd9972847Dae Kim * \file 2589deda324d50f27dfe095cbfd698956fd9972847Dae Kim * \brief Utilities for images. 2689deda324d50f27dfe095cbfd698956fd9972847Dae Kim *//*--------------------------------------------------------------------*/ 2789deda324d50f27dfe095cbfd698956fd9972847Dae Kim 2889deda324d50f27dfe095cbfd698956fd9972847Dae Kim#include "vkDefs.hpp" 2989deda324d50f27dfe095cbfd698956fd9972847Dae Kim#include "tcuTexture.hpp" 304698bb4451c7d984b7e070d524130deb5a775f1aDae Kim#include "tcuCompressedTexture.hpp" 3189deda324d50f27dfe095cbfd698956fd9972847Dae Kim 3289deda324d50f27dfe095cbfd698956fd9972847Dae Kimnamespace vk 3389deda324d50f27dfe095cbfd698956fd9972847Dae Kim{ 3489deda324d50f27dfe095cbfd698956fd9972847Dae Kim 3568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulosbool isFloatFormat (VkFormat format); 3668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulosbool isUnormFormat (VkFormat format); 3768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulosbool isSnormFormat (VkFormat format); 3868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulosbool isIntFormat (VkFormat format); 3968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulosbool isUintFormat (VkFormat format); 4068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulosbool isDepthStencilFormat (VkFormat format); 4168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulosbool isCompressedFormat (VkFormat format); 428b0f318ec6cdec8e3c0cf68e16cb81bb955358a2Collin Bakerbool isSrgbFormat (VkFormat format); 4389deda324d50f27dfe095cbfd698956fd9972847Dae Kim 440b0c5dba7daed6439ec6352aacf3cd216d1c1dd5Pyry Haulosbool isSupportedByFramework (VkFormat format); 450b0c5dba7daed6439ec6352aacf3cd216d1c1dd5Pyry Haulos 4668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulostcu::TextureFormat mapVkFormat (VkFormat format); 4768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulostcu::CompressedTexFormat mapVkCompressedFormat (VkFormat format); 48bffa5385346c8425a4bfb6ed270a421e527fce8dJeff Bolztcu::TextureFormat getDepthCopyFormat (VkFormat combinedFormat); 49bffa5385346c8425a4bfb6ed270a421e527fce8dJeff Bolztcu::TextureFormat getStencilCopyFormat (VkFormat combinedFormat); 5083a6066224454de177655eb414dd3453c2059536Dae Kim 5168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulostcu::Sampler mapVkSampler (const VkSamplerCreateInfo& samplerCreateInfo); 5268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulostcu::Sampler::CompareMode mapVkSamplerCompareOp (VkCompareOp compareOp); 5368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulostcu::Sampler::WrapMode mapVkSamplerAddressMode (VkSamplerAddressMode addressMode); 5468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulostcu::Sampler::FilterMode mapVkMinTexFilter (VkFilter filter, VkSamplerMipmapMode mipMode); 5568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulostcu::Sampler::FilterMode mapVkMagTexFilter (VkFilter filter); 564698bb4451c7d984b7e070d524130deb5a775f1aDae Kim 5768e7282426d639b54d15c4710d97ba97e72c76efPyry HaulosVkFilter mapFilterMode (tcu::Sampler::FilterMode filterMode); 5868e7282426d639b54d15c4710d97ba97e72c76efPyry HaulosVkSamplerMipmapMode mapMipmapMode (tcu::Sampler::FilterMode filterMode); 5968e7282426d639b54d15c4710d97ba97e72c76efPyry HaulosVkSamplerAddressMode mapWrapMode (tcu::Sampler::WrapMode wrapMode); 6068e7282426d639b54d15c4710d97ba97e72c76efPyry HaulosVkCompareOp mapCompareMode (tcu::Sampler::CompareMode mode); 6168e7282426d639b54d15c4710d97ba97e72c76efPyry HaulosVkFormat mapTextureFormat (const tcu::TextureFormat& format); 6241702fa78437820bc601e604de6a490eb09513ddPeter SiketVkSamplerCreateInfo mapSampler (const tcu::Sampler& sampler, const tcu::TextureFormat& format, float minLod = 0.0f, float maxLod = 1000.0f); 6368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 6468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulosvoid imageUtilSelfTest (void); 650820e8d122596ff51f723f8a4f32fa755fbbda23Pyry Haulos 6625b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos// \todo [2017-05-18 pyry] Consider moving this to tcu 6725b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulosstruct PlanarFormatDescription 6825b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos{ 6925b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos enum 7025b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos { 7125b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos MAX_CHANNELS = 4, 7225b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos MAX_PLANES = 3 7325b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos }; 7425b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos 7525b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos enum ChannelFlags 7625b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos { 7725b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos CHANNEL_R = (1u<<0), // Has "R" (0) channel 7825b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos CHANNEL_G = (1u<<1), // Has "G" (1) channel 7925b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos CHANNEL_B = (1u<<2), // Has "B" (2) channel 8025b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos CHANNEL_A = (1u<<3), // Has "A" (3) channel 8125b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos }; 8225b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos 8325b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos struct Plane 8425b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos { 8525b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos deUint8 elementSizeBytes; 8625b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos deUint8 widthDivisor; 8725b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos deUint8 heightDivisor; 8825b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos }; 8925b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos 9025b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos struct Channel 9125b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos { 9225b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos deUint8 planeNdx; 9325b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos deUint8 type; // tcu::TextureChannelClass value 9425b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos deUint8 offsetBits; // Offset in element in bits 9525b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos deUint8 sizeBits; // Value size in bits 9625b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos deUint8 strideBytes; // Pixel stride (in bytes), usually plane elementSize 9725b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos }; 9825b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos 9925b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos deUint8 numPlanes; 10025b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos deUint8 presentChannels; 10125b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos Plane planes[MAX_PLANES]; 10225b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos Channel channels[MAX_CHANNELS]; 10325b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos 10425b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos inline bool hasChannelNdx (deUint32 ndx) const 10525b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos { 10625b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos DE_ASSERT(de::inBounds(ndx, 0u, 4u)); 10725b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos return (presentChannels & (1u<<ndx)) != 0; 10825b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos } 10925b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos}; 11025b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos 11125b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulosbool isYCbCrFormat (VkFormat format); 11225b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry HaulosPlanarFormatDescription getPlanarFormatDescription (VkFormat format); 11325b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulosconst PlanarFormatDescription& getYCbCrPlanarFormatDescription (VkFormat format); 11425b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulosint getPlaneCount (VkFormat format); 11525b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry HaulosVkImageAspectFlagBits getPlaneAspect (deUint32 planeNdx); 11625b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry HaulosdeUint32 getAspectPlaneNdx (VkImageAspectFlagBits planeAspect); 1175b4c115ff494f39261d387b12d4b539c02159169Mika Isojärvibool isChromaSubsampled (VkFormat format); 11825b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos 11925b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulostcu::PixelBufferAccess getChannelAccess (const PlanarFormatDescription& formatInfo, 12025b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos const tcu::UVec2& size, 12125b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos const deUint32* planeRowPitches, 12225b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos void* const* planePtrs, 12325b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos deUint32 channelNdx); 12425b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulostcu::ConstPixelBufferAccess getChannelAccess (const PlanarFormatDescription& formatInfo, 12525b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos const tcu::UVec2& size, 12625b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos const deUint32* planeRowPitches, 12725b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos const void* const* planePtrs, 12825b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos deUint32 channelNdx); 12925b25ca76377bd0e74a6dd8c72184f41ecbdebc3Pyry Haulos 13089deda324d50f27dfe095cbfd698956fd9972847Dae Kim} // vk 13189deda324d50f27dfe095cbfd698956fd9972847Dae Kim 13289deda324d50f27dfe095cbfd698956fd9972847Dae Kim#endif // _VKIMAGEUTIL_HPP 133