agx: Optimize lower_resinfo for cube maps
authorHampus Linander <hampus.linander@gmail.com>
Sun, 8 Jan 2023 00:18:55 +0000 (01:18 +0100)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Sat, 4 Feb 2023 16:13:37 +0000 (11:13 -0500)
We can avoid reading both width and height when the texture is a cube map, and
we do so more simply by relying on CSE+DCE (Alyssa).

Closes: #7541
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20628>

src/asahi/compiler/agx_nir_lower_texture.c

index 6fe5abe..667b5ed 100644 (file)
@@ -117,6 +117,12 @@ agx_txs(nir_builder *b, nir_tex_instr *tex)
    if (!(nr_comps == 3 && tex->is_array))
       depth = nir_imax(b, nir_ushr(b, depth, lod), nir_imm_int(b, 1));
 
+   /* Cube maps have equal width and height, we save some instructions by only
+    * reading one. Dead code elimination will remove the redundant instructions.
+    */
+   if (tex->sampler_dim == GLSL_SAMPLER_DIM_CUBE)
+      height = width;
+
    comp[0] = width;
    comp[1] = height;
    comp[2] = depth;