summaryrefslogtreecommitdiffstats
path: root/RenderScript/src/ScriptParser.cpp
diff options
context:
space:
mode:
authorassiduous <assiduous@diligentgraphics.com>2019-12-12 23:16:42 +0000
committerassiduous <assiduous@diligentgraphics.com>2019-12-12 23:16:42 +0000
commitd9ff664e3d796f9526ed29b7a1066b3d3fb443b1 (patch)
treebc94032e85347cdd26cc4c3c67d288bcfa9ef540 /RenderScript/src/ScriptParser.cpp
parentappveyor: swithced to VS2019 and enabled tests (diff)
downloadDiligentTools-d9ff664e3d796f9526ed29b7a1066b3d3fb443b1.tar.gz
DiligentTools-d9ff664e3d796f9526ed29b7a1066b3d3fb443b1.zip
Removed RenderScript and lua
Diffstat (limited to 'RenderScript/src/ScriptParser.cpp')
-rw-r--r--RenderScript/src/ScriptParser.cpp277
1 files changed, 0 insertions, 277 deletions
diff --git a/RenderScript/src/ScriptParser.cpp b/RenderScript/src/ScriptParser.cpp
deleted file mode 100644
index 7862303..0000000
--- a/RenderScript/src/ScriptParser.cpp
+++ /dev/null
@@ -1,277 +0,0 @@
-/* Copyright 2019 Diligent Graphics LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF ANY PROPRIETARY RIGHTS.
- *
- * In no event and under no legal theory, whether in tort (including negligence),
- * contract, or otherwise, unless required by applicable law (such as deliberate
- * and grossly negligent acts) or agreed to in writing, shall any Contributor be
- * liable for any damages, including any direct, indirect, special, incidental,
- * or consequential damages of any character arising as a result of this License or
- * out of the use or inability to use the software (including but not limited to damages
- * for loss of goodwill, work stoppage, computer failure or malfunction, or any and
- * all other commercial damages or losses), even if such Contributor has been advised
- * of the possibility of such damages.
- */
-
-#include "pch.h"
-#include "ScriptParser.h"
-#include "LuaBindings.h"
-#include "SamplerParser.h"
-#include "ShaderParser.h"
-#include "BufferParser.h"
-#include "TextureParser.h"
-#include "DrawAttribsParser.h"
-#include "FileSystem.h"
-#include "ResourceMappingParser.h"
-#include "TextureViewParser.h"
-#include "BufferViewParser.h"
-#include "PSODescParser.h"
-#include "DeviceContextFuncBindings.h"
-#include "ViewportParser.h"
-#include "ScissorRectParser.h"
-#include "ShaderVariableParser.h"
-#include "ShaderResourceBindingParser.h"
-
-namespace Diligent
-{
- const Char* ScriptParser::DeviceContextRegistryKey = "DeviceContext";
-
-#define IMPLEMENT_PUSH_FUNC_STUBS(ObjectType, ParserName) \
- void ScriptParser::SpecialPushFuncs::PushFuncStub( lua_State *L, const ObjectType* pObject) \
- { \
- m_pScriptParser->ParserName->PushObject( L, pObject ); \
- } \
- \
- void ScriptParser::SpecialPushFuncs::PushFuncStub( lua_State *L, const RefCntAutoPtr<ObjectType> &pObject ) \
- { \
- PushFuncStub( L, pObject.RawPtr() ); \
- }
-
- IMPLEMENT_PUSH_FUNC_STUBS( ISampler, m_pSamplerParser)
- IMPLEMENT_PUSH_FUNC_STUBS( IShader, m_pShaderParser )
- IMPLEMENT_PUSH_FUNC_STUBS( IBuffer, m_pBufferParser )
- IMPLEMENT_PUSH_FUNC_STUBS( ITexture, m_pTextureParser )
- IMPLEMENT_PUSH_FUNC_STUBS( IResourceMapping, m_pResourceMappingParser )
- IMPLEMENT_PUSH_FUNC_STUBS( ITextureView, m_pTextureViewParser )
- IMPLEMENT_PUSH_FUNC_STUBS( IBufferView, m_pBufferViewParser )
- IMPLEMENT_PUSH_FUNC_STUBS( IPipelineState, m_pPSOParser )
- IMPLEMENT_PUSH_FUNC_STUBS( IShaderResourceVariable, m_pShaderVariableParser )
- IMPLEMENT_PUSH_FUNC_STUBS( IShaderResourceBinding, m_pShaderResBindingParser )
-
-
- void ScriptParser::SpecialPushFuncs::PushFuncStub( lua_State *L, const CombinedDrawAttribs &CombinedAttribs )
- {
- m_pScriptParser->m_pDrawAttribsParser->PushObject( L, &CombinedAttribs );
- }
-
- void ScriptParser::SpecialPushFuncs::PushFuncStub( lua_State *L, const DrawAttribs &Attribs )
- {
- CombinedDrawAttribs CombinedAttribs;
- CombinedAttribs.FirstInstanceLocation = Attribs.FirstInstanceLocation;
- CombinedAttribs.Flags = Attribs.Flags;
- CombinedAttribs.NumInstances = Attribs.NumInstances;
- CombinedAttribs.NumVertices = Attribs.NumVertices;
- CombinedAttribs.StartVertexLocation = Attribs.StartVertexLocation;
- PushFuncStub( L, CombinedAttribs );
- }
-
- void ScriptParser::SpecialPushFuncs::PushFuncStub( lua_State *L, const DrawIndexedAttribs &Attribs )
- {
- CombinedDrawAttribs CombinedAttribs;
- CombinedAttribs.BaseVertex = Attribs.BaseVertex;
- CombinedAttribs.FirstIndexLocation = Attribs.FirstIndexLocation;
- CombinedAttribs.FirstInstanceLocation = Attribs.FirstInstanceLocation;
- CombinedAttribs.Flags = Attribs.Flags;
- CombinedAttribs.IndexType = Attribs.IndexType;
- CombinedAttribs.NumIndices = Attribs.NumIndices;
- CombinedAttribs.NumInstances = Attribs.NumInstances;
- PushFuncStub( L, CombinedAttribs );
- }
-
- void ScriptParser::SpecialPushFuncs::PushFuncStub( lua_State *L, const Viewport &Viewport )
- {
- m_pScriptParser->m_pViewportParser->PushObject( L, &Viewport );
- }
-
- void ScriptParser::SpecialPushFuncs::PushFuncStub( lua_State *L, const Rect &Rect )
- {
- m_pScriptParser->m_pScissorRectParser->PushObject( L, &Rect );
- }
-
- ScriptParser::ScriptParser( IReferenceCounters *pRefCounters, IRenderDevice *pRenderDevice ) :
- TBase(pRefCounters),
- m_pRenderDevice( pRenderDevice ),
- m_LuaState( LuaState::LUA_LIB_BASE | LuaState::LUA_LIB_COROUTINE | LuaState::LUA_LIB_TABLE |
- LuaState::LUA_LIB_STRING | LuaState::LUA_LIB_BIT32 | LuaState::LUA_LIB_MATH )
- {
- // Run's ctor is called BEFORE the m_LuaState's ctor
- // We need to explicitly init the object:
- m_RunFunctionCaller.SetLuaState( m_LuaState );
- m_RunFunctionCaller.SetScriptParser( this );
-
- // We need to define global constants before initializing parsers
- DefineGlobalConstants(m_LuaState);
-
- m_pSamplerParser.reset( new SamplerParser( pRenderDevice, m_LuaState ) );
- m_pBufferParser.reset( new BufferParser( pRenderDevice, m_LuaState ) );
- m_pTextureParser.reset( new TextureParser( pRenderDevice, m_LuaState ) );
- m_pDrawAttribsParser.reset( new DrawAttribsParser( m_pBufferParser.get(), pRenderDevice, m_LuaState ) );
- // Texture view parser must be create AFTER texture parser, because it
- // registers CreateView function in Metatables.Texture table
- m_pTextureViewParser.reset( new TextureViewParser( m_pTextureParser.get(), m_pSamplerParser.get(), pRenderDevice, m_LuaState ) );
- m_pBufferViewParser.reset( new BufferViewParser( m_pBufferParser.get(), pRenderDevice, m_LuaState ) );
- m_pResourceMappingParser.reset( new ResourceMappingParser( pRenderDevice, m_LuaState, m_pTextureViewParser.get(), m_pBufferParser.get(), m_pBufferViewParser.get() ) );
- m_pShaderParser.reset( new ShaderParser( pRenderDevice, m_LuaState ) );
- m_pPSOParser.reset( new PSODescParser( pRenderDevice, m_LuaState, m_pResourceMappingParser->GetMetatableName() ) );
- m_pViewportParser.reset( new ViewportParser( pRenderDevice, m_LuaState ) );
- m_pScissorRectParser.reset( new ScissorRectParser( pRenderDevice, m_LuaState ) );
- m_pShaderVariableParser.reset( new ShaderVariableParser( pRenderDevice, m_LuaState, m_pPSOParser->GetMetatableName(), m_pBufferParser->GetMetatableName(), m_pBufferViewParser->GetMetatableName(), m_pTextureViewParser->GetMetatableName() ) );
- m_pShaderResBindingParser.reset( new ShaderResourceBindingParser( pRenderDevice, m_LuaState, m_pPSOParser->GetMetatableName(), m_pResourceMappingParser->GetMetatableName(), m_pShaderVariableParser->GetMetatableName() ) );
- m_pDeviceCtxFuncBindings.reset( new DeviceContextFuncBindings( pRenderDevice, m_LuaState, m_pTextureViewParser.get(), m_pShaderResBindingParser.get(), m_pPSOParser.get() ) );
- }
-
- ScriptParser::~ScriptParser()
- {
- // It is essentially important to close Lua first, because we need to release
- // all user data
- m_LuaState.Close();
- }
-
- void ScriptParser::DefineGlobalConstants( lua_State *L )
- {
- INIT_LUA_STACK_TRACKING( L );
-
- // Create a new empty table and push it onto the stack
- lua_newtable( L ); // -0 | +1 -> +1
-
- const auto &DeviceCaps = m_pRenderDevice->GetDeviceCaps();
- const Char *pDeviceStr = nullptr;
- switch(DeviceCaps.DevType)
- {
- case DeviceType::OpenGL:
- pDeviceStr = "OpenGL";
- break;
-
- case DeviceType::OpenGLES:
- pDeviceStr = "OpenGLES";
- break;
-
- case DeviceType::D3D11:
- pDeviceStr = "D3D11";
- break;
-
- case DeviceType::D3D12:
- pDeviceStr = "D3D12";
- break;
-
- case DeviceType::Vulkan:
- pDeviceStr = "Vulkan";
- break;
-
- default:
- UNEXPECTED( "Unknown device type" );
- }
- SetTableField( L, "DeviceType", -1, pDeviceStr ); // -0 | +0 -> 0
-
- // lua_setglobal() pops a value from the stack and sets it as the new value of global name.
- lua_setglobal( L, "Constants" ); // -1 | +0 -> -1
-
- CHECK_LUA_STACK_HEIGHT();
-
- lua_newtable( L ); // -0 | +1 -> +1
- lua_setglobal( L, "Context" ); // -1 | +0 -> -1
-
- CHECK_LUA_STACK_HEIGHT();
- }
-
- // Every C-function called by Lua sees only its own private stack, with its first argument at index 1
- // Return the number of results pushed onto the stack
-
- void ScriptParser::Parse( const Char *pScript )
- {
- // Load the chunck and push it onto the top of the stack.
- // In case of errors, the error message is pushed onto the top of the stack
- if( luaL_loadstring( m_LuaState, pScript ) )
- {
- // Get the error message from the top of the stack
-
- // NOTE: the lua_tostring function returns a pointer to an internal copy of the string.
- // The string is always zero-terminated and Lua ensures that this pointer is valid as long
- // as the corresponding value is in the stack.
- auto ErrorMsg = lua_tostring( m_LuaState, -1 );
- lua_pop(m_LuaState, 1); // pop error message from the stack
-
- if( ErrorMsg )
- {
- LOG_ERROR_AND_THROW( "Failed to parse the script file:\n", ErrorMsg );
- }
- else
- {
- LOG_ERROR_AND_THROW( "Failed to parse the script file." );
- }
- }
- }
-
- void ScriptParser::GetSamplerByName( const Char *SamplerName, ISampler** ppSampler )
- {
- m_pSamplerParser->GetObjectByName( m_LuaState, SamplerName, ppSampler );
- }
-
- void ScriptParser::GetShaderByName( const Char *ShaderName, IShader** ppShader )
- {
- m_pShaderParser->GetObjectByName( m_LuaState, ShaderName, ppShader );
- }
-
- void ScriptParser::GetBufferByName( const Char *BufferName, IBuffer** ppBuffer )
- {
- m_pBufferParser->GetObjectByName( m_LuaState, BufferName, ppBuffer );
- }
-
- void ScriptParser::GetTextureByName( const Char *TextureName, ITexture** ppTexture )
- {
- m_pTextureParser->GetObjectByName( m_LuaState, TextureName, ppTexture );
- }
-
- void ScriptParser::GetResourceMappingByName( const Char *ResourceMappingName, IResourceMapping** ppResourceMapping )
- {
- m_pResourceMappingParser->GetObjectByName( m_LuaState, ResourceMappingName, ppResourceMapping );
- }
-
- void ScriptParser::GetTextureViewByName( const Char *TextureViewName, ITextureView** ppTextureView )
- {
- m_pTextureViewParser->GetObjectByName( m_LuaState, TextureViewName, ppTextureView );
- }
-
- void ScriptParser::GetBufferViewByName( const Char *BufferViewName, IBufferView** ppBufferView )
- {
- m_pBufferViewParser->GetObjectByName( m_LuaState, BufferViewName, ppBufferView );
- }
-
- void ScriptParser::GetPipelineStateByName( const Char *PSOName, IPipelineState** ppPSO )
- {
- m_pPSOParser->GetObjectByName( m_LuaState, PSOName, ppPSO );
- }
-
- void ScriptParser::GetShaderVariableByName( const Char *ShaderVarName, IShaderResourceVariable** ppShaderVar )
- {
- m_pShaderVariableParser->GetObjectByName( m_LuaState, ShaderVarName, ppShaderVar );
- }
-
- void ScriptParser::GetShaderResourceBindingByName( const Char *SRBName, IShaderResourceBinding** ppSRB )
- {
- m_pShaderResBindingParser->GetObjectByName( m_LuaState, SRBName, ppSRB );
- }
-
- void ScriptParser::QueryInterface(const INTERFACE_ID& IID, IObject** ppInterface )
- {
- UNSUPPORTED( "Not implemented" );
- }
-}