radv: reduce number of VGPRs for TESS_EVAL if primitive ID is not used
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 26 Jun 2019 13:11:00 +0000 (15:11 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 1 Jul 2019 12:59:17 +0000 (14:59 +0200)
We only need to 2.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/amd/vulkan/radv_shader.c

index c8dc9daf1bc686bd43c6060379e1aba8595713fd..3c50471c63b88c902b55d06ab482d323e36896c7 100644 (file)
@@ -471,6 +471,7 @@ radv_get_shader_binary_size(struct ac_shader_binary *binary)
 static void
 radv_fill_shader_variant(struct radv_device *device,
                         struct radv_shader_variant *variant,
+                        struct radv_nir_compiler_options *options,
                         struct ac_shader_binary *binary,
                         gl_shader_stage stage)
 {
@@ -495,7 +496,13 @@ radv_fill_shader_variant(struct radv_device *device,
 
        switch (stage) {
        case MESA_SHADER_TESS_EVAL:
-               vgpr_comp_cnt = 3;
+               if (options->key.tes.as_es) {
+                       assert(device->physical_device->rad_info.chip_class <= GFX8);
+                       vgpr_comp_cnt = info->uses_prim_id ? 3 : 2;
+               } else {
+                       bool enable_prim_id = options->key.tes.export_prim_id || info->uses_prim_id;
+                       vgpr_comp_cnt = enable_prim_id ? 3 : 2;
+               }
                variant->rsrc2 |= S_00B12C_OC_LDS_EN(1);
                break;
        case MESA_SHADER_TESS_CTRL:
@@ -534,7 +541,7 @@ radv_fill_shader_variant(struct radv_device *device,
                if (es_type == MESA_SHADER_VERTEX) {
                        es_vgpr_comp_cnt = variant->info.vs.vgpr_comp_cnt;
                } else if (es_type == MESA_SHADER_TESS_EVAL) {
-                       es_vgpr_comp_cnt = 3;
+                       es_vgpr_comp_cnt = info->uses_prim_id ? 3 : 2;
                } else {
                        unreachable("invalid shader ES type");
                }
@@ -669,7 +676,7 @@ shader_variant_create(struct radv_device *device,
 
        radv_destroy_llvm_compiler(&ac_llvm, thread_compiler);
 
-       radv_fill_shader_variant(device, variant, &binary, stage);
+       radv_fill_shader_variant(device, variant, options, &binary, stage);
 
        if (code_out) {
                *code_out = binary.code;