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