Re: [Mesa-dev] [PATCH 01/11] radeonsi/nir: gather some compute info in si_nir_scan_shader()

2018-02-06 Thread Marek Olšák
On Fri, Feb 2, 2018 at 5:03 AM, Timothy Arceri  wrote:
> ---
>  src/gallium/drivers/radeonsi/si_shader_nir.c | 30 
> +++-
>  1 file changed, 29 insertions(+), 1 deletion(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
> b/src/gallium/drivers/radeonsi/si_shader_nir.c
> index 128be585cd..28b031d935 100644
> --- a/src/gallium/drivers/radeonsi/si_shader_nir.c
> +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
> @@ -86,6 +86,27 @@ static void scan_instruction(struct tgsi_shader_info *info,
> case nir_intrinsic_load_invocation_id:
> info->uses_invocationid = true;
> break;
> +   case nir_intrinsic_load_num_work_groups:
> +   info->uses_grid_size = true;
> +   break;
> +   case nir_intrinsic_load_local_group_size:
> +   /* The block size is translated to IMM with a fixed 
> block size. */
> +   if 
> (info->properties[TGSI_PROPERTY_CS_FIXED_BLOCK_WIDTH] == 0)
> +   info->uses_block_size = true;
> +   break;
> +   case nir_intrinsic_load_local_invocation_id:
> +   case nir_intrinsic_load_work_group_id: {
> +   unsigned mask = 
> nir_ssa_def_components_read(>dest.ssa);
> +   while (mask) {
> +   unsigned i = u_bit_scan();
> +
> +   if (intr->intrinsic == 
> nir_intrinsic_load_work_group_id)
> +   info->uses_block_id[i] = true;
> +   else
> +   info->uses_thread_id[i] = true;
> +   }
> +   break;
> +   }
> case nir_intrinsic_load_vertex_id:
> info->uses_vertexid = 1;
> break;
> @@ -226,7 +247,8 @@ void si_nir_scan_shader(const struct nir_shader *nir,
>nir->info.stage == MESA_SHADER_GEOMETRY ||
>nir->info.stage == MESA_SHADER_TESS_CTRL ||
>nir->info.stage == MESA_SHADER_TESS_EVAL ||
> -  nir->info.stage == MESA_SHADER_FRAGMENT);
> +  nir->info.stage == MESA_SHADER_FRAGMENT ||
> +  nir->info.stage == MESA_SHADER_COMPUTE);

You can just remove this tautological assertion.

Marek
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 01/11] radeonsi/nir: gather some compute info in si_nir_scan_shader()

2018-02-01 Thread Timothy Arceri
---
 src/gallium/drivers/radeonsi/si_shader_nir.c | 30 +++-
 1 file changed, 29 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 128be585cd..28b031d935 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -86,6 +86,27 @@ static void scan_instruction(struct tgsi_shader_info *info,
case nir_intrinsic_load_invocation_id:
info->uses_invocationid = true;
break;
+   case nir_intrinsic_load_num_work_groups:
+   info->uses_grid_size = true;
+   break;
+   case nir_intrinsic_load_local_group_size:
+   /* The block size is translated to IMM with a fixed 
block size. */
+   if 
(info->properties[TGSI_PROPERTY_CS_FIXED_BLOCK_WIDTH] == 0)
+   info->uses_block_size = true;
+   break;
+   case nir_intrinsic_load_local_invocation_id:
+   case nir_intrinsic_load_work_group_id: {
+   unsigned mask = 
nir_ssa_def_components_read(>dest.ssa);
+   while (mask) {
+   unsigned i = u_bit_scan();
+
+   if (intr->intrinsic == 
nir_intrinsic_load_work_group_id)
+   info->uses_block_id[i] = true;
+   else
+   info->uses_thread_id[i] = true;
+   }
+   break;
+   }
case nir_intrinsic_load_vertex_id:
info->uses_vertexid = 1;
break;
@@ -226,7 +247,8 @@ void si_nir_scan_shader(const struct nir_shader *nir,
   nir->info.stage == MESA_SHADER_GEOMETRY ||
   nir->info.stage == MESA_SHADER_TESS_CTRL ||
   nir->info.stage == MESA_SHADER_TESS_EVAL ||
-  nir->info.stage == MESA_SHADER_FRAGMENT);
+  nir->info.stage == MESA_SHADER_FRAGMENT ||
+  nir->info.stage == MESA_SHADER_COMPUTE);
 
info->processor = pipe_shader_type_from_mesa(nir->info.stage);
info->num_tokens = 2; /* indicate that the shader is non-empty */
@@ -261,6 +283,12 @@ void si_nir_scan_shader(const struct nir_shader *nir,
info->properties[TGSI_PROPERTY_GS_INVOCATIONS] = 
nir->info.gs.invocations;
}
 
+   if (nir->info.stage == MESA_SHADER_COMPUTE) {
+   info->properties[TGSI_PROPERTY_CS_FIXED_BLOCK_WIDTH] = 
nir->info.cs.local_size[0];
+   info->properties[TGSI_PROPERTY_CS_FIXED_BLOCK_HEIGHT] = 
nir->info.cs.local_size[1];
+   info->properties[TGSI_PROPERTY_CS_FIXED_BLOCK_DEPTH] = 
nir->info.cs.local_size[2];
+   }
+
i = 0;
uint64_t processed_inputs = 0;
unsigned num_inputs = 0;
-- 
2.14.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev