From 578e45ab7bc58e153c4e7e1e2a024e7dfd7159f2 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Thu, 23 Aug 2018 01:06:53 -0700 Subject: intel/decoder: Decode SFIXED values. This lets us example SAMPLER_STATE's LOD Bias field, among other things. Reviewed-by: Lionel Landwerlin --- src/intel/common/gen_decoder.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/intel/common/gen_decoder.c b/src/intel/common/gen_decoder.c index c14c23aad1a..39da3cadbf8 100644 --- a/src/intel/common/gen_decoder.c +++ b/src/intel/common/gen_decoder.c @@ -944,10 +944,14 @@ iter_decode_field(struct gen_field_iterator *iter) snprintf(iter->value, sizeof(iter->value), "%f", (float) v.qw / (1 << iter->field->type.f)); break; - case GEN_TYPE_SFIXED: - /* FIXME: Sign extend extracted field. */ - snprintf(iter->value, sizeof(iter->value), "%s", "foo"); + case GEN_TYPE_SFIXED: { + /* Sign extend before converting */ + int bits = iter->field->type.i + iter->field->type.f + 1; + int64_t v_sign_extend = ((int64_t)(v.qw << (64 - bits))) >> (64 - bits); + snprintf(iter->value, sizeof(iter->value), "%f", + (float) v_sign_extend / (1 << iter->field->type.f)); break; + } case GEN_TYPE_MBO: break; case GEN_TYPE_ENUM: { -- cgit v1.2.3