00001 // 00002 // Redistribution and use in source and binary forms, with or without 00003 // modification, are permitted provided that the following conditions 00004 // are met: 00005 // * Redistributions of source code must retain the above copyright 00006 // notice, this list of conditions and the following disclaimer. 00007 // * Redistributions in binary form must reproduce the above copyright 00008 // notice, this list of conditions and the following disclaimer in the 00009 // documentation and/or other materials provided with the distribution. 00010 // * Neither the name of NVIDIA CORPORATION nor the names of its 00011 // contributors may be used to endorse or promote products derived 00012 // from this software without specific prior written permission. 00013 // 00014 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 00015 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00016 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00017 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 00018 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00019 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00020 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00021 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 00022 // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00023 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00024 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00025 // 00026 // Copyright (c) 2018 NVIDIA Corporation. All rights reserved. 00027 00028 00029 00030 #ifndef RENDER_BUFFER_DATA_H 00031 #define RENDER_BUFFER_DATA_H 00032 00038 #include "ApexUsingNamespace.h" 00039 #include "RenderDataFormat.h" 00040 #include "ApexSDK.h" 00041 00042 namespace nvidia 00043 { 00044 namespace apex 00045 { 00046 00047 PX_PUSH_PACK_DEFAULT 00048 00052 class RenderSemanticData 00053 { 00054 public: 00055 const void* data; 00056 uint32_t stride; 00057 void* ident; 00058 RenderDataFormat::Enum format; 00059 00065 RenderDataFormat::Enum srcFormat; 00071 bool serialize; 00072 public: 00073 PX_INLINE RenderSemanticData(void) 00074 { 00075 data = 0; 00076 stride = 0; 00077 ident = 0; 00078 format = RenderDataFormat::UNSPECIFIED; 00079 srcFormat = RenderDataFormat::UNSPECIFIED; 00080 serialize = false; 00081 } 00082 }; 00083 00087 template < class SemanticClass, class SemanticEnum> 00088 class RenderBufferData 00089 { 00090 public: 00091 PX_INLINE RenderBufferData(void) 00092 { 00093 m_numCustomSemantics = 0; 00094 m_customSemanticData = 0; 00095 } 00096 00100 PX_INLINE const RenderSemanticData& getSemanticData(SemanticEnum semantic) const 00101 { 00102 PX_ASSERT(semantic < SemanticClass::NUM_SEMANTICS); 00103 return m_semanticData[semantic]; 00104 } 00105 00109 PX_INLINE uint32_t getNumCustomSemantics() const 00110 { 00111 return m_numCustomSemantics; 00112 } 00113 00117 PX_INLINE const RenderSemanticData& getCustomSemanticData(uint32_t index) const 00118 { 00119 PX_ASSERT(index < m_numCustomSemantics); 00120 return m_customSemanticData[index]; 00121 } 00122 00129 PX_INLINE void setCustomSemanticData(RenderSemanticData* data, uint32_t num) 00130 { 00131 m_numCustomSemantics = num; 00132 m_customSemanticData = data; 00133 } 00134 00138 PX_INLINE void setSemanticData(SemanticEnum semantic, const void* data, uint32_t stride, RenderDataFormat::Enum format, RenderDataFormat::Enum srcFormat = RenderDataFormat::UNSPECIFIED) 00139 { 00140 PX_ASSERT(semantic < SemanticClass::NUM_SEMANTICS); 00141 RenderSemanticData& sd = m_semanticData[semantic]; 00142 sd.data = data; 00143 sd.stride = stride; 00144 sd.format = format; 00145 sd.srcFormat = srcFormat == RenderDataFormat::UNSPECIFIED ? format : srcFormat; 00146 } 00147 00148 private: 00149 RenderSemanticData m_semanticData[SemanticClass::NUM_SEMANTICS]; 00150 uint32_t m_numCustomSemantics; 00151 RenderSemanticData* m_customSemanticData; 00152 }; 00153 00157 class ModuleSpecificRenderBufferData 00158 { 00159 public: 00160 AuthObjTypeID moduleId; 00161 RenderSemanticData* moduleSpecificSemanticData; 00162 uint32_t numModuleSpecificSemantics; 00163 00164 public: 00165 PX_INLINE ModuleSpecificRenderBufferData(void) 00166 { 00167 moduleId = 0; 00168 moduleSpecificSemanticData = 0; 00169 numModuleSpecificSemantics = 0; 00170 } 00171 }; 00172 00173 PX_POP_PACK 00174 00175 } 00176 } // end namespace nvidia::apex 00177 00178 #endif // RENDER_BUFFER_DATA_H