From: Kenneth Graunke Date: Thu, 23 Aug 2018 08:06:53 +0000 (-0700) Subject: intel/decoder: Decode SFIXED values. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=578e45ab7bc58e153c4e7e1e2a024e7dfd7159f2;p=mesa.git intel/decoder: Decode SFIXED values. This lets us example SAMPLER_STATE's LOD Bias field, among other things. Reviewed-by: Lionel Landwerlin --- 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: {