diff options
-rw-r--r-- | src/gallium/drivers/r600/r600_asm.h | 1 | ||||
-rw-r--r-- | src/gallium/drivers/r600/r600_shader.c | 3 | ||||
-rw-r--r-- | src/gallium/drivers/r600/sb/sb_bc_parser.cpp | 2 |
3 files changed, 5 insertions, 1 deletions
diff --git a/src/gallium/drivers/r600/r600_asm.h b/src/gallium/drivers/r600/r600_asm.h index 5841044bf81..ca9280a7a83 100644 --- a/src/gallium/drivers/r600/r600_asm.h +++ b/src/gallium/drivers/r600/r600_asm.h @@ -277,6 +277,7 @@ struct r600_bytecode { struct r600_bytecode_output pending_outputs[5]; int n_pending_outputs; boolean need_wait_ack; /* emit a pending WAIT_ACK prior to control flow */ + boolean precise; }; /* eg_asm.c */ diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c index 2229dc8fab3..408939d1105 100644 --- a/src/gallium/drivers/r600/r600_shader.c +++ b/src/gallium/drivers/r600/r600_shader.c @@ -3879,6 +3879,9 @@ static int r600_shader_from_tgsi(struct r600_context *rctx, ctx.inst_info = &eg_shader_tgsi_instruction[opcode]; else ctx.inst_info = &r600_shader_tgsi_instruction[opcode]; + + ctx.bc->precise |= ctx.parse.FullToken.FullInstruction.Instruction.Precise; + r = ctx.inst_info->process(&ctx); if (r) goto out_err; diff --git a/src/gallium/drivers/r600/sb/sb_bc_parser.cpp b/src/gallium/drivers/r600/sb/sb_bc_parser.cpp index a7b828268b9..eafc1cb8ec4 100644 --- a/src/gallium/drivers/r600/sb/sb_bc_parser.cpp +++ b/src/gallium/drivers/r600/sb/sb_bc_parser.cpp @@ -75,7 +75,7 @@ int bc_parser::decode() { } sh = new shader(ctx, t, bc->debug_id); - sh->safe_math = sb_context::safe_math || (t == TARGET_COMPUTE); + sh->safe_math = sb_context::safe_math || (t == TARGET_COMPUTE || bc->precise); int r = decode_shader(); |