1
0
Fork 0
forked from wry/wry

vulkan: clear ops after each execution

This commit is contained in:
Julian Orth 2025-03-07 01:19:39 +01:00
parent 72253f0f6f
commit b9533981ec

View file

@ -180,7 +180,7 @@ struct VulkanTexOp {
tex: Rc<VulkanImage>, tex: Rc<VulkanImage>,
range: Range<usize>, range: Range<usize>,
buffer_resv: Option<Rc<dyn BufferResv>>, buffer_resv: Option<Rc<dyn BufferResv>>,
acquire_sync: AcquireSync, acquire_sync: Option<AcquireSync>,
release_sync: ReleaseSync, release_sync: ReleaseSync,
alpha: f32, alpha: f32,
source_type: TexSourceType, source_type: TexSourceType,
@ -665,7 +665,7 @@ impl VulkanRenderer {
tex: tex.clone(), tex: tex.clone(),
range: lo..hi, range: lo..hi,
buffer_resv: ct.buffer_resv.clone(), buffer_resv: ct.buffer_resv.clone(),
acquire_sync: ct.acquire_sync.clone(), acquire_sync: Some(ct.acquire_sync.clone()),
release_sync: ct.release_sync, release_sync: ct.release_sync,
alpha: ct.alpha.unwrap_or_default(), alpha: ct.alpha.unwrap_or_default(),
source_type, source_type,
@ -729,7 +729,7 @@ impl VulkanRenderer {
memory.queue_transfer.clear(); memory.queue_transfer.clear();
let execution = self.allocate_point(); let execution = self.allocate_point();
for pass in RenderPass::variants() { for pass in RenderPass::variants() {
for cmd in &memory.ops[pass] { for cmd in &mut memory.ops[pass] {
if let VulkanOp::Tex(c) = cmd { if let VulkanOp::Tex(c) = cmd {
let tex = &c.tex; let tex = &c.tex;
if tex.execution_version.replace(execution) == execution { if tex.execution_version.replace(execution) == execution {
@ -745,8 +745,8 @@ impl VulkanRenderer {
} }
memory.textures.push(UsedTexture { memory.textures.push(UsedTexture {
tex: tex.clone(), tex: tex.clone(),
resv: c.buffer_resv.clone(), resv: c.buffer_resv.take(),
acquire_sync: c.acquire_sync.clone(), acquire_sync: c.acquire_sync.take().unwrap(),
release_sync: c.release_sync, release_sync: c.release_sync,
}); });
} }
@ -1553,6 +1553,8 @@ impl VulkanRenderer {
memory.wait_semaphores.clear(); memory.wait_semaphores.clear();
memory.release_fence.take(); memory.release_fence.take();
memory.used_buffers.clear(); memory.used_buffers.clear();
memory.ops.clear();
memory.ops_tmp.clear();
memory.release_sync_file.take() memory.release_sync_file.take()
}; };
res.map(|_| sync_file) res.map(|_| sync_file)