mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-05 14:31:24 +12:00
Fix invalid descriptor setup if subdraw0 has broken vertex setup
This commit is contained in:
parent
3e794e7fdb
commit
000ec71629
2 changed files with 10 additions and 5 deletions
|
@ -799,7 +799,7 @@ void VKGSRender::emit_geometry(u32 sub_index)
|
||||||
|
|
||||||
const auto& binding_table = m_device->get_pipeline_binding_table();
|
const auto& binding_table = m_device->get_pipeline_binding_table();
|
||||||
|
|
||||||
if (sub_index == 0)
|
if (m_current_draw.subdraw_id == 0)
|
||||||
{
|
{
|
||||||
update_descriptors = true;
|
update_descriptors = true;
|
||||||
|
|
||||||
|
@ -856,7 +856,7 @@ void VKGSRender::emit_geometry(u32 sub_index)
|
||||||
m_program->bind_uniform(m_vertex_layout_storage->value, binding_table.vertex_buffers_first_bind_slot + 2, m_current_frame->descriptor_set);
|
m_program->bind_uniform(m_vertex_layout_storage->value, binding_table.vertex_buffers_first_bind_slot + 2, m_current_frame->descriptor_set);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool reload_state = (!m_current_subdraw_id++);
|
bool reload_state = (!m_current_draw.subdraw_id++);
|
||||||
vk::renderpass_op(*m_current_command_buffer, [&](VkCommandBuffer cmd, VkRenderPass pass, VkFramebuffer fbo)
|
vk::renderpass_op(*m_current_command_buffer, [&](VkCommandBuffer cmd, VkRenderPass pass, VkFramebuffer fbo)
|
||||||
{
|
{
|
||||||
if (get_render_pass() == pass && m_draw_fbo->value == fbo)
|
if (get_render_pass() == pass && m_draw_fbo->value == fbo)
|
||||||
|
@ -1067,8 +1067,8 @@ void VKGSRender::end()
|
||||||
// Final heap check...
|
// Final heap check...
|
||||||
check_heap_status(VK_HEAP_CHECK_VERTEX_STORAGE | VK_HEAP_CHECK_VERTEX_LAYOUT_STORAGE);
|
check_heap_status(VK_HEAP_CHECK_VERTEX_STORAGE | VK_HEAP_CHECK_VERTEX_LAYOUT_STORAGE);
|
||||||
|
|
||||||
u32 sub_index = 0;
|
u32 sub_index = 0; // RSX subdraw ID
|
||||||
m_current_subdraw_id = 0;
|
m_current_draw.subdraw_id = 0; // Host subdraw ID. Invalid RSX subdraws do not increment this value
|
||||||
|
|
||||||
rsx::method_registers.current_draw_clause.begin();
|
rsx::method_registers.current_draw_clause.begin();
|
||||||
do
|
do
|
||||||
|
|
|
@ -332,6 +332,11 @@ namespace vk
|
||||||
u32 height;
|
u32 height;
|
||||||
u32 pitch;
|
u32 pitch;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct draw_call_t
|
||||||
|
{
|
||||||
|
u32 subdraw_id;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
using namespace vk::vmm_allocation_pool_; // clang workaround.
|
using namespace vk::vmm_allocation_pool_; // clang workaround.
|
||||||
|
@ -483,7 +488,7 @@ private:
|
||||||
utils::address_range m_offloader_fault_range;
|
utils::address_range m_offloader_fault_range;
|
||||||
rsx::invalidation_cause m_offloader_fault_cause;
|
rsx::invalidation_cause m_offloader_fault_cause;
|
||||||
|
|
||||||
u32 m_current_subdraw_id = 0;
|
vk::draw_call_t m_current_draw = {};
|
||||||
u64 m_current_renderpass_key = 0;
|
u64 m_current_renderpass_key = 0;
|
||||||
VkRenderPass m_cached_renderpass = VK_NULL_HANDLE;
|
VkRenderPass m_cached_renderpass = VK_NULL_HANDLE;
|
||||||
std::vector<vk::image*> m_fbo_images;
|
std::vector<vk::image*> m_fbo_images;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue