OpAtomicCompareExchangeWeak is only available in OpenCL, not Vulkan.  As
such, we probably don't want to handle it yet as no one uses spirv_to_nir
for OpenCL.  The assert on AtomicCompareExchange is, however, a bug we
should fix now.

--Jason

On Wed, Jun 21, 2017 at 8:59 AM, James Legg <jl...@feralinteractive.com>
wrote:

> We were hitting the
>         unreachable("Invalid image opcode")
> near the end of vtn_handle_image when parsing SpvOpAtomicCompareExchange
> and SpvOpAtomicCompareExchangeWeak opcodes.
> ---
>  src/compiler/spirv/spirv_to_nir.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/src/compiler/spirv/spirv_to_nir.c
> b/src/compiler/spirv/spirv_to_nir.c
> index 0a5eb0e..8f21aec 100644
> --- a/src/compiler/spirv/spirv_to_nir.c
> +++ b/src/compiler/spirv/spirv_to_nir.c
> @@ -1805,6 +1805,7 @@ fill_common_atomic_sources(struct vtn_builder *b,
> SpvOp opcode,
>        break;
>
>     case SpvOpAtomicCompareExchange:
> +   case SpvOpAtomicCompareExchangeWeak:
>        src[0] = nir_src_for_ssa(vtn_ssa_value(b, w[8])->def);
>        src[1] = nir_src_for_ssa(vtn_ssa_value(b, w[7])->def);
>        break;
> @@ -1977,6 +1978,8 @@ vtn_handle_image(struct vtn_builder *b, SpvOp opcode,
>        intrin->src[2] = nir_src_for_ssa(vtn_ssa_value(b, w[3])->def);
>        break;
>
> +   case SpvOpAtomicCompareExchange:
> +   case SpvOpAtomicCompareExchangeWeak:
>     case SpvOpAtomicIIncrement:
>     case SpvOpAtomicIDecrement:
>     case SpvOpAtomicExchange:
> --
> 2.9.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