summaryrefslogtreecommitdiffstats
path: root/RenderScript
diff options
context:
space:
mode:
Diffstat (limited to 'RenderScript')
-rw-r--r--RenderScript/src/BufferParser.cpp57
-rw-r--r--RenderScript/src/BufferViewParser.cpp48
-rw-r--r--RenderScript/src/DrawAttribsParser.cpp1
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 );