1 #ifndef _RRMULTISAMPLEPIXELBUFFERACCESS_HPP 2 #define _RRMULTISAMPLEPIXELBUFFERACCESS_HPP 3 /*------------------------------------------------------------------------- 4 * drawElements Quality Program Reference Renderer 5 * ----------------------------------------------- 6 * 7 * Copyright 2014 The Android Open Source Project 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 *//*! 22 * \file 23 * \brief Multisampled pixel buffer access 24 *//*--------------------------------------------------------------------*/ 25 26 #include "rrDefs.hpp" 27 #include "tcuTexture.hpp" 28 29 namespace rr 30 { 31 32 /*--------------------------------------------------------------------*//*! 33 * \brief Read-write pixel data access to multisampled buffers. 34 * 35 * Multisampled data access follows the multisampled indexing convention. 36 * 37 * Prevents accidental usage of non-multisampled buffer as multisampled 38 * with PixelBufferAccess. 39 *//*--------------------------------------------------------------------*/ 40 class MultisamplePixelBufferAccess 41 { 42 MultisamplePixelBufferAccess(const tcu::PixelBufferAccess &rawAccess); 43 44 public: 45 MultisamplePixelBufferAccess(void); 46 raw(void) const47 inline const tcu::PixelBufferAccess &raw(void) const 48 { 49 return m_access; 50 } getNumSamples(void) const51 inline int getNumSamples(void) const 52 { 53 return raw().getWidth(); 54 } 55 56 const tcu::PixelBufferAccess toSinglesampleAccess(void) const; 57 58 static MultisamplePixelBufferAccess fromSinglesampleAccess(const tcu::PixelBufferAccess &singlesampledAccess); 59 static MultisamplePixelBufferAccess fromMultisampleAccess(const tcu::PixelBufferAccess &multisampledAccess); 60 61 private: 62 tcu::PixelBufferAccess m_access; 63 } DE_WARN_UNUSED_TYPE; 64 65 /*--------------------------------------------------------------------*//*! 66 * \brief Read-only pixel data access to multisampled buffers. 67 * 68 * Multisampled data access follows the multisampled indexing convention. 69 * 70 * Prevents accidental usage of non-multisampled buffer as multisampled 71 * with PixelBufferAccess. 72 *//*--------------------------------------------------------------------*/ 73 class MultisampleConstPixelBufferAccess 74 { 75 MultisampleConstPixelBufferAccess(const tcu::ConstPixelBufferAccess &rawAccess); 76 77 public: 78 MultisampleConstPixelBufferAccess(const rr::MultisamplePixelBufferAccess &msAccess); 79 MultisampleConstPixelBufferAccess(void); 80 raw(void) const81 inline const tcu::ConstPixelBufferAccess &raw(void) const 82 { 83 return m_access; 84 } getNumSamples(void) const85 inline int getNumSamples(void) const 86 { 87 return raw().getWidth(); 88 } 89 90 const tcu::ConstPixelBufferAccess toSinglesampleAccess(void) const; 91 92 static MultisampleConstPixelBufferAccess fromSinglesampleAccess( 93 const tcu::ConstPixelBufferAccess &singlesampledAccess); 94 static MultisampleConstPixelBufferAccess fromMultisampleAccess( 95 const tcu::ConstPixelBufferAccess &multisampledAccess); 96 97 private: 98 tcu::ConstPixelBufferAccess m_access; 99 } DE_WARN_UNUSED_TYPE; 100 101 // Multisampled versions of tcu-utils 102 103 MultisamplePixelBufferAccess getSubregion(const MultisamplePixelBufferAccess &access, int x, int y, int width, 104 int height); 105 MultisampleConstPixelBufferAccess getSubregion(const MultisampleConstPixelBufferAccess &access, int x, int y, int width, 106 int height); 107 108 void resolveMultisampleColorBuffer(const tcu::PixelBufferAccess &dst, const MultisampleConstPixelBufferAccess &src); 109 void resolveMultisampleDepthBuffer(const tcu::PixelBufferAccess &dst, const MultisampleConstPixelBufferAccess &src); 110 void resolveMultisampleStencilBuffer(const tcu::PixelBufferAccess &dst, const MultisampleConstPixelBufferAccess &src); 111 void resolveMultisampleBuffer(const tcu::PixelBufferAccess &dst, const MultisampleConstPixelBufferAccess &src); 112 tcu::Vec4 resolveMultisamplePixel(const MultisampleConstPixelBufferAccess &access, int x, int y); 113 114 void clear(const MultisamplePixelBufferAccess &access, const tcu::Vec4 &color); 115 void clear(const MultisamplePixelBufferAccess &access, const tcu::IVec4 &color); 116 void clearDepth(const MultisamplePixelBufferAccess &access, float depth); 117 void clearStencil(const MultisamplePixelBufferAccess &access, int stencil); 118 119 } // namespace rr 120 121 #endif // _RRMULTISAMPLEPIXELBUFFERACCESS_HPP 122