tcuTexture.hpp revision becd5d53015521acf7536ba754de326d8b1da2f3
13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifndef _TCUTEXTURE_HPP 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define _TCUTEXTURE_HPP 33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*------------------------------------------------------------------------- 43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program Tester Core 53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ---------------------------------------- 63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project 83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License"); 103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License. 113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at 123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * http://www.apache.org/licenses/LICENSE-2.0 143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software 163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS, 173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and 193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License. 203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*! 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Reference Texture Implementation. 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuDefs.hpp" 273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuVector.hpp" 283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deArrayBuffer.hpp" 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <vector> 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <ostream> 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace tcu 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Texture format 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureFormat 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry enum ChannelOrder 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry R = 0, 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry A, 463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry I, 473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry L, 483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry LA, 493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry RG, 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry RA, 513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry RGB, 523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry RGBA, 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ARGB, 543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry BGRA, 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry sRGB, 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry sRGBA, 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry D, 603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry S, 613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DS, 623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CHANNELORDER_LAST 643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry enum ChannelType 673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SNORM_INT8 = 0, 693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SNORM_INT16, 703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SNORM_INT32, 713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UNORM_INT8, 723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UNORM_INT16, 733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UNORM_INT32, 743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UNORM_SHORT_565, 753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UNORM_SHORT_555, 763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UNORM_SHORT_4444, 773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UNORM_SHORT_5551, 783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UNORM_INT_101010, 793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UNORM_INT_1010102_REV, 803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UNSIGNED_INT_1010102_REV, 813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UNSIGNED_INT_11F_11F_10F_REV, 823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UNSIGNED_INT_999_E5_REV, 833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UNSIGNED_INT_24_8, 843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SIGNED_INT8, 853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SIGNED_INT16, 863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SIGNED_INT32, 873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UNSIGNED_INT8, 883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UNSIGNED_INT16, 893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UNSIGNED_INT32, 903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry HALF_FLOAT, 913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FLOAT, 923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FLOAT_UNSIGNED_INT_24_8_REV, 933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CHANNELTYPE_LAST 953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ChannelOrder order; 983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ChannelType type; 993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureFormat (ChannelOrder order_, ChannelType type_) 1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : order (order_) 1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , type (type_) 1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureFormat (void) 1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : order (CHANNELORDER_LAST) 1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , type (CHANNELTYPE_LAST) 1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getPixelSize (void) const; 1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool operator== (const TextureFormat& other) const { return !(*this != other); } 1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool operator!= (const TextureFormat& other) const 1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return (order != other.order || type != other.type); 1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Sampling parameters 1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Sampler 1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry enum WrapMode 1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CLAMP_TO_EDGE = 0, //! Clamp to edge 1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CLAMP_TO_BORDER, //! Use border color at edge 1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry REPEAT_GL, //! Repeat with OpenGL semantics 1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry REPEAT_CL, //! Repeat with OpenCL semantics 1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MIRRORED_REPEAT_GL, //! Mirrored repeat with OpenGL semantics 1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MIRRORED_REPEAT_CL, //! Mirrored repeat with OpenCL semantics 1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry WRAPMODE_LAST 1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry enum FilterMode 1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry NEAREST = 0, 1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry LINEAR, 1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry NEAREST_MIPMAP_NEAREST, 1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry NEAREST_MIPMAP_LINEAR, 1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry LINEAR_MIPMAP_NEAREST, 1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry LINEAR_MIPMAP_LINEAR, 1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FILTERMODE_LAST 1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry enum CompareMode 1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry COMPAREMODE_NONE = 0, 1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry COMPAREMODE_LESS, 1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry COMPAREMODE_LESS_OR_EQUAL, 1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry COMPAREMODE_GREATER, 1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry COMPAREMODE_GREATER_OR_EQUAL, 1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry COMPAREMODE_EQUAL, 1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry COMPAREMODE_NOT_EQUAL, 1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry COMPAREMODE_ALWAYS, 1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry COMPAREMODE_NEVER, 1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry COMPAREMODE_LAST 1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Wrap control 1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry WrapMode wrapS; 1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry WrapMode wrapT; 1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry WrapMode wrapR; 1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Minifcation & magnification 1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FilterMode minFilter; 1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FilterMode magFilter; 1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float lodThreshold; // lod <= lodThreshold ? magnified : minified 1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Coordinate normalization 1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool normalizedCoords; 1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Shadow comparison 1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CompareMode compare; 1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int compareChannel; 1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Border color 1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 borderColor; 1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Seamless cube map filtering 1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool seamlessCubeMap; 1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Sampler (WrapMode wrapS_, 1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry WrapMode wrapT_, 1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry WrapMode wrapR_, 1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FilterMode minFilter_, 1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FilterMode magFilter_, 1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float lodThreshold_ = 0.0f, 1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool normalizedCoords_ = true, 1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CompareMode compare_ = COMPAREMODE_NONE, 1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int compareChannel_ = 0, 1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const Vec4& borderColor_ = Vec4(0.0f, 0.0f, 0.0f, 0.0f), 2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool seamlessCubeMap_ = false) 2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : wrapS (wrapS_) 2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , wrapT (wrapT_) 2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , wrapR (wrapR_) 2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , minFilter (minFilter_) 2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , magFilter (magFilter_) 2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , lodThreshold (lodThreshold_) 2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , normalizedCoords (normalizedCoords_) 2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , compare (compare_) 2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , compareChannel (compareChannel_) 2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , borderColor (borderColor_) 2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , seamlessCubeMap (seamlessCubeMap_) 2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Sampler (void) 2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : wrapS (WRAPMODE_LAST) 2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , wrapT (WRAPMODE_LAST) 2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , wrapR (WRAPMODE_LAST) 2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , minFilter (FILTERMODE_LAST) 2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , magFilter (FILTERMODE_LAST) 2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , lodThreshold (0.0f) 2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , normalizedCoords (true) 2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , compare (COMPAREMODE_NONE) 2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , compareChannel (0) 2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , borderColor (0.0f, 0.0f, 0.0f, 0.0f) 2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , seamlessCubeMap (false) 2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureLevel; 2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Read-only pixel data access 2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ConstPixelBufferAccess encapsulates pixel data pointer along with 2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * format and layout information. It can be used for read-only access 2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * to arbitrary pixel buffers. 2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Access objects are like iterators or pointers. They can be passed around 2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * as values and are valid as long as the storage doesn't change. 2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ConstPixelBufferAccess 2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ConstPixelBufferAccess (void); 2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ConstPixelBufferAccess (const TextureLevel& level); 2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ConstPixelBufferAccess (const TextureFormat& format, int width, int height, int depth, const void* data); 2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ConstPixelBufferAccess (const TextureFormat& format, int width, int height, int depth, int rowPitch, int slicePitch, const void* data); 2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const TextureFormat& getFormat (void) const { return m_format; } 2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getWidth (void) const { return m_width; } 2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getHeight (void) const { return m_height; } 2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getDepth (void) const { return m_depth; } 2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getRowPitch (void) const { return m_rowPitch; } 2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getSlicePitch (void) const { return m_slicePitch; } 2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const void* getDataPtr (void) const { return m_data; } 2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getDataSize (void) const { return m_depth*m_slicePitch; } 2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 getPixel (int x, int y, int z = 0) const; 2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry IVec4 getPixelInt (int x, int y, int z = 0) const; 2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry UVec4 getPixelUint (int x, int y, int z = 0) const { return getPixelInt(x, y, z).cast<deUint32>(); } 2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry template<typename T> 2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vector<T, 4> getPixelT (int x, int y, int z = 0) const; 2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float getPixDepth (int x, int y, int z = 0) const; 2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getPixStencil (int x, int y, int z = 0) const; 2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample1D (const Sampler& sampler, Sampler::FilterMode filter, float s, int level) const; 2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample2D (const Sampler& sampler, Sampler::FilterMode filter, float s, float t, int depth) const; 2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample3D (const Sampler& sampler, Sampler::FilterMode filter, float s, float t, float r) const; 2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample1DOffset (const Sampler& sampler, Sampler::FilterMode filter, float s, const IVec2& offset) const; 2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample2DOffset (const Sampler& sampler, Sampler::FilterMode filter, float s, float t, const IVec3& offset) const; 2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample3DOffset (const Sampler& sampler, Sampler::FilterMode filter, float s, float t, float r, const IVec3& offset) const; 2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sample1DCompare (const Sampler& sampler, Sampler::FilterMode filter, float ref, float s, const IVec2& offset) const; 2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sample2DCompare (const Sampler& sampler, Sampler::FilterMode filter, float ref, float s, float t, const IVec3& offset) const; 2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureFormat m_format; 2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_width; 2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_height; 2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_depth; 2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_rowPitch; 2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_slicePitch; 2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mutable void* m_data; 2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Read-write pixel data access 2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * This class extends read-only access object by providing write functionality. 2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \note PixelBufferAccess may not have any data members nor add any 2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * virtual functions. It must be possible to reinterpret_cast<> 2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * PixelBufferAccess to ConstPixelBufferAccess. 3003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass PixelBufferAccess : public ConstPixelBufferAccess 3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 304becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi PixelBufferAccess (void) {} 305becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi PixelBufferAccess (TextureLevel& level); 306becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi PixelBufferAccess (const TextureFormat& format, int width, int height, int depth, void* data); 307becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi PixelBufferAccess (const TextureFormat& format, int width, int height, int depth, int rowPitch, int slicePitch, void* data); 3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 309becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi void* getDataPtr (void) const { return m_data; } 3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 311becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi void setPixels (const void* buf, int bufSize) const; 312becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi void setPixel (const tcu::Vec4& color, int x, int y, int z = 0) const; 313becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi void setPixel (const tcu::IVec4& color, int x, int y, int z = 0) const; 314becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi void setPixel (const tcu::UVec4& color, int x, int y, int z = 0) const { setPixel(color.cast<int>(), x, y, z); } 3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 316becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi void setPixDepth (float depth, int x, int y, int z = 0) const; 317becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi void setPixStencil (int stencil, int x, int y, int z = 0) const; 3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Generic pixel data container 3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * This container supports all valid TextureFormat combinations and 3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * both 2D and 3D textures. To read or manipulate data access object must 3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * be queried using getAccess(). 3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureLevel 3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 330becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi TextureLevel (void); 331becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi TextureLevel (const TextureFormat& format); 332becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi TextureLevel (const TextureFormat& format, int width, int height, int depth = 1); 333becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi ~TextureLevel (void); 3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 335becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi int getWidth (void) const { return m_width; } 336becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi int getHeight (void) const { return m_height; } 337becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi int getDepth (void) const { return m_depth; } 338becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi bool isEmpty (void) const { return m_width == 0 || m_height == 0 || m_depth == 0; } 339becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi const TextureFormat getFormat (void) const { return m_format; } 3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 341becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi void setStorage (const TextureFormat& format, int width, int heigth, int depth = 1); 342becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi void setSize (int width, int height, int depth = 1); 3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 344becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi PixelBufferAccess getAccess (void) { return PixelBufferAccess(m_format, m_width, m_height, m_depth, getPtr()); } 345becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi ConstPixelBufferAccess getAccess (void) const { return ConstPixelBufferAccess(m_format, m_width, m_height, m_depth, getPtr()); } 3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 348becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi void* getPtr (void) { return m_data.getPtr(); } 349becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi const void* getPtr (void) const { return m_data.getPtr(); } 350becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi 351becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi TextureFormat m_format; 352becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi int m_width; 353becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi int m_height; 354becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi int m_depth; 355becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi de::ArrayBuffer<deUint8> m_data; 3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry friend class ConstPixelBufferAccess; 3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3603c827367444ee418f129b2c238299f49d3264554Jarkko PoyryVec4 sampleLevelArray1D (const ConstPixelBufferAccess* levels, int numLevels, const Sampler& sampler, float s, int level, float lod); 3613c827367444ee418f129b2c238299f49d3264554Jarkko PoyryVec4 sampleLevelArray2D (const ConstPixelBufferAccess* levels, int numLevels, const Sampler& sampler, float s, float t, int depth, float lod); 3623c827367444ee418f129b2c238299f49d3264554Jarkko PoyryVec4 sampleLevelArray3D (const ConstPixelBufferAccess* levels, int numLevels, const Sampler& sampler, float s, float t, float r, float lod); 3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3643c827367444ee418f129b2c238299f49d3264554Jarkko PoyryVec4 sampleLevelArray1DOffset (const ConstPixelBufferAccess* levels, int numLevels, const Sampler& sampler, float s, float lod, const IVec2& offset); 3653c827367444ee418f129b2c238299f49d3264554Jarkko PoyryVec4 sampleLevelArray2DOffset (const ConstPixelBufferAccess* levels, int numLevels, const Sampler& sampler, float s, float t, float lod, const IVec3& offset); 3663c827367444ee418f129b2c238299f49d3264554Jarkko PoyryVec4 sampleLevelArray3DOffset (const ConstPixelBufferAccess* levels, int numLevels, const Sampler& sampler, float s, float t, float r, float lod, const IVec3& offset); 3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyryfloat sampleLevelArray1DCompare (const ConstPixelBufferAccess* levels, int numLevels, const Sampler& sampler, float ref, float s, float lod, const IVec2& offset); 3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyryfloat sampleLevelArray2DCompare (const ConstPixelBufferAccess* levels, int numLevels, const Sampler& sampler, float ref, float s, float t, float lod, const IVec3& offset); 3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3713c827367444ee418f129b2c238299f49d3264554Jarkko PoyryVec4 gatherArray2DOffsets (const ConstPixelBufferAccess& src, const Sampler& sampler, float s, float t, int depth, int componentNdx, const IVec2 (&offsets)[4]); 3723c827367444ee418f129b2c238299f49d3264554Jarkko PoyryVec4 gatherArray2DOffsetsCompare (const ConstPixelBufferAccess& src, const Sampler& sampler, float ref, float s, float t, int depth, const IVec2 (&offsets)[4]); 3733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyryenum CubeFace 3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CUBEFACE_NEGATIVE_X = 0, 3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CUBEFACE_POSITIVE_X, 3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CUBEFACE_NEGATIVE_Y, 3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CUBEFACE_POSITIVE_Y, 3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CUBEFACE_NEGATIVE_Z, 3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CUBEFACE_POSITIVE_Z, 3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CUBEFACE_LAST 3843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 3853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Coordinates projected onto cube face. 3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytemplate<typename T> 3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystruct CubeFaceCoords 3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CubeFace face; 3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry T s; 3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry T t; 3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CubeFaceCoords (CubeFace face_, T s_, T t_) : face(face_), s(s_), t(t_) {} 3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CubeFaceCoords (CubeFace face_, const Vector<T, 2>& c) : face(face_), s(c.x()), t(c.y()) {} 3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytypedef CubeFaceCoords<float> CubeFaceFloatCoords; 4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytypedef CubeFaceCoords<int> CubeFaceIntCoords; 4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4033c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCubeFace selectCubeFace (const Vec3& coords); 4043c827367444ee418f129b2c238299f49d3264554Jarkko PoyryVec2 projectToFace (CubeFace face, const Vec3& coords); 4053c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCubeFaceFloatCoords getCubeFaceCoords (const Vec3& coords); 4063c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCubeFaceIntCoords remapCubeEdgeCoords (const CubeFaceIntCoords& coords, int size); 4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief 1D Texture View 4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Texture1DView 4123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4133c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 4143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture1DView (int numLevels, const ConstPixelBufferAccess* levels); 4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getNumLevels (void) const { return m_numLevels; } 4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getWidth (void) const { return m_numLevels > 0 ? m_levels[0].getWidth() : 0; } 4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess& getLevel (int ndx) const { DE_ASSERT(de::inBounds(ndx, 0, m_numLevels)); return m_levels[ndx]; } 4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess* getLevels (void) const { return m_levels; } 4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample (const Sampler& sampler, float s, float lod) const; 4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sampleOffset (const Sampler& sampler, float s, float lod, deInt32 offset) const; 4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompare (const Sampler& sampler, float ref, float s, float lod) const; 4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompareOffset (const Sampler& sampler, float ref, float s, float lod, deInt32 offset) const; 4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4263c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_numLevels; 4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess* m_levels; 4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 4303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4313c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Texture1DView::Texture1DView (int numLevels, const ConstPixelBufferAccess* levels) 4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : m_numLevels (numLevels) 4333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_levels (levels) 4343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_numLevels >= 0 && ((m_numLevels == 0) == !m_levels)); 4363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4383c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture1DView::sample (const Sampler& sampler, float s, float lod) const 4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return sampleLevelArray1D(m_levels, m_numLevels, sampler, s, 0 /* depth */, lod); 4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture1DView::sampleOffset (const Sampler& sampler, float s, float lod, deInt32 offset) const 4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return sampleLevelArray1DOffset(m_levels, m_numLevels, sampler, s, lod, IVec2(offset, 0)); 4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4483c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline float Texture1DView::sampleCompare (const Sampler& sampler, float ref, float s, float lod) const 4493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return sampleLevelArray1DCompare(m_levels, m_numLevels, sampler, ref, s, lod, IVec2(0, 0)); 4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline float Texture1DView::sampleCompareOffset (const Sampler& sampler, float ref, float s, float lod, deInt32 offset) const 4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return sampleLevelArray1DCompare(m_levels, m_numLevels, sampler, ref, s, lod, IVec2(offset, 0)); 4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief 2D Texture View 4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Texture2DView 4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture2DView (int numLevels, const ConstPixelBufferAccess* levels); 4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getNumLevels (void) const { return m_numLevels; } 4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getWidth (void) const { return m_numLevels > 0 ? m_levels[0].getWidth() : 0; } 4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getHeight (void) const { return m_numLevels > 0 ? m_levels[0].getHeight() : 0; } 4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess& getLevel (int ndx) const { DE_ASSERT(de::inBounds(ndx, 0, m_numLevels)); return m_levels[ndx]; } 4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess* getLevels (void) const { return m_levels; } 4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample (const Sampler& sampler, float s, float t, float lod) const; 4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sampleOffset (const Sampler& sampler, float s, float t, float lod, const IVec2& offset) const; 4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompare (const Sampler& sampler, float ref, float s, float t, float lod) const; 4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompareOffset (const Sampler& sampler, float ref, float s, float t, float lod, const IVec2& offset) const; 4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 gatherOffsets (const Sampler& sampler, float s, float t, int componentNdx, const IVec2 (&offsets)[4]) const; 4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 gatherOffsetsCompare(const Sampler& sampler, float ref, float s, float t, const IVec2 (&offsets)[4]) const; 4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_numLevels; 4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess* m_levels; 4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Texture2DView::Texture2DView (int numLevels, const ConstPixelBufferAccess* levels) 4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : m_numLevels (numLevels) 4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_levels (levels) 4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_numLevels >= 0 && ((m_numLevels == 0) == !m_levels)); 4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture2DView::sample (const Sampler& sampler, float s, float t, float lod) const 4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return sampleLevelArray2D(m_levels, m_numLevels, sampler, s, t, 0 /* depth */, lod); 4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture2DView::sampleOffset (const Sampler& sampler, float s, float t, float lod, const IVec2& offset) const 4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return sampleLevelArray2DOffset(m_levels, m_numLevels, sampler, s, t, lod, IVec3(offset.x(), offset.y(), 0)); 5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline float Texture2DView::sampleCompare (const Sampler& sampler, float ref, float s, float t, float lod) const 5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return sampleLevelArray2DCompare(m_levels, m_numLevels, sampler, ref, s, t, lod, IVec3(0, 0, 0)); 5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5073c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline float Texture2DView::sampleCompareOffset (const Sampler& sampler, float ref, float s, float t, float lod, const IVec2& offset) const 5083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return sampleLevelArray2DCompare(m_levels, m_numLevels, sampler, ref, s, t, lod, IVec3(offset.x(), offset.y(), 0)); 5103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5123c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture2DView::gatherOffsets (const Sampler& sampler, float s, float t, int componentNdx, const IVec2 (&offsets)[4]) const 5133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return gatherArray2DOffsets(m_levels[0], sampler, s, t, 0, componentNdx, offsets); 5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture2DView::gatherOffsetsCompare (const Sampler& sampler, float ref, float s, float t, const IVec2 (&offsets)[4]) const 5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return gatherArray2DOffsetsCompare(m_levels[0], sampler, ref, s, t, 0, offsets); 5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Base class for textures that have single mip-map pyramid 5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureLevelPyramid 5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureLevelPyramid (const TextureFormat& format, int numLevels); 5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureLevelPyramid (const TextureLevelPyramid& other); 5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~TextureLevelPyramid(void); 5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const TextureFormat& getFormat (void) const { return m_format; } 5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool isLevelEmpty (int levelNdx) const { return m_data[levelNdx].empty(); } 5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getNumLevels (void) const { return (int)m_access.size(); } 5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess& getLevel (int ndx) const { return m_access[ndx]; } 5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const PixelBufferAccess& getLevel (int ndx) { return m_access[ndx]; } 5383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess* getLevels (void) const { return &m_access[0]; } 5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const PixelBufferAccess* getLevels (void) { return &m_access[0]; } 5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void allocLevel (int levelNdx, int width, int height, int depth); 5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void clearLevel (int levelNdx); 5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureLevelPyramid& operator= (const TextureLevelPyramid& other); 5463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry typedef de::ArrayBuffer<deUint8> LevelData; 5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureFormat m_format; 5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<LevelData> m_data; 5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<PixelBufferAccess> m_access; 5533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 5543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief 1D Texture reference implementation 5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Texture1D : private TextureLevelPyramid 5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture1D (const TextureFormat& format, int width); 5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture1D (const Texture1D& other); 5633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~Texture1D (void); 5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getWidth (void) const { return m_width; } 5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const Texture1DView& getView (void) const { return m_view; } 5673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void allocLevel (int levelNdx); 5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Sampling 5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample (const Sampler& sampler, float s, float lod) const; 5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sampleOffset (const Sampler& sampler, float s, float lod, deInt32 offset) const; 5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getFormat; 5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getNumLevels; 5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getLevel; 5773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::clearLevel; 5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::isLevelEmpty; 5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture1D& operator= (const Texture1D& other); 5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operator Texture1DView (void) const { return m_view; } 5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_width; 5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture1DView m_view; 5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture1D::sample (const Sampler& sampler, float s, float lod) const 5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sample(sampler, s, lod); 5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture1D::sampleOffset (const Sampler& sampler, float s, float lod, deInt32 offset) const 5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sampleOffset(sampler, s, lod, offset); 5973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief 2D Texture reference implementation 6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 6023c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Texture2D : private TextureLevelPyramid 6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture2D (const TextureFormat& format, int width, int height); 6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture2D (const Texture2D& other); 6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~Texture2D (void); 6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getWidth (void) const { return m_width; } 6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getHeight (void) const { return m_height; } 6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const Texture2DView& getView (void) const { return m_view; } 6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void allocLevel (int levelNdx); 6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Sampling 6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample (const Sampler& sampler, float s, float t, float lod) const; 6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sampleOffset (const Sampler& sampler, float s, float t, float lod, const IVec2& offset) const; 6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompare (const Sampler& sampler, float ref, float s, float t, float lod) const; 6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompareOffset (const Sampler& sampler, float ref, float s, float t, float lod, const IVec2& offset) const; 6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 gatherOffsets (const Sampler& sampler, float s, float t, int componentNdx, const IVec2 (&offsets)[4]) const; 6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 gatherOffsetsCompare(const Sampler& sampler, float ref, float s, float t, const IVec2 (&offsets)[4]) const; 6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getFormat; 6253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getNumLevels; 6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getLevel; 6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::clearLevel; 6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::isLevelEmpty; 6293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture2D& operator= (const Texture2D& other); 6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operator Texture2DView (void) const { return m_view; } 6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_width; 6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_height; 6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture2DView m_view; 6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6403c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture2D::sample (const Sampler& sampler, float s, float t, float lod) const 6413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sample(sampler, s, t, lod); 6433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture2D::sampleOffset (const Sampler& sampler, float s, float t, float lod, const IVec2& offset) const 6463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sampleOffset(sampler, s, t, lod, offset); 6483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6503c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline float Texture2D::sampleCompare (const Sampler& sampler, float ref, float s, float t, float lod) const 6513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sampleCompare(sampler, ref, s, t, lod); 6533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6553c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline float Texture2D::sampleCompareOffset (const Sampler& sampler, float ref, float s, float t, float lod, const IVec2& offset) const 6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sampleCompareOffset(sampler, ref, s, t, lod, offset); 6583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6603c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture2D::gatherOffsets (const Sampler& sampler, float s, float t, int componentNdx, const IVec2 (&offsets)[4]) const 6613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.gatherOffsets(sampler, s, t, componentNdx, offsets); 6633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6653c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture2D::gatherOffsetsCompare (const Sampler& sampler, float ref, float s, float t, const IVec2 (&offsets)[4]) const 6663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.gatherOffsetsCompare(sampler, ref, s, t, offsets); 6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 6713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Cube Map Texture View 6723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 6733c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureCubeView 6743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6753c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 6763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureCubeView (void); 6773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureCubeView (int numLevels, const ConstPixelBufferAccess* const (&levels)[CUBEFACE_LAST]); 6783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getNumLevels (void) const { return m_numLevels; } 6803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getSize (void) const { return m_numLevels > 0 ? m_levels[0][0].getWidth() : 0; } 6813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess& getLevelFace (int ndx, CubeFace face) const { DE_ASSERT(de::inBounds(ndx, 0, m_numLevels)); return m_levels[face][ndx]; } 6823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess* getFaceLevels (CubeFace face) const { return m_levels[face]; } 6833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample (const Sampler& sampler, float s, float t, float p, float lod) const; 6853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompare (const Sampler& sampler, float ref, float s, float t, float r, float lod) const; 6863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 gather (const Sampler& sampler, float s, float t, float r, int componentNdx) const; 6883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 gatherCompare (const Sampler& sampler, float ref, float s, float t, float r) const; 6893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6903c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 6913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_numLevels; 6923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess* m_levels[CUBEFACE_LAST]; 6933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 6943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 6963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Cube Map Texture reference implementation 6973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 6983c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureCube 6993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7003c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 7013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureCube (const TextureFormat& format, int size); 7023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureCube (const TextureCube& other); 7033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~TextureCube (void); 7043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const TextureFormat& getFormat (void) const { return m_format; } 7063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getSize (void) const { return m_size; } 7073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getNumLevels (void) const { return (int)m_access[0].size(); } 7093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess& getLevelFace (int ndx, CubeFace face) const { return m_access[face][ndx]; } 7103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const PixelBufferAccess& getLevelFace (int ndx, CubeFace face) { return m_access[face][ndx]; } 7113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void allocLevel (CubeFace face, int levelNdx); 7133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void clearLevel (CubeFace face, int levelNdx); 7143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool isLevelEmpty (CubeFace face, int levelNdx) const { return m_data[face][levelNdx].empty(); } 7153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample (const Sampler& sampler, float s, float t, float p, float lod) const; 7173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompare (const Sampler& sampler, float ref, float s, float t, float r, float lod) const; 7183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 gather (const Sampler& sampler, float s, float t, float r, int componentNdx) const; 7203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 gatherCompare (const Sampler& sampler, float ref, float s, float t, float r) const; 7213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureCube& operator= (const TextureCube& other); 7233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operator TextureCubeView (void) const { return m_view; } 7253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7263c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 7273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry typedef de::ArrayBuffer<deUint8> LevelData; 7283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureFormat m_format; 7303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_size; 7313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<LevelData> m_data[CUBEFACE_LAST]; 7323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<PixelBufferAccess> m_access[CUBEFACE_LAST]; 7333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureCubeView m_view; 7343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 7353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7363c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 TextureCube::sample (const Sampler& sampler, float s, float t, float p, float lod) const 7373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sample(sampler, s, t, p, lod); 7393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7413c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline float TextureCube::sampleCompare (const Sampler& sampler, float ref, float s, float t, float r, float lod) const 7423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sampleCompare(sampler, ref, s, t, r, lod); 7443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7463c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 TextureCube::gather (const Sampler& sampler, float s, float t, float r, int componentNdx) const 7473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.gather(sampler, s, t, r, componentNdx); 7493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 TextureCube::gatherCompare (const Sampler& sampler, float ref, float s, float t, float r) const 7523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.gatherCompare(sampler, ref, s, t, r); 7543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 7573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief 1D Array Texture View 7583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 7593c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Texture1DArrayView 7603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7613c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 7623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture1DArrayView (int numLevels, const ConstPixelBufferAccess* levels); 7633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getWidth (void) const { return m_numLevels > 0 ? m_levels[0].getWidth() : 0; } 7653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getNumLayers (void) const { return m_numLevels > 0 ? m_levels[0].getHeight() : 0; } 7663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getNumLevels (void) const { return m_numLevels; } 7673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess& getLevel (int ndx) const { DE_ASSERT(de::inBounds(ndx, 0, m_numLevels)); return m_levels[ndx]; } 7683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess* getLevels (void) const { return m_levels; } 7693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample (const Sampler& sampler, float s, float t, float lod) const; 7713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sampleOffset (const Sampler& sampler, float s, float t, float lod, deInt32 offset) const; 7723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompare (const Sampler& sampler, float ref, float s, float t, float lod) const; 7733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompareOffset (const Sampler& sampler, float ref, float s, float t, float lod, deInt32 offset) const; 7743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7753c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 7763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int selectLayer (float r) const; 7773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_numLevels; 7793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess* m_levels; 7803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 7813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 7833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief 2D Array Texture View 7843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 7853c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Texture2DArrayView 7863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7873c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 7883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture2DArrayView (int numLevels, const ConstPixelBufferAccess* levels); 7893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getWidth (void) const { return m_numLevels > 0 ? m_levels[0].getWidth() : 0; } 7913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getHeight (void) const { return m_numLevels > 0 ? m_levels[0].getHeight() : 0; } 7923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getNumLayers (void) const { return m_numLevels > 0 ? m_levels[0].getDepth() : 0; } 7933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getNumLevels (void) const { return m_numLevels; } 7943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess& getLevel (int ndx) const { DE_ASSERT(de::inBounds(ndx, 0, m_numLevels)); return m_levels[ndx]; } 7953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess* getLevels (void) const { return m_levels; } 7963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample (const Sampler& sampler, float s, float t, float r, float lod) const; 7983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sampleOffset (const Sampler& sampler, float s, float t, float r, float lod, const IVec2& offset) const; 7993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompare (const Sampler& sampler, float ref, float s, float t, float r, float lod) const; 8003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompareOffset (const Sampler& sampler, float ref, float s, float t, float r, float lod, const IVec2& offset) const; 8013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 gatherOffsets (const Sampler& sampler, float s, float t, float r, int componentNdx, const IVec2 (&offsets)[4]) const; 8033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 gatherOffsetsCompare(const Sampler& sampler, float ref, float s, float t, float r, const IVec2 (&offsets)[4]) const; 8043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8053c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 8063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int selectLayer (float r) const; 8073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_numLevels; 8093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess* m_levels; 8103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 8113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 8133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief 1D Array Texture reference implementation 8143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 8153c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Texture1DArray : private TextureLevelPyramid 8163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8173c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 8183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture1DArray (const TextureFormat& format, int width, int numLayers); 8193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture1DArray (const Texture1DArray& other); 8203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~Texture1DArray (void); 8213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getWidth (void) const { return m_width; } 8233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getNumLayers (void) const { return m_numLayers; } 8243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void allocLevel (int levelNdx); 8263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getFormat; 8283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getNumLevels; 8293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getLevel; 8303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::clearLevel; 8313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::isLevelEmpty; 8323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample (const Sampler& sampler, float s, float t, float lod) const; 8343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sampleOffset (const Sampler& sampler, float s, float t, float lod, deInt32 offset) const; 8353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompare (const Sampler& sampler, float ref, float s, float t, float lod) const; 8363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompareOffset (const Sampler& sampler, float ref, float s, float t, float lod, deInt32 offset) const; 8373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture1DArray& operator= (const Texture1DArray& other); 8393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operator Texture1DArrayView (void) const { return m_view; } 8413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 8433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_width; 8443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_numLayers; 8453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture1DArrayView m_view; 8463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 8473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8483c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture1DArray::sample (const Sampler& sampler, float s, float t, float lod) const 8493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sample(sampler, s, t, lod); 8513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8533c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture1DArray::sampleOffset (const Sampler& sampler, float s, float t, float lod, deInt32 offset) const 8543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sampleOffset(sampler, s, t, lod, offset); 8563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8583c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline float Texture1DArray::sampleCompare (const Sampler& sampler, float ref, float s, float t, float lod) const 8593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sampleCompare(sampler, ref, s, t, lod); 8613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8633c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline float Texture1DArray::sampleCompareOffset (const Sampler& sampler, float ref, float s, float t, float lod, deInt32 offset) const 8643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sampleCompareOffset(sampler, ref, s, t, lod, offset); 8663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 8693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief 2D Array Texture reference implementation 8703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Texture2DArray : private TextureLevelPyramid 8723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture2DArray (const TextureFormat& format, int width, int height, int numLayers); 8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture2DArray (const Texture2DArray& other); 8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~Texture2DArray (void); 8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getWidth (void) const { return m_width; } 8793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getHeight (void) const { return m_height; } 8803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getNumLayers (void) const { return m_numLayers; } 8813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void allocLevel (int levelNdx); 8833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getFormat; 8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getNumLevels; 8863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getLevel; 8873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::clearLevel; 8883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::isLevelEmpty; 8893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample (const Sampler& sampler, float s, float t, float r, float lod) const; 8913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sampleOffset (const Sampler& sampler, float s, float t, float r, float lod, const IVec2& offset) const; 8923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompare (const Sampler& sampler, float ref, float s, float t, float r, float lod) const; 8933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompareOffset (const Sampler& sampler, float ref, float s, float t, float r, float lod, const IVec2& offset) const; 8943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 gatherOffsets (const Sampler& sampler, float s, float t, float r, int componentNdx, const IVec2 (&offsets)[4]) const; 8963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 gatherOffsetsCompare(const Sampler& sampler, float ref, float s, float t, float r, const IVec2 (&offsets)[4]) const; 8973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture2DArray& operator= (const Texture2DArray& other); 8993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operator Texture2DArrayView (void) const { return m_view; } 9013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9023c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 9033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_width; 9043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_height; 9053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_numLayers; 9063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture2DArrayView m_view; 9073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9093c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture2DArray::sample (const Sampler& sampler, float s, float t, float r, float lod) const 9103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sample(sampler, s, t, r, lod); 9123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9143c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture2DArray::sampleOffset (const Sampler& sampler, float s, float t, float r, float lod, const IVec2& offset) const 9153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sampleOffset(sampler, s, t, r, lod, offset); 9173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline float Texture2DArray::sampleCompare (const Sampler& sampler, float ref, float s, float t, float r, float lod) const 9203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sampleCompare(sampler, ref, s, t, r, lod); 9223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9243c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline float Texture2DArray::sampleCompareOffset (const Sampler& sampler, float ref, float s, float t, float r, float lod, const IVec2& offset) const 9253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sampleCompareOffset(sampler, ref, s, t, r, lod, offset); 9273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9293c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture2DArray::gatherOffsets (const Sampler& sampler, float s, float t, float r, int componentNdx, const IVec2 (&offsets)[4]) const 9303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.gatherOffsets(sampler, s, t, r, componentNdx, offsets); 9323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9343c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture2DArray::gatherOffsetsCompare (const Sampler& sampler, float ref, float s, float t, float r, const IVec2 (&offsets)[4]) const 9353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.gatherOffsetsCompare(sampler, ref, s, t, r, offsets); 9373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 9403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief 3D Texture View 9413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 9423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Texture3DView 9433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9443c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 9453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture3DView (int numLevels, const ConstPixelBufferAccess* levels); 9463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getWidth (void) const { return m_numLevels > 0 ? m_levels[0].getWidth() : 0; } 9483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getHeight (void) const { return m_numLevels > 0 ? m_levels[0].getHeight() : 0; } 9493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getDepth (void) const { return m_numLevels > 0 ? m_levels[0].getDepth() : 0; } 9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getNumLevels (void) const { return m_numLevels; } 9513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess& getLevel (int ndx) const { DE_ASSERT(de::inBounds(ndx, 0, m_numLevels)); return m_levels[ndx]; } 9523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess* getLevels (void) const { return m_levels; } 9533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample (const Sampler& sampler, float s, float t, float r, float lod) const; 9553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sampleOffset (const Sampler& sampler, float s, float t, float r, float lod, const IVec3& offset) const; 9563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9573c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_numLevels; 9593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess* m_levels; 9603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 9613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9623c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture3DView::sample (const Sampler& sampler, float s, float t, float r, float lod) const 9633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return sampleLevelArray3D(m_levels, m_numLevels, sampler, s, t, r, lod); 9653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9673c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture3DView::sampleOffset (const Sampler& sampler, float s, float t, float r, float lod, const IVec3& offset) const 9683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return sampleLevelArray3DOffset(m_levels, m_numLevels, sampler, s, t, r, lod, offset); 9703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 9733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief 3D Texture reference implementation 9743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 9753c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Texture3D : private TextureLevelPyramid 9763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9773c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 9783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture3D (const TextureFormat& format, int width, int height, int depth); 9793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture3D (const Texture3D& other); 9803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~Texture3D (void); 9813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getWidth (void) const { return m_width; } 9833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getHeight (void) const { return m_height; } 9843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getDepth (void) const { return m_depth; } 9853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void allocLevel (int levelNdx); 9873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getFormat; 9893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getNumLevels; 9903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getLevel; 9913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::clearLevel; 9923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::isLevelEmpty; 9933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample (const Sampler& sampler, float s, float t, float r, float lod) const; 9953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sampleOffset (const Sampler& sampler, float s, float t, float r, float lod, const IVec3& offset) const; 9963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture3D& operator= (const Texture3D& other); 9983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operator Texture3DView (void) const { return m_view; } 10003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10013c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 10023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_width; 10033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_height; 10043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_depth; 10053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture3DView m_view; 10063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10083c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture3D::sample (const Sampler& sampler, float s, float t, float r, float lod) const 10093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sample(sampler, s, t, r, lod); 10113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10133c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 Texture3D::sampleOffset (const Sampler& sampler, float s, float t, float r, float lod, const IVec3& offset) const 10143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sampleOffset(sampler, s, t, r, lod, offset); 10163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 10193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Cube Map Array Texture View 10203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 10213c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureCubeArrayView 10223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10233c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 10243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureCubeArrayView (int numLevels, const ConstPixelBufferAccess* levels); 10253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10268852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry int getSize (void) const { return m_numLevels > 0 ? m_levels[0].getWidth() : 0; } 10278852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry int getDepth (void) const { return m_numLevels > 0 ? m_levels[0].getDepth() : 0; } 10288852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry int getNumLayers (void) const { return getDepth() / 6; } 10293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getNumLevels (void) const { return m_numLevels; } 10303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess& getLevel (int ndx) const { DE_ASSERT(de::inBounds(ndx, 0, m_numLevels)); return m_levels[ndx]; } 10313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess* getLevels (void) const { return m_levels; } 10323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample (const Sampler& sampler, float s, float t, float r, float q, float lod) const; 10343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sampleOffset (const Sampler& sampler, float s, float t, float r, float q, float lod, const IVec2& offset) const; 10353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompare (const Sampler& sampler, float ref, float s, float t, float r, float q, float lod) const; 10363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompareOffset (const Sampler& sampler, float ref, float s, float t, float r, float q, float lod, const IVec2& offset) const; 10373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10383c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 10398852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry int selectLayer (float q) const; 10403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_numLevels; 10423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const ConstPixelBufferAccess* m_levels; 10433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 10463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Cube Map Array Texture reference implementation 10473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 10483c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureCubeArray : private TextureLevelPyramid 10493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10503c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 10518852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry TextureCubeArray (const TextureFormat& format, int size, int depth); 10523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureCubeArray (const TextureCubeArray& other); 10533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~TextureCubeArray (void); 10543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10558852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry int getSize (void) const { return m_size; } 10568852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry int getDepth (void) const { return m_depth; } 10573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void allocLevel (int levelNdx); 10593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getFormat; 10613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getNumLevels; 10623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::getLevel; 10633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::clearLevel; 10643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using TextureLevelPyramid::isLevelEmpty; 10653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sample (const Sampler& sampler, float s, float t, float r, float q, float lod) const; 10673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Vec4 sampleOffset (const Sampler& sampler, float s, float t, float r, float q, float lod, const IVec2& offset) const; 10683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompare (const Sampler& sampler, float ref, float s, float t, float r, float q, float lod) const; 10693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float sampleCompareOffset (const Sampler& sampler, float ref, float s, float t, float r, float q, float lod, const IVec2& offset) const; 10703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureCubeArray& operator= (const TextureCubeArray& other); 10723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operator TextureCubeArrayView (void) const { return m_view; } 10743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10753c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 10763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_size; 10778852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry int m_depth; 10783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureCubeArrayView m_view; 10793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10813c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 TextureCubeArray::sample (const Sampler& sampler, float s, float t, float r, float q, float lod) const 10823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sample(sampler, s, t, r, q, lod); 10843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10863c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline Vec4 TextureCubeArray::sampleOffset (const Sampler& sampler, float s, float t, float r, float q, float lod, const IVec2& offset) const 10873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sampleOffset(sampler, s, t, r, q, lod, offset); 10893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10913c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline float TextureCubeArray::sampleCompare (const Sampler& sampler, float ref, float s, float t, float r, float q, float lod) const 10923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sampleCompare(sampler, ref, s, t, r, q, lod); 10943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10963c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline float TextureCubeArray::sampleCompareOffset (const Sampler& sampler, float ref, float s, float t, float r, float q, float lod, const IVec2& offset) const 10973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_view.sampleCompareOffset(sampler, ref, s, t, r, q, lod, offset); 10993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Stream operators. 11023c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystd::ostream& operator<< (std::ostream& str, TextureFormat::ChannelOrder order); 11033c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystd::ostream& operator<< (std::ostream& str, TextureFormat::ChannelType type); 11043c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystd::ostream& operator<< (std::ostream& str, TextureFormat format); 11053c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystd::ostream& operator<< (std::ostream& str, CubeFace face); 11063c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystd::ostream& operator<< (std::ostream& str, const ConstPixelBufferAccess& access); 11073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // tcu 11093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif // _TCUTEXTURE_HPP 1111