VideoBackends: allow custom pixel uniforms to be passed to the vertex shader as well

This commit is contained in:
iwubcode
2025-08-16 15:07:24 -05:00
parent 52806b3dc8
commit 0e73a01279
14 changed files with 62 additions and 38 deletions

View File

@ -59,6 +59,7 @@ void StateManager::Apply()
const bool dirtyConstants = m_dirtyFlags.test(DirtyFlag_PixelConstants) ||
m_dirtyFlags.test(DirtyFlag_VertexConstants) ||
m_dirtyFlags.test(DirtyFlag_CustomConstants) ||
m_dirtyFlags.test(DirtyFlag_GeometryConstants);
const bool dirtyShaders = m_dirtyFlags.test(DirtyFlag_PixelShader) ||
m_dirtyFlags.test(DirtyFlag_VertexShader) ||
@ -69,18 +70,12 @@ void StateManager::Apply()
if (dirtyConstants)
{
if (m_current.pixelConstants[0] != m_pending.pixelConstants[0] ||
m_current.pixelConstants[1] != m_pending.pixelConstants[1] ||
m_current.pixelConstants[2] != m_pending.pixelConstants[2])
m_current.pixelConstants[1] != m_pending.pixelConstants[1])
{
u32 count = 1;
if (m_pending.pixelConstants[1])
count++;
if (m_pending.pixelConstants[2])
count++;
D3D::context->PSSetConstantBuffers(0, count, m_pending.pixelConstants.data());
D3D::context->PSSetConstantBuffers(0, 1, &m_pending.pixelConstants[0]);
D3D::context->PSSetConstantBuffers(1, 1, &m_pending.pixelConstants[1]);
m_current.pixelConstants[0] = m_pending.pixelConstants[0];
m_current.pixelConstants[1] = m_pending.pixelConstants[1];
m_current.pixelConstants[2] = m_pending.pixelConstants[2];
}
if (m_current.vertexConstants != m_pending.vertexConstants)
@ -90,6 +85,13 @@ void StateManager::Apply()
m_current.vertexConstants = m_pending.vertexConstants;
}
if (m_current.customConstants != m_pending.customConstants)
{
D3D::context->PSSetConstantBuffers(2, 1, &m_pending.customConstants);
D3D::context->VSSetConstantBuffers(2, 1, &m_pending.customConstants);
m_current.customConstants = m_pending.customConstants;
}
if (m_current.geometryConstants != m_pending.geometryConstants)
{
D3D::context->GSSetConstantBuffers(0, 1, &m_pending.geometryConstants);