From a294546bcc7c883edd113f2c80d7f278ff8219ed Mon Sep 17 00:00:00 2001 From: Egor Yusov Date: Thu, 29 Nov 2018 22:45:16 -0800 Subject: Improved type safety of flag enums --- RenderScript/include/DeviceContextFuncBindings.h | 4 ++-- RenderScript/include/EnumMappings.h | 4 ++-- RenderScript/include/LuaBindings.h | 8 ++++---- RenderScript/include/TextureParser.h | 4 ++-- RenderScript/src/BufferParser.cpp | 5 +++-- RenderScript/src/DeviceContextFuncBindings.cpp | 8 +++++--- RenderScript/src/EnumMappings.cpp | 1 + RenderScript/src/TextureParser.cpp | 5 +++-- 8 files changed, 22 insertions(+), 17 deletions(-) (limited to 'RenderScript') diff --git a/RenderScript/include/DeviceContextFuncBindings.h b/RenderScript/include/DeviceContextFuncBindings.h index f3bfa98..85fd527 100644 --- a/RenderScript/include/DeviceContextFuncBindings.h +++ b/RenderScript/include/DeviceContextFuncBindings.h @@ -29,7 +29,7 @@ namespace std { - DEFINE_ENUM_HASH( Diligent::COMMIT_SHADER_RESOURCES_FLAG ) + DEFINE_ENUM_HASH( Diligent::COMMIT_SHADER_RESOURCES_FLAGS ) } namespace Diligent @@ -61,7 +61,7 @@ namespace Diligent int TransitionShaderResources( lua_State * ); ClassMethodCaller m_TransitionShaderResourcesBinding; - EnumMapping m_CommitShaderResFlagsEnumMapping; + EnumMapping m_CommitShaderResFlagsEnumMapping; String m_TexViewMetatableName; String m_ShaderResBindingMetatableName; diff --git a/RenderScript/include/EnumMappings.h b/RenderScript/include/EnumMappings.h index 5e0231e..db0b699 100644 --- a/RenderScript/include/EnumMappings.h +++ b/RenderScript/include/EnumMappings.h @@ -43,7 +43,7 @@ namespace std // Explicit namespace declaraion is necesseary to avoid // name conflicts when building for windows store DEFINE_ENUM_HASH( Diligent::BIND_FLAGS ) - DEFINE_ENUM_HASH( Diligent::CPU_ACCESS_FLAG ) + DEFINE_ENUM_HASH( Diligent::CPU_ACCESS_FLAGS ) DEFINE_ENUM_HASH( Diligent::COMPARISON_FUNCTION ) DEFINE_ENUM_HASH( Diligent::BIND_SHADER_RESOURCES_FLAGS ) DEFINE_ENUM_HASH( Diligent::SHADER_TYPE ) @@ -65,7 +65,7 @@ namespace Diligent }; #define DEFINE_ENUM_ELEMENT_MAPPING(EnumMapping, Elem) EnumMapping.AddMapping(#Elem, Elem) - class CpuAccessFlagEnumMapping : public EnumMapping < Diligent::CPU_ACCESS_FLAG > + class CpuAccessFlagEnumMapping : public EnumMapping < Diligent::CPU_ACCESS_FLAGS > { public: CpuAccessFlagEnumMapping(); diff --git a/RenderScript/include/LuaBindings.h b/RenderScript/include/LuaBindings.h index e43b9a3..a09e1d0 100644 --- a/RenderScript/include/LuaBindings.h +++ b/RenderScript/include/LuaBindings.h @@ -461,7 +461,7 @@ namespace Diligent BindingsMap.insert( std::make_pair( #Member, std::unique_ptr(pNewBinder) ) ); \ }while(false) - template< typename EnumType, typename FlagsType = Uint32 > + template< typename EnumType, typename FlagsType = std::underlying_type::type > class FlagsLoader : public MemberBinderBase { public: @@ -478,7 +478,7 @@ namespace Diligent int ArrayInd = 1; for( auto it = m_EnumMapping.m_Val2StrMap.begin(); it != m_EnumMapping.m_Val2StrMap.end(); ++it ) { - if( static_cast(Flags & it->first) == it->first ) + if( it->first != 0 && static_cast(Flags & it->first) == it->first || Flags == 0 && it->first == 0) { lua_pushnumber( L, ArrayInd ); // -0 | +1 -> +1 PushValue( L, it->second ); // -0 | +1 -> +1 @@ -490,7 +490,7 @@ namespace Diligent virtual void SetValue( lua_State *L, int Index, void* pBasePointer ) { - FlagsType Flags = 0; + FlagsType Flags = static_cast(0); if( lua_isnumber( L, Index ) ) { Flags = static_cast( ReadValueFromLua( L, Index ) ); @@ -528,7 +528,7 @@ namespace Diligent { String AllowableValues = GetEnumMappingsString( m_EnumMapping ); SCRIPT_PARSING_ERROR( L, "Unknown flag (\"", CurrFlagName, "\") provided for parameter ", m_MemberName, ". Only the following flags are allowed:\n", AllowableValues ); - return 0; + return static_cast(0); } } diff --git a/RenderScript/include/TextureParser.h b/RenderScript/include/TextureParser.h index c35e3dd..0e0e542 100644 --- a/RenderScript/include/TextureParser.h +++ b/RenderScript/include/TextureParser.h @@ -30,7 +30,7 @@ namespace std { - DEFINE_ENUM_HASH( Diligent::MISC_TEXTURE_FLAG ) + DEFINE_ENUM_HASH( Diligent::MISC_TEXTURE_FLAGS ) } namespace Diligent @@ -58,7 +58,7 @@ namespace Diligent // Explicit namespace declaraion is necesseary to avoid // name conflicts when building for windows store - EnumMapping m_MiscFlagEnumMapping; + EnumMapping m_MiscFlagEnumMapping; UsageEnumMapping m_UsageEnumMapping; CpuAccessFlagEnumMapping m_CpuAccessFlagEnumMapping; diff --git a/RenderScript/src/BufferParser.cpp b/RenderScript/src/BufferParser.cpp index ebf04d0..5a996a6 100644 --- a/RenderScript/src/BufferParser.cpp +++ b/RenderScript/src/BufferParser.cpp @@ -51,7 +51,7 @@ namespace Diligent DEFINE_FLAGS_BINDER( m_Bindings, SBuffDescWrapper, BindFlags, Diligent::BIND_FLAGS, m_BindFlagEnumMapping ); DEFINE_ENUM_BINDER( m_Bindings, SBuffDescWrapper, Usage, m_UsageEnumMapping ); - DEFINE_FLAGS_BINDER( m_Bindings, SBuffDescWrapper, CPUAccessFlags, CPU_ACCESS_FLAG, m_CpuAccessFlagEnumMapping ); + DEFINE_FLAGS_BINDER( m_Bindings, SBuffDescWrapper, CPUAccessFlags, CPU_ACCESS_FLAGS, m_CpuAccessFlagEnumMapping ); DEFINE_ENUM_ELEMENT_MAPPING( m_BuffModeEnumMapping, BUFFER_MODE_UNDEFINED ); DEFINE_ENUM_ELEMENT_MAPPING( m_BuffModeEnumMapping, BUFFER_MODE_FORMATTED ); @@ -66,6 +66,7 @@ namespace Diligent DEFINE_BINDER( m_Bindings, SBuffDescWrapper, ElementByteStride ); + DEFINE_ENUM_ELEMENT_MAPPING( m_SetVBFlagEnumMapping, SET_VERTEX_BUFFERS_FLAG_NONE ); DEFINE_ENUM_ELEMENT_MAPPING( m_SetVBFlagEnumMapping, SET_VERTEX_BUFFERS_FLAG_RESET ); }; @@ -139,7 +140,7 @@ namespace Diligent } } - Uint32 Flags = 0; + SET_VERTEX_BUFFERS_FLAGS Flags = SET_VERTEX_BUFFERS_FLAG_NONE; Uint32 NumBuffers = 0; IBuffer *pBuffs[MaxBufferSlots] = {}; Uint32 Offsets[MaxBufferSlots] = {}; diff --git a/RenderScript/src/DeviceContextFuncBindings.cpp b/RenderScript/src/DeviceContextFuncBindings.cpp index 3a154d2..f32f350 100644 --- a/RenderScript/src/DeviceContextFuncBindings.cpp +++ b/RenderScript/src/DeviceContextFuncBindings.cpp @@ -46,7 +46,9 @@ namespace Diligent m_ShaderResBindingMetatableName( pSRBParser->GetMetatableName() ), m_PSOMetatableName(pPSOParser->GetMetatableName()) { + DEFINE_ENUM_ELEMENT_MAPPING( m_CommitShaderResFlagsEnumMapping, COMMIT_SHADER_RESOURCES_FLAG_NONE ); DEFINE_ENUM_ELEMENT_MAPPING( m_CommitShaderResFlagsEnumMapping, COMMIT_SHADER_RESOURCES_FLAG_TRANSITION_RESOURCES ); + DEFINE_ENUM_ELEMENT_MAPPING( m_CommitShaderResFlagsEnumMapping, COMMIT_SHADER_RESOURCES_FLAG_VERIFY_STATES ); }; int DeviceContextFuncBindings::SetRenderTargets( lua_State *L ) @@ -123,7 +125,7 @@ namespace Diligent ITextureView *pView = nullptr; Float32 fDepth = 1.f; Uint8 Stencil = 0; - Uint32 ClearFlags = 0; + CLEAR_DEPTH_STENCIL_FLAGS ClearFlags = CLEAR_DEPTH_FLAG_NONE; int CurrArg = 1; if( CurrArg <= NumArgs ) @@ -199,12 +201,12 @@ namespace Diligent } } - Uint32 Flags = 0; + COMMIT_SHADER_RESOURCES_FLAGS Flags = COMMIT_SHADER_RESOURCES_FLAG_NONE; if(NumArgs >= CurrArg && (lua_type( L, CurrArg ) == LUA_TSTRING || lua_type( L, CurrArg ) == LUA_TTABLE ) ) { - FlagsLoader CommitShaderResFlagsLoader(0, "CommitShaderResourcesFlag", m_CommitShaderResFlagsEnumMapping); + FlagsLoader CommitShaderResFlagsLoader(0, "CommitShaderResourcesFlag", m_CommitShaderResFlagsEnumMapping); CommitShaderResFlagsLoader.SetValue( L, CurrArg, &Flags ); ++CurrArg; } diff --git a/RenderScript/src/EnumMappings.cpp b/RenderScript/src/EnumMappings.cpp index bcefd89..84ce7d9 100644 --- a/RenderScript/src/EnumMappings.cpp +++ b/RenderScript/src/EnumMappings.cpp @@ -30,6 +30,7 @@ namespace Diligent { CpuAccessFlagEnumMapping::CpuAccessFlagEnumMapping() { + DEFINE_ENUM_ELEMENT_MAPPING( (*this), CPU_ACCESS_NONE ); DEFINE_ENUM_ELEMENT_MAPPING( (*this), CPU_ACCESS_READ ); DEFINE_ENUM_ELEMENT_MAPPING( (*this), CPU_ACCESS_WRITE ); } diff --git a/RenderScript/src/TextureParser.cpp b/RenderScript/src/TextureParser.cpp index 2ccd683..6515ebd 100644 --- a/RenderScript/src/TextureParser.cpp +++ b/RenderScript/src/TextureParser.cpp @@ -145,10 +145,11 @@ namespace Diligent DEFINE_FLAGS_BINDER( m_Bindings, STexDescWrapper, BindFlags, Diligent::BIND_FLAGS, m_BindFlagEnumMapping ); DEFINE_ENUM_BINDER( m_Bindings, STexDescWrapper, Usage, m_UsageEnumMapping ); - DEFINE_FLAGS_BINDER( m_Bindings, STexDescWrapper, CPUAccessFlags, CPU_ACCESS_FLAG, m_CpuAccessFlagEnumMapping ); + DEFINE_FLAGS_BINDER( m_Bindings, STexDescWrapper, CPUAccessFlags, CPU_ACCESS_FLAGS, m_CpuAccessFlagEnumMapping ); + DEFINE_ENUM_ELEMENT_MAPPING( m_MiscFlagEnumMapping, MISC_TEXTURE_FLAG_NONE ); DEFINE_ENUM_ELEMENT_MAPPING( m_MiscFlagEnumMapping, MISC_TEXTURE_FLAG_GENERATE_MIPS ); - DEFINE_FLAGS_BINDER( m_Bindings, STexDescWrapper, MiscFlags, Diligent::MISC_TEXTURE_FLAG, m_MiscFlagEnumMapping ); + DEFINE_FLAGS_BINDER( m_Bindings, STexDescWrapper, MiscFlags, Diligent::MISC_TEXTURE_FLAGS, m_MiscFlagEnumMapping ); DEFINE_BINDER_EX( m_Bindings, STexDescWrapper, ClearValue, OptimizedClearValue, 0 ); }; -- cgit v1.2.3