diff options
Diffstat (limited to 'src/gallium/auxiliary/tgsi')
-rw-r--r-- | src/gallium/auxiliary/tgsi/tgsi_scan.c | 19 | ||||
-rw-r--r-- | src/gallium/auxiliary/tgsi/tgsi_scan.h | 4 |
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. |