On Mon, Jun 13, 2016 at 06:27:02PM +0200, Marek Olšák wrote: > From: Marek Olšák <marek.ol...@amd.com> > > --- > src/gallium/drivers/radeon/r600_pipe_common.c | 1 + > src/gallium/drivers/radeon/r600_pipe_common.h | 1 + > src/gallium/drivers/radeonsi/si_shader.c | 16 ++++++++++++++++ > 3 files changed, 18 insertions(+) > > diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c > b/src/gallium/drivers/radeon/r600_pipe_common.c > index fa9f70d..5d4a679 100644 > --- a/src/gallium/drivers/radeon/r600_pipe_common.c > +++ b/src/gallium/drivers/radeon/r600_pipe_common.c > @@ -482,6 +482,7 @@ static const struct debug_named_value > common_debug_options[] = { > { "sisched", DBG_SI_SCHED, "Enable LLVM SI Machine Instruction > Scheduler." }, > { "mono", DBG_MONOLITHIC_SHADERS, "Use old-style monolithic shaders > compiled on demand" }, > { "noce", DBG_NO_CE, "Disable the constant engine"}, > + { "unsafemath", DBG_UNSAFE_MATH, "Enable unsafe math shader > optimizations" }, > > DEBUG_NAMED_VALUE_END /* must be last */ > }; > diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h > b/src/gallium/drivers/radeon/r600_pipe_common.h > index 77dfc4f..263ef5e 100644 > --- a/src/gallium/drivers/radeon/r600_pipe_common.h > +++ b/src/gallium/drivers/radeon/r600_pipe_common.h > @@ -99,6 +99,7 @@ > #define DBG_SI_SCHED (1llu << 46) > #define DBG_MONOLITHIC_SHADERS (1llu << 47) > #define DBG_NO_CE (1llu << 48) > +#define DBG_UNSAFE_MATH (1llu << 49) > > #define R600_MAP_BUFFER_ALIGNMENT 64 > #define R600_MAX_VIEWPORTS 16 > diff --git a/src/gallium/drivers/radeonsi/si_shader.c > b/src/gallium/drivers/radeonsi/si_shader.c > index 6dc4985..bba6a55 100644 > --- a/src/gallium/drivers/radeonsi/si_shader.c > +++ b/src/gallium/drivers/radeonsi/si_shader.c > @@ -5255,6 +5255,22 @@ static void si_create_function(struct > si_shader_context *ctx, > else > LLVMAddAttribute(P, LLVMInRegAttribute); > } > + > + if (ctx->screen->b.debug_flags & DBG_UNSAFE_MATH) { > + /* These were copied from some LLVM test. */ > + LLVMAddTargetDependentFunctionAttr(ctx->radeon_bld.main_fn, > + "less-precise-fpmad", > + "true"); > + LLVMAddTargetDependentFunctionAttr(ctx->radeon_bld.main_fn, > + "no-infs-fp-math", > + "true"); > + LLVMAddTargetDependentFunctionAttr(ctx->radeon_bld.main_fn, > + "no-nans-fp-math", > + "true"); > + LLVMAddTargetDependentFunctionAttr(ctx->radeon_bld.main_fn, > + "unsafe-fp-math", > + "true"); > + }
You may get better results by also adding the fast-math flags to the individual floating-point instructions, but this would be a more invasive change. -Tom > } > > static void create_meta_data(struct si_shader_context *ctx) > -- > 2.7.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev