Lines Matching refs:subpass
46 * a way that breaks the subpass dependencies. For each draw, we must slide
77 /* Ignore subpass self-dependencies as they allow the app to call
101 perf_debug((struct tu_device *)pass->base.device, "Disabling gmem rendering due to invalid subpass dependency");
134 * If there is no subpass dependency from VK_SUBPASS_EXTERNAL to the
135 * first subpass that uses an attachment, then an implicit subpass
136 * dependency exists from VK_SUBPASS_EXTERNAL to the first subpass it is
137 * used in. The implicit subpass dependency only exists if there
139 * The subpass dependency operates as if defined with the
144 * .dstSubpass = firstSubpass; // First subpass attachment is used in
156 * Similarly, if there is no subpass dependency from the last subpass
158 * subpass dependency exists from the last subpass it is used in to
159 * VK_SUBPASS_EXTERNAL. The implicit subpass dependency only exists
161 * The subpass dependency operates as if defined with the following
165 * .srcSubpass = lastSubpass; // Last subpass attachment is used in
210 const VkSubpassDescription2 *subpass = &info->pSubpasses[i];
213 for (unsigned j = 0; j < subpass->inputAttachmentCount; j++) {
214 uint32_t a = subpass->pInputAttachments[j].attachment;
220 vk_att_ref_stencil_layout(&subpass->pInputAttachments[j], att) :
224 if ((att[a].initialLayout != subpass->pInputAttachments[j].layout ||
231 for (unsigned j = 0; j < subpass->colorAttachmentCount; j++) {
232 uint32_t a = subpass->pColorAttachments[j].attachment;
235 if (att[a].initialLayout != subpass->pColorAttachments[j].layout &&
241 if (subpass->pDepthStencilAttachment &&
242 subpass->pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED) {
243 uint32_t a = subpass->pDepthStencilAttachment->attachment;
244 uint32_t stencil_layout = vk_att_ref_stencil_layout(subpass->pDepthStencilAttachment, att);
247 if ((att[a].initialLayout != subpass->pDepthStencilAttachment->layout ||
255 if (subpass->pResolveAttachments) {
256 for (unsigned j = 0; j < subpass->colorAttachmentCount; j++) {
257 uint32_t a = subpass->pResolveAttachments[j].attachment;
260 if (att[a].initialLayout != subpass->pResolveAttachments[j].layout &&
268 vk_find_struct_const(subpass->pNext, SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE);
276 if ((att[a].initialLayout != subpass->pDepthStencilAttachment->layout ||
303 const VkSubpassDescription2 *subpass = &info->pSubpasses[i];
306 for (unsigned j = 0; j < subpass->inputAttachmentCount; j++) {
307 uint32_t a = subpass->pInputAttachments[j].attachment;
312 vk_att_ref_stencil_layout(&subpass->pInputAttachments[j], att) :
316 if ((att[a].finalLayout != subpass->pInputAttachments[j].layout ||
323 for (unsigned j = 0; j < subpass->colorAttachmentCount; j++) {
324 uint32_t a = subpass->pColorAttachments[j].attachment;
327 if (att[a].finalLayout != subpass->pColorAttachments[j].layout &&
333 if (subpass->pDepthStencilAttachment &&
334 subpass->pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED) {
335 uint32_t a = subpass->pDepthStencilAttachment->attachment;
336 uint32_t stencil_layout = vk_att_ref_stencil_layout(subpass->pDepthStencilAttachment, att);
339 if ((att[a].finalLayout != subpass->pDepthStencilAttachment->layout ||
347 if (subpass->pResolveAttachments) {
348 for (unsigned j = 0; j < subpass->colorAttachmentCount; j++) {
349 uint32_t a = subpass->pResolveAttachments[j].attachment;
352 if (att[a].finalLayout != subpass->pResolveAttachments[j].layout &&
360 vk_find_struct_const(subpass->pNext, SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE);
368 if ((att[a].finalLayout != subpass->pDepthStencilAttachment->layout ||
412 * earlier subpass modified it, which only works if there's already an
425 struct tu_subpass *subpass = &pass->subpasses[i];
427 for (unsigned j = 0; j < subpass->input_count; j++) {
428 uint32_t a = subpass->input_attachments[j].attachment;
431 subpass->input_attachments[j].patch_input_gmem = written[a];
434 for (unsigned j = 0; j < subpass->color_count; j++) {
435 uint32_t a = subpass->color_attachments[j].attachment;
440 for (unsigned k = 0; k < subpass->input_count; k++) {
441 if (subpass->input_attachments[k].attachment == a &&
442 !subpass->input_attachments[k].patch_input_gmem) {
449 subpass->feedback_invalidate = true;
450 subpass->input_attachments[k].patch_input_gmem = true;
455 for (unsigned j = 0; j < subpass->resolve_count; j++) {
456 uint32_t a = subpass->resolve_attachments[j].attachment;
462 if (subpass->depth_stencil_attachment.attachment != VK_ATTACHMENT_UNUSED) {
463 written[subpass->depth_stencil_attachment.attachment] = true;
464 for (unsigned k = 0; k < subpass->input_count; k++) {
465 if (subpass->input_attachments[k].attachment ==
466 subpass->depth_stencil_attachment.attachment &&
467 !subpass->input_attachments[k].patch_input_gmem) {
468 subpass->feedback_invalidate = true;
469 subpass->input_attachments[k].patch_input_gmem = true;
480 struct tu_subpass *subpass = &pass->subpasses[i];
482 for (unsigned j = 0; j < subpass->color_count; j++) {
483 uint32_t a = subpass->color_attachments[j].attachment;
486 for (unsigned k = 0; k < subpass->input_count; k++) {
487 if (subpass->input_attachments[k].attachment == a) {
488 subpass->feedback_loop_color = true;
494 if (subpass->depth_stencil_attachment.attachment != VK_ATTACHMENT_UNUSED) {
495 for (unsigned k = 0; k < subpass->input_count; k++) {
496 if (subpass->input_attachments[k].attachment ==
497 subpass->depth_stencil_attachment.attachment) {
498 subpass->feedback_loop_ds = true;
506 static void update_samples(struct tu_subpass *subpass,
509 assert(subpass->samples == 0 || subpass->samples == samples);
510 subpass->samples = samples;
735 struct tu_subpass *subpass = &pass->subpasses[i];
738 update_samples(subpass, pCreateInfo->pAttachments[a].samples);
739 pass->attachments[a].clear_views |= subpass->multiview_mask;
826 struct tu_subpass *subpass = &pass->subpasses[i];
828 subpass->input_count = desc->inputAttachmentCount;
829 subpass->color_count = desc->colorAttachmentCount;
830 subpass->resolve_count = 0;
831 subpass->resolve_depth_stencil = is_depth_stencil_resolve_enabled(ds_resolve);
832 subpass->samples = 0;
833 subpass->srgb_cntl = 0;
840 subpass->raster_order_attachment_access = desc->flags & raster_order_access_bits;
842 subpass->multiview_mask = desc->viewMask;
845 subpass->input_attachments = p;
850 subpass->input_attachments[j].attachment = a;
859 subpass->color_attachments = p;
864 subpass->color_attachments[j].attachment = a;
870 subpass->srgb_cntl |= 1 << j;
875 subpass->resolve_attachments = (desc->pResolveAttachments || subpass->resolve_depth_stencil) ? p : NULL;
878 subpass->resolve_count += desc->colorAttachmentCount;
880 subpass->resolve_attachments[j].attachment =
891 if (subpass->resolve_depth_stencil) {
893 subpass->resolve_count++;
895 subpass->resolve_attachments[subpass->resolve_count - 1].attachment = a;
905 subpass->depth_stencil_attachment.attachment = a;
981 struct tu_subpass *subpass = &cmd_buffer->dynamic_subpass;
986 subpass->color_count = subpass->resolve_count = info->colorAttachmentCount;
987 subpass->resolve_depth_stencil = false;
988 subpass->color_attachments = cmd_buffer->dynamic_color_attachments;
989 subpass->resolve_attachments = cmd_buffer->dynamic_resolve_attachments;
990 subpass->feedback_invalidate = false;
991 subpass->feedback_loop_ds = subpass->feedback_loop_color = false;
992 subpass->input_count = 0;
993 subpass->samples = 0;
994 subpass->srgb_cntl = 0;
995 subpass->raster_order_attachment_access = false;
996 subpass->multiview_mask = info->viewMask;
1004 subpass->color_attachments[i].attachment = VK_ATTACHMENT_UNUSED;
1005 subpass->resolve_attachments[i].attachment = VK_ATTACHMENT_UNUSED;
1015 subpass->color_attachments[i].attachment = a++;
1017 subpass->samples = view->image->layout->nr_samples;
1020 subpass->srgb_cntl |= 1 << i;
1030 subpass->resolve_attachments[i].attachment = a++;
1033 subpass->resolve_attachments[i].attachment = VK_ATTACHMENT_UNUSED;
1052 subpass->depth_stencil_attachment.attachment = a++;
1060 subpass->samples = view->image->layout->nr_samples;
1063 unsigned i = subpass->resolve_count++;
1074 subpass->resolve_attachments[i].attachment = a++;
1076 subpass->resolve_depth_stencil = true;
1081 subpass->depth_stencil_attachment.attachment = VK_ATTACHMENT_UNUSED;
1084 subpass->depth_stencil_attachment.attachment = VK_ATTACHMENT_UNUSED;
1099 struct tu_subpass *subpass = &cmd_buffer->dynamic_subpass;
1104 subpass->color_count = info->colorAttachmentCount;
1105 subpass->resolve_count = 0;
1106 subpass->resolve_depth_stencil = false;
1107 subpass->color_attachments = cmd_buffer->dynamic_color_attachments;
1108 subpass->resolve_attachments = NULL;
1109 subpass->feedback_invalidate = false;
1110 subpass->feedback_loop_ds = subpass->feedback_loop_color = false;
1111 subpass->input_count = 0;
1112 subpass->samples = 0;
1113 subpass->srgb_cntl = 0;
1114 subpass->raster_order_attachment_access = false;
1115 subpass->multiview_mask = info->viewMask;
1116 subpass->samples = info->rasterizationSamples;
1124 subpass->color_attachments[i].attachment = VK_ATTACHMENT_UNUSED;
1130 subpass->samples = info->rasterizationSamples;
1131 subpass->color_attachments[i].attachment = a++;
1145 subpass->depth_stencil_attachment.attachment = a++;
1148 subpass->depth_stencil_attachment.attachment = VK_ATTACHMENT_UNUSED;
1163 tu_subpass_get_attachment_to_resolve(const struct tu_subpass *subpass, uint32_t index)
1165 if (subpass->resolve_depth_stencil &&
1166 index == (subpass->resolve_count - 1))
1167 return subpass->depth_stencil_attachment.attachment;
1169 return subpass->color_attachments[index].attachment;