radeonsi/gfx10: implement load_const_buffer_desc_fast_path
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Fri, 1 Jun 2018 14:04:02 +0000 (16:04 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 3 Jul 2019 19:51:12 +0000 (15:51 -0400)
Acked-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/gallium/drivers/radeonsi/si_shader.c

index ecf7f3bf39af4d56a903476e7fd47400dac701e2..eb790a0fa51e4accb1a897fe0de76220cc28f65d 100644 (file)
@@ -2249,17 +2249,24 @@ static LLVMValueRef load_const_buffer_desc_fast_path(struct si_shader_context *c
        desc1 = LLVMConstInt(ctx->i32,
                             S_008F04_BASE_ADDRESS_HI(ctx->screen->info.address32_hi), 0);
 
+       uint32_t rsrc3 = S_008F0C_DST_SEL_X(V_008F0C_SQ_SEL_X) |
+                        S_008F0C_DST_SEL_Y(V_008F0C_SQ_SEL_Y) |
+                        S_008F0C_DST_SEL_Z(V_008F0C_SQ_SEL_Z) |
+                        S_008F0C_DST_SEL_W(V_008F0C_SQ_SEL_W);
+
+       if (ctx->screen->info.chip_class >= GFX10)
+               rsrc3 |= S_008F0C_FORMAT(V_008F0C_IMG_FORMAT_32_FLOAT) |
+                        S_008F0C_OOB_SELECT(3) |
+                        S_008F0C_RESOURCE_LEVEL(1);
+       else
+               rsrc3 |= S_008F0C_NUM_FORMAT(V_008F0C_BUF_NUM_FORMAT_FLOAT) |
+                        S_008F0C_DATA_FORMAT(V_008F0C_BUF_DATA_FORMAT_32);
+
        LLVMValueRef desc_elems[] = {
                desc0,
                desc1,
                LLVMConstInt(ctx->i32, (sel->info.const_file_max[0] + 1) * 16, 0),
-               LLVMConstInt(ctx->i32,
-                       S_008F0C_DST_SEL_X(V_008F0C_SQ_SEL_X) |
-                       S_008F0C_DST_SEL_Y(V_008F0C_SQ_SEL_Y) |
-                       S_008F0C_DST_SEL_Z(V_008F0C_SQ_SEL_Z) |
-                       S_008F0C_DST_SEL_W(V_008F0C_SQ_SEL_W) |
-                       S_008F0C_NUM_FORMAT(V_008F0C_BUF_NUM_FORMAT_FLOAT) |
-                       S_008F0C_DATA_FORMAT(V_008F0C_BUF_DATA_FORMAT_32), 0)
+               LLVMConstInt(ctx->i32, rsrc3, false)
        };
 
        return ac_build_gather_values(&ctx->ac, desc_elems, 4);