Lines Matching defs:subpass

58     * a way that breaks the subpass dependencies. For each draw, we must slide
89 /* Ignore subpass self-dependencies as they allow the app to call
130 * If there is no subpass dependency from VK_SUBPASS_EXTERNAL to the
131 * first subpass that uses an attachment, then an implicit subpass
132 * dependency exists from VK_SUBPASS_EXTERNAL to the first subpass it is
133 * used in. The implicit subpass dependency only exists if there
135 * The subpass dependency operates as if defined with the
140 * .dstSubpass = firstSubpass; // First subpass attachment is used in
152 * Similarly, if there is no subpass dependency from the last subpass
154 * subpass dependency exists from the last subpass it is used in to
155 * VK_SUBPASS_EXTERNAL. The implicit subpass dependency only exists
157 * The subpass dependency operates as if defined with the following
161 * .srcSubpass = lastSubpass; // Last subpass attachment is used in
206 const VkSubpassDescription2 *subpass = &info->pSubpasses[i];
209 for (unsigned j = 0; j < subpass->inputAttachmentCount; j++) {
210 uint32_t a = subpass->pInputAttachments[j].attachment;
213 if (att[a].initialLayout != subpass->pInputAttachments[j].layout &&
219 for (unsigned j = 0; j < subpass->colorAttachmentCount; j++) {
220 uint32_t a = subpass->pColorAttachments[j].attachment;
223 if (att[a].initialLayout != subpass->pColorAttachments[j].layout &&
229 if (subpass->pDepthStencilAttachment &&
230 subpass->pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED) {
231 uint32_t a = subpass->pDepthStencilAttachment->attachment;
232 if (att[a].initialLayout != subpass->pDepthStencilAttachment->layout &&
238 if (subpass->pResolveAttachments) {
239 for (unsigned j = 0; j < subpass->colorAttachmentCount; j++) {
240 uint32_t a = subpass->pResolveAttachments[j].attachment;
243 if (att[a].initialLayout != subpass->pResolveAttachments[j].layout &&
251 vk_find_struct_const(subpass->pNext, SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR);
256 if (att[a].initialLayout != subpass->pDepthStencilAttachment->layout &&
282 const VkSubpassDescription2 *subpass = &info->pSubpasses[i];
285 for (unsigned j = 0; j < subpass->inputAttachmentCount; j++) {
286 uint32_t a = subpass->pInputAttachments[j].attachment;
289 if (att[a].finalLayout != subpass->pInputAttachments[j].layout &&
295 for (unsigned j = 0; j < subpass->colorAttachmentCount; j++) {
296 uint32_t a = subpass->pColorAttachments[j].attachment;
299 if (att[a].finalLayout != subpass->pColorAttachments[j].layout &&
305 if (subpass->pDepthStencilAttachment &&
306 subpass->pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED) {
307 uint32_t a = subpass->pDepthStencilAttachment->attachment;
308 if (att[a].finalLayout != subpass->pDepthStencilAttachment->layout &&
314 if (subpass->pResolveAttachments) {
315 for (unsigned j = 0; j < subpass->colorAttachmentCount; j++) {
316 uint32_t a = subpass->pResolveAttachments[j].attachment;
319 if (att[a].finalLayout != subpass->pResolveAttachments[j].layout &&
327 vk_find_struct_const(subpass->pNext, SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR);
332 if (att[a].finalLayout != subpass->pDepthStencilAttachment->layout &&
375 * earlier subpass modified it, which only works if there's already an
388 struct tu_subpass *subpass = &pass->subpasses[i];
390 for (unsigned j = 0; j < subpass->input_count; j++) {
391 uint32_t a = subpass->input_attachments[j].attachment;
394 subpass->input_attachments[j].patch_input_gmem = written[a];
397 for (unsigned j = 0; j < subpass->color_count; j++) {
398 uint32_t a = subpass->color_attachments[j].attachment;
403 for (unsigned k = 0; k < subpass->input_count; k++) {
404 if (subpass->input_attachments[k].attachment == a &&
405 !subpass->input_attachments[k].patch_input_gmem) {
412 subpass->feedback_invalidate = true;
413 subpass->input_attachments[k].patch_input_gmem = true;
418 for (unsigned j = 0; j < subpass->resolve_count; j++) {
419 uint32_t a = subpass->resolve_attachments[j].attachment;
425 if (subpass->depth_stencil_attachment.attachment != VK_ATTACHMENT_UNUSED) {
426 written[subpass->depth_stencil_attachment.attachment] = true;
427 for (unsigned k = 0; k < subpass->input_count; k++) {
428 if (subpass->input_attachments[k].attachment ==
429 subpass->depth_stencil_attachment.attachment &&
430 !subpass->input_attachments[k].patch_input_gmem) {
431 subpass->feedback_invalidate = true;
432 subpass->input_attachments[k].patch_input_gmem = true;
443 struct tu_subpass *subpass = &pass->subpasses[i];
445 for (unsigned j = 0; j < subpass->color_count; j++) {
446 uint32_t a = subpass->color_attachments[j].attachment;
449 for (unsigned k = 0; k < subpass->input_count; k++) {
450 if (subpass->input_attachments[k].attachment == a) {
451 subpass->feedback = true;
457 if (subpass->depth_stencil_attachment.attachment != VK_ATTACHMENT_UNUSED) {
458 for (unsigned k = 0; k < subpass->input_count; k++) {
459 if (subpass->input_attachments[k].attachment ==
460 subpass->depth_stencil_attachment.attachment) {
461 subpass->feedback = true;
469 static void update_samples(struct tu_subpass *subpass,
472 assert(subpass->samples == 0 || subpass->samples == samples);
473 subpass->samples = samples;
701 struct tu_subpass *subpass = &pass->subpasses[i];
703 subpass->input_count = desc->inputAttachmentCount;
704 subpass->color_count = desc->colorAttachmentCount;
705 subpass->resolve_count = 0;
706 subpass->resolve_depth_stencil = is_depth_stencil_resolve_enabled(ds_resolve);
707 subpass->samples = 0;
708 subpass->srgb_cntl = 0;
710 subpass->multiview_mask = desc->viewMask;
713 subpass->input_attachments = p;
718 subpass->input_attachments[j].attachment = a;
727 subpass->color_attachments = p;
732 subpass->color_attachments[j].attachment = a;
736 update_samples(subpass, pCreateInfo->pAttachments[a].samples);
739 subpass->srgb_cntl |= 1 << j;
741 pass->attachments[a].clear_views |= subpass->multiview_mask;
746 subpass->resolve_attachments = (desc->pResolveAttachments || subpass->resolve_depth_stencil) ? p : NULL;
749 subpass->resolve_count += desc->colorAttachmentCount;
751 subpass->resolve_attachments[j].attachment =
756 if (subpass->resolve_depth_stencil) {
758 subpass->resolve_count++;
760 subpass->resolve_attachments[subpass->resolve_count - 1].attachment = a;
765 subpass->depth_stencil_attachment.attachment = a;
768 update_samples(subpass, pCreateInfo->pAttachments[a].samples);
770 pass->attachments[a].clear_views |= subpass->multiview_mask;
839 tu_subpass_get_attachment_to_resolve(const struct tu_subpass *subpass, uint32_t index)
841 if (subpass->resolve_depth_stencil &&
842 index == (subpass->resolve_count - 1))
843 return subpass->depth_stencil_attachment.attachment;
845 return subpass->color_attachments[index].attachment;