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 | |
| parent | Updated readme (diff) | |
| download | DiligentTools-3147bcad48e72863c1a15e23ffb3e9754527fccb.tar.gz DiligentTools-3147bcad48e72863c1a15e23ffb3e9754527fccb.zip | |
Updated buffer, buffer view and draw attrib parsers
Diffstat (limited to 'RenderScript')
| -rw-r--r-- | RenderScript/src/BufferParser.cpp | 57 | ||||
| -rw-r--r-- | RenderScript/src/BufferViewParser.cpp | 48 | ||||
| -rw-r--r-- | RenderScript/src/DrawAttribsParser.cpp | 1 |
3 files changed, 52 insertions, 54 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 ) diff --git a/RenderScript/src/BufferViewParser.cpp b/RenderScript/src/BufferViewParser.cpp index cbd7aec..2dae7a2 100644 --- a/RenderScript/src/BufferViewParser.cpp +++ b/RenderScript/src/BufferViewParser.cpp @@ -25,11 +25,41 @@ #include "BufferViewParser.h" #include "BufferParser.h" #include "SamplerParser.h" +#include "GraphicsAccessories.h" namespace Diligent { const Char* BufferViewParser::BufferViewLibName = "BufferView"; + template<> + class MemberBinder<BufferFormat> : public MemberBinderBase + { + public: + MemberBinder( size_t MemberOffset, size_t Dummy ) : + MemberBinderBase( MemberOffset ) + { + DEFINE_ENUM_BINDER( m_Bindings, BufferFormat, ValueType, m_ValueTypeEnumMapping ); + using NumComponentsType = decltype(BufferFormat::NumComponents); + DEFINE_BINDER_EX( m_Bindings, BufferFormat, NumComponents, NumComponentsType, Validator<NumComponentsType>( "Num Components", 1, 4 ) ); + DEFINE_BINDER( m_Bindings, BufferFormat, IsNormalized ); + } + + virtual void GetValue( lua_State *L, const void* pBasePointer ) + { + const auto &BuffFmt = GetMemberByOffest<BufferFormat>( pBasePointer, m_MemberOffset ); + PushLuaTable( L, &BuffFmt, m_Bindings ); + } + + virtual void SetValue( lua_State *L, int Index, void* pBasePointer ) + { + auto &BuffFmt = GetMemberByOffest<BufferFormat>( pBasePointer, m_MemberOffset ); + ParseLuaTable( L, Index, &BuffFmt, m_Bindings ); + } + private: + BindingsMapType m_Bindings; + ValueTypeEnumMapping m_ValueTypeEnumMapping; + }; + BufferViewParser::BufferViewParser( BufferParser *pBufParser, IRenderDevice *pRenderDevice, lua_State *L ) : @@ -48,6 +78,8 @@ namespace Diligent VERIFY( m_ViewTypeEnumMapping.m_Val2StrMap.size() == BUFFER_VIEW_NUM_VIEWS - 1, "Unexpected map size. Did you update BUFFER_VIEW_TYPE enum?" ); DEFINE_ENUM_BINDER( m_Bindings, SBuffViewDescWrapper, ViewType, m_ViewTypeEnumMapping ); + + DEFINE_BINDER_EX( m_Bindings, SBuffViewDescWrapper, Format, BufferFormat, 0 ); DEFINE_BINDER( m_Bindings, SBuffViewDescWrapper, ByteOffset); DEFINE_BINDER( m_Bindings, SBuffViewDescWrapper, ByteWidth); @@ -65,6 +97,22 @@ namespace Diligent auto ppBufferView = reinterpret_cast<IBufferView**>(lua_newuserdata( L, sizeof( IBufferView* ) )); *ppBufferView = nullptr; + + auto& BuffFmt = BufferViewDesc.Format; + const auto& BuffDesc = pBuffer->GetDesc(); + if (BuffFmt.ValueType != VT_UNDEFINED) + { + if (BuffFmt.NumComponents == 0) + SCRIPT_PARSING_ERROR( L, "Number components cannot be 0" ); + auto FmtSize = GetValueSize( BuffFmt.ValueType ) * Uint32{BuffFmt.NumComponents}; + if (BuffDesc.ElementByteStride != FmtSize ) + { + SCRIPT_PARSING_ERROR( L, "Format size (", FmtSize, ") specified by view '", BufferViewDesc.Name,"' does not match the element byte stride (", BuffDesc.ElementByteStride, ") of the buffer '", BuffDesc.Name, "'." ); + } + if (BuffFmt.ValueType == VT_FLOAT32 || BuffFmt.ValueType == VT_FLOAT16) + BuffFmt.IsNormalized = false; + } + pBuffer->CreateView( BufferViewDesc, ppBufferView ); if( *ppBufferView == nullptr ) SCRIPT_PARSING_ERROR(L, "Failed to create buffer view") diff --git a/RenderScript/src/DrawAttribsParser.cpp b/RenderScript/src/DrawAttribsParser.cpp index c620e02..21f0fb3 100644 --- a/RenderScript/src/DrawAttribsParser.cpp +++ b/RenderScript/src/DrawAttribsParser.cpp @@ -45,7 +45,6 @@ namespace Diligent DEFINE_BINDER( m_Bindings, DrawAttribs, IsIndexed ); DEFINE_BINDER( m_Bindings, DrawAttribs, NumInstances ); - DEFINE_BINDER( m_Bindings, DrawAttribs, IsIndirect ); DEFINE_BINDER( m_Bindings, DrawAttribs, BaseVertex ); DEFINE_BINDER( m_Bindings, DrawAttribs, IndirectDrawArgsOffset ); |
