tgsi: infer that DLDEXP's second source has an integer type
Reviewed-by: Marek Olšák <marek.olsak@amd.com> Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
This commit is contained in:
parent
93bf9c114b
commit
d713af711d
|
@ -202,7 +202,7 @@ static int get_src_chan_idx(unsigned opcode,
|
|||
int dst_chan_index)
|
||||
{
|
||||
enum tgsi_opcode_type dtype = tgsi_opcode_infer_dst_type(opcode);
|
||||
enum tgsi_opcode_type stype = tgsi_opcode_infer_src_type(opcode);
|
||||
enum tgsi_opcode_type stype = tgsi_opcode_infer_src_type(opcode, 0);
|
||||
|
||||
if (!tgsi_type_is_64bit(dtype) && !tgsi_type_is_64bit(stype))
|
||||
return dst_chan_index;
|
||||
|
@ -420,7 +420,7 @@ lp_build_emit_fetch(
|
|||
{
|
||||
const struct tgsi_full_src_register *reg = &inst->Src[src_op];
|
||||
enum tgsi_opcode_type stype =
|
||||
tgsi_opcode_infer_src_type(inst->Instruction.Opcode);
|
||||
tgsi_opcode_infer_src_type(inst->Instruction.Opcode, src_op);
|
||||
|
||||
return lp_build_emit_fetch_src(bld_base, reg, stype, chan_index);
|
||||
}
|
||||
|
|
|
@ -767,12 +767,13 @@ ttn_get_var(struct ttn_compile *c, struct tgsi_full_dst_register *tgsi_fdst)
|
|||
}
|
||||
|
||||
static nir_ssa_def *
|
||||
ttn_get_src(struct ttn_compile *c, struct tgsi_full_src_register *tgsi_fsrc)
|
||||
ttn_get_src(struct ttn_compile *c, struct tgsi_full_src_register *tgsi_fsrc,
|
||||
int src_idx)
|
||||
{
|
||||
nir_builder *b = &c->build;
|
||||
struct tgsi_src_register *tgsi_src = &tgsi_fsrc->Register;
|
||||
unsigned tgsi_opcode = c->token->FullInstruction.Instruction.Opcode;
|
||||
unsigned tgsi_src_type = tgsi_opcode_infer_src_type(tgsi_opcode);
|
||||
unsigned tgsi_src_type = tgsi_opcode_infer_src_type(tgsi_opcode, src_idx);
|
||||
bool src_is_float = !(tgsi_src_type == TGSI_TYPE_SIGNED ||
|
||||
tgsi_src_type == TGSI_TYPE_UNSIGNED);
|
||||
nir_alu_src src;
|
||||
|
@ -1644,7 +1645,7 @@ ttn_emit_instruction(struct ttn_compile *c)
|
|||
|
||||
nir_ssa_def *src[TGSI_FULL_MAX_SRC_REGISTERS];
|
||||
for (i = 0; i < tgsi_inst->Instruction.NumSrcRegs; i++) {
|
||||
src[i] = ttn_get_src(c, &tgsi_inst->Src[i]);
|
||||
src[i] = ttn_get_src(c, &tgsi_inst->Src[i], i);
|
||||
}
|
||||
nir_alu_dest dest = ttn_get_dest(c, tgsi_dst);
|
||||
|
||||
|
|
|
@ -242,8 +242,11 @@ tgsi_opcode_infer_type( uint opcode )
|
|||
* infer the source type of a TGSI opcode.
|
||||
*/
|
||||
enum tgsi_opcode_type
|
||||
tgsi_opcode_infer_src_type( uint opcode )
|
||||
tgsi_opcode_infer_src_type(uint opcode, uint src_idx)
|
||||
{
|
||||
if (src_idx == 1 && opcode == TGSI_OPCODE_DLDEXP)
|
||||
return TGSI_TYPE_SIGNED;
|
||||
|
||||
switch (opcode) {
|
||||
case TGSI_OPCODE_UIF:
|
||||
case TGSI_OPCODE_TXF:
|
||||
|
|
|
@ -111,7 +111,7 @@ static inline bool tgsi_type_is_64bit(enum tgsi_opcode_type type)
|
|||
}
|
||||
|
||||
enum tgsi_opcode_type
|
||||
tgsi_opcode_infer_src_type( uint opcode );
|
||||
tgsi_opcode_infer_src_type( uint opcode, uint src_idx );
|
||||
|
||||
enum tgsi_opcode_type
|
||||
tgsi_opcode_infer_dst_type( uint opcode );
|
||||
|
|
Loading…
Reference in New Issue