summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>2020-10-05 04:31:36 +0200
committerMarge Bot <eric+marge@anholt.net>2021-03-26 16:16:24 +0000
commit6c92bf2951ad538a660462b772b9bc3b06a97257 (patch)
tree94529a25ef86cb205056f605db54328db244380f
parentce9896727424621eb641fb48610a70af37960d3c (diff)
radv: Use 8x8 meta compute workgroups.
For 16x16 we get 4 16x4 waves, which is bad for DCC image stores. The workgroup size doesn't really matter for speed, the important part is the number of waves, which should stay constant here. (Though some optimization would be nice, but out of scope for this patch) The compute DCC compress shader still uses 16x16 due to functional requirements (and we're sure it won't write with DCC compression ...) Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6796>
-rw-r--r--src/amd/vulkan/radv_meta_bufimage.c28
-rw-r--r--src/amd/vulkan/radv_meta_resolve_cs.c8
2 files changed, 18 insertions, 18 deletions
diff --git a/src/amd/vulkan/radv_meta_bufimage.c b/src/amd/vulkan/radv_meta_bufimage.c
index f618d96e1ea..0904af88213 100644
--- a/src/amd/vulkan/radv_meta_bufimage.c
+++ b/src/amd/vulkan/radv_meta_bufimage.c
@@ -44,8 +44,8 @@ build_nir_itob_compute_shader(struct radv_device *dev, bool is_3d)
false,
GLSL_TYPE_FLOAT);
nir_builder b = nir_builder_init_simple_shader(MESA_SHADER_COMPUTE, NULL, is_3d ? "meta_itob_cs_3d" : "meta_itob_cs");
- b.shader->info.cs.local_size[0] = 16;
- b.shader->info.cs.local_size[1] = 16;
+ b.shader->info.cs.local_size[0] = 8;
+ b.shader->info.cs.local_size[1] = 8;
b.shader->info.cs.local_size[2] = 1;
nir_variable *input_img = nir_variable_create(b.shader, nir_var_uniform,
sampler_type, "s_tex");
@@ -249,8 +249,8 @@ build_nir_btoi_compute_shader(struct radv_device *dev, bool is_3d)
false,
GLSL_TYPE_FLOAT);
nir_builder b = nir_builder_init_simple_shader(MESA_SHADER_COMPUTE, NULL, is_3d ? "meta_btoi_cs_3d" : "meta_btoi_cs");
- b.shader->info.cs.local_size[0] = 16;
- b.shader->info.cs.local_size[1] = 16;
+ b.shader->info.cs.local_size[0] = 8;
+ b.shader->info.cs.local_size[1] = 8;
b.shader->info.cs.local_size[2] = 1;
nir_variable *input_img = nir_variable_create(b.shader, nir_var_uniform,
buf_type, "s_tex");
@@ -449,8 +449,8 @@ build_nir_btoi_r32g32b32_compute_shader(struct radv_device *dev)
false,
GLSL_TYPE_FLOAT);
nir_builder b = nir_builder_init_simple_shader(MESA_SHADER_COMPUTE, NULL, "meta_btoi_r32g32b32_cs");
- b.shader->info.cs.local_size[0] = 16;
- b.shader->info.cs.local_size[1] = 16;
+ b.shader->info.cs.local_size[0] = 8;
+ b.shader->info.cs.local_size[1] = 8;
b.shader->info.cs.local_size[2] = 1;
nir_variable *input_img = nir_variable_create(b.shader, nir_var_uniform,
buf_type, "s_tex");
@@ -628,8 +628,8 @@ build_nir_itoi_compute_shader(struct radv_device *dev, bool is_3d)
false,
GLSL_TYPE_FLOAT);
nir_builder b = nir_builder_init_simple_shader(MESA_SHADER_COMPUTE, NULL, is_3d ? "meta_itoi_cs_3d" : "meta_itoi_cs");
- b.shader->info.cs.local_size[0] = 16;
- b.shader->info.cs.local_size[1] = 16;
+ b.shader->info.cs.local_size[0] = 8;
+ b.shader->info.cs.local_size[1] = 8;
b.shader->info.cs.local_size[2] = 1;
nir_variable *input_img = nir_variable_create(b.shader, nir_var_uniform,
buf_type, "s_tex");
@@ -823,8 +823,8 @@ build_nir_itoi_r32g32b32_compute_shader(struct radv_device *dev)
false,
GLSL_TYPE_FLOAT);
nir_builder b = nir_builder_init_simple_shader(MESA_SHADER_COMPUTE, NULL, "meta_itoi_r32g32b32_cs");
- b.shader->info.cs.local_size[0] = 16;
- b.shader->info.cs.local_size[1] = 16;
+ b.shader->info.cs.local_size[0] = 8;
+ b.shader->info.cs.local_size[1] = 8;
b.shader->info.cs.local_size[2] = 1;
nir_variable *input_img = nir_variable_create(b.shader, nir_var_uniform,
type, "input_img");
@@ -1009,8 +1009,8 @@ build_nir_cleari_compute_shader(struct radv_device *dev, bool is_3d)
false,
GLSL_TYPE_FLOAT);
nir_builder b = nir_builder_init_simple_shader(MESA_SHADER_COMPUTE, NULL, is_3d ? "meta_cleari_cs_3d" : "meta_cleari_cs");
- b.shader->info.cs.local_size[0] = 16;
- b.shader->info.cs.local_size[1] = 16;
+ b.shader->info.cs.local_size[0] = 8;
+ b.shader->info.cs.local_size[1] = 8;
b.shader->info.cs.local_size[2] = 1;
nir_variable *output_img = nir_variable_create(b.shader, nir_var_uniform,
@@ -1179,8 +1179,8 @@ build_nir_cleari_r32g32b32_compute_shader(struct radv_device *dev)
false,
GLSL_TYPE_FLOAT);
nir_builder b = nir_builder_init_simple_shader(MESA_SHADER_COMPUTE, NULL, "meta_cleari_r32g32b32_cs");
- b.shader->info.cs.local_size[0] = 16;
- b.shader->info.cs.local_size[1] = 16;
+ b.shader->info.cs.local_size[0] = 8;
+ b.shader->info.cs.local_size[1] = 8;
b.shader->info.cs.local_size[2] = 1;
nir_variable *output_img = nir_variable_create(b.shader, nir_var_uniform,
diff --git a/src/amd/vulkan/radv_meta_resolve_cs.c b/src/amd/vulkan/radv_meta_resolve_cs.c
index 599c0545a51..773fe153fd7 100644
--- a/src/amd/vulkan/radv_meta_resolve_cs.c
+++ b/src/amd/vulkan/radv_meta_resolve_cs.c
@@ -78,8 +78,8 @@ build_resolve_compute_shader(struct radv_device *dev, bool is_integer, bool is_s
"meta_resolve_cs-%d-%s",
samples,
is_integer ? "int" : (is_srgb ? "srgb" : "float"));
- b.shader->info.cs.local_size[0] = 16;
- b.shader->info.cs.local_size[1] = 16;
+ b.shader->info.cs.local_size[0] = 8;
+ b.shader->info.cs.local_size[1] = 8;
b.shader->info.cs.local_size[2] = 1;
nir_variable *input_img = nir_variable_create(b.shader, nir_var_uniform,
@@ -158,8 +158,8 @@ build_depth_stencil_resolve_compute_shader(struct radv_device *dev, int samples,
"meta_resolve_cs_%s-%s-%d",
index == DEPTH_RESOLVE ? "depth" : "stencil",
get_resolve_mode_str(resolve_mode), samples);
- b.shader->info.cs.local_size[0] = 16;
- b.shader->info.cs.local_size[1] = 16;
+ b.shader->info.cs.local_size[0] = 8;
+ b.shader->info.cs.local_size[1] = 8;
b.shader->info.cs.local_size[2] = 1;
nir_variable *input_img = nir_variable_create(b.shader, nir_var_uniform,