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

Reply via email to