Browse Source

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
marauder2k7 1 year ago
parent
commit
a7021c0ed3
2 changed files with 21 additions and 52 deletions
  1. 19 49
      Engine/source/gfx/D3D11/gfxD3D11Shader.cpp
  2. 2 3
      Engine/source/gfx/D3D11/gfxD3D11Shader.h

+ 19 - 49
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)

+ 2 - 3
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<ID3D11Buffer*> mBoundConstVec[6];
+
+   ID3D11Buffer* mBoundBuffers[6][3];
 };
 
 class gfxD3D11Include;