[Mesa-dev] TGSI 16-bit support
Roland Scheidegger
sroland at vmware.com
Tue Aug 22 20:39:31 UTC 2017
Am 22.08.2017 um 19:10 schrieb Marek Olšák:
> Hi,
>
> I'd like to discuss 16-bit float and integer support in TGSI. I'm
> proposing this:
>
> struct tgsi_instruction
> {
> unsigned Type : 4; /* TGSI_TOKEN_TYPE_INSTRUCTION */
> unsigned NrTokens : 8; /* UINT */
> unsigned Opcode : 8; /* TGSI_OPCODE_ */
> unsigned Saturate : 1; /* BOOL */
> unsigned NumDstRegs : 2; /* UINT */
> unsigned NumSrcRegs : 4; /* UINT */
> unsigned Label : 1;
> unsigned Texture : 1;
> unsigned Memory : 1;
> unsigned Precise : 1;
> - unsigned Padding : 1;
> + unsigned HalfPrecision : 1;
> };
>
> There won't be any 16-bit TEMPs in TGSI, but each instruction will
> have the HalfPrecision flag, which is a hint for drivers that they can
> use a 16-bit opcode. Even texture, load, and store instructions can
> set HalfPrecision, which means they can accept and return 16-bit
> values.
>
> The catch is that drivers will have to insert 16-bit <-> 32-bit
> conversions manually, because they won't be present in TGSI. The
> advantage is that we don't have to add 200 new opcodes for the 3 new
> 16-bit types.
>
> What do you think?
>
Flagging instructions as 16bit doesn't look too bad to me, but I'm
wondering if this isn't a bit problematic wrt register files. Clearly,
this is a restriction of tgsi "everything is a 32x4 value". Doubles, of
course, have a similar problem, but in the end they still have
well-defined interactions with the register files, because it's defined
what bits ultimately represent a 64bit value (at least in theory from
tgsi's point of view, it is perfectly valid to use some 32bit
calculations to set some reg, then just use double instructions directly
without conversion on these values - it may not be meaningful but it is
well defined).
But it looks like you want to avoid to have a well-defined mapping of
the registers to 16bit types (and with 16 bits instruction just being
hints, I can't see how it could exist).
Note that being able to flag instructions as HalfPrecision does not
necessarily mean you can't have any explicit 16bit conversion
instructions too.
Roland
More information about the mesa-dev
mailing list