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