[Mesa-dev] [PATCH] radv/meta: split color renderpass creation out.
Bas Nieuwenhuizen
bas at basnieuwenhuizen.nl
Mon Jan 16 21:48:35 UTC 2017
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
On Mon, Jan 16, 2017 at 9:44 PM, Dave Airlie <airlied at gmail.com> wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> This is just prep work for layered clears, it doesn't change
> anything.
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
> src/amd/vulkan/radv_meta_clear.c | 87 ++++++++++++++++++++++------------------
> 1 file changed, 49 insertions(+), 38 deletions(-)
>
> diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c
> index 601c3de..ff779ea 100644
> --- a/src/amd/vulkan/radv_meta_clear.c
> +++ b/src/amd/vulkan/radv_meta_clear.c
> @@ -205,12 +205,50 @@ create_pipeline(struct radv_device *device,
> }
>
> static VkResult
> +create_color_renderpass(struct radv_device *device,
> + VkFormat vk_format,
> + uint32_t samples,
> + VkRenderPass *pass)
> +{
> + return radv_CreateRenderPass(radv_device_to_handle(device),
> + &(VkRenderPassCreateInfo) {
> + .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
> + .attachmentCount = 1,
> + .pAttachments = &(VkAttachmentDescription) {
> + .format = vk_format,
> + .samples = samples,
> + .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
> + .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
> + .initialLayout = VK_IMAGE_LAYOUT_GENERAL,
> + .finalLayout = VK_IMAGE_LAYOUT_GENERAL,
> + },
> + .subpassCount = 1,
> + .pSubpasses = &(VkSubpassDescription) {
> + .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS,
> + .inputAttachmentCount = 0,
> + .colorAttachmentCount = 1,
> + .pColorAttachments = &(VkAttachmentReference) {
> + .attachment = 0,
> + .layout = VK_IMAGE_LAYOUT_GENERAL,
> + },
> + .pResolveAttachments = NULL,
> + .pDepthStencilAttachment = &(VkAttachmentReference) {
> + .attachment = VK_ATTACHMENT_UNUSED,
> + .layout = VK_IMAGE_LAYOUT_GENERAL,
> + },
> + .preserveAttachmentCount = 1,
> + .pPreserveAttachments = (uint32_t[]) { 0 },
> + },
> + .dependencyCount = 0,
> + }, &device->meta_state.alloc, pass);
> +}
> +
> +static VkResult
> create_color_pipeline(struct radv_device *device,
> - VkFormat vk_format,
> uint32_t samples,
> uint32_t frag_output,
> struct radv_pipeline **pipeline,
> - VkRenderPass *pass)
> + VkRenderPass pass)
> {
> struct nir_shader *vs_nir;
> struct nir_shader *fs_nir;
> @@ -270,44 +308,11 @@ create_color_pipeline(struct radv_device *device,
> .pAttachments = blend_attachment_state
> };
>
> - result = radv_CreateRenderPass(radv_device_to_handle(device),
> - &(VkRenderPassCreateInfo) {
> - .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
> - .attachmentCount = 1,
> - .pAttachments = &(VkAttachmentDescription) {
> - .format = vk_format,
> - .samples = samples,
> - .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
> - .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
> - .initialLayout = VK_IMAGE_LAYOUT_GENERAL,
> - .finalLayout = VK_IMAGE_LAYOUT_GENERAL,
> - },
> - .subpassCount = 1,
> - .pSubpasses = &(VkSubpassDescription) {
> - .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS,
> - .inputAttachmentCount = 0,
> - .colorAttachmentCount = 1,
> - .pColorAttachments = &(VkAttachmentReference) {
> - .attachment = 0,
> - .layout = VK_IMAGE_LAYOUT_GENERAL,
> - },
> - .pResolveAttachments = NULL,
> - .pDepthStencilAttachment = &(VkAttachmentReference) {
> - .attachment = VK_ATTACHMENT_UNUSED,
> - .layout = VK_IMAGE_LAYOUT_GENERAL,
> - },
> - .preserveAttachmentCount = 1,
> - .pPreserveAttachments = (uint32_t[]) { 0 },
> - },
> - .dependencyCount = 0,
> - }, &device->meta_state.alloc, pass);
>
> - if (result != VK_SUCCESS)
> - return result;
> struct radv_graphics_pipeline_create_info extra = {
> .use_rectlist = true,
> };
> - result = create_pipeline(device, radv_render_pass_from_handle(*pass),
> + result = create_pipeline(device, radv_render_pass_from_handle(pass),
> samples, vs_nir, fs_nir, &vi_state, &ds_state, &cb_state,
> &extra, &device->meta_state.alloc, pipeline);
>
> @@ -743,8 +748,14 @@ radv_device_init_meta_clear_state(struct radv_device *device)
> VkFormat format = pipeline_formats[j];
> unsigned fs_key = radv_format_meta_fs_key(format);
> assert(!state->clear[i].color_pipelines[fs_key]);
> - res = create_color_pipeline(device, format, samples, 0, &state->clear[i].color_pipelines[fs_key],
> - &state->clear[i].render_pass[fs_key]);
> +
> + res = create_color_renderpass(device, format, samples,
> + &state->clear[i].render_pass[fs_key]);
> + if (res != VK_SUCCESS)
> + goto fail;
> +
> + res = create_color_pipeline(device, samples, 0, &state->clear[i].color_pipelines[fs_key],
> + state->clear[i].render_pass[fs_key]);
> if (res != VK_SUCCESS)
> goto fail;
>
> --
> 2.9.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list