Mesa (master): tgsi/scan: get information about shader buffer usage
Marek Olšák
mareko at kemper.freedesktop.org
Mon Oct 24 19:42:03 UTC 2016
Module: Mesa
Branch: master
Commit: 72267a25db6d5abae80f785b8c3742a38d57767a
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=72267a25db6d5abae80f785b8c3742a38d57767a
Author: Marek Olšák <marek.olsak at amd.com>
Date: Sun Oct 9 19:26:43 2016 +0200
tgsi/scan: get information about shader buffer usage
Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
---
src/gallium/auxiliary/tgsi/tgsi_scan.c | 19 +++++++++++++++++++
src/gallium/auxiliary/tgsi/tgsi_scan.h | 4 ++++
2 files changed, 23 insertions(+)
diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c
index c27f0c6..517b983 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_scan.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c
@@ -339,6 +339,18 @@ scan_instruction(struct tgsi_shader_info *info,
info->images_writemask = info->images_declared;
else
info->images_writemask |= 1 << src->Register.Index;
+ } else if (src->Register.File == TGSI_FILE_BUFFER) {
+ if (src->Register.Indirect)
+ info->shader_buffers_atomic = info->shader_buffers_declared;
+ else
+ info->shader_buffers_atomic |= 1 << src->Register.Index;
+ }
+ } else {
+ if (src->Register.File == TGSI_FILE_BUFFER) {
+ if (src->Register.Indirect)
+ info->shader_buffers_load = info->shader_buffers_declared;
+ else
+ info->shader_buffers_load |= 1 << src->Register.Index;
}
}
}
@@ -366,6 +378,11 @@ scan_instruction(struct tgsi_shader_info *info,
info->images_writemask = info->images_declared;
else
info->images_writemask |= 1 << dst->Register.Index;
+ } else if (dst->Register.File == TGSI_FILE_BUFFER) {
+ if (dst->Register.Indirect)
+ info->shader_buffers_store = info->shader_buffers_declared;
+ else
+ info->shader_buffers_store |= 1 << dst->Register.Index;
}
}
}
@@ -427,6 +444,8 @@ scan_declaration(struct tgsi_shader_info *info,
info->const_buffers_declared |= 1u << buffer;
} else if (file == TGSI_FILE_IMAGE) {
info->images_declared |= 1u << reg;
+ } else if (file == TGSI_FILE_BUFFER) {
+ info->shader_buffers_declared |= 1u << reg;
} else if (file == TGSI_FILE_INPUT) {
info->input_semantic_name[reg] = (ubyte) semName;
info->input_semantic_index[reg] = (ubyte) semIndex;
diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.h b/src/gallium/auxiliary/tgsi/tgsi_scan.h
index 16f0034..602a870 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_scan.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_scan.h
@@ -133,6 +133,10 @@ struct tgsi_shader_info
* Bitmask indicating which declared image is a buffer.
*/
unsigned images_buffers;
+ unsigned shader_buffers_declared; /**< bitmask of declared shader buffers */
+ 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 */
/**
* Bitmask indicating which register files are accessed with
* indirect addressing. The bits are (1 << TGSI_FILE_x), etc.
More information about the mesa-commit
mailing list