pan/bi: Use canonical floating-point modes

First few pre-clause modifiers.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7081>
This commit is contained in:
Alyssa Rosenzweig 2020-10-02 13:23:33 -04:00
parent c8b9a05f9e
commit a5975883b9
2 changed files with 46 additions and 11 deletions

View File

@ -47,14 +47,37 @@ enum bifrost_clause_type {
BIFROST_CLAUSE_64BIT = 15
};
enum bifrost_ftz {
BIFROST_FTZ_DISABLE = 0,
BIFROST_FTZ_DX11 = 1,
BIFROST_FTZ_ALWAYS = 2,
BIFROST_FTZ_ABRUPT = 3
};
enum bifrost_exceptions {
BIFROST_EXCEPTIONS_ENABLED = 0,
BIFROST_EXCEPTIONS_DISABLED = 1,
BIFROST_EXCEPTIONS_PRECISE_DIVISION = 2,
BIFROST_EXCEPTIONS_PRECISE_SQRT = 3,
};
struct bifrost_header {
unsigned unk0 : 7;
// If true, convert any infinite result of any floating-point operation to
// the biggest representable number.
/* Reserved */
unsigned zero1 : 5;
/* Flush-to-zero mode, leave zero for GL */
enum bifrost_ftz flush_to_zero : 2;
/* Convert any infinite result of any floating-point operation to the
* biggest representable number */
unsigned suppress_inf: 1;
// Convert any NaN results to 0.
/* Convert NaN to +0.0 */
unsigned suppress_nan : 1;
unsigned unk1 : 2;
/* Floating-point excception handling mode */
enum bifrost_exceptions float_exceptions : 2;
// true if the execution mask of the next clause is the same as the mask of
// the current clause.
unsigned back_to_back : 1;

View File

@ -119,14 +119,26 @@ static void dump_header(FILE *fp, struct bifrost_header header, bool verbose)
fprintf(fp, "we ");
if (header.suppress_inf)
fprintf(fp, "suppress-inf ");
fprintf(fp, "inf_suppress ");
if (header.suppress_nan)
fprintf(fp, "suppress-nan ");
fprintf(fp, "nan_suppress ");
if (header.flush_to_zero == BIFROST_FTZ_DX11)
fprintf(fp, "ftz_dx11 ");
else if (header.flush_to_zero == BIFROST_FTZ_ALWAYS)
fprintf(fp, "ftz_hsa ");
if (header.flush_to_zero == BIFROST_FTZ_ABRUPT)
fprintf(fp, "ftz_au ");
assert(!header.zero1);
if (header.float_exceptions == BIFROST_EXCEPTIONS_DISABLED)
fprintf(fp, "fpe_ts ");
else if (header.float_exceptions == BIFROST_EXCEPTIONS_PRECISE_DIVISION)
fprintf(fp, "fpe_pd ");
else if (header.float_exceptions == BIFROST_EXCEPTIONS_PRECISE_SQRT)
fprintf(fp, "fpe_psqr ");
if (header.unk0)
fprintf(fp, "unk0 ");
if (header.unk1)
fprintf(fp, "unk1 ");
if (header.unk2)
fprintf(fp, "unk2 ");
if (header.unk3)