From a7021c0ed3b6d99fd73b8c558726a1712b7f4629 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Thu, 29 Feb 2024 14:34:22 +0000 Subject: [PATCH] cleanup Reverted back to a 2d array since when the const buffer changes are made to the shaders they will be completely swapped out for a 1d array with a max size of 16 for the program, id3d11buffers will be shared across shaders apart from object buffers. We still need to decide on a structure to get everything setup so to keep functionality a max of 2 buffers per stage with 1 buffer as a padding so we can start coding constant buffers right away --- Engine/source/gfx/D3D11/gfxD3D11Shader.cpp | 68 ++++++---------------- Engine/source/gfx/D3D11/gfxD3D11Shader.h | 5 +- 2 files changed, 21 insertions(+), 52 deletions(-) diff --git a/Engine/source/gfx/D3D11/gfxD3D11Shader.cpp b/Engine/source/gfx/D3D11/gfxD3D11Shader.cpp index 1bde8a3df..ad62b68e7 100644 --- a/Engine/source/gfx/D3D11/gfxD3D11Shader.cpp +++ b/Engine/source/gfx/D3D11/gfxD3D11Shader.cpp @@ -147,7 +147,10 @@ GFXD3D11ShaderConstBuffer::GFXD3D11ShaderConstBuffer(GFXD3D11Shader* shader) for (U32 i = 0; i < 6; i++) { - VECTOR_SET_ASSOCIATION(mBoundConstVec[i]); + for (U32 j = 0; j < 3; j++) + { + mBoundBuffers[i][j] = NULL; + } } } @@ -155,11 +158,10 @@ GFXD3D11ShaderConstBuffer::~GFXD3D11ShaderConstBuffer() { for (U32 i = 0; i < 6; i++) { - for (U32 j = 0; j < mBoundConstVec[i].size(); j++) + for (U32 j = 0; j < 3; j++) { - SAFE_RELEASE(mBoundConstVec[i][j]); + SAFE_RELEASE(mBoundBuffers[i][j]); } - mBoundConstVec[i].clear(); } for (auto& pair : mBufferMap) { @@ -481,7 +483,7 @@ void GFXD3D11ShaderConstBuffer::addBuffer(U32 bufBindingPoint, GFXShaderStage sh mBufferMap[bufKey].size = size; mBufferMap[bufKey].isDirty = true; - ID3D11Buffer* tempBuf; + //ID3D11Buffer* tempBuf; D3D11_BUFFER_DESC cbDesc; cbDesc.ByteWidth = size; cbDesc.Usage = D3D11_USAGE_DEFAULT; @@ -491,23 +493,18 @@ void GFXD3D11ShaderConstBuffer::addBuffer(U32 bufBindingPoint, GFXShaderStage sh cbDesc.StructureByteStride = 0; HRESULT hr; - hr = D3D11DEVICE->CreateBuffer(&cbDesc, NULL, &tempBuf); + hr = D3D11DEVICE->CreateBuffer(&cbDesc, NULL, &mBoundBuffers[(U32)shaderStageID][bufBindingPoint]); if (FAILED(hr)) { AssertFatal(false, "can't create constant buffer"); } - - mBoundConstVec[shaderStageID].push_back(tempBuf); } void GFXD3D11ShaderConstBuffer::activate( GFXD3D11ShaderConstBuffer *prevShaderBuffer ) { PROFILE_SCOPE(GFXD3D11ShaderConstBuffer_activate); - if (prevShaderBuffer == NULL) - return; - BufferRange bufRanges[6]; for (BufferMap::Iterator i = mBufferMap.begin(); i != mBufferMap.end(); ++i) @@ -515,7 +512,7 @@ void GFXD3D11ShaderConstBuffer::activate( GFXD3D11ShaderConstBuffer *prevShaderB const BufferKey thisBufferDesc = i->key; ConstantBuffer thisBuff = i->value; - if (prevShaderBuffer != this) + if (prevShaderBuffer && prevShaderBuffer != this) { const ConstantBuffer prevBuffer = prevShaderBuffer->mBufferMap[i->key]; @@ -542,10 +539,14 @@ void GFXD3D11ShaderConstBuffer::activate( GFXD3D11ShaderConstBuffer *prevShaderB thisBuff.isDirty = true; } } + else + { + thisBuff.isDirty = true; + } if (thisBuff.data && thisBuff.isDirty) { - D3D11DEVICECONTEXT->UpdateSubresource(mBoundConstVec[thisBufferDesc.key2][thisBufferDesc.key1], 0, NULL, thisBuff.data, thisBuff.size, 0); + D3D11DEVICECONTEXT->UpdateSubresource(mBoundBuffers[thisBufferDesc.key2][thisBufferDesc.key1], 0, NULL, thisBuff.data, thisBuff.size, 0); bufRanges[thisBufferDesc.key2].addSlot(thisBufferDesc.key1); } } @@ -554,7 +555,7 @@ void GFXD3D11ShaderConstBuffer::activate( GFXD3D11ShaderConstBuffer *prevShaderB { const U32 bufStartSlot = bufRanges[0].mBufMin; const U32 numBufs = bufRanges[0].mBufMax - bufRanges[0].mBufMin + 1; - ID3D11Buffer** vsBuffers = mBoundConstVec[0].address() + bufStartSlot; + ID3D11Buffer** vsBuffers = mBoundBuffers[0] + bufStartSlot; D3D11DEVICECONTEXT->VSSetConstantBuffers(bufStartSlot, numBufs, vsBuffers); } @@ -563,7 +564,7 @@ void GFXD3D11ShaderConstBuffer::activate( GFXD3D11ShaderConstBuffer *prevShaderB { const U32 bufStartSlot = bufRanges[1].mBufMin; const U32 numBufs = bufRanges[1].mBufMax - bufRanges[1].mBufMin + 1; - ID3D11Buffer** psBuffers = mBoundConstVec[1].address() + bufStartSlot; + ID3D11Buffer** psBuffers = mBoundBuffers[1] + bufStartSlot; D3D11DEVICECONTEXT->PSSetConstantBuffers(bufStartSlot, numBufs, psBuffers); } @@ -577,11 +578,10 @@ void GFXD3D11ShaderConstBuffer::onShaderReload( GFXD3D11Shader *shader ) for (U32 i = 0; i < 6; i++) { - for (U32 j = 0; j < mBoundConstVec[i].size(); j++) + for (U32 j = 0; j < 3; j++) { - SAFE_RELEASE(mBoundConstVec[i][j]); + SAFE_RELEASE(mBoundBuffers[i][j]); } - mBoundConstVec[i].clear(); } for (auto& pair : mBufferMap) { @@ -914,10 +914,6 @@ void GFXD3D11Shader::_getShaderConstants( ID3D11ShaderReflection* refTable, D3D11_SHADER_TYPE_DESC shaderTypeDesc; bufferVar->GetType()->GetDesc(&shaderTypeDesc); - bool unusedVar = shaderVarDesc.uFlags & D3D_SVF_USED ? false : true; - if (unusedVar) - continue; - if (shaderTypeDesc.Class == D3D_SVC_STRUCT) { // we gotta loop through its variables =/ add support in future. for now continue so it skips. @@ -979,6 +975,7 @@ void GFXD3D11Shader::_getShaderConstants( ID3D11ShaderReflection* refTable, if (shaderInputBind.Type == D3D_SIT_TEXTURE) { + // these should return shaderResourceViews and add them to shaderResources. /*switch (shaderInputBind.Dimension) { case D3D_SRV_DIMENSION::D3D_SRV_DIMENSION_TEXTURE1D: @@ -1028,33 +1025,6 @@ void GFXD3D11Shader::_getShaderConstants( ID3D11ShaderReflection* refTable, shaderInputBind.Type == D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER) { // these should return an unorderedAccessViews and add them to shaderResources. - /*switch (shaderInputBind.Dimension) - { - case D3D_SRV_DIMENSION::D3D_SRV_DIMENSION_TEXTURE1D: - break; - case D3D_SRV_DIMENSION::D3D_SRV_DIMENSION_TEXTURE1DARRAY: - break; - case D3D_SRV_DIMENSION::D3D_SRV_DIMENSION_TEXTURE2D: - break; - case D3D_SRV_DIMENSION::D3D_SRV_DIMENSION_TEXTURE2DARRAY: - break; - case D3D_SRV_DIMENSION::D3D_SRV_DIMENSION_TEXTURE2DMS: - break; - case D3D_SRV_DIMENSION::D3D_SRV_DIMENSION_TEXTURE2DMSARRAY: - break; - case D3D_SRV_DIMENSION::D3D_SRV_DIMENSION_TEXTURE3D: - break; - case D3D_SRV_DIMENSION::D3D_SRV_DIMENSION_TEXTURECUBE: - break; - case D3D_SRV_DIMENSION::D3D_SRV_DIMENSION_TEXTURECUBEARRAY: - break; - case D3D_SRV_DIMENSION::D3D_SRV_DIMENSION_BUFFER: - break; - case D3D_SRV_DIMENSION::D3D_SRV_DIMENSION_BUFFEREX: - break; - default: - break; - }*/ } else if (shaderInputBind.Type == D3D_SIT_STRUCTURED || shaderInputBind.Type == D3D_SIT_BYTEADDRESS) diff --git a/Engine/source/gfx/D3D11/gfxD3D11Shader.h b/Engine/source/gfx/D3D11/gfxD3D11Shader.h index 42d6fdba5..3460ea6f5 100644 --- a/Engine/source/gfx/D3D11/gfxD3D11Shader.h +++ b/Engine/source/gfx/D3D11/gfxD3D11Shader.h @@ -164,9 +164,8 @@ protected: void setMatrix(const GFXShaderConstDesc& handle, const U32 inSize, const void* data, U8* basePointer); void internalSet(GFXShaderConstHandle* handle, const U32 inSize, const void* data); - - // we probably want this to be GFXDevice and not per shader. - Vector mBoundConstVec[6]; + + ID3D11Buffer* mBoundBuffers[6][3]; }; class gfxD3D11Include;