mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 20:28:04 +02:00
agx: Use 16-bit immediates
This is slightly more accurate in the IR, and means we instruction select the current 16-bit size floating point instructions when all non-immediate operands are 16-bit. Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18687>
This commit is contained in:
parent
e302e5d527
commit
14f2be1f33
3 changed files with 12 additions and 10 deletions
|
|
@ -382,7 +382,9 @@ agx_emit_load_vary_flat(agx_builder *b, agx_index dest, nir_intrinsic_instr *ins
|
|||
for (unsigned i = 0; i < components; ++i) {
|
||||
/* vec3 for each vertex, unknown what first 2 channels are for */
|
||||
agx_index d[3] = { agx_null() };
|
||||
agx_emit_split(b, d, agx_ldcf(b, cf, 1), 3);
|
||||
agx_index tmp = agx_temp(b->shader, AGX_SIZE_32);
|
||||
agx_ldcf_to(b, tmp, cf, 1);
|
||||
agx_emit_split(b, d, tmp, 3);
|
||||
dests[i] = d[2];
|
||||
|
||||
/* Each component accesses a sequential coefficient register */
|
||||
|
|
@ -567,9 +569,12 @@ agx_emit_load_frag_coord(agx_builder *b, agx_index dst, nir_intrinsic_instr *ins
|
|||
|
||||
u_foreach_bit(i, nir_ssa_def_components_read(&instr->dest.ssa)) {
|
||||
if (i < 2) {
|
||||
dests[i] = agx_fadd(b, agx_convert(b, agx_immediate(AGX_CONVERT_U32_TO_F),
|
||||
agx_index fp32 = agx_temp(b->shader, AGX_SIZE_32);
|
||||
agx_convert_to(b, fp32, agx_immediate(AGX_CONVERT_U32_TO_F),
|
||||
agx_get_sr(b, 32, AGX_SR_THREAD_POSITION_IN_GRID_X + i),
|
||||
AGX_ROUND_RTE), agx_immediate_f(0.5f));
|
||||
AGX_ROUND_RTE);
|
||||
|
||||
dests[i] = agx_fadd(b, fp32, agx_immediate_f(0.5f));
|
||||
} else {
|
||||
agx_index cf = agx_get_cf(b->shader, true, false, VARYING_SLOT_POS, i, 1);
|
||||
dests[i] = agx_iter(b, cf, agx_null(), 1, false);
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ agx_immediate(uint16_t imm)
|
|||
{
|
||||
return (agx_index) {
|
||||
.value = imm,
|
||||
.size = AGX_SIZE_32,
|
||||
.size = AGX_SIZE_16,
|
||||
.type = AGX_INDEX_IMMEDIATE,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -131,13 +131,10 @@ agx_optimizer_inline_imm(agx_instr **defs, agx_instr *I,
|
|||
float f = fp16 ? _mesa_half_to_float(def->imm) : uif(def->imm);
|
||||
if (!agx_minifloat_exact(f)) continue;
|
||||
|
||||
value = agx_minifloat_encode(f);
|
||||
} else if (value != def->imm) {
|
||||
continue;
|
||||
I->src[s] = agx_immediate_f(f);
|
||||
} else if (value == def->imm) {
|
||||
I->src[s] = agx_immediate(value);
|
||||
}
|
||||
|
||||
I->src[s].type = AGX_INDEX_IMMEDIATE;
|
||||
I->src[s].value = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue