VideoCommon: flush vertex manager if components change

This commit is contained in:
Tillmann Karras
2015-11-01 22:39:31 +01:00
parent 491e149545
commit 983978ee66
15 changed files with 56 additions and 51 deletions

View File

@ -525,14 +525,14 @@ void PixelShaderCache::Shutdown()
g_ps_disk_cache.Close();
}
bool PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 components)
bool PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode)
{
PixelShaderUid uid;
GetPixelShaderUid(uid, dstAlphaMode, API_D3D, components);
GetPixelShaderUid(uid, dstAlphaMode, API_D3D);
if (g_ActiveConfig.bEnableShaderDebugging)
{
ShaderCode code;
GeneratePixelShaderCode(code, dstAlphaMode, API_D3D, components);
GeneratePixelShaderCode(code, dstAlphaMode, API_D3D);
pixel_uid_checker.AddToIndexAndCheck(code, uid, "Pixel", "p");
}
@ -562,7 +562,7 @@ bool PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 components)
// Need to compile a new shader
ShaderCode code;
GeneratePixelShaderCode(code, dstAlphaMode, API_D3D, components);
GeneratePixelShaderCode(code, dstAlphaMode, API_D3D);
D3DBlob* pbytecode;
if (!D3D::CompilePixelShader(code.GetBuffer(), &pbytecode))

View File

@ -20,7 +20,7 @@ public:
static void Init();
static void Clear();
static void Shutdown();
static bool SetShader(DSTALPHA_MODE dstAlphaMode, u32 components); // TODO: Should be renamed to LoadShader
static bool SetShader(DSTALPHA_MODE dstAlphaMode); // TODO: Should be renamed to LoadShader
static bool InsertByteCode(const PixelShaderUid &uid, const void* bytecode, unsigned int bytecodelen);
static ID3D11PixelShader* GetActiveShader() { return last_entry->shader; }

View File

@ -151,16 +151,14 @@ void VertexManager::Draw(u32 stride)
void VertexManager::vFlush(bool useDstAlpha)
{
u32 components = VertexLoaderManager::GetCurrentVertexFormat()->m_components;
if (!PixelShaderCache::SetShader(
useDstAlpha ? DSTALPHA_DUAL_SOURCE_BLEND : DSTALPHA_NONE, components))
useDstAlpha ? DSTALPHA_DUAL_SOURCE_BLEND : DSTALPHA_NONE))
{
GFX_DEBUGGER_PAUSE_LOG_AT(NEXT_ERROR,true,{printf("Fail to set pixel shader\n");});
return;
}
if (!VertexShaderCache::SetShader(components))
if (!VertexShaderCache::SetShader())
{
GFX_DEBUGGER_PAUSE_LOG_AT(NEXT_ERROR,true,{printf("Fail to set pixel shader\n");});
return;

View File

@ -184,14 +184,14 @@ void VertexShaderCache::Shutdown()
g_vs_disk_cache.Close();
}
bool VertexShaderCache::SetShader(u32 components)
bool VertexShaderCache::SetShader()
{
VertexShaderUid uid;
GetVertexShaderUid(uid, components, API_D3D);
GetVertexShaderUid(uid, API_D3D);
if (g_ActiveConfig.bEnableShaderDebugging)
{
ShaderCode code;
GenerateVertexShaderCode(code, components, API_D3D);
GenerateVertexShaderCode(code, API_D3D);
vertex_uid_checker.AddToIndexAndCheck(code, uid, "Vertex", "v");
}
@ -217,7 +217,7 @@ bool VertexShaderCache::SetShader(u32 components)
}
ShaderCode code;
GenerateVertexShaderCode(code, components, API_D3D);
GenerateVertexShaderCode(code, API_D3D);
D3DBlob* pbytecode = nullptr;
D3D::CompileVertexShader(code.GetBuffer(), &pbytecode);

View File

@ -19,7 +19,7 @@ public:
static void Init();
static void Clear();
static void Shutdown();
static bool SetShader(u32 components); // TODO: Should be renamed to LoadShader
static bool SetShader(); // TODO: Should be renamed to LoadShader
static ID3D11VertexShader* GetActiveShader() { return last_entry->shader; }
static D3DBlob* GetActiveShaderBytecode() { return last_entry->bytecode; }