<div dir="ltr"><div dir="ltr">commit dd553bc67f8ab1513fd196b6ffb7c4a76723adfd<br>Author: Jason Ekstrand <<a href="mailto:jason.ekstrand@intel.com">jason.ekstrand@intel.com</a>><br>Date:   Wed Oct 3 12:14:20 2018 -0500<br><br>    nir/alu_to_scalar: Use ssa_for_alu_src in hand-rolled expansions<br>    <br>    The ssa_for_alu_src helper will correctly handle swizzles and other<br>    source modifiers for you.  The expansions for unpack_half_2x16,<br>    pack_uvec2_to_uint, and pack_uvec4_to_uint were all broken with regards<br>    to swizzles.  The brokenness of unpack_half_2x16 was causing rendering<br>    errors in Rise of the Tomb Raider on Intel ever since c11833ab24dcba26<br>    which added an extra copy propagation to the optimization pipeline and<br>    caused us to start seeing swizzles where we hadn't seen any before.<br>    <br>    Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=107926">https://bugs.freedesktop.org/show_bug.cgi?id=107926</a><br>    Fixes: 9ce901058f3d "nir: Add lowering of nir_op_unpack_half_2x16."<br>    Fixes: 9b8786eba955 "nir: Add lowering support for packing opcodes."<br>    Tested-by: Alex Smith <<a href="mailto:asmith@feralinteractive.com">asmith@feralinteractive.com</a>><br>    Tested-by: Józef Kucia <<a href="mailto:joseph.kucia@gmail.com">joseph.kucia@gmail.com</a>><br>    Reviewed-by: Matt Turner <<a href="mailto:mattst88@gmail.com">mattst88@gmail.com</a>><br><br><br><div class="gmail_quote"><div dir="ltr">On Wed, Oct 10, 2018 at 1:45 PM Ian Romanick <<a href="mailto:idr@freedesktop.org">idr@freedesktop.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">These changes look good, but I'm wondering why. :)  Did you find some<br>
bug, or ... ?<br>
<br>
On 10/04/2018 10:42 AM, Jason Ekstrand wrote:<br>
> ---<br>
>  .../fs_pack.shader_test.mako                       | 14 +++++++++++---<br>
>  .../fs_unpack.shader_test.mako                     |  6 +++---<br>
>  .../vs_pack.shader_test.mako                       | 14 +++++++++++---<br>
>  .../vs_unpack.shader_test.mako                     |  6 +++---<br>
>  4 files changed, 28 insertions(+), 12 deletions(-)<br>
> <br>
> diff --git a/generated_tests/templates/gen_builtin_packing_tests/fs_pack.shader_test.mako b/generated_tests/templates/gen_builtin_packing_tests/fs_pack.shader_test.mako<br>
> index 4c053bf89..86c63061e 100644<br>
> --- a/generated_tests/templates/gen_builtin_packing_tests/fs_pack.shader_test.mako<br>
> +++ b/generated_tests/templates/gen_builtin_packing_tests/fs_pack.shader_test.mako<br>
> @@ -21,7 +21,7 @@ precision highp float;<br>
>  const vec4 red = vec4(1, 0, 0, 1);<br>
>  const vec4 green = vec4(0, 1, 0, 1);<br>
>  <br>
> -uniform ${func.vector_type} func_input;<br>
> +uniform vec4 func_input;<br>
>  <br>
>  % for i in range(func.num_valid_outputs):<br>
>  uniform ${func.result_precision} uint expect${i};<br>
> @@ -31,7 +31,11 @@ out vec4 frag_color;<br>
>  <br>
>  void main()<br>
>  {<br>
> -    ${func.result_precision} uint actual = ${<a href="http://func.name" rel="noreferrer" target="_blank">func.name</a>}(func_input);<br>
> +% if func.vector_type == 'vec2':<br>
> +    ${func.result_precision} uint actual = ${<a href="http://func.name" rel="noreferrer" target="_blank">func.name</a>}(func_input.wx);<br>
> +% else:<br>
> +    ${func.result_precision} uint actual = ${<a href="http://func.name" rel="noreferrer" target="_blank">func.name</a>}(func_input.wxzy);<br>
> +% endif<br>
>  <br>
>      if (false<br>
>          % for i in range(func.num_valid_outputs):<br>
> @@ -53,7 +57,11 @@ vertex/float/2<br>
>  <br>
>  [test]<br>
>  % for io in func.inout_seq:<br>
> -uniform ${func.vector_type} func_input ${" ".join(io.input)}<br>
> +% if func.vector_type == 'vec2':<br>
> +uniform vec4 func_input ${io.input[1]} 0.0 0.0 ${io.input[0]}<br>
> +% else:<br>
> +uniform vec4 func_input ${io.input[1]} ${io.input[3]} ${io.input[2]} ${io.input[0]}<br>
> +% endif<br>
>  % for i in range(func.num_valid_outputs):<br>
>  uniform uint expect${i} ${io.valid_outputs[i]}<br>
>  % endfor<br>
> diff --git a/generated_tests/templates/gen_builtin_packing_tests/fs_unpack.shader_test.mako b/generated_tests/templates/gen_builtin_packing_tests/fs_unpack.shader_test.mako<br>
> index ee610bbfb..8e3f12a58 100644<br>
> --- a/generated_tests/templates/gen_builtin_packing_tests/fs_unpack.shader_test.mako<br>
> +++ b/generated_tests/templates/gen_builtin_packing_tests/fs_unpack.shader_test.mako<br>
> @@ -21,7 +21,7 @@ precision highp float;<br>
>  const vec4 red = vec4(1, 0, 0, 1);<br>
>  const vec4 green = vec4(0, 1, 0, 1);<br>
>  <br>
> -uniform highp uint func_input;<br>
> +uniform highp uvec4 func_input;<br>
>  <br>
>  uniform bool exact;<br>
>  <br>
> @@ -33,7 +33,7 @@ out vec4 frag_color;<br>
>  <br>
>  void main()<br>
>  {<br>
> -    ${func.result_precision} ${func.vector_type} actual = ${<a href="http://func.name" rel="noreferrer" target="_blank">func.name</a>}(func_input);<br>
> +    ${func.result_precision} ${func.vector_type} actual = ${<a href="http://func.name" rel="noreferrer" target="_blank">func.name</a>}(func_input.y);<br>
>  <br>
>      if (false<br>
>          % for i in range(func.num_valid_outputs):<br>
> @@ -56,7 +56,7 @@ vertex/float/2<br>
>  <br>
>  [test]<br>
>  % for io in func.inout_seq:<br>
> -uniform uint func_input ${io.input}<br>
> +uniform uvec4 func_input 0 ${io.input} 0 0<br>
>  % if func.exact:<br>
>  uniform int exact 1<br>
>  % else:<br>
> diff --git a/generated_tests/templates/gen_builtin_packing_tests/vs_pack.shader_test.mako b/generated_tests/templates/gen_builtin_packing_tests/vs_pack.shader_test.mako<br>
> index 5f37d7eaf..81c725846 100644<br>
> --- a/generated_tests/templates/gen_builtin_packing_tests/vs_pack.shader_test.mako<br>
> +++ b/generated_tests/templates/gen_builtin_packing_tests/vs_pack.shader_test.mako<br>
> @@ -11,7 +11,7 @@ ${func.requirements}<br>
>  const vec4 red = vec4(1, 0, 0, 1);<br>
>  const vec4 green = vec4(0, 1, 0, 1);<br>
>  <br>
> -uniform ${func.vector_type} func_input;<br>
> +uniform vec4 func_input;<br>
>  <br>
>  % for j in range(func.num_valid_outputs):<br>
>  uniform ${func.result_precision} uint expect${j};<br>
> @@ -23,7 +23,11 @@ out vec4 vert_color;<br>
>  void main()<br>
>  {<br>
>      gl_Position = vertex;<br>
> -    ${func.result_precision} uint actual = ${<a href="http://func.name" rel="noreferrer" target="_blank">func.name</a>}(func_input);<br>
> +% if func.vector_type == 'vec2':<br>
> +    ${func.result_precision} uint actual = ${<a href="http://func.name" rel="noreferrer" target="_blank">func.name</a>}(func_input.zy);<br>
> +% else:<br>
> +    ${func.result_precision} uint actual = ${<a href="http://func.name" rel="noreferrer" target="_blank">func.name</a>}(func_input.wyzx);<br>
> +% endif<br>
>  <br>
>      if (false<br>
>          % for j in range(func.num_valid_outputs):<br>
> @@ -58,7 +62,11 @@ vertex/float/2<br>
>  <br>
>  [test]<br>
>  % for io in func.inout_seq:<br>
> -uniform ${func.vector_type} func_input ${" ".join(io.input)}<br>
> +% if func.vector_type == 'vec2':<br>
> +uniform vec4 func_input 0.0 ${io.input[1]} ${io.input[0]} 0.0<br>
> +% else:<br>
> +uniform vec4 func_input ${io.input[3]} ${io.input[1]} ${io.input[2]} ${io.input[0]}<br>
> +% endif<br>
>  % for j in range(func.num_valid_outputs):<br>
>  uniform uint expect${j} ${io.valid_outputs[j]}<br>
>  % endfor<br>
> diff --git a/generated_tests/templates/gen_builtin_packing_tests/vs_unpack.shader_test.mako b/generated_tests/templates/gen_builtin_packing_tests/vs_unpack.shader_test.mako<br>
> index 5f2a39125..c14fd35a0 100644<br>
> --- a/generated_tests/templates/gen_builtin_packing_tests/vs_unpack.shader_test.mako<br>
> +++ b/generated_tests/templates/gen_builtin_packing_tests/vs_unpack.shader_test.mako<br>
> @@ -11,7 +11,7 @@ ${func.requirements}<br>
>  const vec4 red = vec4(1, 0, 0, 1);<br>
>  const vec4 green = vec4(0, 1, 0, 1);<br>
>  <br>
> -uniform highp uint func_input;<br>
> +uniform highp uvec4 func_input;<br>
>  <br>
>  uniform bool exact;<br>
>  <br>
> @@ -26,7 +26,7 @@ void main()<br>
>  {<br>
>      gl_Position = vertex;<br>
>  <br>
> -    ${func.result_precision} ${func.vector_type} actual = ${<a href="http://func.name" rel="noreferrer" target="_blank">func.name</a>}(func_input);<br>
> +    ${func.result_precision} ${func.vector_type} actual = ${<a href="http://func.name" rel="noreferrer" target="_blank">func.name</a>}(func_input.z);<br>
>  <br>
>      if (false<br>
>          % for i in range(func.num_valid_outputs):<br>
> @@ -61,7 +61,7 @@ vertex/float/2<br>
>  <br>
>  [test]<br>
>  % for io in func.inout_seq:<br>
> -uniform uint func_input ${io.input}<br>
> +uniform uvec4 func_input 0 0 ${io.input} 0<br>
>  % if func.exact:<br>
>  uniform int exact 1<br>
>  % else:<br>
> <br>
<br>
</blockquote></div></div></div>