mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 17:48:10 +02:00
pco, pygen: differentiate between int and float ref mods
Removing modifier-derived constants until we better track ref mod types. Signed-off-by: Simon Perretta <simon.perretta@imgtec.com> Acked-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36412>
This commit is contained in:
parent
358d741b22
commit
d5e464ffc7
4 changed files with 113 additions and 115 deletions
|
|
@ -29,105 +29,102 @@ struct const_reg_def {
|
|||
|
||||
/** Constant register values (sorted for bsearch). */
|
||||
static const struct const_reg_def const_reg_defs[] = {
|
||||
{ 0x00000000, 0, false, false }, { 0x00000001, 1, false, false },
|
||||
{ 0x00000002, 2, false, false }, { 0x00000003, 3, false, false },
|
||||
{ 0x00000004, 4, false, false }, { 0x00000005, 5, false, false },
|
||||
{ 0x00000006, 6, false, false }, { 0x00000007, 7, false, false },
|
||||
{ 0x00000008, 8, false, false }, { 0x00000009, 9, false, false },
|
||||
{ 0x0000000a, 10, false, false }, { 0x0000000b, 11, false, false },
|
||||
{ 0x0000000c, 12, false, false }, { 0x0000000d, 13, false, false },
|
||||
{ 0x0000000e, 14, false, false }, { 0x0000000f, 15, false, false },
|
||||
{ 0x00000010, 16, false, false }, { 0x00000011, 17, false, false },
|
||||
{ 0x00000012, 18, false, false }, { 0x00000013, 19, false, false },
|
||||
{ 0x00000014, 20, false, false }, { 0x00000015, 21, false, false },
|
||||
{ 0x00000016, 22, false, false }, { 0x00000017, 23, false, false },
|
||||
{ 0x00000018, 24, false, false }, { 0x00000019, 25, false, false },
|
||||
{ 0x0000001a, 26, false, false }, { 0x0000001b, 27, false, false },
|
||||
{ 0x0000001c, 28, false, false }, { 0x0000001d, 29, false, false },
|
||||
{ 0x0000001e, 30, false, false }, { 0x0000001f, 31, false, false },
|
||||
{ 0x0000007f, 147, false, false }, { 0x37800000, 134, false, false },
|
||||
{ 0x38000000, 135, false, false }, { 0x38800000, 88, false, false },
|
||||
{ 0x39000000, 87, false, false }, { 0x39800000, 86, false, false },
|
||||
{ 0x3a000000, 85, false, false }, { 0x3a800000, 84, false, false },
|
||||
{ 0x3b000000, 83, false, false }, { 0x3b4d2e1c, 136, false, false },
|
||||
{ 0x3b800000, 82, false, false }, { 0x3c000000, 81, false, false },
|
||||
{ 0x3c800000, 80, false, false }, { 0x3d000000, 79, false, false },
|
||||
{ 0x3d25aee6, 156, false, false }, { 0x3d6147ae, 140, false, false },
|
||||
{ 0x3d800000, 78, false, false }, { 0x3d9e8391, 157, false, false },
|
||||
{ 0x3e000000, 77, false, false }, { 0x3e2aaaab, 153, false, false },
|
||||
{ 0x3e800000, 76, false, false }, { 0x3e9a209b, 145, false, false },
|
||||
{ 0x3ea2f983, 128, false, false }, { 0x3eaaaaab, 152, false, false },
|
||||
{ 0x3ebc5ab2, 90, false, false }, { 0x3ed55555, 138, false, false },
|
||||
{ 0x3f000000, 75, false, false }, { 0x3f22f983, 129, false, false },
|
||||
{ 0x3f317218, 146, false, false }, { 0x3f3504f3, 92, false, false },
|
||||
{ 0x3f490fdb, 93, false, false }, { 0x3f72a76f, 158, false, false },
|
||||
{ 0x3f800000, 64, false, false }, { 0x3f860a92, 151, false, false },
|
||||
{ 0x3f870a3d, 139, false, false }, { 0x3fa2f983, 130, false, false },
|
||||
{ 0x3fb504f3, 91, false, false }, { 0x3fb8aa3b, 155, false, false },
|
||||
{ 0x3fc90fdb, 94, false, false }, { 0x40000000, 65, false, false },
|
||||
{ 0x4019999a, 159, false, false }, { 0x402df854, 89, false, false },
|
||||
{ 0x40400000, 95, true, false }, { 0x40490fdb, 95, false, false },
|
||||
{ 0x40549a78, 154, false, false }, { 0x40800000, 66, false, false },
|
||||
{ 0x40c00000, 131, true, false }, { 0x40c90fdb, 131, false, false },
|
||||
{ 0x41000000, 67, false, false }, { 0x41400000, 132, true, false },
|
||||
{ 0x41490fdb, 132, false, false }, { 0x414eb852, 137, false, false },
|
||||
{ 0x41800000, 68, false, false }, { 0x41c80000, 133, true, false },
|
||||
{ 0x41c90fdb, 133, false, false }, { 0x42000000, 69, false, false },
|
||||
{ 0x42800000, 70, false, false }, { 0x43000000, 71, false, false },
|
||||
{ 0x43800000, 72, false, false }, { 0x44000000, 73, false, false },
|
||||
{ 0x44800000, 74, false, false }, { 0x4b000000, 149, false, false },
|
||||
{ 0x4b800000, 150, false, false }, { 0x7f7fffff, 148, false, false },
|
||||
{ 0x7f800000, 142, false, false }, { 0x7fff7fff, 144, false, false },
|
||||
{ 0x7fffffff, 143, false, true }, { 0x80000000, 141, false, false },
|
||||
{ 0x80000001, 1, false, true }, { 0x80000002, 2, false, true },
|
||||
{ 0x80000003, 3, false, true }, { 0x80000004, 4, false, true },
|
||||
{ 0x80000005, 5, false, true }, { 0x80000006, 6, false, true },
|
||||
{ 0x80000007, 7, false, true }, { 0x80000008, 8, false, true },
|
||||
{ 0x80000009, 9, false, true }, { 0x8000000a, 10, false, true },
|
||||
{ 0x8000000b, 11, false, true }, { 0x8000000c, 12, false, true },
|
||||
{ 0x8000000d, 13, false, true }, { 0x8000000e, 14, false, true },
|
||||
{ 0x8000000f, 15, false, true }, { 0x80000010, 16, false, true },
|
||||
{ 0x80000011, 17, false, true }, { 0x80000012, 18, false, true },
|
||||
{ 0x80000013, 19, false, true }, { 0x80000014, 20, false, true },
|
||||
{ 0x80000015, 21, false, true }, { 0x80000016, 22, false, true },
|
||||
{ 0x80000017, 23, false, true }, { 0x80000018, 24, false, true },
|
||||
{ 0x80000019, 25, false, true }, { 0x8000001a, 26, false, true },
|
||||
{ 0x8000001b, 27, false, true }, { 0x8000001c, 28, false, true },
|
||||
{ 0x8000001d, 29, false, true }, { 0x8000001e, 30, false, true },
|
||||
{ 0x8000001f, 31, false, true }, { 0x8000007f, 147, false, true },
|
||||
{ 0xb7800000, 134, false, true }, { 0xb8000000, 135, false, true },
|
||||
{ 0xb8800000, 88, false, true }, { 0xb9000000, 87, false, true },
|
||||
{ 0xb9800000, 86, false, true }, { 0xba000000, 85, false, true },
|
||||
{ 0xba800000, 84, false, true }, { 0xbb000000, 83, false, true },
|
||||
{ 0xbb4d2e1c, 136, false, true }, { 0xbb800000, 82, false, true },
|
||||
{ 0xbc000000, 81, false, true }, { 0xbc800000, 80, false, true },
|
||||
{ 0xbd000000, 79, false, true }, { 0xbd25aee6, 156, false, true },
|
||||
{ 0xbd6147ae, 140, false, true }, { 0xbd800000, 78, false, true },
|
||||
{ 0xbd9e8391, 157, false, true }, { 0xbe000000, 77, false, true },
|
||||
{ 0xbe2aaaab, 153, false, true }, { 0xbe800000, 76, false, true },
|
||||
{ 0xbe9a209b, 145, false, true }, { 0xbea2f983, 128, false, true },
|
||||
{ 0xbeaaaaab, 152, false, true }, { 0xbebc5ab2, 90, false, true },
|
||||
{ 0xbed55555, 138, false, true }, { 0xbf000000, 75, false, true },
|
||||
{ 0xbf22f983, 129, false, true }, { 0xbf317218, 146, false, true },
|
||||
{ 0xbf3504f3, 92, false, true }, { 0xbf490fdb, 93, false, true },
|
||||
{ 0xbf72a76f, 158, false, true }, { 0xbf800000, 64, false, true },
|
||||
{ 0xbf860a92, 151, false, true }, { 0xbf870a3d, 139, false, true },
|
||||
{ 0xbfa2f983, 130, false, true }, { 0xbfb504f3, 91, false, true },
|
||||
{ 0xbfb8aa3b, 155, false, true }, { 0xbfc90fdb, 94, false, true },
|
||||
{ 0xc0000000, 65, false, true }, { 0xc019999a, 159, false, true },
|
||||
{ 0xc02df854, 89, false, true }, { 0xc0400000, 95, true, true },
|
||||
{ 0xc0490fdb, 95, false, true }, { 0xc0549a78, 154, false, true },
|
||||
{ 0xc0800000, 66, false, true }, { 0xc0c00000, 131, true, true },
|
||||
{ 0xc0c90fdb, 131, false, true }, { 0xc1000000, 67, false, true },
|
||||
{ 0xc1400000, 132, true, true }, { 0xc1490fdb, 132, false, true },
|
||||
{ 0xc14eb852, 137, false, true }, { 0xc1800000, 68, false, true },
|
||||
{ 0xc1c80000, 133, true, true }, { 0xc1c90fdb, 133, false, true },
|
||||
{ 0xc2000000, 69, false, true }, { 0xc2800000, 70, false, true },
|
||||
{ 0xc3000000, 71, false, true }, { 0xc3800000, 72, false, true },
|
||||
{ 0xc4000000, 73, false, true }, { 0xc4800000, 74, false, true },
|
||||
{ 0xcb000000, 149, false, true }, { 0xcb800000, 150, false, true },
|
||||
{ 0xff7fffff, 148, false, true }, { 0xff800000, 142, false, true },
|
||||
{ 0xffff7fff, 144, false, true }, { 0xffffffff, 143, false, false },
|
||||
{ 0x00000000, 0, false, false }, /* */
|
||||
{ 0x00000001, 1, false, false }, /* */
|
||||
{ 0x00000002, 2, false, false }, /* */
|
||||
{ 0x00000003, 3, false, false }, /* */
|
||||
{ 0x00000004, 4, false, false }, /* */
|
||||
{ 0x00000005, 5, false, false }, /* */
|
||||
{ 0x00000006, 6, false, false }, /* */
|
||||
{ 0x00000007, 7, false, false }, /* */
|
||||
{ 0x00000008, 8, false, false }, /* */
|
||||
{ 0x00000009, 9, false, false }, /* */
|
||||
{ 0x0000000a, 10, false, false }, /* */
|
||||
{ 0x0000000b, 11, false, false }, /* */
|
||||
{ 0x0000000c, 12, false, false }, /* */
|
||||
{ 0x0000000d, 13, false, false }, /* */
|
||||
{ 0x0000000e, 14, false, false }, /* */
|
||||
{ 0x0000000f, 15, false, false }, /* */
|
||||
{ 0x00000010, 16, false, false }, /* */
|
||||
{ 0x00000011, 17, false, false }, /* */
|
||||
{ 0x00000012, 18, false, false }, /* */
|
||||
{ 0x00000013, 19, false, false }, /* */
|
||||
{ 0x00000014, 20, false, false }, /* */
|
||||
{ 0x00000015, 21, false, false }, /* */
|
||||
{ 0x00000016, 22, false, false }, /* */
|
||||
{ 0x00000017, 23, false, false }, /* */
|
||||
{ 0x00000018, 24, false, false }, /* */
|
||||
{ 0x00000019, 25, false, false }, /* */
|
||||
{ 0x0000001a, 26, false, false }, /* */
|
||||
{ 0x0000001b, 27, false, false }, /* */
|
||||
{ 0x0000001c, 28, false, false }, /* */
|
||||
{ 0x0000001d, 29, false, false }, /* */
|
||||
{ 0x0000001e, 30, false, false }, /* */
|
||||
{ 0x0000001f, 31, false, false }, /* */
|
||||
{ 0x0000007f, 147, false, false }, /* */
|
||||
{ 0x37800000, 134, false, false }, /* */
|
||||
{ 0x38000000, 135, false, false }, /* */
|
||||
{ 0x38800000, 88, false, false }, /* */
|
||||
{ 0x39000000, 87, false, false }, /* */
|
||||
{ 0x39800000, 86, false, false }, /* */
|
||||
{ 0x3a000000, 85, false, false }, /* */
|
||||
{ 0x3a800000, 84, false, false }, /* */
|
||||
{ 0x3b000000, 83, false, false }, /* */
|
||||
{ 0x3b4d2e1c, 136, false, false }, /* */
|
||||
{ 0x3b800000, 82, false, false }, /* */
|
||||
{ 0x3c000000, 81, false, false }, /* */
|
||||
{ 0x3c800000, 80, false, false }, /* */
|
||||
{ 0x3d000000, 79, false, false }, /* */
|
||||
{ 0x3d25aee6, 156, false, false }, /* */
|
||||
{ 0x3d6147ae, 140, false, false }, /* */
|
||||
{ 0x3d800000, 78, false, false }, /* */
|
||||
{ 0x3d9e8391, 157, false, false }, /* */
|
||||
{ 0x3e000000, 77, false, false }, /* */
|
||||
{ 0x3e2aaaab, 153, false, false }, /* */
|
||||
{ 0x3e800000, 76, false, false }, /* */
|
||||
{ 0x3e9a209b, 145, false, false }, /* */
|
||||
{ 0x3ea2f983, 128, false, false }, /* */
|
||||
{ 0x3eaaaaab, 152, false, false }, /* */
|
||||
{ 0x3ebc5ab2, 90, false, false }, /* */
|
||||
{ 0x3ed55555, 138, false, false }, /* */
|
||||
{ 0x3f000000, 75, false, false }, /* */
|
||||
{ 0x3f22f983, 129, false, false }, /* */
|
||||
{ 0x3f317218, 146, false, false }, /* */
|
||||
{ 0x3f3504f3, 92, false, false }, /* */
|
||||
{ 0x3f490fdb, 93, false, false }, /* */
|
||||
{ 0x3f72a76f, 158, false, false }, /* */
|
||||
{ 0x3f800000, 64, false, false }, /* */
|
||||
{ 0x3f860a92, 151, false, false }, /* */
|
||||
{ 0x3f870a3d, 139, false, false }, /* */
|
||||
{ 0x3fa2f983, 130, false, false }, /* */
|
||||
{ 0x3fb504f3, 91, false, false }, /* */
|
||||
{ 0x3fb8aa3b, 155, false, false }, /* */
|
||||
{ 0x3fc90fdb, 94, false, false }, /* */
|
||||
{ 0x40000000, 65, false, false }, /* */
|
||||
{ 0x4019999a, 159, false, false }, /* */
|
||||
{ 0x402df854, 89, false, false }, /* */
|
||||
{ 0x40490fdb, 95, false, false }, /* */
|
||||
{ 0x40549a78, 154, false, false }, /* */
|
||||
{ 0x40800000, 66, false, false }, /* */
|
||||
{ 0x40c90fdb, 131, false, false }, /* */
|
||||
{ 0x41000000, 67, false, false }, /* */
|
||||
{ 0x41490fdb, 132, false, false }, /* */
|
||||
{ 0x414eb852, 137, false, false }, /* */
|
||||
{ 0x41800000, 68, false, false }, /* */
|
||||
{ 0x41c90fdb, 133, false, false }, /* */
|
||||
{ 0x42000000, 69, false, false }, /* */
|
||||
{ 0x42800000, 70, false, false }, /* */
|
||||
{ 0x43000000, 71, false, false }, /* */
|
||||
{ 0x43800000, 72, false, false }, /* */
|
||||
{ 0x44000000, 73, false, false }, /* */
|
||||
{ 0x44800000, 74, false, false }, /* */
|
||||
{ 0x4b000000, 149, false, false }, /* */
|
||||
{ 0x4b800000, 150, false, false }, /* */
|
||||
{ 0x7f7fffff, 148, false, false }, /* */
|
||||
{ 0x7f800000, 142, false, false }, /* */
|
||||
{ 0x7fff7fff, 144, false, false }, /* */
|
||||
{ 0x80000000, 141, false, false }, /* */
|
||||
{ 0xffffffff, 143, false, false }, /* */
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -197,9 +194,9 @@ bool pco_const_imms(pco_shader *shader)
|
|||
if (!const_reg_def->flr && !const_reg_def->neg) {
|
||||
pco_mov(&b, dest, const_reg);
|
||||
} else if (!const_reg_def->flr && const_reg_def->neg) {
|
||||
pco_neg(&b, dest, const_reg);
|
||||
pco_fneg(&b, dest, const_reg);
|
||||
} else if (const_reg_def->flr && !const_reg_def->neg) {
|
||||
pco_flr(&b, dest, const_reg);
|
||||
pco_fflr(&b, dest, const_reg);
|
||||
} else {
|
||||
/* TODO: use floor and neg mods when support for > 1 is added. */
|
||||
const_reg = pco_ref_flr(const_reg);
|
||||
|
|
|
|||
|
|
@ -365,9 +365,9 @@ O_IADD32 = hw_op('iadd32', OM_ALU + [OM_S], 1, 3, [], [[RM_ABS, RM_NEG], [RM_ABS
|
|||
O_IMUL32 = hw_op('imul32', OM_ALU + [OM_S], 1, 3, [], [[RM_ABS, RM_NEG], [RM_ABS, RM_NEG]])
|
||||
|
||||
# Pseudo-ops (unmapped).
|
||||
O_NEG = pseudo_op('neg', OM_ALU, 1, 1)
|
||||
O_ABS = pseudo_op('abs', OM_ALU, 1, 1)
|
||||
O_FLR = pseudo_op('flr', OM_ALU, 1, 1)
|
||||
O_FNEG = pseudo_op('fneg', OM_ALU, 1, 1)
|
||||
O_FABS = pseudo_op('fabs', OM_ALU, 1, 1)
|
||||
O_FFLR = pseudo_op('fflr', OM_ALU, 1, 1)
|
||||
O_MOV = pseudo_op('mov', OM_ALU, 1, 1)
|
||||
O_VEC = pseudo_op('vec', [], 1, VARIABLE, [], [[RM_ABS, RM_NEG]])
|
||||
O_COMP = pseudo_op('comp', [], 1, 2)
|
||||
|
|
|
|||
|
|
@ -57,8 +57,8 @@ static inline bool pco_opt_prep_mods(pco_shader *shader,
|
|||
*/
|
||||
pco_foreach_func_in_shader (func, shader) {
|
||||
pco_foreach_instr_in_func_safe (mod, func) {
|
||||
if (mod->op != PCO_OP_NEG && mod->op != PCO_OP_ABS &&
|
||||
mod->op != PCO_OP_FLR)
|
||||
if (mod->op != PCO_OP_FNEG && mod->op != PCO_OP_FABS &&
|
||||
mod->op != PCO_OP_FFLR)
|
||||
continue;
|
||||
|
||||
pco_foreach_instr_in_func_from (instr, mod) {
|
||||
|
|
@ -89,17 +89,17 @@ static inline bool pco_opt_prep_mods(pco_shader *shader,
|
|||
bool other_has_mod = false;
|
||||
|
||||
switch (mod->op) {
|
||||
case PCO_OP_NEG:
|
||||
case PCO_OP_FNEG:
|
||||
match_has_mod = pco_instr_src_has_neg(instr, match_src_index);
|
||||
other_has_mod = pco_instr_src_has_neg(instr, other_src_index);
|
||||
break;
|
||||
|
||||
case PCO_OP_ABS:
|
||||
case PCO_OP_FABS:
|
||||
match_has_mod = pco_instr_src_has_abs(instr, match_src_index);
|
||||
other_has_mod = pco_instr_src_has_abs(instr, other_src_index);
|
||||
break;
|
||||
|
||||
case PCO_OP_FLR:
|
||||
case PCO_OP_FFLR:
|
||||
match_has_mod = pco_instr_src_has_flr(instr, match_src_index);
|
||||
other_has_mod = pco_instr_src_has_flr(instr, other_src_index);
|
||||
break;
|
||||
|
|
@ -127,15 +127,15 @@ static inline bool pco_opt_prep_mods(pco_shader *shader,
|
|||
/* Rewrite the mod op to a mov. */
|
||||
pco_ref src = mod->src[0];
|
||||
switch (mod->op) {
|
||||
case PCO_OP_NEG:
|
||||
case PCO_OP_FNEG:
|
||||
src = pco_ref_neg(src);
|
||||
break;
|
||||
|
||||
case PCO_OP_ABS:
|
||||
case PCO_OP_FABS:
|
||||
src = pco_ref_abs(src);
|
||||
break;
|
||||
|
||||
case PCO_OP_FLR:
|
||||
case PCO_OP_FFLR:
|
||||
src = pco_ref_flr(src);
|
||||
break;
|
||||
|
||||
|
|
|
|||
|
|
@ -1007,15 +1007,16 @@ static pco_instr *trans_alu(trans_ctx *tctx, nir_alu_instr *alu)
|
|||
pco_instr *instr;
|
||||
switch (alu->op) {
|
||||
case nir_op_fneg:
|
||||
instr = pco_neg(&tctx->b, dest, src[0]);
|
||||
instr = pco_fneg(&tctx->b, dest, src[0]);
|
||||
break;
|
||||
|
||||
case nir_op_fabs:
|
||||
instr = pco_abs(&tctx->b, dest, src[0]);
|
||||
instr = pco_fabs(&tctx->b, dest, src[0]);
|
||||
break;
|
||||
|
||||
case nir_op_ffloor:
|
||||
instr = pco_flr(&tctx->b, dest, src[0]);
|
||||
instr = pco_fflr(&tctx->b, dest, src[0]);
|
||||
break;
|
||||
break;
|
||||
|
||||
case nir_op_fadd:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue