Mesa (main): panvk: Use push constants for clear

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jun 8 13:56:10 UTC 2022


Module: Mesa
Branch: main
Commit: 1a0217e3fb034efcb1c1b36edb752c30cfe439f7
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1a0217e3fb034efcb1c1b36edb752c30cfe439f7

Author: Alyssa Rosenzweig <alyssa at collabora.com>
Date:   Tue Jun  7 15:16:51 2022 -0400

panvk: Use push constants for clear

Signed-off-by: Alyssa Rosenzweig <alyssa at collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16916>

---

 src/panfrost/vulkan/panvk_vX_meta_clear.c | 56 +++++++------------------------
 1 file changed, 12 insertions(+), 44 deletions(-)

diff --git a/src/panfrost/vulkan/panvk_vX_meta_clear.c b/src/panfrost/vulkan/panvk_vX_meta_clear.c
index 0e5320b9496..eedd8222fce 100644
--- a/src/panfrost/vulkan/panvk_vX_meta_clear.c
+++ b/src/panfrost/vulkan/panvk_vX_meta_clear.c
@@ -43,24 +43,20 @@ panvk_meta_clear_color_attachment_shader(struct panfrost_device *pdev,
                                      "panvk_meta_clear_rt%d_attachment(base_type=%d)",
                                      rt, base_type);
 
-   b.shader->info.num_ubos = 1;
-
    const struct glsl_type *out_type = glsl_vector_type(base_type, 4);
    nir_variable *out =
       nir_variable_create(b.shader, nir_var_shader_out, out_type, "out");
    out->data.location = FRAG_RESULT_DATA0 + rt;
 
-   nir_ssa_def *clear_values = nir_load_ubo(&b, 4, 32, nir_imm_int(&b, 0),
-                                            nir_imm_int(&b, 0),
-                                            .align_mul = 4,
-                                            .align_offset = 0,
-                                            .range_base = 0,
-                                            .range = ~0);
+   nir_ssa_def *clear_values = nir_load_push_constant(&b, 4, 32,
+                                                      nir_imm_int(&b, 0),
+                                                     .range = ~0);
    nir_store_var(&b, out, clear_values, 0xff);
 
    struct panfrost_compile_inputs inputs = {
       .gpu_id = pdev->gpu_id,
       .is_blit = true,
+      .no_ubo_to_push = true,
    };
 
    struct util_dynarray binary;
@@ -68,8 +64,7 @@ panvk_meta_clear_color_attachment_shader(struct panfrost_device *pdev,
    util_dynarray_init(&binary, NULL);
    GENX(pan_shader_compile)(b.shader, &inputs, &binary, shader_info);
 
-   /* Make sure UBO words have been upgraded to push constants */
-   assert(shader_info->ubo_mask == 0);
+   shader_info->push.count = 4;
 
    mali_ptr shader =
       pan_pool_upload_aligned(bin_pool, binary.data, binary.size,
@@ -93,8 +88,6 @@ panvk_meta_clear_zs_attachment_shader(struct panfrost_device *pdev,
                                      "panvk_meta_clear_%s%s_attachment()",
                                      clear_z ? "z" : "", clear_s ? "s" : "");
 
-   b.shader->info.num_ubos = 1;
-
    unsigned drv_loc = 0;
    nir_variable *z_out =
       clear_z ?
@@ -105,12 +98,9 @@ panvk_meta_clear_zs_attachment_shader(struct panfrost_device *pdev,
       nir_variable_create(b.shader, nir_var_shader_out, glsl_float_type(), "stencil") :
       NULL;
 
-   nir_ssa_def *clear_values = nir_load_ubo(&b, 2, 32, nir_imm_int(&b, 0),
-                                            nir_imm_int(&b, 0),
-                                            .align_mul = 4,
-                                            .align_offset = 0,
-                                            .range_base = 0,
-                                            .range = ~0);
+   nir_ssa_def *clear_values = nir_load_push_constant(&b, 2, 32,
+                                                      nir_imm_int(&b, 0),
+                                                     .range = ~0);
 
    if (z_out) {
       z_out->data.location = FRAG_RESULT_DEPTH;
@@ -127,6 +117,7 @@ panvk_meta_clear_zs_attachment_shader(struct panfrost_device *pdev,
    struct panfrost_compile_inputs inputs = {
       .gpu_id = pdev->gpu_id,
       .is_blit = true,
+      .no_ubo_to_push = true,
    };
 
    struct util_dynarray binary;
@@ -134,8 +125,7 @@ panvk_meta_clear_zs_attachment_shader(struct panfrost_device *pdev,
    util_dynarray_init(&binary, NULL);
    GENX(pan_shader_compile)(b.shader, &inputs, &binary, shader_info);
 
-   /* Make sure UBO words have been upgraded to push constants */
-   assert(shader_info->ubo_mask == 0);
+   shader_info->push.count = 2;
 
    mali_ptr shader =
       pan_pool_upload_aligned(bin_pool, binary.data, binary.size,
@@ -254,27 +244,6 @@ panvk_meta_clear_attachments_emit_rsd(struct panfrost_device *pdev,
    return rsd_ptr.gpu;
 }
 
-static mali_ptr
-panvk_meta_clear_attachment_emit_push_constants(struct panfrost_device *pdev,
-                                                const struct panfrost_ubo_push *pushmap,
-                                                struct pan_pool *pool,
-                                                const VkClearValue *clear_value)
-{
-   assert(pushmap->count <= (sizeof(*clear_value) / 4));
-
-   uint32_t *in = (uint32_t *)clear_value;
-   uint32_t pushvals[sizeof(*clear_value) / 4];
-
-   for (unsigned i = 0; i < pushmap->count; i++) {
-      assert(i < ARRAY_SIZE(pushvals));
-      assert(pushmap->words[i].ubo == 0);
-      assert(pushmap->words[i].offset < sizeof(*clear_value));
-      pushvals[i] = in[pushmap->words[i].offset / 4];
-   }
-
-   return pan_pool_upload_aligned(pool, pushvals, sizeof(pushvals), 16);
-}
-
 static void
 panvk_meta_clear_attachment_emit_dcd(struct pan_pool *pool,
                                      mali_ptr coords, mali_ptr push_constants,
@@ -436,9 +405,8 @@ panvk_meta_clear_attachment(struct panvk_cmd_buffer *cmdbuf,
                                             shader);
 
    mali_ptr pushconsts =
-      panvk_meta_clear_attachment_emit_push_constants(pdev, &shader_info->push,
-                                                      &cmdbuf->desc_pool.base,
-                                                      clear_value);
+      pan_pool_upload_aligned(&cmdbuf->desc_pool.base,
+                              clear_value, sizeof(*clear_value), 16);
    mali_ptr tsd = PAN_ARCH >= 6 ? batch->tls.gpu : batch->fb.desc.gpu;
    mali_ptr tiler = PAN_ARCH >= 6 ? batch->tiler.descs.gpu : 0;
 



More information about the mesa-commit mailing list