diff --git a/src/asahi/vulkan/hk_cmd_buffer.c b/src/asahi/vulkan/hk_cmd_buffer.c index d6ae458f0f9..3d53708e4f4 100644 --- a/src/asahi/vulkan/hk_cmd_buffer.c +++ b/src/asahi/vulkan/hk_cmd_buffer.c @@ -745,11 +745,12 @@ hk_cs_init_graphics(struct hk_cmd_buffer *cmd, struct hk_cs *cs) cs->tib = render->tilebuffer; /* Assume this is not the first control stream of the render pass, so - * initially use the partial background program and ZLS control. - * hk_BeginRendering will override. + * initially use the partial background/EOT program and ZLS control. + * hk_BeginRendering/hk_EndRendering will override. */ cs->cr = render->cr; cs->cr.bg.main = render->cr.bg.partial; + cs->cr.eot.main = render->cr.eot.partial; cs->cr.zls_control = render->cr.zls_control_partial; /* Barrier to enforce GPU-CPU coherency, in case this batch is back to back diff --git a/src/asahi/vulkan/hk_cmd_draw.c b/src/asahi/vulkan/hk_cmd_draw.c index ce2f31f7fcc..7dc66fa9b60 100644 --- a/src/asahi/vulkan/hk_cmd_draw.c +++ b/src/asahi/vulkan/hk_cmd_draw.c @@ -612,7 +612,8 @@ hk_CmdBeginRendering(VkCommandBuffer commandBuffer, render->cr.eot.main = hk_build_bg_eot(cmd, pRenderingInfo, true, false, incomplete_render_area); - render->cr.eot.partial = render->cr.eot.main; + render->cr.eot.partial = + hk_build_bg_eot(cmd, pRenderingInfo, true, true, incomplete_render_area); render->cr.isp_bgobjvals = 0x300; @@ -892,6 +893,14 @@ hk_CmdEndRendering(VkCommandBuffer commandBuffer) struct hk_rendering_state *render = &cmd->state.gfx.render; struct hk_device *dev = hk_cmd_buffer_device(cmd); + /* The last control stream of the render pass is special since it gets its + * stores dropped. Swap it in. + */ + struct hk_cs *cs = cmd->current_cs.gfx; + if (cs) { + cs->cr.eot.main = render->cr.eot.main; + } + perf_debug(dev, "End rendering"); hk_cmd_buffer_end_graphics(cmd);