Mesa (main): panvk: Use push constants for copy shaders

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


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

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

panvk: Use push constants for copy shaders

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_copy.c | 189 +++++++------------------------
 1 file changed, 41 insertions(+), 148 deletions(-)

diff --git a/src/panfrost/vulkan/panvk_vX_meta_copy.c b/src/panfrost/vulkan/panvk_vX_meta_copy.c
index 6dffbfa1236..fa4349c3c4e 100644
--- a/src/panfrost/vulkan/panvk_vX_meta_copy.c
+++ b/src/panfrost/vulkan/panvk_vX_meta_copy.c
@@ -124,13 +124,11 @@ panvk_meta_copy_emit_dcd(struct pan_pool *pool,
                          mali_ptr src_coords, mali_ptr dst_coords,
                          mali_ptr texture, mali_ptr sampler,
                          mali_ptr vpd, mali_ptr tsd, mali_ptr rsd,
-                         mali_ptr ubos, mali_ptr push_constants,
-                         void *out)
+                         mali_ptr push_constants, void *out)
 {
    pan_pack(out, DRAW, cfg) {
       cfg.thread_storage = tsd;
       cfg.state = rsd;
-      cfg.uniform_buffers = ubos;
       cfg.push_uniforms = push_constants;
       cfg.position = dst_coords;
       if (src_coords) {
@@ -149,7 +147,7 @@ panvk_meta_copy_emit_tiler_job(struct pan_pool *desc_pool,
                                struct pan_scoreboard *scoreboard,
                                mali_ptr src_coords, mali_ptr dst_coords,
                                mali_ptr texture, mali_ptr sampler,
-                               mali_ptr ubo, mali_ptr push_constants,
+                               mali_ptr push_constants,
                                mali_ptr vpd, mali_ptr rsd,
                                mali_ptr tsd, mali_ptr tiler)
 {
@@ -157,7 +155,7 @@ panvk_meta_copy_emit_tiler_job(struct pan_pool *desc_pool,
       pan_pool_alloc_desc(desc_pool, TILER_JOB);
 
    panvk_meta_copy_emit_dcd(desc_pool, src_coords, dst_coords,
-                            texture, sampler, vpd, tsd, rsd, ubo, push_constants,
+                            texture, sampler, vpd, tsd, rsd, push_constants,
                             pan_section_ptr(job.cpu, TILER_JOB, DRAW));
 
    pan_section_pack(job.cpu, TILER_JOB, PRIMITIVE, cfg) {
@@ -194,7 +192,7 @@ panvk_meta_copy_emit_compute_job(struct pan_pool *desc_pool,
                                  const struct pan_compute_dim *num_wg,
                                  const struct pan_compute_dim *wg_sz,
                                  mali_ptr texture, mali_ptr sampler,
-                                 mali_ptr ubo, mali_ptr push_constants,
+                                 mali_ptr push_constants,
                                  mali_ptr rsd, mali_ptr tsd)
 {
    struct panfrost_ptr job =
@@ -212,7 +210,7 @@ panvk_meta_copy_emit_compute_job(struct pan_pool *desc_pool,
    }
 
    panvk_meta_copy_emit_dcd(desc_pool, 0, 0, texture, sampler,
-                            0, tsd, rsd, ubo, push_constants,
+                            0, tsd, rsd, push_constants,
                             pan_section_ptr(job.cpu, COMPUTE_JOB, DRAW));
 
    panfrost_add_job(desc_pool, scoreboard, MALI_JOB_TYPE_COMPUTE,
@@ -327,42 +325,6 @@ panvk_meta_copy_to_img_emit_rsd(struct panfrost_device *pdev,
    return rsd_ptr.gpu;
 }
 
-static mali_ptr
-panvk_meta_copy_emit_ubo(struct panfrost_device *pdev,
-                         struct pan_pool *pool,
-                         void *data, unsigned size)
-{
-   struct panfrost_ptr ubo = pan_pool_alloc_desc(pool, UNIFORM_BUFFER);
-
-   pan_pack(ubo.cpu, UNIFORM_BUFFER, cfg) {
-      cfg.entries = DIV_ROUND_UP(size, 16);
-      cfg.pointer = pan_pool_upload_aligned(pool, data, size, 16);
-   }
-
-   return ubo.gpu;
-}
-
-static mali_ptr
-panvk_meta_copy_emit_push_constants(struct panfrost_device *pdev,
-                                    const struct panfrost_ubo_push *pushmap,
-                                    struct pan_pool *pool,
-                                    const void *data, unsigned size)
-{
-   assert(pushmap->count <= (size / 4));
-
-   const uint32_t *in = data;
-   uint32_t pushvals[PAN_MAX_PUSH];
-
-   for (unsigned i = 0; i < pushmap->count; i++) {
-      assert(i < ARRAY_SIZE(pushvals));
-      assert(pushmap->words[i].ubo == 0);
-      assert(pushmap->words[i].offset < size);
-      pushvals[i] = in[pushmap->words[i].offset / 4];
-   }
-
-   return pan_pool_upload_aligned(pool, pushvals, size, 16);
-}
-
 static mali_ptr
 panvk_meta_copy_to_buf_emit_rsd(struct panfrost_device *pdev,
                                 struct pan_pool *desc_pool,
@@ -524,6 +486,7 @@ panvk_meta_copy_img2img_shader(struct panfrost_device *pdev,
    struct panfrost_compile_inputs inputs = {
       .gpu_id = pdev->gpu_id,
       .is_blit = true,
+      .no_ubo_to_push = true,
    };
 
 #if PAN_ARCH >= 6
@@ -583,7 +546,7 @@ struct panvk_meta_copy_img2img_format_info {
    enum pipe_format srcfmt;
    enum pipe_format dstfmt;
    unsigned dstmask;
-};
+} PACKED;
 
 static const struct panvk_meta_copy_img2img_format_info panvk_meta_copy_img2img_fmts[] = {
    { PIPE_FORMAT_R8_UNORM, PIPE_FORMAT_R8_UNORM, 0x1},
@@ -792,7 +755,7 @@ panvk_meta_copy_img2img(struct panvk_cmd_buffer *cmdbuf,
       job = panvk_meta_copy_emit_tiler_job(&cmdbuf->desc_pool.base,
                                            &batch->scoreboard,
                                            src_coords, dst_coords,
-                                           texture, sampler, 0, 0,
+                                           texture, sampler, 0,
                                            vpd, rsd, tsd, tiler);
 
       util_dynarray_append(&batch->jobs, void *, job.cpu);
@@ -911,7 +874,7 @@ panvk_meta_copy_buf2img_format(enum pipe_format imgfmt)
 struct panvk_meta_copy_format_info {
    enum pipe_format imgfmt;
    unsigned mask;
-};
+} PACKED;
 
 static const struct panvk_meta_copy_format_info panvk_meta_copy_buf2img_fmts[] = {
    { PIPE_FORMAT_R8_UNORM, 0x1 },
@@ -940,16 +903,13 @@ struct panvk_meta_copy_buf2img_info {
          unsigned surf;
       } stride;
    } buf;
-};
+} PACKED;
 
 #define panvk_meta_copy_buf2img_get_info_field(b, field) \
-        nir_load_ubo((b), 1, \
+        nir_load_push_constant((b), 1, \
                      sizeof(((struct panvk_meta_copy_buf2img_info *)0)->field) * 8, \
                      nir_imm_int(b, 0), \
-                     nir_imm_int(b, offsetof(struct panvk_meta_copy_buf2img_info, field)), \
-                     .align_mul = 4, \
-                     .align_offset = 0, \
-                     .range_base = 0, \
+                     .base = offsetof(struct panvk_meta_copy_buf2img_info, field), \
                      .range = ~0)
 
 static mali_ptr
@@ -965,8 +925,6 @@ panvk_meta_copy_buf2img_shader(struct panfrost_device *pdev,
                                      util_format_name(key.imgfmt),
                                      key.mask);
 
-   b.shader->info.num_ubos = 1;
-
    nir_variable *coord_var =
       nir_variable_create(b.shader, nir_var_shader_in,
                           glsl_vector_type(GLSL_TYPE_FLOAT, 3),
@@ -1071,6 +1029,7 @@ panvk_meta_copy_buf2img_shader(struct panfrost_device *pdev,
    struct panfrost_compile_inputs inputs = {
       .gpu_id = pdev->gpu_id,
       .is_blit = true,
+      .no_ubo_to_push = true,
    };
 
 #if PAN_ARCH >= 6
@@ -1087,9 +1046,7 @@ panvk_meta_copy_buf2img_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_count == 1);
+   shader_info->push.count = DIV_ROUND_UP(sizeof(struct panvk_meta_copy_buf2img_info), 4);
 
    mali_ptr shader =
       pan_pool_upload_aligned(bin_pool, binary.data, binary.size,
@@ -1118,7 +1075,6 @@ panvk_meta_copy_buf2img(struct panvk_cmd_buffer *cmdbuf,
                         const struct panvk_image *img,
                         const VkBufferImageCopy2 *region)
 {
-   struct panfrost_device *pdev = &cmdbuf->device->physical_device->pdev;
    struct pan_fb_info *fbinfo = &cmdbuf->state.fb.info;
    unsigned minx = MAX2(region->imageOffset.x, 0);
    unsigned miny = MAX2(region->imageOffset.y, 0);
@@ -1149,8 +1105,6 @@ panvk_meta_copy_buf2img(struct panvk_cmd_buffer *cmdbuf,
 
    mali_ptr rsd =
       cmdbuf->device->physical_device->meta.copy.buf2img[fmtidx].rsd;
-   const struct panfrost_ubo_push *pushmap =
-      &cmdbuf->device->physical_device->meta.copy.buf2img[fmtidx].pushmap;
 
    const struct vk_image_buffer_layout buflayout =
       vk_image_buffer_copy_layout(&img->vk, region);
@@ -1161,10 +1115,7 @@ panvk_meta_copy_buf2img(struct panvk_cmd_buffer *cmdbuf,
    };
 
    mali_ptr pushconsts =
-      panvk_meta_copy_emit_push_constants(pdev, pushmap, &cmdbuf->desc_pool.base,
-                                          &info, sizeof(info));
-   mali_ptr ubo =
-      panvk_meta_copy_emit_ubo(pdev, &cmdbuf->desc_pool.base, &info, sizeof(info));
+      pan_pool_upload_aligned(&cmdbuf->desc_pool.base, &info, sizeof(info), 16);
 
    struct pan_image_view view = {
       .format = key.imgfmt,
@@ -1235,7 +1186,7 @@ panvk_meta_copy_buf2img(struct panvk_cmd_buffer *cmdbuf,
       job = panvk_meta_copy_emit_tiler_job(&cmdbuf->desc_pool.base,
                                            &batch->scoreboard,
                                            src_coords, dst_coords,
-                                           0, 0, ubo, pushconsts,
+                                           0, 0, pushconsts,
                                            vpd, rsd, tsd, tiler);
 
       util_dynarray_append(&batch->jobs, void *, job.cpu);
@@ -1254,7 +1205,6 @@ panvk_meta_copy_buf2img_init(struct panvk_physical_device *dev)
          panvk_meta_copy_buf2img_shader(&dev->pdev, &dev->meta.bin_pool.base,
                                         panvk_meta_copy_buf2img_fmts[i],
                                         &shader_info);
-      dev->meta.copy.buf2img[i].pushmap = shader_info.push;
       dev->meta.copy.buf2img[i].rsd =
          panvk_meta_copy_to_img_emit_rsd(&dev->pdev, &dev->meta.desc_pool.base,
                                          shader, &shader_info,
@@ -1334,16 +1284,13 @@ struct panvk_meta_copy_img2buf_info {
          unsigned minx, miny, maxx, maxy;
       } extent;
    } img;
-};
+} PACKED;
 
 #define panvk_meta_copy_img2buf_get_info_field(b, field) \
-        nir_load_ubo((b), 1, \
+        nir_load_push_constant((b), 1, \
                      sizeof(((struct panvk_meta_copy_img2buf_info *)0)->field) * 8, \
                      nir_imm_int(b, 0), \
-                     nir_imm_int(b, offsetof(struct panvk_meta_copy_img2buf_info, field)), \
-                     .align_mul = 4, \
-                     .align_offset = 0, \
-                     .range_base = 0, \
+                     .base = offsetof(struct panvk_meta_copy_img2buf_info, field), \
                      .range = ~0)
 
 static mali_ptr
@@ -1367,8 +1314,6 @@ panvk_meta_copy_img2buf_shader(struct panfrost_device *pdev,
                                      util_format_name(key.imgfmt),
                                      key.mask);
 
-   b.shader->info.num_ubos = 1;
-
    nir_ssa_def *coord = nir_load_global_invocation_id(&b, 32);
    nir_ssa_def *bufptr =
       panvk_meta_copy_img2buf_get_info_field(&b, buf.ptr);
@@ -1539,6 +1484,7 @@ panvk_meta_copy_img2buf_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;
@@ -1546,11 +1492,7 @@ panvk_meta_copy_img2buf_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 and everything
-    * is at the right place.
-    */
-   assert(shader_info->ubo_count == 1);
-   assert(shader_info->push.count <= (sizeof(struct panvk_meta_copy_img2buf_info) / 4));
+   shader_info->push.count = DIV_ROUND_UP(sizeof(struct panvk_meta_copy_img2buf_info), 4);
 
    mali_ptr shader =
       pan_pool_upload_aligned(bin_pool, binary.data, binary.size,
@@ -1593,8 +1535,6 @@ panvk_meta_copy_img2buf(struct panvk_cmd_buffer *cmdbuf,
 
    mali_ptr rsd =
       cmdbuf->device->physical_device->meta.copy.img2buf[texdimidx][fmtidx].rsd;
-   const struct panfrost_ubo_push *pushmap =
-      &cmdbuf->device->physical_device->meta.copy.img2buf[texdimidx][fmtidx].pushmap;
 
    struct panvk_meta_copy_img2buf_info info = {
       .buf.ptr = panvk_buffer_gpu_ptr(buf, region->bufferOffset),
@@ -1617,10 +1557,7 @@ panvk_meta_copy_img2buf(struct panvk_cmd_buffer *cmdbuf,
                           info.buf.stride.line;
 
    mali_ptr pushconsts =
-      panvk_meta_copy_emit_push_constants(pdev, pushmap, &cmdbuf->desc_pool.base,
-                                          &info, sizeof(info));
-   mali_ptr ubo =
-      panvk_meta_copy_emit_ubo(pdev, &cmdbuf->desc_pool.base, &info, sizeof(info));
+      pan_pool_upload_aligned(&cmdbuf->desc_pool.base, &info, sizeof(info), 16);
 
    struct pan_image_view view = {
       .format = key.imgfmt,
@@ -1673,8 +1610,7 @@ panvk_meta_copy_img2buf(struct panvk_cmd_buffer *cmdbuf,
       panvk_meta_copy_emit_compute_job(&cmdbuf->desc_pool.base,
                                        &batch->scoreboard, &num_wg, &wg_sz,
                                        texture, sampler,
-                                       ubo, pushconsts,
-                                       rsd, tsd);
+                                       pushconsts, rsd, tsd);
 
    util_dynarray_append(&batch->jobs, void *, job.cpu);
 
@@ -1696,7 +1632,6 @@ panvk_meta_copy_img2buf_init(struct panvk_physical_device *dev)
             panvk_meta_copy_img2buf_shader(&dev->pdev, &dev->meta.bin_pool.base,
                                            panvk_meta_copy_img2buf_fmts[i],
                                            texdim, false, &shader_info);
-         dev->meta.copy.img2buf[texdimidx][i].pushmap = shader_info.push;
          dev->meta.copy.img2buf[texdimidx][i].rsd =
             panvk_meta_copy_to_buf_emit_rsd(&dev->pdev,
                                             &dev->meta.desc_pool.base,
@@ -1712,7 +1647,6 @@ panvk_meta_copy_img2buf_init(struct panvk_physical_device *dev)
             panvk_meta_copy_img2buf_shader(&dev->pdev, &dev->meta.bin_pool.base,
                                            panvk_meta_copy_img2buf_fmts[i],
                                            texdim, true, &shader_info);
-         dev->meta.copy.img2buf[texdimidx][i].pushmap = shader_info.push;
          dev->meta.copy.img2buf[texdimidx][i].rsd =
             panvk_meta_copy_to_buf_emit_rsd(&dev->pdev,
                                             &dev->meta.desc_pool.base,
@@ -1737,16 +1671,13 @@ panvk_per_arch(CmdCopyImageToBuffer2)(VkCommandBuffer commandBuffer,
 struct panvk_meta_copy_buf2buf_info {
    mali_ptr src;
    mali_ptr dst;
-};
+} PACKED;
 
 #define panvk_meta_copy_buf2buf_get_info_field(b, field) \
-        nir_load_ubo((b), 1, \
+        nir_load_push_constant((b), 1, \
                      sizeof(((struct panvk_meta_copy_buf2buf_info *)0)->field) * 8, \
                      nir_imm_int(b, 0), \
-                     nir_imm_int(b, offsetof(struct panvk_meta_copy_buf2buf_info, field)), \
-                     .align_mul = 4, \
-                     .align_offset = 0, \
-                     .range_base = 0, \
+                     .base = offsetof(struct panvk_meta_copy_buf2buf_info, field), \
                      .range = ~0)
 
 static mali_ptr
@@ -1764,8 +1695,6 @@ panvk_meta_copy_buf2buf_shader(struct panfrost_device *pdev,
                                      "panvk_meta_copy_buf2buf(blksz=%d)",
                                      blksz);
 
-   b.shader->info.num_ubos = 1;
-
    nir_ssa_def *coord = nir_load_global_invocation_id(&b, 32);
 
    nir_ssa_def *offset =
@@ -1784,6 +1713,7 @@ panvk_meta_copy_buf2buf_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;
@@ -1791,11 +1721,7 @@ panvk_meta_copy_buf2buf_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 and everything
-    * is at the right place.
-    */
-   assert(shader_info->ubo_count == 1);
-   assert(shader_info->push.count == (sizeof(struct panvk_meta_copy_buf2buf_info) / 4));
+   shader_info->push.count = DIV_ROUND_UP(sizeof(struct panvk_meta_copy_buf2buf_info), 4);
 
    mali_ptr shader =
       pan_pool_upload_aligned(bin_pool, binary.data, binary.size,
@@ -1815,7 +1741,6 @@ panvk_meta_copy_buf2buf_init(struct panvk_physical_device *dev)
       mali_ptr shader =
          panvk_meta_copy_buf2buf_shader(&dev->pdev, &dev->meta.bin_pool.base,
                                         1 << i, &shader_info);
-      dev->meta.copy.buf2buf[i].pushmap = shader_info.push;
       dev->meta.copy.buf2buf[i].rsd =
          panvk_meta_copy_to_buf_emit_rsd(&dev->pdev, &dev->meta.desc_pool.base,
                                          shader, &shader_info, false);
@@ -1828,8 +1753,6 @@ panvk_meta_copy_buf2buf(struct panvk_cmd_buffer *cmdbuf,
                         const struct panvk_buffer *dst,
                         const VkBufferCopy2 *region)
 {
-   struct panfrost_device *pdev = &cmdbuf->device->physical_device->pdev;
-
    struct panvk_meta_copy_buf2buf_info info = {
       .src = panvk_buffer_gpu_ptr(src, region->srcOffset),
       .dst = panvk_buffer_gpu_ptr(dst, region->dstOffset),
@@ -1841,14 +1764,9 @@ panvk_meta_copy_buf2buf(struct panvk_cmd_buffer *cmdbuf,
    assert(log2blksz < ARRAY_SIZE(cmdbuf->device->physical_device->meta.copy.buf2buf));
    mali_ptr rsd =
       cmdbuf->device->physical_device->meta.copy.buf2buf[log2blksz].rsd;
-   const struct panfrost_ubo_push *pushmap =
-      &cmdbuf->device->physical_device->meta.copy.buf2buf[log2blksz].pushmap;
 
    mali_ptr pushconsts =
-      panvk_meta_copy_emit_push_constants(pdev, pushmap, &cmdbuf->desc_pool.base,
-                                          &info, sizeof(info));
-   mali_ptr ubo =
-      panvk_meta_copy_emit_ubo(pdev, &cmdbuf->desc_pool.base, &info, sizeof(info));
+      pan_pool_upload_aligned(&cmdbuf->desc_pool.base, &info, sizeof(info), 16);
 
    panvk_per_arch(cmd_close_batch)(cmdbuf);
 
@@ -1865,7 +1783,7 @@ panvk_meta_copy_buf2buf(struct panvk_cmd_buffer *cmdbuf,
      panvk_meta_copy_emit_compute_job(&cmdbuf->desc_pool.base,
                                       &batch->scoreboard,
                                       &num_wg, &wg_sz,
-                                      0, 0, ubo, pushconsts, rsd, tsd);
+                                      0, 0, pushconsts, rsd, tsd);
 
    util_dynarray_append(&batch->jobs, void *, job.cpu);
 
@@ -1890,16 +1808,13 @@ panvk_per_arch(CmdCopyBuffer2)(VkCommandBuffer commandBuffer,
 struct panvk_meta_fill_buf_info {
    mali_ptr start;
    uint32_t val;
-};
+} PACKED;
 
 #define panvk_meta_fill_buf_get_info_field(b, field) \
-        nir_load_ubo((b), 1, \
+        nir_load_push_constant((b), 1, \
                      sizeof(((struct panvk_meta_fill_buf_info *)0)->field) * 8, \
                      nir_imm_int(b, 0), \
-                     nir_imm_int(b, offsetof(struct panvk_meta_fill_buf_info, field)), \
-                     .align_mul = 4, \
-                     .align_offset = 0, \
-                     .range_base = 0, \
+                     .base = offsetof(struct panvk_meta_fill_buf_info, field), \
                      .range = ~0)
 
 static mali_ptr
@@ -1915,8 +1830,6 @@ panvk_meta_fill_buf_shader(struct panfrost_device *pdev,
                                      GENX(pan_shader_get_compiler_options)(),
                                      "panvk_meta_fill_buf()");
 
-   b.shader->info.num_ubos = 1;
-
    nir_ssa_def *coord = nir_load_global_invocation_id(&b, 32);
 
    nir_ssa_def *offset =
@@ -1930,6 +1843,7 @@ panvk_meta_fill_buf_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;
@@ -1937,11 +1851,7 @@ panvk_meta_fill_buf_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 and everything
-    * is at the right place.
-    */
-   assert(shader_info->ubo_count == 1);
-   assert(shader_info->push.count == 3);
+   shader_info->push.count = DIV_ROUND_UP(sizeof(struct panvk_meta_fill_buf_info), 4);
 
    mali_ptr shader =
       pan_pool_upload_aligned(bin_pool, binary.data, binary.size,
@@ -1956,8 +1866,7 @@ panvk_meta_fill_buf_shader(struct panfrost_device *pdev,
 static mali_ptr
 panvk_meta_fill_buf_emit_rsd(struct panfrost_device *pdev,
                              struct pan_pool *bin_pool,
-                             struct pan_pool *desc_pool,
-                             struct panfrost_ubo_push *pushmap)
+                             struct pan_pool *desc_pool)
 {
    struct pan_shader_info shader_info;
 
@@ -1972,7 +1881,6 @@ panvk_meta_fill_buf_emit_rsd(struct panfrost_device *pdev,
       pan_shader_prepare_rsd(&shader_info, shader, &cfg);
    }
 
-   *pushmap = shader_info.push;
    return rsd_ptr.gpu;
 }
 
@@ -1981,8 +1889,7 @@ panvk_meta_fill_buf_init(struct panvk_physical_device *dev)
 {
    dev->meta.copy.fillbuf.rsd =
       panvk_meta_fill_buf_emit_rsd(&dev->pdev, &dev->meta.bin_pool.base,
-                                   &dev->meta.desc_pool.base,
-                                   &dev->meta.copy.fillbuf.pushmap);
+                                   &dev->meta.desc_pool.base);
 }
 
 static void
@@ -1991,8 +1898,6 @@ panvk_meta_fill_buf(struct panvk_cmd_buffer *cmdbuf,
                     VkDeviceSize size, VkDeviceSize offset,
                     uint32_t val)
 {
-   struct panfrost_device *pdev = &cmdbuf->device->physical_device->pdev;
-
    struct panvk_meta_fill_buf_info info = {
       .start = panvk_buffer_gpu_ptr(dst, offset),
       .val = val,
@@ -2014,14 +1919,9 @@ panvk_meta_fill_buf(struct panvk_cmd_buffer *cmdbuf,
    unsigned nwords = size / sizeof(uint32_t);
    mali_ptr rsd =
       cmdbuf->device->physical_device->meta.copy.fillbuf.rsd;
-   const struct panfrost_ubo_push *pushmap =
-      &cmdbuf->device->physical_device->meta.copy.fillbuf.pushmap;
 
    mali_ptr pushconsts =
-      panvk_meta_copy_emit_push_constants(pdev, pushmap, &cmdbuf->desc_pool.base,
-                                          &info, sizeof(info));
-   mali_ptr ubo =
-      panvk_meta_copy_emit_ubo(pdev, &cmdbuf->desc_pool.base, &info, sizeof(info));
+      pan_pool_upload_aligned(&cmdbuf->desc_pool.base, &info, sizeof(info), 16);
 
    panvk_per_arch(cmd_close_batch)(cmdbuf);
 
@@ -2037,7 +1937,7 @@ panvk_meta_fill_buf(struct panvk_cmd_buffer *cmdbuf,
      panvk_meta_copy_emit_compute_job(&cmdbuf->desc_pool.base,
                                       &batch->scoreboard,
                                       &num_wg, &wg_sz,
-                                      0, 0, ubo, pushconsts, rsd, tsd);
+                                      0, 0, pushconsts, rsd, tsd);
 
    util_dynarray_append(&batch->jobs, void *, job.cpu);
 
@@ -2063,8 +1963,6 @@ panvk_meta_update_buf(struct panvk_cmd_buffer *cmdbuf,
                       const struct panvk_buffer *dst, VkDeviceSize offset,
                       VkDeviceSize size, const void *data)
 {
-   struct panfrost_device *pdev = &cmdbuf->device->physical_device->pdev;
-
    struct panvk_meta_copy_buf2buf_info info = {
       .src = pan_pool_upload_aligned(&cmdbuf->desc_pool.base, data, size, 4),
       .dst = panvk_buffer_gpu_ptr(dst, offset),
@@ -2074,14 +1972,9 @@ panvk_meta_update_buf(struct panvk_cmd_buffer *cmdbuf,
 
    mali_ptr rsd =
       cmdbuf->device->physical_device->meta.copy.buf2buf[log2blksz].rsd;
-   const struct panfrost_ubo_push *pushmap =
-      &cmdbuf->device->physical_device->meta.copy.buf2buf[log2blksz].pushmap;
 
    mali_ptr pushconsts =
-      panvk_meta_copy_emit_push_constants(pdev, pushmap, &cmdbuf->desc_pool.base,
-                                          &info, sizeof(info));
-   mali_ptr ubo =
-      panvk_meta_copy_emit_ubo(pdev, &cmdbuf->desc_pool.base, &info, sizeof(info));
+      pan_pool_upload_aligned(&cmdbuf->desc_pool.base, &info, sizeof(info), 16);
 
    panvk_per_arch(cmd_close_batch)(cmdbuf);
 
@@ -2098,7 +1991,7 @@ panvk_meta_update_buf(struct panvk_cmd_buffer *cmdbuf,
      panvk_meta_copy_emit_compute_job(&cmdbuf->desc_pool.base,
                                       &batch->scoreboard,
                                       &num_wg, &wg_sz,
-                                      0, 0, ubo, pushconsts, rsd, tsd);
+                                      0, 0, pushconsts, rsd, tsd);
 
    util_dynarray_append(&batch->jobs, void *, job.cpu);
 



More information about the mesa-commit mailing list