Mesa (master): v3dv: use intrinsic builders

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jan 6 14:51:28 UTC 2021


Module: Mesa
Branch: master
Commit: 172e79d00916d6c7fa8c1d45db38a20b9c797914
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=172e79d00916d6c7fa8c1d45db38a20b9c797914

Author: Christian Gmeiner <christian.gmeiner at gmail.com>
Date:   Fri Jan  1 20:52:20 2021 +0100

v3dv: use intrinsic builders

Signed-off-by: Christian Gmeiner <christian.gmeiner at gmail.com>
Reviewed-by: Eric Anholt <eric at anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8295>

---

 src/broadcom/vulkan/v3dv_meta_clear.c | 38 ++++-----------
 src/broadcom/vulkan/v3dv_meta_copy.c  | 92 ++++++++++-------------------------
 2 files changed, 36 insertions(+), 94 deletions(-)

diff --git a/src/broadcom/vulkan/v3dv_meta_clear.c b/src/broadcom/vulkan/v3dv_meta_clear.c
index f0678b55940..af77dc85ccd 100644
--- a/src/broadcom/vulkan/v3dv_meta_clear.c
+++ b/src/broadcom/vulkan/v3dv_meta_clear.c
@@ -129,12 +129,7 @@ v3dv_meta_clear_finish(struct v3dv_device *device)
 static nir_ssa_def *
 gen_rect_vertices(nir_builder *b)
 {
-   nir_intrinsic_instr *vertex_id =
-      nir_intrinsic_instr_create(b->shader,
-                                 nir_intrinsic_load_vertex_id);
-   nir_ssa_dest_init(&vertex_id->instr, &vertex_id->dest, 1, 32, "vertexid");
-   nir_builder_instr_insert(b, &vertex_id->instr);
-
+   nir_ssa_def *vertex_id = nir_load_vertex_id(b);
 
    /* vertex 0: -1.0, -1.0
     * vertex 1: -1.0,  1.0
@@ -148,8 +143,8 @@ gen_rect_vertices(nir_builder *b)
     */
 
    nir_ssa_def *one = nir_imm_int(b, 1);
-   nir_ssa_def *c0cmp = nir_ilt(b, &vertex_id->dest.ssa, nir_imm_int(b, 2));
-   nir_ssa_def *c1cmp = nir_ieq(b, nir_iand(b, &vertex_id->dest.ssa, one), one);
+   nir_ssa_def *c0cmp = nir_ilt(b, vertex_id, nir_imm_int(b, 2));
+   nir_ssa_def *c1cmp = nir_ieq(b, nir_iand(b, vertex_id, one), one);
 
    nir_ssa_def *comp[4];
    comp[0] = nir_bcsel(b, c0cmp,
@@ -197,16 +192,8 @@ get_color_clear_rect_fs(uint32_t rt_idx, VkFormat format)
       nir_variable_create(b.shader, nir_var_shader_out, fs_out_type, "out_color");
    fs_out_color->data.location = FRAG_RESULT_DATA0 + rt_idx;
 
-   nir_intrinsic_instr *color_load =
-      nir_intrinsic_instr_create(b.shader, nir_intrinsic_load_push_constant);
-   nir_intrinsic_set_base(color_load, 0);
-   nir_intrinsic_set_range(color_load, 16);
-   color_load->src[0] = nir_src_for_ssa(nir_imm_int(&b, 0));
-   color_load->num_components = 4;
-   nir_ssa_dest_init(&color_load->instr, &color_load->dest, 4, 32, "clear color");
-   nir_builder_instr_insert(&b, &color_load->instr);
-
-   nir_store_var(&b, fs_out_color, &color_load->dest.ssa, 0xf);
+   nir_ssa_def *color_load = nir_load_push_constant(&b, 4, 32, nir_imm_int(&b, 0), .base = 0, .range = 16);
+   nir_store_var(&b, fs_out_color, color_load, 0xf);
 
    return b.shader;
 }
@@ -223,17 +210,10 @@ get_depth_clear_rect_fs()
                           "out_depth");
    fs_out_depth->data.location = FRAG_RESULT_DEPTH;
 
-   nir_intrinsic_instr *depth_load =
-      nir_intrinsic_instr_create(b.shader, nir_intrinsic_load_push_constant);
-   nir_intrinsic_set_base(depth_load, 0);
-   nir_intrinsic_set_range(depth_load, 4);
-   depth_load->src[0] = nir_src_for_ssa(nir_imm_int(&b, 0));
-   depth_load->num_components = 1;
-   nir_ssa_dest_init(&depth_load->instr, &depth_load->dest, 1, 32,
-                     "clear depth value");
-   nir_builder_instr_insert(&b, &depth_load->instr);
-
-   nir_store_var(&b, fs_out_depth, &depth_load->dest.ssa, 0x1);
+   nir_ssa_def *depth_load =
+      nir_load_push_constant(&b, 1, 32, nir_imm_int(&b, 0), .base = 0, .range = 4);
+
+   nir_store_var(&b, fs_out_depth, depth_load, 0x1);
 
    return b.shader;
 }
diff --git a/src/broadcom/vulkan/v3dv_meta_copy.c b/src/broadcom/vulkan/v3dv_meta_copy.c
index 42c5bcdcaf0..46035f8f8cb 100644
--- a/src/broadcom/vulkan/v3dv_meta_copy.c
+++ b/src/broadcom/vulkan/v3dv_meta_copy.c
@@ -3058,34 +3058,16 @@ get_texel_buffer_copy_fs(struct v3dv_device *device, VkFormat format)
    /* Load the box describing the pixel region we want to copy from the
     * texel buffer.
     */
-   nir_intrinsic_instr *box =
-      nir_intrinsic_instr_create(b.shader, nir_intrinsic_load_push_constant);
-   box->src[0] = nir_src_for_ssa(nir_imm_int(&b, 0));
-   nir_intrinsic_set_base(box, 0);
-   nir_intrinsic_set_range(box, 16);
-   box->num_components = 4;
-   nir_ssa_dest_init(&box->instr, &box->dest, 4, 32, "box");
-   nir_builder_instr_insert(&b, &box->instr);
+   nir_ssa_def *box =
+      nir_load_push_constant(&b, 4, 32, nir_imm_int(&b, 0), .base = 0, .range = 16);
 
    /* Load the buffer stride (this comes in texel units) */
-   nir_intrinsic_instr *stride =
-      nir_intrinsic_instr_create(b.shader, nir_intrinsic_load_push_constant);
-   stride->src[0] = nir_src_for_ssa(nir_imm_int(&b, 0));
-   nir_intrinsic_set_base(stride, 16);
-   nir_intrinsic_set_range(stride, 4);
-   stride->num_components = 1;
-   nir_ssa_dest_init(&stride->instr, &stride->dest, 1, 32, "buffer stride");
-   nir_builder_instr_insert(&b, &stride->instr);
+   nir_ssa_def *stride =
+      nir_load_push_constant(&b, 1, 32, nir_imm_int(&b, 0), .base = 16, .range = 4);
 
    /* Load the buffer offset (this comes in texel units) */
-   nir_intrinsic_instr *offset =
-      nir_intrinsic_instr_create(b.shader, nir_intrinsic_load_push_constant);
-   offset->src[0] = nir_src_for_ssa(nir_imm_int(&b, 0));
-   nir_intrinsic_set_base(offset, 20);
-   nir_intrinsic_set_range(offset, 4);
-   offset->num_components = 1;
-   nir_ssa_dest_init(&offset->instr, &offset->dest, 1, 32, "buffer offset");
-   nir_builder_instr_insert(&b, &offset->instr);
+   nir_ssa_def *offset =
+      nir_load_push_constant(&b, 1, 32, nir_imm_int(&b, 0), .base = 20, .range = 4);
 
    nir_ssa_def *coord = nir_f2i32(&b, load_frag_coord(&b));
 
@@ -3099,13 +3081,13 @@ get_texel_buffer_copy_fs(struct v3dv_device *device, VkFormat format)
     */
    nir_ssa_def *x_offset =
       nir_isub(&b, nir_channel(&b, coord, 0),
-                   nir_channel(&b, &box->dest.ssa, 0));
+                   nir_channel(&b, box, 0));
    nir_ssa_def *y_offset =
       nir_isub(&b, nir_channel(&b, coord, 1),
-                   nir_channel(&b, &box->dest.ssa, 1));
+                   nir_channel(&b, box, 1));
    nir_ssa_def *texel_offset =
-      nir_iadd(&b, nir_iadd(&b, &offset->dest.ssa, x_offset),
-                   nir_imul(&b, y_offset, &stride->dest.ssa));
+      nir_iadd(&b, nir_iadd(&b, offset, x_offset),
+                   nir_imul(&b, y_offset, stride));
 
    nir_ssa_def *tex_deref = &nir_build_deref_var(&b, sampler)->dest.ssa;
    nir_tex_instr *tex = nir_tex_instr_create(b.shader, 2);
@@ -4233,12 +4215,7 @@ create_blit_render_pass(struct v3dv_device *device,
 static nir_ssa_def *
 gen_rect_vertices(nir_builder *b)
 {
-   nir_intrinsic_instr *vertex_id =
-      nir_intrinsic_instr_create(b->shader,
-                                 nir_intrinsic_load_vertex_id);
-   nir_ssa_dest_init(&vertex_id->instr, &vertex_id->dest, 1, 32, "vertexid");
-   nir_builder_instr_insert(b, &vertex_id->instr);
-
+   nir_ssa_def *vertex_id = nir_load_vertex_id(b);
 
    /* vertex 0: -1.0, -1.0
     * vertex 1: -1.0,  1.0
@@ -4252,8 +4229,8 @@ gen_rect_vertices(nir_builder *b)
     */
 
    nir_ssa_def *one = nir_imm_int(b, 1);
-   nir_ssa_def *c0cmp = nir_ilt(b, &vertex_id->dest.ssa, nir_imm_int(b, 2));
-   nir_ssa_def *c1cmp = nir_ieq(b, nir_iand(b, &vertex_id->dest.ssa, one), one);
+   nir_ssa_def *c0cmp = nir_ilt(b, vertex_id, nir_imm_int(b, 2));
+   nir_ssa_def *c1cmp = nir_ieq(b, nir_iand(b, vertex_id, one), one);
 
    nir_ssa_def *comp[4];
    comp[0] = nir_bcsel(b, c0cmp,
@@ -4271,28 +4248,13 @@ gen_rect_vertices(nir_builder *b)
 static nir_ssa_def *
 gen_tex_coords(nir_builder *b)
 {
-   nir_intrinsic_instr *tex_box =
-      nir_intrinsic_instr_create(b->shader, nir_intrinsic_load_push_constant);
-   tex_box->src[0] = nir_src_for_ssa(nir_imm_int(b, 0));
-   nir_intrinsic_set_base(tex_box, 0);
-   nir_intrinsic_set_range(tex_box, 16);
-   tex_box->num_components = 4;
-   nir_ssa_dest_init(&tex_box->instr, &tex_box->dest, 4, 32, "tex_box");
-   nir_builder_instr_insert(b, &tex_box->instr);
-
-   nir_intrinsic_instr *tex_z =
-      nir_intrinsic_instr_create(b->shader, nir_intrinsic_load_push_constant);
-   tex_z->src[0] = nir_src_for_ssa(nir_imm_int(b, 0));
-   nir_intrinsic_set_base(tex_z, 16);
-   nir_intrinsic_set_range(tex_z, 4);
-   tex_z->num_components = 1;
-   nir_ssa_dest_init(&tex_z->instr, &tex_z->dest, 1, 32, "tex_z");
-   nir_builder_instr_insert(b, &tex_z->instr);
-
-   nir_intrinsic_instr *vertex_id =
-      nir_intrinsic_instr_create(b->shader, nir_intrinsic_load_vertex_id);
-   nir_ssa_dest_init(&vertex_id->instr, &vertex_id->dest, 1, 32, "vertexid");
-   nir_builder_instr_insert(b, &vertex_id->instr);
+   nir_ssa_def *tex_box =
+      nir_load_push_constant(b, 4, 32, nir_imm_int(b, 0), .base = 0, .range = 16);
+
+   nir_ssa_def *tex_z =
+      nir_load_push_constant(b, 1, 32, nir_imm_int(b, 0), .base = 16, .range = 4);
+
+   nir_ssa_def *vertex_id = nir_load_vertex_id(b);
 
    /* vertex 0: src0_x, src0_y
     * vertex 1: src0_x, src1_y
@@ -4306,18 +4268,18 @@ gen_tex_coords(nir_builder *b)
     */
 
    nir_ssa_def *one = nir_imm_int(b, 1);
-   nir_ssa_def *c0cmp = nir_ilt(b, &vertex_id->dest.ssa, nir_imm_int(b, 2));
-   nir_ssa_def *c1cmp = nir_ieq(b, nir_iand(b, &vertex_id->dest.ssa, one), one);
+   nir_ssa_def *c0cmp = nir_ilt(b, vertex_id, nir_imm_int(b, 2));
+   nir_ssa_def *c1cmp = nir_ieq(b, nir_iand(b, vertex_id, one), one);
 
    nir_ssa_def *comp[4];
    comp[0] = nir_bcsel(b, c0cmp,
-                       nir_channel(b, &tex_box->dest.ssa, 0),
-                       nir_channel(b, &tex_box->dest.ssa, 2));
+                       nir_channel(b, tex_box, 0),
+                       nir_channel(b, tex_box, 2));
 
    comp[1] = nir_bcsel(b, c1cmp,
-                       nir_channel(b, &tex_box->dest.ssa, 3),
-                       nir_channel(b, &tex_box->dest.ssa, 1));
-   comp[2] = &tex_z->dest.ssa;
+                       nir_channel(b, tex_box, 3),
+                       nir_channel(b, tex_box, 1));
+   comp[2] = tex_z;
    comp[3] = nir_imm_float(b, 1.0f);
    return nir_vec(b, comp, 4);
 }



More information about the mesa-commit mailing list