mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-10-26 01:51:04 +01:00
Keep conditional rendering inside a single render pass instance
Begin and end were landing in different scopes: the clear and draw texture paths opened it with no pass bound, the compare helpers reopened it after their resolve pass had closed one, and the pass teardown could return before pausing, leaving it active at submit.
This commit is contained in:
parent
c3effdf558
commit
742cadde1d
3 changed files with 3 additions and 17 deletions
|
|
@ -1442,18 +1442,12 @@ void QueryCacheRuntime::HostConditionalRenderingCompareValueImpl(VideoCommon::Lo
|
|||
return;
|
||||
}
|
||||
}
|
||||
bool was_running = impl->is_hcr_running;
|
||||
if (was_running) {
|
||||
PauseHostConditionalRendering();
|
||||
}
|
||||
PauseHostConditionalRendering();
|
||||
impl->hcr_setup.buffer = impl->hcr_buffer;
|
||||
impl->hcr_setup.offset = impl->hcr_offset;
|
||||
impl->hcr_setup.flags = is_equal ? VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT : 0;
|
||||
impl->hcr_is_set = true;
|
||||
impl->is_hcr_running = false;
|
||||
if (was_running) {
|
||||
ResumeHostConditionalRendering();
|
||||
}
|
||||
}
|
||||
|
||||
void QueryCacheRuntime::HostConditionalRenderingCompareBCImpl(DAddr address, bool is_equal,
|
||||
|
|
@ -1470,10 +1464,7 @@ void QueryCacheRuntime::HostConditionalRenderingCompareBCImpl(DAddr address, boo
|
|||
to_resolve = buffer->Handle();
|
||||
to_resolve_offset = static_cast<u32>(offset);
|
||||
}
|
||||
bool was_running = impl->is_hcr_running;
|
||||
if (was_running) {
|
||||
PauseHostConditionalRendering();
|
||||
}
|
||||
PauseHostConditionalRendering();
|
||||
impl->conditional_resolve_pass->Resolve(*impl->hcr_resolve_buffer, to_resolve,
|
||||
to_resolve_offset, compare_to_zero);
|
||||
impl->hcr_setup.buffer = *impl->hcr_resolve_buffer;
|
||||
|
|
@ -1481,9 +1472,6 @@ void QueryCacheRuntime::HostConditionalRenderingCompareBCImpl(DAddr address, boo
|
|||
impl->hcr_setup.flags = is_equal ? 0 : VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT;
|
||||
impl->hcr_is_set = true;
|
||||
impl->is_hcr_running = false;
|
||||
if (was_running) {
|
||||
ResumeHostConditionalRendering();
|
||||
}
|
||||
}
|
||||
|
||||
bool QueryCacheRuntime::HostConditionalRenderingCompareValue(VideoCommon::LookupData object_1,
|
||||
|
|
|
|||
|
|
@ -377,7 +377,6 @@ void RasterizerVulkan::DrawTexture() {
|
|||
|
||||
UpdateDynamicStates();
|
||||
|
||||
query_cache.NotifySegment(true);
|
||||
query_cache.CounterEnable(VideoCommon::QueryType::ZPassPixelCount64, maxwell3d->regs.zpass_pixel_count_enable);
|
||||
const auto& draw_texture_state = maxwell3d->draw_manager.draw_texture_state;
|
||||
const auto& sampler = texture_cache.GetSampler(draw_texture_state.src_sampler, false);
|
||||
|
|
@ -453,7 +452,6 @@ void RasterizerVulkan::Clear(u32 layer_count) {
|
|||
scheduler.RequestRenderpass(framebuffer);
|
||||
}
|
||||
|
||||
query_cache.NotifySegment(true);
|
||||
query_cache.CounterEnable(VideoCommon::QueryType::ZPassPixelCount64, maxwell3d->regs.zpass_pixel_count_enable);
|
||||
u32 up_scale = 1;
|
||||
u32 down_shift = 0;
|
||||
|
|
|
|||
|
|
@ -627,6 +627,7 @@ void Scheduler::EndPendingOperations() {
|
|||
void Scheduler::EndRenderPass()
|
||||
{
|
||||
RealizeDeferredClear();
|
||||
query_cache->NotifySegment(false);
|
||||
if (!state.rendering) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -640,7 +641,6 @@ void Scheduler::EndRenderPass()
|
|||
}
|
||||
|
||||
query_cache->CounterEnable(VideoCommon::QueryType::ZPassPixelCount64, false);
|
||||
query_cache->NotifySegment(false);
|
||||
|
||||
if (pending_begin) {
|
||||
if (!has_pending_begin_clear) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue