diff --git a/libs/video/renderer/vulkan/forward.plist b/libs/video/renderer/vulkan/forward.plist new file mode 100644 index 000000000..e8c703a23 --- /dev/null +++ b/libs/video/renderer/vulkan/forward.plist @@ -0,0 +1,199 @@ +{ + 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; + }, + ); + }; +}