[Mesa-dev] TGSI 16-bit support

Marek Olšák maraeo at gmail.com
Tue Aug 22 17:10:07 UTC 2017


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?

Marek


More information about the mesa-dev mailing list