From 1e9bc961913b35af9f0ebf4c918f0fb3827e2c52 Mon Sep 17 00:00:00 2001 From: Robert Beckebans Date: Thu, 28 Dec 2023 16:16:15 +0100 Subject: [PATCH] Going back to a single renderprog volatile constant buffer to avoid crashes --- neo/renderer/NVRHI/BufferObject_NVRHI.cpp | 8 ++++++-- neo/renderer/NVRHI/RenderProgs_NVRHI.cpp | 2 +- neo/renderer/Passes/SsaoPass.cpp | 2 +- neo/renderer/RenderBackend.cpp | 2 +- neo/renderer/RenderProgs.cpp | 10 +++++----- neo/renderer/RenderProgs.h | 5 +++-- neo/shaders/builtin/post/crt_newpixie.ps.hlsl | 2 +- 7 files changed, 18 insertions(+), 13 deletions(-) diff --git a/neo/renderer/NVRHI/BufferObject_NVRHI.cpp b/neo/renderer/NVRHI/BufferObject_NVRHI.cpp index 2b13f2f8..fdc9269f 100644 --- a/neo/renderer/NVRHI/BufferObject_NVRHI.cpp +++ b/neo/renderer/NVRHI/BufferObject_NVRHI.cpp @@ -729,9 +729,13 @@ bool idUniformBuffer::AllocBufferObject( const void* data, int allocSize, buffer // This buffer is a shader resource as opposed to a constant buffer due to // constant buffers not being able to be sub-ranged. nvrhi::BufferDesc bufferDesc; + //bufferDesc.initialState = nvrhi::ResourceStates::ConstantBuffer; // SRS - shouldn't this be initialized to CopyDest? + bufferDesc.initialState = nvrhi::ResourceStates::CopyDest; + bufferDesc.canHaveTypedViews = true; + bufferDesc.canHaveRawViews = true; bufferDesc.byteSize = numBytes; - bufferDesc.structStride = sizeof( idVec4 ); // SRS - this defines a structured storage buffer vs. a constant buffer - bufferDesc.initialState = nvrhi::ResourceStates::Common; + bufferDesc.structStride = sizeof( idVec4 ); + bufferDesc.isConstantBuffer = true; if( usage == BU_DYNAMIC ) { diff --git a/neo/renderer/NVRHI/RenderProgs_NVRHI.cpp b/neo/renderer/NVRHI/RenderProgs_NVRHI.cpp index facf8069..f2f1fbb9 100644 --- a/neo/renderer/NVRHI/RenderProgs_NVRHI.cpp +++ b/neo/renderer/NVRHI/RenderProgs_NVRHI.cpp @@ -316,7 +316,7 @@ bool idRenderProgManager::CommitConstantBuffer( nvrhi::ICommandList* commandList // The vkDoom3 backend even didn't bother with this and always fired the uniforms for each draw call. if( uniformsChanged || bindingLayoutTypeChanged ) { - commandList->writeBuffer( constantBuffer[BindingLayoutType()], uniforms.Ptr(), uniforms.Allocated() ); + commandList->writeBuffer( constantBuffer /*[BindingLayoutType()]*/, uniforms.Ptr(), uniforms.Allocated() ); uniformsChanged = false; diff --git a/neo/renderer/Passes/SsaoPass.cpp b/neo/renderer/Passes/SsaoPass.cpp index 25b127e2..187b7f32 100644 --- a/neo/renderer/Passes/SsaoPass.cpp +++ b/neo/renderer/Passes/SsaoPass.cpp @@ -254,8 +254,8 @@ void SsaoPass::Render( quarterResExtent.maxY = ( quarterResExtent.maxY + 3 ) / 4; // TODO required and remove this by fixing the shaders + // because they include #include renderProgManager.BindShader_TextureVertexColor(); - renderProgManager.CommitConstantBuffer( commandList, true ); SsaoConstants ssaoConstants = {}; diff --git a/neo/renderer/RenderBackend.cpp b/neo/renderer/RenderBackend.cpp index d8fed322..e53088e1 100644 --- a/neo/renderer/RenderBackend.cpp +++ b/neo/renderer/RenderBackend.cpp @@ -6238,7 +6238,7 @@ void idRenderBackend::CRTPostProcess() DrawElementsWithCounters( &unitSquareSurface ); } - GL_SelectTexture( 0 ); + //GL_SelectTexture( 0 ); //renderProgManager.Unbind(); // copy LDR result to DX12 / Vulkan swapchain image diff --git a/neo/renderer/RenderProgs.cpp b/neo/renderer/RenderProgs.cpp index 90cae8a7..0fdeb30a 100644 --- a/neo/renderer/RenderProgs.cpp +++ b/neo/renderer/RenderProgs.cpp @@ -88,10 +88,10 @@ void idRenderProgManager::Init( nvrhi::IDevice* device ) uniforms.SetNum( RENDERPARM_TOTAL, vec4_zero ); uniformsChanged = false; - for( int i = 0; i < NUM_BINDING_LAYOUTS; i++ ) + //for( int i = 0; i < NUM_BINDING_LAYOUTS; i++ ) { - auto constantBufferDesc = nvrhi::utils::CreateVolatileConstantBufferDesc( uniforms.Allocated(), va( "RenderParams_%d", i ), 16384 ); - constantBuffer[i] = device->createBuffer( constantBufferDesc ); + auto constantBufferDesc = nvrhi::utils::CreateVolatileConstantBufferDesc( uniforms.Allocated(), va( "RenderParams_%d", 1 ), 16384 ); + constantBuffer = device->createBuffer( constantBufferDesc ); } // === Main draw vertex layout === @@ -722,9 +722,9 @@ void idRenderProgManager::Shutdown() } // SRS - Unmap buffer memory using overloaded = operator - for( int i = 0; i < constantBuffer.Num(); i++ ) + //for( int i = 0; i < constantBuffer.Num(); i++ ) { - constantBuffer[i] = nullptr; + constantBuffer = nullptr; } } diff --git a/neo/renderer/RenderProgs.h b/neo/renderer/RenderProgs.h index b1ec53bd..8a445e00 100644 --- a/neo/renderer/RenderProgs.h +++ b/neo/renderer/RenderProgs.h @@ -976,7 +976,7 @@ public: ID_INLINE nvrhi::IBuffer* ConstantBuffer() { - return constantBuffer[BindingLayoutType()]; + return constantBuffer;//[BindingLayoutType()]; } ID_INLINE idUniformBuffer& BindingParamUbo() { @@ -1082,7 +1082,8 @@ private: idStaticList< idStaticList, NUM_BINDING_LAYOUTS > bindingLayouts; - idArray constantBuffer; + //idArray constantBuffer; + nvrhi::BufferHandle constantBuffer; }; extern idRenderProgManager renderProgManager; diff --git a/neo/shaders/builtin/post/crt_newpixie.ps.hlsl b/neo/shaders/builtin/post/crt_newpixie.ps.hlsl index e5815c07..59afea4f 100644 --- a/neo/shaders/builtin/post/crt_newpixie.ps.hlsl +++ b/neo/shaders/builtin/post/crt_newpixie.ps.hlsl @@ -27,7 +27,7 @@ SOFTWARE. =========================================================================== */ -#include "global_inc.hlsl" +#include // *INDENT-OFF*