From b57cd626985b215d20de9d83be57afa061aee536 Mon Sep 17 00:00:00 2001 From: Rajnesh Kanwal Date: Tue, 2 Aug 2022 13:52:03 +0100 Subject: [PATCH] pvr: Replace pvr_renderpass_surface_initop with VkAttachmentLoadOp. Signed-off-by: Rajnesh Kanwal Reviewed-by: Karmjit Mahil Part-of: --- src/imagination/vulkan/pvr_cmd_buffer.c | 18 ++++++++---------- src/imagination/vulkan/pvr_hw_pass.c | 13 +++++++------ src/imagination/vulkan/pvr_hw_pass.h | 17 ++++++----------- src/imagination/vulkan/pvr_pass.c | 6 +++--- 4 files changed, 24 insertions(+), 30 deletions(-) diff --git a/src/imagination/vulkan/pvr_cmd_buffer.c b/src/imagination/vulkan/pvr_cmd_buffer.c index 9755142904d..095f9b87ddd 100644 --- a/src/imagination/vulkan/pvr_cmd_buffer.c +++ b/src/imagination/vulkan/pvr_cmd_buffer.c @@ -591,8 +591,8 @@ pvr_load_op_constants_create_and_upload(struct pvr_cmd_buffer *cmd_buffer, assert(load_op->is_hw_object); assert(hw_render->color_init_count == 1); - /* FIXME: add support for RENDERPASS_SURFACE_INITOP_LOAD. */ - assert(color_init->op == RENDERPASS_SURFACE_INITOP_CLEAR); + /* FIXME: add support for VK_ATTACHMENT_LOAD_OP_LOAD. */ + assert(color_init->op == VK_ATTACHMENT_LOAD_OP_CLEAR); /* FIXME: do this at the point we store the clear values? */ hw_clear_value = pvr_get_hw_clear_color(attachment->vk_format, clear_value); @@ -2300,9 +2300,8 @@ static void pvr_perform_start_of_render_attachment_clear( is_depth = vk_format_has_depth(pass->attachments[view_idx].vk_format); is_stencil = vk_format_has_stencil(pass->attachments[view_idx].vk_format); - depth_clear = hw_render->depth_init == RENDERPASS_SURFACE_INITOP_CLEAR; - stencil_clear = hw_render->stencil_init == - RENDERPASS_SURFACE_INITOP_CLEAR; + depth_clear = hw_render->depth_init == VK_ATTACHMENT_LOAD_OP_CLEAR; + stencil_clear = hw_render->stencil_init == VK_ATTACHMENT_LOAD_OP_CLEAR; /* Attempt to clear the ds attachment. Do not erroneously discard an * attachment that has no depth clear but has a stencil attachment. @@ -2310,8 +2309,7 @@ static void pvr_perform_start_of_render_attachment_clear( /* if not (a ∧ c) ∨ (b ∧ d) */ if (!((is_depth && depth_clear) || (is_stencil && stencil_clear))) return; - } else if (hw_render->color_init[index].op != - RENDERPASS_SURFACE_INITOP_CLEAR) { + } else if (hw_render->color_init[index].op != VK_ATTACHMENT_LOAD_OP_CLEAR) { return; } else { view_idx = hw_render->color_init[index].index; @@ -2419,13 +2417,13 @@ static bool pvr_loadops_contain_clear(struct pvr_renderpass_hwsetup *hw_setup) for (uint32_t k = 0; k < hw_render->init_setup.num_render_targets; k++) { if (hw_render->color_init[j + k].op == - RENDERPASS_SURFACE_INITOP_CLEAR) { + VK_ATTACHMENT_LOAD_OP_CLEAR) { return true; } } } - if (hw_render->depth_init == RENDERPASS_SURFACE_INITOP_CLEAR || - hw_render->stencil_init == RENDERPASS_SURFACE_INITOP_CLEAR) { + if (hw_render->depth_init == VK_ATTACHMENT_LOAD_OP_CLEAR || + hw_render->stencil_init == VK_ATTACHMENT_LOAD_OP_CLEAR) { return true; } } diff --git a/src/imagination/vulkan/pvr_hw_pass.c b/src/imagination/vulkan/pvr_hw_pass.c index 00216feb35e..25b55b02030 100644 --- a/src/imagination/vulkan/pvr_hw_pass.c +++ b/src/imagination/vulkan/pvr_hw_pass.c @@ -22,6 +22,7 @@ */ #include +#include #include "pvr_hw_pass.h" #include "pvr_private.h" @@ -39,13 +40,13 @@ pvr_create_renderpass_hwsetup(struct pvr_device *device, bool disable_merge) { struct pvr_renderpass_hwsetup_eot_surface *eot_surface; - enum pvr_renderpass_surface_initop *color_initops; struct pvr_renderpass_hwsetup_subpass *subpasses; struct pvr_renderpass_hwsetup_render *renders; struct pvr_renderpass_colorinit *color_inits; struct pvr_renderpass_hwsetup *hw_setup; struct pvr_renderpass_hw_map *subpass_map; struct usc_mrt_resource *mrt_resources; + VkAttachmentLoadOp *color_initops; VK_MULTIALLOC(ma); vk_multialloc_add(&ma, &hw_setup, __typeof__(*hw_setup), 1); @@ -69,11 +70,11 @@ pvr_create_renderpass_hwsetup(struct pvr_device *device, /* FIXME: Remove hardcoding of hw_setup structure. */ subpasses[0].z_replicate = -1; - subpasses[0].depth_initop = RENDERPASS_SURFACE_INITOP_CLEAR; + subpasses[0].depth_initop = VK_ATTACHMENT_LOAD_OP_CLEAR; subpasses[0].stencil_clear = false; subpasses[0].index = 0; if (pass->subpasses[0].color_count) - color_initops[0] = RENDERPASS_SURFACE_INITOP_NOP; + color_initops[0] = VK_ATTACHMENT_LOAD_OP_DONT_CARE; subpasses[0].color_initops = color_initops; subpasses[0].load_op = NULL; @@ -82,8 +83,8 @@ pvr_create_renderpass_hwsetup(struct pvr_device *device, renders[0].sample_count = 1; renders[0].ds_attach_idx = 1; - renders[0].depth_init = RENDERPASS_SURFACE_INITOP_CLEAR; - renders[0].stencil_init = RENDERPASS_SURFACE_INITOP_NOP; + renders[0].depth_init = VK_ATTACHMENT_LOAD_OP_CLEAR; + renders[0].stencil_init = VK_ATTACHMENT_LOAD_OP_DONT_CARE; mrt_resources[0].type = USC_MRT_RESOURCE_TYPE_OUTPUT_REG; mrt_resources[0].reg.output_reg = 0; @@ -91,7 +92,7 @@ pvr_create_renderpass_hwsetup(struct pvr_device *device, renders[0].init_setup.num_render_targets = 1; renders[0].init_setup.mrt_resources = &mrt_resources[0]; - color_inits[0].op = RENDERPASS_SURFACE_INITOP_CLEAR; + color_inits[0].op = VK_ATTACHMENT_LOAD_OP_CLEAR; color_inits[0].index = 0; renders[0].color_init_count = 1; renders[0].color_init = color_inits; diff --git a/src/imagination/vulkan/pvr_hw_pass.h b/src/imagination/vulkan/pvr_hw_pass.h index 89a6d9a72a9..f090066ea16 100644 --- a/src/imagination/vulkan/pvr_hw_pass.h +++ b/src/imagination/vulkan/pvr_hw_pass.h @@ -26,16 +26,11 @@ #include #include +#include struct pvr_device; struct pvr_render_pass; -enum pvr_renderpass_surface_initop { - RENDERPASS_SURFACE_INITOP_CLEAR, - RENDERPASS_SURFACE_INITOP_LOAD, - RENDERPASS_SURFACE_INITOP_NOP, -}; - struct pvr_renderpass_hwsetup_subpass { /* If >=0 then copy the depth into this pixel output for all fragment * programs in the subpass. @@ -45,7 +40,7 @@ struct pvr_renderpass_hwsetup_subpass { /* The operation to perform on the depth at the start of the subpass. Loads * are deferred to subpasses when depth has been replicated */ - enum pvr_renderpass_surface_initop depth_initop; + VkAttachmentLoadOp depth_initop; /* If true then clear the stencil at the start of the subpass. */ bool stencil_clear; @@ -56,7 +51,7 @@ struct pvr_renderpass_hwsetup_subpass { /* For each color attachment to the subpass: the operation to perform at * the start of the subpass. */ - enum pvr_renderpass_surface_initop *color_initops; + VkAttachmentLoadOp *color_initops; struct pvr_load_op *load_op; }; @@ -66,7 +61,7 @@ struct pvr_renderpass_colorinit { uint32_t index; /* Type of operation: either clear or load. */ - enum pvr_renderpass_surface_initop op; + VkAttachmentLoadOp op; }; /* FIXME: Adding these USC enums and structures here for now to avoid adding @@ -170,10 +165,10 @@ struct pvr_renderpass_hwsetup_render { * Either load from 'ds_surface_id', clear using 'ds_surface_id' or leave * uninitialized. */ - enum pvr_renderpass_surface_initop depth_init; + VkAttachmentLoadOp depth_init; /* Operation on the on-chip stencil at the start of the render. */ - enum pvr_renderpass_surface_initop stencil_init; + VkAttachmentLoadOp stencil_init; /* For each operation: the destination in the on-chip color storage. */ struct usc_mrt_setup init_setup; diff --git a/src/imagination/vulkan/pvr_pass.c b/src/imagination/vulkan/pvr_pass.c index 4917a599f51..e222c019832 100644 --- a/src/imagination/vulkan/pvr_pass.c +++ b/src/imagination/vulkan/pvr_pass.c @@ -88,7 +88,7 @@ static bool pvr_is_subpass_initops_flush_needed( uint32_t color_attachment_mask; for (uint32_t i = 0; i < hw_render->color_init_count; i++) { - if (hw_render->color_init[i].op != RENDERPASS_SURFACE_INITOP_NOP) + if (hw_render->color_init[i].op != VK_ATTACHMENT_LOAD_OP_DONT_CARE) render_loadop_mask |= (1 << hw_render->color_init[i].index); } @@ -226,9 +226,9 @@ pvr_load_op_create(struct pvr_device *device, for (uint32_t i = 0; i < hw_render->color_init_count; i++) { struct pvr_renderpass_colorinit *color_init = &hw_render->color_init[i]; - if (color_init->op == RENDERPASS_SURFACE_INITOP_CLEAR) + if (color_init->op == VK_ATTACHMENT_LOAD_OP_CLEAR) load_op->clear_mask |= 1U << i; - else if (color_init->op == RENDERPASS_SURFACE_INITOP_LOAD) + else if (color_init->op == VK_ATTACHMENT_LOAD_OP_LOAD) pvr_finishme("Missing 'load' load op"); }