diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2018-08-26 23:07:17 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2018-08-26 23:07:17 +0000 |
| commit | 3147bcad48e72863c1a15e23ffb3e9754527fccb (patch) | |
| tree | b2c9f36aac2bcbdfc74f43a99d5e7ad0ada60295 /RenderScript/src/BufferParser.cpp | |
| parent | Updated readme (diff) | |
| download | DiligentTools-3147bcad48e72863c1a15e23ffb3e9754527fccb.tar.gz DiligentTools-3147bcad48e72863c1a15e23ffb3e9754527fccb.zip | |
Updated buffer, buffer view and draw attrib parsers
Diffstat (limited to 'RenderScript/src/BufferParser.cpp')
| -rw-r--r-- | RenderScript/src/BufferParser.cpp | 57 |
1 files changed, 4 insertions, 53 deletions
diff --git a/RenderScript/src/BufferParser.cpp b/RenderScript/src/BufferParser.cpp index 4b6d489..ebf04d0 100644 --- a/RenderScript/src/BufferParser.cpp +++ b/RenderScript/src/BufferParser.cpp @@ -23,41 +23,11 @@ #include "pch.h" #include "BufferParser.h" -#include "GraphicsAccessories.h" namespace Diligent { const Char* BufferParser::BufferLibName = "Buffer"; - template<> - class MemberBinder<BufferDesc::BufferFormat> : public MemberBinderBase - { - public: - MemberBinder( size_t MemberOffset, size_t Dummy ) : - MemberBinderBase( MemberOffset ) - { - DEFINE_ENUM_BINDER( m_Bindings, BufferDesc::BufferFormat, ValueType, m_ValueTypeEnumMapping ); - using NumComponentsType = decltype(BufferDesc::BufferFormat::NumComponents); - DEFINE_BINDER_EX( m_Bindings, BufferDesc::BufferFormat, NumComponents, NumComponentsType, Validator<NumComponentsType>( "Num Components", 1, 4 ) ); - DEFINE_BINDER( m_Bindings, BufferDesc::BufferFormat, IsNormalized ); - } - - virtual void GetValue( lua_State *L, const void* pBasePointer ) - { - const auto &BuffFmt = GetMemberByOffest<BufferDesc::BufferFormat>( pBasePointer, m_MemberOffset ); - PushLuaTable( L, &BuffFmt, m_Bindings ); - } - - virtual void SetValue( lua_State *L, int Index, void* pBasePointer ) - { - auto &BuffFmt = GetMemberByOffest<BufferDesc::BufferFormat>( pBasePointer, m_MemberOffset ); - ParseLuaTable( L, Index, &BuffFmt, m_Bindings ); - } - private: - BindingsMapType m_Bindings; - ValueTypeEnumMapping m_ValueTypeEnumMapping; - }; - BufferParser::BufferParser( IRenderDevice *pRenderDevice, lua_State *L ) : EngineObjectParserCommon<IBuffer>( pRenderDevice, L, BufferLibName ), m_SetVertexBuffersBinding(this, L, "Context", "SetVertexBuffers", &BufferParser::SetVertexBuffers), @@ -86,14 +56,14 @@ namespace Diligent DEFINE_ENUM_ELEMENT_MAPPING( m_BuffModeEnumMapping, BUFFER_MODE_UNDEFINED ); DEFINE_ENUM_ELEMENT_MAPPING( m_BuffModeEnumMapping, BUFFER_MODE_FORMATTED ); DEFINE_ENUM_ELEMENT_MAPPING( m_BuffModeEnumMapping, BUFFER_MODE_STRUCTURED ); - static_assert(BUFFER_MODE_NUM_MODES == BUFFER_MODE_STRUCTURED + 1, "Not all buffer modes initialized."); + DEFINE_ENUM_ELEMENT_MAPPING( m_BuffModeEnumMapping, BUFFER_MODE_RAW ); + static_assert(BUFFER_MODE_NUM_MODES == BUFFER_MODE_RAW + 1, "Not all buffer modes initialized."); VERIFY( m_BuffModeEnumMapping.m_Str2ValMap.size() == BUFFER_MODE_NUM_MODES, "Unexpected map size. Did you update BUFFER_MODE enum?" ); VERIFY( m_BuffModeEnumMapping.m_Val2StrMap.size() == BUFFER_MODE_NUM_MODES, "Unexpected map size. Did you update BUFFER_MODE enum?" ); DEFINE_ENUM_BINDER( m_Bindings, SBuffDescWrapper, Mode, m_BuffModeEnumMapping ); - DEFINE_BINDER_EX( m_Bindings, SBuffDescWrapper, Format, decltype(BufferDesc::Format), 0 ); DEFINE_BINDER( m_Bindings, SBuffDescWrapper, ElementByteStride ); DEFINE_ENUM_ELEMENT_MAPPING( m_SetVBFlagEnumMapping, SET_VERTEX_BUFFERS_FLAG_RESET ); @@ -107,27 +77,8 @@ namespace Diligent ParseLuaTable( L, 1, &BufferDesc, m_Bindings ); CHECK_LUA_STACK_HEIGHT(); - if( BufferDesc.Mode == BUFFER_MODE_FORMATTED ) - { - auto &BuffFmt = BufferDesc.Format; - if( BuffFmt.ValueType == VT_UNDEFINED || BuffFmt.NumComponents == 0 ) - SCRIPT_PARSING_ERROR( L, "Valid format must be specified for a formatted buffer" ); - auto FmtSize = GetValueSize( BuffFmt.ValueType ) * BuffFmt.NumComponents; - if( BufferDesc.ElementByteStride != 0 ) - { - if( BufferDesc.ElementByteStride != FmtSize ) - SCRIPT_PARSING_ERROR( L, "Size of the specified format (", FmtSize, ") does not match UAV element byte stride (", BufferDesc.ElementByteStride, ")." ); - } - else - { - BufferDesc.ElementByteStride = FmtSize; - } - if( BuffFmt.ValueType == VT_FLOAT32 || BuffFmt.ValueType == VT_FLOAT16 ) - BuffFmt.IsNormalized = false; - } - - if( BufferDesc.Mode == BUFFER_MODE_STRUCTURED && BufferDesc.ElementByteStride == 0 ) - SCRIPT_PARSING_ERROR( L, "UAV element byte stride of a structured buffer cannot be zero" ); + if( (BufferDesc.Mode == BUFFER_MODE_STRUCTURED || BufferDesc.Mode == BUFFER_MODE_FORMATTED) && BufferDesc.ElementByteStride == 0 ) + SCRIPT_PARSING_ERROR( L, "Element byte stride of a structured or formatted buffer cannot be zero" ); if( (BufferDesc.Mode == BUFFER_MODE_FORMATTED || BufferDesc.Mode == BUFFER_MODE_STRUCTURED) && (BufferDesc.uiSizeInBytes % BufferDesc.ElementByteStride) != 0 ) |
