{ flat_color_image_template = { imageType = `2d; samples = $msaaSamples; extent = { width = $output.extent.width; height = $output.extent.height; depth = 1; }; mipLevels = 1; arrayLayers = 1; tiling = optimal; usage = color_attachment|transient_attachment; }; images = { depth = { @inherit = @properties.flat_color_image_template; format = x8_d24_unorm_pack32; usage = depth_stencil_attachment|transient_attachment; }; color = { @inherit = @properties.flat_color_image_template; format = $output.format; }; }; flat_color_view_template = { viewType = `2d; components = { r = identity; g = identity; b = identity; a = identity; }; subresourceRange = { aspectMask = color; levelCount = 1; layerCount = 1; }; }; imageViews = { depth = { @inherit = $properties.flat_color_view_template; image = depth; format = $properties.images.depth.format; subresourceRange = { aspectMask = depth; }; }; color = { @inherit = $properties.flat_color_view_template; image = color; format = $properties.images.color.format; }; }; framebuffer = { renderPass = $properties.renderpass; attachment = ($output.view, depth); width = $output.extent.width; height = $output.extent.height; layers = 1; }; framebuffer_msaa = { renderPass = $properties.renderpass_msaa; attachment = ($output.view, depth, color); width = $output.extent.width; height = $output.extent.height; layers = 1; }; attachment_template = { samples = 1; loadOp = dont_care; storeOp = dont_care; stencilLoadOp = dont_care; stencilStoreOp = dont_care; initialLayout = undefined; finalLayout = color_attachment_optimal; }; renderpass = { attachments = ( { @inherit = $properties.attachment_template; format = $output.format; loadOp = clear; storeOp = store; finalLayout = present_src_khr; }, { @inherit = $properties.attachment_template; format = $properties.images.depth.format; loadOp = clear; finalLayout = depth_stencil_attachment_optimal; }, ); subpasses = ( { pipelineBindPoint = graphics; colorAttachments = ( { attachment = 0; layout = color_attachment_optimal; } ); depthStencilAttachment = { attachment = 1; layout = depth_stencil_attachment_optimal; }; preserveAttachments = (); }, ); dependencies = ( { srcSubpass = ~0u; // external dstSubpass = 0; srcStageMask = top_of_pipe; dstStageMask = color_attachment_output; srcAccessMask = memory_read; dstAccessMask = color_attachment_write; dependencyFlags = by_region; }, { srcSubpass = 0; dstSubpass = ~0u; // external srcStageMask = color_attachment_output; dstStageMask = bottom_of_pipe; srcAccessMask = color_attachment_write; dstAccessMask = memory_read; dependencyFlags = by_region; }, ); }; renderpass_msaa = { attachments = ( { @inherit = $properties.attachment_template; format = $output.format; storeOp = store; finalLayout = present_src_khr; }, { @inherit = $properties.attachment_template; format = $properties.images.depth.format; samples = $msaaSamples; loadOp = clear; storeOp = dont_care; finalLayout = depth_stencil_attachment_optimal; }, { @inherit = $properties.attachment_template; format = $swapchain.format; samples = $msaaSamples; loadOp = clear; storeOp = store;// dont_care? finalLayout = color_attachment_optimal; }, ); subpasses = ( { pipelineBindPoint = graphics; colorAttachments = ( { attachment = 2; layout = color_attachment_optimal; } ); resolveAttachments = ( { attachment = 0; layout = color_attachment_optimal; } ); depthStencilAttachment = { attachment = 1; layout = depth_stencil_attachment_optimal; }; preserveAttachments = (); }, ); dependencies = ( { srcSubpass = ~0u; // external dstSubpass = 0; srcStageMask = top_of_pipe; dstStageMask = color_attachment_output; srcAccessMask = memory_read; dstAccessMask = color_attachment_write; dependencyFlags = by_region; }, { srcSubpass = 0; dstSubpass = ~0u; // external srcStageMask = color_attachment_output; dstStageMask = bottom_of_pipe; srcAccessMask = color_attachment_write; dstAccessMask = memory_read; dependencyFlags = by_region; }, ); }; }