summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2018-11-19 22:27:49 -0500
committerMarek Olšák <[email protected]>2018-11-28 20:20:27 -0500
commit8c25ab1a2384b486e5e122b91c4fa43f0adf23c9 (patch)
tree6a8b0bc94a14b8d0baa3236a73f9b51f5f43dcd7 /src
parent2a936f8afaba6ce4fdd44bb24cb016413a611b4e (diff)
radeonsi/nir: parse more information about bindless usage
fill more tgsi_shader_info fields.
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/radeonsi/si_shader_nir.c36
1 files changed, 32 insertions, 4 deletions
diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 87ca0161b45..e7ba282b075 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -143,16 +143,38 @@ static void scan_instruction(struct tgsi_shader_info *info,
case nir_intrinsic_load_tess_level_outer:
info->reads_tess_factors = true;
break;
- case nir_intrinsic_image_deref_load:
+ case nir_intrinsic_image_deref_load: {
+ nir_variable *var = intrinsic_get_var(intr);
+ if (var->data.bindless) {
+ info->uses_bindless_images = true;
+
+ if (glsl_get_sampler_dim(var->type) == GLSL_SAMPLER_DIM_BUF)
+ info->uses_bindless_buffer_load = true;
+ else
+ info->uses_bindless_image_load = true;
+ }
+ break;
+ }
case nir_intrinsic_image_deref_size:
case nir_intrinsic_image_deref_samples: {
nir_variable *var = intrinsic_get_var(intr);
if (var->data.bindless)
info->uses_bindless_images = true;
+ break;
+ }
+ case nir_intrinsic_image_deref_store: {
+ nir_variable *var = intrinsic_get_var(intr);
+ if (var->data.bindless) {
+ info->uses_bindless_images = true;
+ if (glsl_get_sampler_dim(var->type) == GLSL_SAMPLER_DIM_BUF)
+ info->uses_bindless_buffer_store = true;
+ else
+ info->uses_bindless_image_store = true;
+ }
+ info->writes_memory = true;
break;
}
- case nir_intrinsic_image_deref_store:
case nir_intrinsic_image_deref_atomic_add:
case nir_intrinsic_image_deref_atomic_min:
case nir_intrinsic_image_deref_atomic_max:
@@ -162,10 +184,16 @@ static void scan_instruction(struct tgsi_shader_info *info,
case nir_intrinsic_image_deref_atomic_exchange:
case nir_intrinsic_image_deref_atomic_comp_swap: {
nir_variable *var = intrinsic_get_var(intr);
- if (var->data.bindless)
+ if (var->data.bindless) {
info->uses_bindless_images = true;
- /* fall-through */
+ if (glsl_get_sampler_dim(var->type) == GLSL_SAMPLER_DIM_BUF)
+ info->uses_bindless_buffer_atomic = true;
+ else
+ info->uses_bindless_image_atomic = true;
+ }
+ info->writes_memory = true;
+ break;
}
case nir_intrinsic_store_ssbo:
case nir_intrinsic_ssbo_atomic_add: