summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/D3D/Src/PixelShaderCache.cpp
diff options
context:
space:
mode:
authordegasus <wickmarkus@web.de>2013-10-13 14:14:32 +0200
committerdegasus <wickmarkus@web.de>2013-10-13 14:14:32 +0200
commit4dc1881f58f0b3c1276c5fde26fcabcdf114903f (patch)
tree0f6d7b78dbacb983cf7c49a75bac437f618bf3e4 /Source/Core/VideoBackends/D3D/Src/PixelShaderCache.cpp
parent0753ce5bdaf756b144ec6003e1df01388b9c3e8f (diff)
parent2754c1132ee1f3e4cf1045bd50b77425cd308411 (diff)
Merge branch 'const_buffer_rework'
Diffstat (limited to 'Source/Core/VideoBackends/D3D/Src/PixelShaderCache.cpp')
-rw-r--r--Source/Core/VideoBackends/D3D/Src/PixelShaderCache.cpp61
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