if (src->Register.File == TGSI_FILE_IMAGE) {
if (src->Register.Indirect)
- info->images_writemask = info->images_declared;
+ info->images_atomic = info->images_declared;
else
- info->images_writemask |= 1 << src->Register.Index;
+ info->images_atomic |= 1 << src->Register.Index;
} else if (src->Register.File == TGSI_FILE_BUFFER) {
if (src->Register.Indirect)
info->shader_buffers_atomic = info->shader_buffers_declared;
info->shader_buffers_atomic |= 1 << src->Register.Index;
}
} else {
- if (src->Register.File == TGSI_FILE_BUFFER) {
+ if (src->Register.File == TGSI_FILE_IMAGE) {
+ if (src->Register.Indirect)
+ info->images_load = info->images_declared;
+ else
+ info->images_load |= 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
if (dst->Register.File == TGSI_FILE_IMAGE) {
if (dst->Register.Indirect)
- info->images_writemask = info->images_declared;
+ info->images_store = info->images_declared;
else
- info->images_writemask |= 1 << dst->Register.Index;
+ info->images_store |= 1 << dst->Register.Index;
} else if (dst->Register.File == TGSI_FILE_BUFFER) {
if (dst->Register.Indirect)
info->shader_buffers_store = info->shader_buffers_declared;
unsigned num_written_clipdistance;
unsigned images_declared; /**< bitmask of declared images */
- /**
- * Bitmask indicating which images are written to (STORE / ATOM*).
- * Indirect image accesses are not reflected in this mask.
- */
- unsigned images_writemask;
/**
* Bitmask indicating which declared image is a buffer.
*/
unsigned images_buffers;
+ unsigned images_load; /**< bitmask of images using loads */
+ unsigned images_store; /**< bitmask of images using stores */
+ unsigned images_atomic; /**< bitmask of images using atomics */
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 */
if (!image->Register.Indirect) {
const struct tgsi_shader_info *info = bld_base->info;
+ unsigned images_writemask = info->images_store |
+ info->images_atomic;
index = LLVMConstInt(ctx->i32, image->Register.Index, 0);
- if (info->images_writemask & (1 << image->Register.Index) &&
+ if (images_writemask & (1 << image->Register.Index) &&
target != TGSI_TEXTURE_BUFFER)
dcc_off = true;
} else {