diff options
Diffstat (limited to 'Source/Core/VideoBackends/D3D/Src/PixelShaderCache.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/D3D/Src/PixelShaderCache.cpp | 61 |
1 files changed, 6 insertions, 55 deletions
diff --git a/Source/Core/VideoBackends/D3D/Src/PixelShaderCache.cpp b/Source/Core/VideoBackends/D3D/Src/PixelShaderCache.cpp index 56b61e05cd..04a1722d04 100644 --- a/Source/Core/VideoBackends/D3D/Src/PixelShaderCache.cpp +++ b/Source/Core/VideoBackends/D3D/Src/PixelShaderCache.cpp @@ -14,15 +14,12 @@ #include "Globals.h" #include "PixelShaderGen.h" #include "PixelShaderCache.h" +#include "PixelShaderManager.h" #include "ConfigManager.h" extern int frameCount; -// See comment near the bottom of this file. -float psconstants[C_PENVCONST_END*4]; -bool pscbufchanged = true; - namespace DX11 { @@ -339,15 +336,15 @@ ID3D11PixelShader* PixelShaderCache::GetClearProgram() ID3D11Buffer* &PixelShaderCache::GetConstantBuffer() { // TODO: divide the global variables of the generated shaders into about 5 constant buffers to speed this up - if (pscbufchanged) + if (PixelShaderManager::dirty) { D3D11_MAPPED_SUBRESOURCE map; D3D::context->Map(pscbuf, 0, D3D11_MAP_WRITE_DISCARD, 0, &map); - memcpy(map.pData, psconstants, sizeof(psconstants)); + memcpy(map.pData, &PixelShaderManager::constants, sizeof(PixelShaderConstants)); D3D::context->Unmap(pscbuf, 0); - pscbufchanged = false; + PixelShaderManager::dirty = false; - ADDSTAT(stats.thisFrame.bytesUniformStreamed, sizeof(psconstants)); + ADDSTAT(stats.thisFrame.bytesUniformStreamed, sizeof(PixelShaderConstants)); } return pscbuf; } @@ -364,7 +361,7 @@ public: void PixelShaderCache::Init() { - unsigned int cbsize = ((sizeof(psconstants))&(~0xf))+0x10; // must be a multiple of 16 + unsigned int cbsize = ((sizeof(PixelShaderConstants))&(~0xf))+0x10; // must be a multiple of 16 D3D11_BUFFER_DESC cbdesc = CD3D11_BUFFER_DESC(cbsize, D3D11_BIND_CONSTANT_BUFFER, D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE); D3D::device->CreateBuffer(&cbdesc, NULL, &pscbuf); CHECK(pscbuf!=NULL, "Create pixel shader constant buffer"); @@ -536,50 +533,4 @@ bool PixelShaderCache::InsertByteCode(const PixelShaderUid &uid, const void* byt return true; } -// These are "callbacks" from VideoCommon and thus must be outside namespace DX11. -// This will have to be changed when we merge. - -// HACK to avoid some invasive VideoCommon changes -// these values are hardcoded, they depend on internal D3DCompile behavior; TODO: Solve this with D3DReflect or something -// offset given in floats, table index is float4 -static const unsigned int ps_constant_offset_table[] = { - 0, 4, 8, 12, // C_COLORS, 16 - 16, 20, 24, 28, // C_KCOLORS, 16 - 32, // C_ALPHA, 4 - 36, 40, 44, 48, 52, 56, 60, 64, // C_TEXDIMS, 32 - 68, 72, // C_ZBIAS, 8 - 76, 80, // C_INDTEXSCALE, 8 - 84, 88, 92, 96, 100, 104, // C_INDTEXMTX, 24 - 108, 112, 116, // C_FOG, 12 - 120, 124, 128, 132, 136, // C_PLIGHTS0, 20 - 140, 144, 148, 152, 156, // C_PLIGHTS1, 20 - 160, 164, 168, 172, 176, // C_PLIGHTS2, 20 - 180, 184, 188, 192, 196, // C_PLIGHTS3, 20 - 200, 204, 208, 212, 216, // C_PLIGHTS4, 20 - 220, 224, 228, 232, 236, // C_PLIGHTS5, 20 - 240, 244, 248, 252, 256, // C_PLIGHTS6, 20 - 260, 264, 268, 272, 276, // C_PLIGHTS7, 20 - 280, 284, 288, 292 // C_PMATERIALS, 16 -}; -void Renderer::SetPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4) -{ - psconstants[ps_constant_offset_table[const_number] ] = f1; - psconstants[ps_constant_offset_table[const_number]+1] = f2; - psconstants[ps_constant_offset_table[const_number]+2] = f3; - psconstants[ps_constant_offset_table[const_number]+3] = f4; - pscbufchanged = true; -} - -void Renderer::SetPSConstant4fv(unsigned int const_number, const float* f) -{ - memcpy(&psconstants[ps_constant_offset_table[const_number]], f, sizeof(float)*4); - pscbufchanged = true; -} - -void Renderer::SetMultiPSConstant4fv(unsigned int const_number, unsigned int count, const float* f) -{ - memcpy(&psconstants[ps_constant_offset_table[const_number]], f, sizeof(float)*4*count); - pscbufchanged = true; -} - } // DX11 |
