summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2014-02-17 16:35:20 +1000
committerDave Airlie <airlied@gmail.com>2014-02-27 09:19:02 +1000
commitb063dce5c26758859279d650949c9c1d8fc08a67 (patch)
tree41c79e78d3edea87839a398dd74b09f97d2a23df
parent217f2c746543537d5ce7f1e0e5f96661ec00ed66 (diff)
try and get inf/nan to work
-rw-r--r--src/gallium/renderer/graw_shader.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/gallium/renderer/graw_shader.c b/src/gallium/renderer/graw_shader.c
index caacc0ab2ef..2a38617fa09 100644
--- a/src/gallium/renderer/graw_shader.c
+++ b/src/gallium/renderer/graw_shader.c
@@ -3,6 +3,7 @@
#include "tgsi/tgsi_iterate.h"
#include <string.h>
#include <stdio.h>
+#include <math.h>
#include "graw_shader.h"
extern int vrend_dump_shaders;
/*
@@ -592,7 +593,7 @@ iter_instruction(struct tgsi_iterate_context *iter,
} else if (src->Register.File == TGSI_FILE_IMMEDIATE) {
struct immed *imd = &ctx->imm[(src->Register.Index)];
int idx = src->Register.SwizzleX;
- char temp[25];
+ char temp[48];
const char *vtype = "vec4";
const char *imm_stypeprefix = stypeprefix;
@@ -629,7 +630,10 @@ iter_instruction(struct tgsi_iterate_context *iter,
idx = src->Register.SwizzleW;
switch (imd->type) {
case TGSI_IMM_FLOAT32:
- snprintf(temp, 25, "%.8g", imd->val[idx].f);
+ if (isinf(imd->val[idx].f) || isnan(imd->val[idx].f))
+ snprintf(temp, 48, "uintBitsToFloat(%uU)", imd->val[idx].ui);
+ else
+ snprintf(temp, 25, "%.8g", imd->val[idx].f);
break;
case TGSI_IMM_UINT32:
snprintf(temp, 25, "%u", imd->val[idx].ui);