summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2016-10-09 19:26:43 +0200
committerMarek Olšák <[email protected]>2016-10-24 21:41:35 +0200
commit72267a25db6d5abae80f785b8c3742a38d57767a (patch)
tree892119d51881cb9e817d159deb428f9b7de8dd29
parentd89890d000da36c51484ee170b2d9727d2766a93 (diff)
tgsi/scan: get information about shader buffer usage
Reviewed-by: Nicolai Hähnle <[email protected]>
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_scan.c19
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_scan.h4
2 files changed, 23 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c
index c27f0c6b89a..517b98387a1 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 16f00348ac2..602a8703d50 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.