nir_ssa_def *zero = nir_imm_int(b, 0);
nir_store_buffer_amd(b, data, so_buffers[buffer], so_write_offset[buffer], zero, zero,
.base = output->offset, .write_mask = mask,
- .access = ACCESS_COHERENT | ACCESS_STREAM_CACHE_POLICY);
+ .access = ACCESS_COHERENT | ACCESS_NON_TEMPORAL);
}
nir_pop_if(b, NULL);
outputs.data[i][j] =
nir_load_buffer_amd(&b, 1, 32, gsvs_ring, vtx_offset, zero, zero,
.base = offset,
- .access = ACCESS_COHERENT | ACCESS_STREAM_CACHE_POLICY);
+ .access = ACCESS_COHERENT | ACCESS_NON_TEMPORAL);
/* clamp legacy color output */
if (i == VARYING_SLOT_COL0 || i == VARYING_SLOT_COL1 ||
nir_ssa_def *data =
nir_load_buffer_amd(&b, 1, 32, gsvs_ring, vtx_offset, zero, zero,
.base = offset,
- .access = ACCESS_COHERENT | ACCESS_STREAM_CACHE_POLICY);
+ .access = ACCESS_COHERENT | ACCESS_NON_TEMPORAL);
if (has_lo_16bit)
outputs.data_16bit_lo[i][j] = nir_unpack_32_2x16_split_x(&b, data);
nir_ssa_def *data = nir_u2uN(b, output, 32);
nir_store_buffer_amd(b, data, gsvs_ring, voffset, soffset, nir_imm_int(b, 0),
- .access = ACCESS_COHERENT | ACCESS_STREAM_CACHE_POLICY |
+ .access = ACCESS_COHERENT | ACCESS_NON_TEMPORAL |
ACCESS_IS_SWIZZLED_AMD,
.base = base,
/* For ACO to not reorder this store around EmitVertex/EndPrimitve */
nir_store_buffer_amd(b, nir_pack_32_2x16_split(b, output_lo, output_hi),
gsvs_ring, voffset, soffset, nir_imm_int(b, 0),
- .access = ACCESS_COHERENT | ACCESS_STREAM_CACHE_POLICY |
+ .access = ACCESS_COHERENT | ACCESS_NON_TEMPORAL |
ACCESS_IS_SWIZZLED_AMD,
/* For ACO to not reorder this store around EmitVertex/EndPrimitve */
.memory_modes = nir_var_shader_out);
nir_store_buffer_amd(b, store_val, desc, v_off, s_off, zero,
.base = start_byte, .memory_modes = nir_var_shader_out,
.access = ACCESS_COHERENT |
- (slc ? ACCESS_STREAM_CACHE_POLICY : 0) |
+ (slc ? ACCESS_NON_TEMPORAL : 0) |
(swizzled ? ACCESS_IS_SWIZZLED_AMD : 0));
start_byte += store_bytes;
vtx_buffer_offsets[out->buffer],
zero, zero,
.base = out->offset,
- .access = ACCESS_STREAM_CACHE_POLICY);
+ .access = ACCESS_NON_TEMPORAL);
}
}
Temp idx = idxen ? as_vgpr(ctx, get_ssa_temp(ctx, intrin->src[3].ssa)) : Temp();
bool glc = nir_intrinsic_access(intrin) & ACCESS_COHERENT;
- bool slc = nir_intrinsic_access(intrin) & ACCESS_STREAM_CACHE_POLICY;
+ bool slc = nir_intrinsic_access(intrin) & ACCESS_NON_TEMPORAL;
unsigned const_offset = nir_intrinsic_base(intrin);
unsigned elem_size_bytes = intrin->dest.ssa.bit_size / 8u;
Temp idx = idxen ? as_vgpr(ctx, get_ssa_temp(ctx, intrin->src[4].ssa)) : Temp();
bool glc = nir_intrinsic_access(intrin) & ACCESS_COHERENT;
- bool slc = nir_intrinsic_access(intrin) & ACCESS_STREAM_CACHE_POLICY;
+ bool slc = nir_intrinsic_access(intrin) & ACCESS_NON_TEMPORAL;
unsigned const_offset = nir_intrinsic_base(intrin);
unsigned write_mask = nir_intrinsic_write_mask(intrin);
cache_policy |= ac_glc;
}
- if (access & ACCESS_STREAM_CACHE_POLICY)
+ if (access & ACCESS_NON_TEMPORAL)
cache_policy |= ac_slc | ac_glc;
return cache_policy;
bool swizzled = nir_intrinsic_access(instr) & ACCESS_IS_SWIZZLED_AMD;
bool reorder = nir_intrinsic_can_reorder(instr);
bool coherent = nir_intrinsic_access(instr) & ACCESS_COHERENT;
- bool slc = nir_intrinsic_access(instr) & ACCESS_STREAM_CACHE_POLICY;
+ bool slc = nir_intrinsic_access(instr) & ACCESS_NON_TEMPORAL;
bool uses_format = nir_intrinsic_access(instr) & ACCESS_USES_FORMAT_AMD;
enum ac_image_cache_policy cache_policy = 0;
const char *const ronly = (access & ACCESS_NON_WRITEABLE) ? "readonly " : "";
const char *const wonly = (access & ACCESS_NON_READABLE) ? "writeonly " : "";
const char *const reorder = (access & ACCESS_CAN_REORDER) ? "reorderable " : "";
- const char *const stream_cache_policy = (access & ACCESS_STREAM_CACHE_POLICY) ?
- "stream-cache-policy " : "";
+ const char *const non_temporal = (access & ACCESS_NON_TEMPORAL) ?
+ "non-temporal" : "";
const char *const include_helpers = (access & ACCESS_INCLUDE_HELPERS) ?
"include-helpers " : "";
fprintf(fp, "%s%s%s%s%s%s%s%s", coher, volat, restr, ronly, wonly, reorder,
- stream_cache_policy, include_helpers);
+ non_temporal, include_helpers);
if (glsl_get_base_type(glsl_without_array(var->type)) == GLSL_TYPE_IMAGE) {
fprintf(fp, "%s ", util_format_short_name(var->data.image.format));
*/
ACCESS_CAN_REORDER = (1 << 6),
- /** Use as little cache space as possible. */
- ACCESS_STREAM_CACHE_POLICY = (1 << 7),
+ /**
+ * Hints that the accessed address is not likely to be accessed again
+ * in the near future. This reduces data retention in caches.
+ */
+ ACCESS_NON_TEMPORAL = (1 << 7),
/** Execute instruction also in helpers. */
ACCESS_INCLUDE_HELPERS = (1 << 8),
vtn_foreach_decoration(b, sampled_val, non_uniform_decoration_cb, &access);
if (operands & SpvImageOperandsNontemporalMask)
- access |= ACCESS_STREAM_CACHE_POLICY;
+ access |= ACCESS_NON_TEMPORAL;
if (sampler && b->options->force_tex_non_uniform)
access |= ACCESS_NON_UNIFORM;
if (operands & SpvImageOperandsVolatileTexelMask)
access |= ACCESS_VOLATILE;
if (operands & SpvImageOperandsNontemporalMask)
- access |= ACCESS_STREAM_CACHE_POLICY;
+ access |= ACCESS_NON_TEMPORAL;
break;
}
if (operands & SpvImageOperandsVolatileTexelMask)
access |= ACCESS_VOLATILE;
if (operands & SpvImageOperandsNontemporalMask)
- access |= ACCESS_STREAM_CACHE_POLICY;
+ access |= ACCESS_NON_TEMPORAL;
break;
}
if (access & SpvMemoryAccessVolatileMask)
result |= ACCESS_VOLATILE;
if (access & SpvMemoryAccessNontemporalMask)
- result |= ACCESS_STREAM_CACHE_POLICY;
+ result |= ACCESS_NON_TEMPORAL;
return result;
}
if (tgsi_inst->Memory.Qualifier & TGSI_MEMORY_VOLATILE)
access |= ACCESS_VOLATILE;
if (tgsi_inst->Memory.Qualifier & TGSI_MEMORY_STREAM_CACHE_POLICY)
- access |= ACCESS_STREAM_CACHE_POLICY;
+ access |= ACCESS_NON_TEMPORAL;
return access;
}
data = nir_ior(&b, data, nir_channel(&b, user_sgprs, 0));
nir_store_ssbo(&b, data, zero, address,
- .access = SI_COMPUTE_DST_CACHE_POLICY != L2_LRU ? ACCESS_STREAM_CACHE_POLICY : 0,
+ .access = SI_COMPUTE_DST_CACHE_POLICY != L2_LRU ? ACCESS_NON_TEMPORAL : 0,
.align_mul = 4);
return create_shader_state(sctx, b.shader);
spirv_builder_emit_decoration(&ctx->builder, var_id, SpvDecorationNonUniform);
break;
case ACCESS_CAN_REORDER:
- case ACCESS_STREAM_CACHE_POLICY:
+ case ACCESS_NON_TEMPORAL:
/* no equivalent */
break;
default: