[Mesa-dev] [PATCH v2 6/7] i965/nir: Do boolean resolves on GEN <= 5

Matt Turner mattst88 at gmail.com
Fri Mar 20 13:10:42 PDT 2015


On Fri, Mar 20, 2015 at 11:24 AM, Jason Ekstrand <jason at jlekstrand.net> wrote:
> ---
>  src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> index 90071f6..5fa528c 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> @@ -25,6 +25,7 @@
>  #include "glsl/ir_optimization.h"
>  #include "glsl/nir/glsl_to_nir.h"
>  #include "brw_fs.h"
> +#include "brw_nir.h"
>
>  static void
>  nir_optimize(nir_shader *nir)
> @@ -155,6 +156,14 @@ fs_visitor::emit_nir_code()
>     nir_convert_from_ssa(nir);
>     nir_validate_shader(nir);
>
> +   /* This is the last pass we run before we start emitting stuff.  It
> +    * determines when we need to insert boolean resolves on GEN <= 5.  We

s/GEN/Gen/

> +    * run it last because it stashes data in instr->pass_flags and we don't
> +    * want that to be squashed by other NIR passes.
> +    */
> +   if (brw->gen <= 5)
> +      brw_nir_analyze_boolean_resolves(nir);
> +
>     /* emit the arrays used for inputs and outputs - load/store intrinsics will
>      * be converted to reads/writes of these arrays
>      */
> @@ -1261,6 +1270,18 @@ fs_visitor::nir_emit_alu(nir_alu_instr *instr)
>     default:
>        unreachable("unhandled instruction");
>     }
> +
> +   /* If we need to do a boolean resolve, replace the result with -(x & 1)
> +    * to convert it from junk in the top 31 bits and the actual boolean in
> +    * the bottom bit to the NIR standard of 0/~0.

I'd probably just say

> If we need to do a boolean resolve, replace the result with -(x & 1) to sign extend the low bit to 0/~0.

With those,

Reviewed-by: Matt Turner <mattst88 at gmail.com>


More information about the mesa-dev mailing list