aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2018-11-19 22:27:15 -0500
committerMarek Olšák <[email protected]>2018-11-28 20:20:27 -0500
commit2a936f8afaba6ce4fdd44bb24cb016413a611b4e (patch)
treec69fb1944b97ee92c322f3d31e2a7e2c020807be /src/gallium
parentfba91b51735982d04549c060864618216c7d1196 (diff)
tgsi/scan: add more information about bindless usage
radeonsi will use this.
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_scan.c28
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_scan.h7
2 files changed, 33 insertions, 2 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c
index e13500a7f7b..4ca84902dd4 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_scan.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c
@@ -368,7 +368,19 @@ scan_instruction(struct tgsi_shader_info *info,
info->uses_bindless_samplers = true;
break;
case TGSI_OPCODE_RESQ:
+ if (tgsi_is_bindless_image_file(fullinst->Src[0].Register.File))
+ info->uses_bindless_images = true;
+ break;
case TGSI_OPCODE_LOAD:
+ if (tgsi_is_bindless_image_file(fullinst->Src[0].Register.File)) {
+ info->uses_bindless_images = true;
+
+ if (fullinst->Memory.Texture == TGSI_TEXTURE_BUFFER)
+ info->uses_bindless_buffer_load = true;
+ else
+ info->uses_bindless_image_load = true;
+ }
+ break;
case TGSI_OPCODE_ATOMUADD:
case TGSI_OPCODE_ATOMXCHG:
case TGSI_OPCODE_ATOMCAS:
@@ -379,12 +391,24 @@ scan_instruction(struct tgsi_shader_info *info,
case TGSI_OPCODE_ATOMUMAX:
case TGSI_OPCODE_ATOMIMIN:
case TGSI_OPCODE_ATOMIMAX:
- if (tgsi_is_bindless_image_file(fullinst->Src[0].Register.File))
+ if (tgsi_is_bindless_image_file(fullinst->Src[0].Register.File)) {
info->uses_bindless_images = true;
+
+ if (fullinst->Memory.Texture == TGSI_TEXTURE_BUFFER)
+ info->uses_bindless_buffer_atomic = true;
+ else
+ info->uses_bindless_image_atomic = true;
+ }
break;
case TGSI_OPCODE_STORE:
- if (tgsi_is_bindless_image_file(fullinst->Dst[0].Register.File))
+ if (tgsi_is_bindless_image_file(fullinst->Dst[0].Register.File)) {
info->uses_bindless_images = true;
+
+ if (fullinst->Memory.Texture == TGSI_TEXTURE_BUFFER)
+ info->uses_bindless_buffer_store = true;
+ else
+ info->uses_bindless_image_store = true;
+ }
break;
default:
break;
diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.h b/src/gallium/auxiliary/tgsi/tgsi_scan.h
index 1887ff342de..64f2598a259 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_scan.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_scan.h
@@ -153,6 +153,13 @@ struct tgsi_shader_info
unsigned shader_buffers_load; /**< bitmask of shader buffers using loads */
unsigned shader_buffers_store; /**< bitmask of shader buffers using stores */
unsigned shader_buffers_atomic; /**< bitmask of shader buffers using atomics */
+ bool uses_bindless_buffer_load;
+ bool uses_bindless_buffer_store;
+ bool uses_bindless_buffer_atomic;
+ bool uses_bindless_image_load;
+ bool uses_bindless_image_store;
+ bool uses_bindless_image_atomic;
+
/**
* Bitmask indicating which register files are accessed with
* indirect addressing. The bits are (1 << TGSI_FILE_x), etc.