Re-bind descriptor buffers when using EXT shader objects

This commit is contained in:
baldurk
2025-09-08 16:35:41 +01:00
parent 99ec80c553
commit 187698e636
2 changed files with 19 additions and 9 deletions
+16 -9
View File
@@ -332,16 +332,8 @@ bool VulkanRenderState::IsConditionalRenderingEnabled()
return conditionalRendering.buffer != ResourceId() && !conditionalRendering.forceDisable;
}
void VulkanRenderState::BindPipeline(WrappedVulkan *vk, VkCommandBuffer cmd,
PipelineBinding binding, bool subpass0)
void VulkanRenderState::BindDescriptorBuffers(WrappedVulkan *vk, VkCommandBuffer cmd)
{
// subpass0 is a patched version of the pipeline created against subpass 0, in case for old style
// renderpasses we need to use a pipeline that was previously in subpass 1 against our loadrp with
// only one subpass. It's not needed for dynamic rendering, we can always use the original
// pipeline
if(subpass0 && dynamicRendering.active)
subpass0 = false;
if(!descBufs.empty())
{
VkDescriptorBufferBindingPushDescriptorBufferHandleEXT push;
@@ -387,6 +379,19 @@ void VulkanRenderState::BindPipeline(WrappedVulkan *vk, VkCommandBuffer cmd,
ObjDisp(cmd)->CmdBindDescriptorBuffersEXT(Unwrap(cmd), bufferCount, bind.data());
}
}
void VulkanRenderState::BindPipeline(WrappedVulkan *vk, VkCommandBuffer cmd,
PipelineBinding binding, bool subpass0)
{
// subpass0 is a patched version of the pipeline created against subpass 0, in case for old style
// renderpasses we need to use a pipeline that was previously in subpass 1 against our loadrp with
// only one subpass. It's not needed for dynamic rendering, we can always use the original
// pipeline
if(subpass0 && dynamicRendering.active)
subpass0 = false;
BindDescriptorBuffers(vk, cmd);
if(binding == BindGraphics || binding == BindInitial)
{
@@ -492,6 +497,8 @@ void VulkanRenderState::BindPipeline(WrappedVulkan *vk, VkCommandBuffer cmd,
void VulkanRenderState::BindShaderObjects(WrappedVulkan *vk, VkCommandBuffer cmd,
PipelineBinding binding)
{
BindDescriptorBuffers(vk, cmd);
if(binding == BindGraphics || binding == BindInitial)
{
if(graphics.shaderObject)
+3
View File
@@ -96,6 +96,9 @@ struct VulkanRenderState
void BeginRenderPassAndApplyState(WrappedVulkan *vk, VkCommandBuffer cmd, PipelineBinding binding,
bool obeySuspending);
void BindPipeline(WrappedVulkan *vk, VkCommandBuffer cmd, PipelineBinding binding, bool subpass0);
void BindDescriptorBuffers(WrappedVulkan *vk, VkCommandBuffer cmd);
void BindShaderObjects(WrappedVulkan *vk, VkCommandBuffer cmd, PipelineBinding binding);
void BindDynamicState(WrappedVulkan *vk, VkCommandBuffer cmd);