Vulkan: Fix crash where a potentially deleted buffer is referenced
This happened when the geometry shader was disabled, and the uniform buffer was grown to a larger size. The update would be skipped, leaving the old buffer to be included in the descriptor set.
This commit is contained in:
parent
989cdc0929
commit
9290bf5844
|
@ -384,12 +384,22 @@ void StateTracker::UpdateVertexShaderConstants()
|
||||||
void StateTracker::UpdateGeometryShaderConstants()
|
void StateTracker::UpdateGeometryShaderConstants()
|
||||||
{
|
{
|
||||||
// Skip updating geometry shader constants if it's not in use.
|
// Skip updating geometry shader constants if it's not in use.
|
||||||
if (m_pipeline_state.gs == VK_NULL_HANDLE || !GeometryShaderManager::dirty ||
|
if (m_pipeline_state.gs == VK_NULL_HANDLE)
|
||||||
!ReserveConstantStorage())
|
{
|
||||||
|
// However, if the buffer has changed, we can't skip the update, because then we'll
|
||||||
|
// try to include the now non-existant buffer in the descriptor set.
|
||||||
|
if (m_uniform_stream_buffer->GetBuffer() ==
|
||||||
|
m_bindings.uniform_buffer_bindings[UBO_DESCRIPTOR_SET_BINDING_GS].buffer)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GeometryShaderManager::dirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!GeometryShaderManager::dirty || !ReserveConstantStorage())
|
||||||
|
return;
|
||||||
|
|
||||||
// Buffer allocation changed?
|
// Buffer allocation changed?
|
||||||
if (m_uniform_stream_buffer->GetBuffer() !=
|
if (m_uniform_stream_buffer->GetBuffer() !=
|
||||||
m_bindings.uniform_buffer_bindings[UBO_DESCRIPTOR_SET_BINDING_GS].buffer)
|
m_bindings.uniform_buffer_bindings[UBO_DESCRIPTOR_SET_BINDING_GS].buffer)
|
||||||
|
|
Loading…
Reference in New Issue