tu: Use a temporary descriptor to patch input attachments

The final descriptor is in write-combined memory, so avoid reading from
it. Instead modify a temporary descriptor on the stack.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35420>
This commit is contained in:
Connor Abbott 2025-06-09 16:22:13 -04:00 committed by Marge Bot
parent 83212054e0
commit d77166edec

View file

@ -2075,7 +2075,7 @@ tu_emit_input_attachments(struct tu_cmd_buffer *cmd,
const struct tu_image_view *iview = cmd->state.attachments[a]; const struct tu_image_view *iview = cmd->state.attachments[a];
const struct tu_render_pass_attachment *att = const struct tu_render_pass_attachment *att =
&cmd->state.pass->attachments[a]; &cmd->state.pass->attachments[a];
uint32_t *dst = &texture.map[A6XX_TEX_CONST_DWORDS * i]; uint32_t dst[A6XX_TEX_CONST_DWORDS];
uint32_t gmem_offset = tu_attachment_gmem_offset(cmd, att, 0); uint32_t gmem_offset = tu_attachment_gmem_offset(cmd, att, 0);
uint32_t cpp = att->cpp; uint32_t cpp = att->cpp;
@ -2134,8 +2134,10 @@ tu_emit_input_attachments(struct tu_cmd_buffer *cmd,
gmem_offset = att->gmem_offset_stencil[cmd->state.gmem_layout]; gmem_offset = att->gmem_offset_stencil[cmd->state.gmem_layout];
} }
if (!gmem || !subpass->input_attachments[i / 2].patch_input_gmem) if (!gmem || !subpass->input_attachments[i / 2].patch_input_gmem) {
memcpy(&texture.map[i * A6XX_TEX_CONST_DWORDS], dst, sizeof(dst));
continue; continue;
}
/* patched for gmem */ /* patched for gmem */
dst[0] = pkt_field_set(A6XX_TEX_CONST_0_TILE_MODE, dst[0], TILE6_2); dst[0] = pkt_field_set(A6XX_TEX_CONST_0_TILE_MODE, dst[0], TILE6_2);
@ -2166,6 +2168,8 @@ tu_emit_input_attachments(struct tu_cmd_buffer *cmd,
dst[5] &= A6XX_TEX_CONST_5_DEPTH__MASK; dst[5] &= A6XX_TEX_CONST_5_DEPTH__MASK;
for (unsigned i = 6; i < A6XX_TEX_CONST_DWORDS; i++) for (unsigned i = 6; i < A6XX_TEX_CONST_DWORDS; i++)
dst[i] = 0; dst[i] = 0;
memcpy(&texture.map[i * A6XX_TEX_CONST_DWORDS], dst, sizeof(dst));
} }
struct tu_cs cs; struct tu_cs cs;