tgsi/scan: record load/store/atomic image usage
Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
3958c01762
commit
455c79b24f
|
@ -283,9 +283,9 @@ scan_src_operand(struct tgsi_shader_info *info,
|
||||||
|
|
||||||
if (src->Register.File == TGSI_FILE_IMAGE) {
|
if (src->Register.File == TGSI_FILE_IMAGE) {
|
||||||
if (src->Register.Indirect)
|
if (src->Register.Indirect)
|
||||||
info->images_writemask = info->images_declared;
|
info->images_atomic = info->images_declared;
|
||||||
else
|
else
|
||||||
info->images_writemask |= 1 << src->Register.Index;
|
info->images_atomic |= 1 << src->Register.Index;
|
||||||
} else if (src->Register.File == TGSI_FILE_BUFFER) {
|
} else if (src->Register.File == TGSI_FILE_BUFFER) {
|
||||||
if (src->Register.Indirect)
|
if (src->Register.Indirect)
|
||||||
info->shader_buffers_atomic = info->shader_buffers_declared;
|
info->shader_buffers_atomic = info->shader_buffers_declared;
|
||||||
|
@ -293,7 +293,12 @@ scan_src_operand(struct tgsi_shader_info *info,
|
||||||
info->shader_buffers_atomic |= 1 << src->Register.Index;
|
info->shader_buffers_atomic |= 1 << src->Register.Index;
|
||||||
}
|
}
|
||||||
} else {
|
} 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)
|
if (src->Register.Indirect)
|
||||||
info->shader_buffers_load = info->shader_buffers_declared;
|
info->shader_buffers_load = info->shader_buffers_declared;
|
||||||
else
|
else
|
||||||
|
@ -425,9 +430,9 @@ scan_instruction(struct tgsi_shader_info *info,
|
||||||
|
|
||||||
if (dst->Register.File == TGSI_FILE_IMAGE) {
|
if (dst->Register.File == TGSI_FILE_IMAGE) {
|
||||||
if (dst->Register.Indirect)
|
if (dst->Register.Indirect)
|
||||||
info->images_writemask = info->images_declared;
|
info->images_store = info->images_declared;
|
||||||
else
|
else
|
||||||
info->images_writemask |= 1 << dst->Register.Index;
|
info->images_store |= 1 << dst->Register.Index;
|
||||||
} else if (dst->Register.File == TGSI_FILE_BUFFER) {
|
} else if (dst->Register.File == TGSI_FILE_BUFFER) {
|
||||||
if (dst->Register.Indirect)
|
if (dst->Register.Indirect)
|
||||||
info->shader_buffers_store = info->shader_buffers_declared;
|
info->shader_buffers_store = info->shader_buffers_declared;
|
||||||
|
|
|
@ -137,15 +137,13 @@ struct tgsi_shader_info
|
||||||
unsigned num_written_clipdistance;
|
unsigned num_written_clipdistance;
|
||||||
|
|
||||||
unsigned images_declared; /**< bitmask of declared images */
|
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.
|
* Bitmask indicating which declared image is a buffer.
|
||||||
*/
|
*/
|
||||||
unsigned images_buffers;
|
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_declared; /**< bitmask of declared shader buffers */
|
||||||
unsigned shader_buffers_load; /**< bitmask of shader buffers using loads */
|
unsigned shader_buffers_load; /**< bitmask of shader buffers using loads */
|
||||||
unsigned shader_buffers_store; /**< bitmask of shader buffers using stores */
|
unsigned shader_buffers_store; /**< bitmask of shader buffers using stores */
|
||||||
|
|
|
@ -3328,10 +3328,12 @@ image_fetch_rsrc(
|
||||||
|
|
||||||
if (!image->Register.Indirect) {
|
if (!image->Register.Indirect) {
|
||||||
const struct tgsi_shader_info *info = bld_base->info;
|
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);
|
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)
|
target != TGSI_TEXTURE_BUFFER)
|
||||||
dcc_off = true;
|
dcc_off = true;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue