[Mesa-dev] [PATCH 1/2] gallium: Add PIPE_SHADER_CAP_INT64_ATOMICS

Marek Olšák maraeo at gmail.com
Wed Sep 20 22:15:56 UTC 2017


Reviewed-by: Marek Olšák <marek.olsak at amd.com>

M.

On Sep 20, 2017 1:24 PM, "Jan Vesely" <jan.vesely at rutgers.edu> wrote:

> Denotes availability of 64bit int atomic instructions
>
> Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>
> ---
>  src/gallium/auxiliary/gallivm/lp_bld_limits.h    | 1 +
>  src/gallium/auxiliary/tgsi/tgsi_exec.h           | 1 +
>  src/gallium/docs/source/screen.rst               | 1 +
>  src/gallium/drivers/etnaviv/etnaviv_screen.c     | 1 +
>  src/gallium/drivers/freedreno/freedreno_screen.c | 2 ++
>  src/gallium/drivers/i915/i915_screen.c           | 1 +
>  src/gallium/drivers/nouveau/nv30/nv30_screen.c   | 1 +
>  src/gallium/drivers/nouveau/nv50/nv50_screen.c   | 1 +
>  src/gallium/drivers/nouveau/nvc0/nvc0_screen.c   | 1 +
>  src/gallium/drivers/r300/r300_screen.c           | 1 +
>  src/gallium/drivers/r600/r600_pipe.c             | 1 +
>  src/gallium/drivers/radeonsi/si_pipe.c           | 1 +
>  src/gallium/drivers/svga/svga_screen.c           | 1 +
>  src/gallium/drivers/vc4/vc4_screen.c             | 1 +
>  src/gallium/drivers/virgl/virgl_screen.c         | 1 +
>  src/gallium/include/pipe/p_defines.h             | 1 +
>  16 files changed, 17 insertions(+)
>
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_limits.h
> b/src/gallium/auxiliary/gallivm/lp_bld_limits.h
> index e8cc04a2f9..421eeda4e7 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_limits.h
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_limits.h
> @@ -118,6 +118,7 @@ gallivm_get_shader_param(enum pipe_shader_cap param)
>        return 1;
>     case PIPE_SHADER_CAP_INTEGERS:
>        return 1;
> +   case PIPE_SHADER_CAP_INT64_ATOMICS:
>     case PIPE_SHADER_CAP_FP16:
>        return 0;
>     case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.h
> b/src/gallium/auxiliary/tgsi/tgsi_exec.h
> index 346848cddf..bcf4a32a8a 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_exec.h
> +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.h
> @@ -511,6 +511,7 @@ tgsi_exec_get_shader_param(enum pipe_shader_cap param)
>        return 1;
>     case PIPE_SHADER_CAP_INTEGERS:
>        return 1;
> +   case PIPE_SHADER_CAP_INT64_ATOMICS:
>     case PIPE_SHADER_CAP_FP16:
>        return 0;
>     case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
> diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/
> screen.rst
> index dfbb6cda6c..0d474dfb07 100644
> --- a/src/gallium/docs/source/screen.rst
> +++ b/src/gallium/docs/source/screen.rst
> @@ -472,6 +472,7 @@ MOV OUT[0], CONST[0][3]  # copy vector 3 of constbuf 0
>    BGNSUB, ENDSUB, CAL, and RET, including RET in the main block.
>  * ``PIPE_SHADER_CAP_INTEGERS``: Whether integer opcodes are supported.
>    If unsupported, only float opcodes are supported.
> +* ``PIPE_SHADER_CAP_INT64_ATOMICS``: Whether int64 atomic opcodes are
> supported. The device needs to support add, sub, swap, cmpswap, and, or,
> xor, min, and max.
>  * ``PIPE_SHADER_CAP_FP16``: Whether half precision floating-point opcodes
> are supported.
>     If unsupported, half precision ops need to be lowered to full
> precision.
>  * ``PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS``: The maximum number of texture
> diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c
> b/src/gallium/drivers/etnaviv/etnaviv_screen.c
> index 953ca1204a..8ffda61428 100644
> --- a/src/gallium/drivers/etnaviv/etnaviv_screen.c
> +++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c
> @@ -428,6 +428,7 @@ etna_screen_get_shader_param(struct pipe_screen
> *pscreen,
>     case PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED:
>        return VIV_FEATURE(screen, chipMinorFeatures0, HAS_SQRT_TRIG);
>     case PIPE_SHADER_CAP_INTEGERS:
> +   case PIPE_SHADER_CAP_INT64_ATOMICS:
>     case PIPE_SHADER_CAP_FP16:
>        return 0;
>     case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
> diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c
> b/src/gallium/drivers/freedreno/freedreno_screen.c
> index a91e3c2e70..061cc86c6d 100644
> --- a/src/gallium/drivers/freedreno/freedreno_screen.c
> +++ b/src/gallium/drivers/freedreno/freedreno_screen.c
> @@ -527,6 +527,8 @@ fd_screen_get_shader_param(struct pipe_screen
> *pscreen,
>                 if (glsl120)
>                         return 0;
>                 return is_ir3(screen) ? 1 : 0;
> +       case PIPE_SHADER_CAP_INT64_ATOMICS:
> +               return 0;
>         case PIPE_SHADER_CAP_FP16:
>                 return 0;
>         case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
> diff --git a/src/gallium/drivers/i915/i915_screen.c
> b/src/gallium/drivers/i915/i915_screen.c
> index 95ed3341b3..bacd40a57d 100644
> --- a/src/gallium/drivers/i915/i915_screen.c
> +++ b/src/gallium/drivers/i915/i915_screen.c
> @@ -157,6 +157,7 @@ i915_get_shader_param(struct pipe_screen *screen,
>        case PIPE_SHADER_CAP_SUBROUTINES:
>           return 0;
>        case PIPE_SHADER_CAP_INTEGERS:
> +      case PIPE_SHADER_CAP_INT64_ATOMICS:
>        case PIPE_SHADER_CAP_FP16:
>           return 0;
>        case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
> diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.c
> b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
> index ba466050c6..0d40bfed7a 100644
> --- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c
> +++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
> @@ -314,6 +314,7 @@ nv30_screen_get_shader_param(struct pipe_screen
> *pscreen,
>        case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
>        case PIPE_SHADER_CAP_SUBROUTINES:
>        case PIPE_SHADER_CAP_INTEGERS:
> +      case PIPE_SHADER_CAP_INT64_ATOMICS:
>        case PIPE_SHADER_CAP_FP16:
>        case PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED:
>        case PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED:
> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> index 60b6037396..706e8d369b 100644
> --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> @@ -345,6 +345,7 @@ nv50_screen_get_shader_param(struct pipe_screen
> *pscreen,
>        return 1;
>     case PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED:
>        return 1;
> +   case PIPE_SHADER_CAP_INT64_ATOMICS:
>     case PIPE_SHADER_CAP_FP16:
>     case PIPE_SHADER_CAP_SUBROUTINES:
>        return 0; /* please inline, or provide function declarations */
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> index 8cf6ba6506..87fc754f4c 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> @@ -405,6 +405,7 @@ nvc0_screen_get_shader_param(struct pipe_screen
> *pscreen,
>     case PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED:
>     case PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE:
>     case PIPE_SHADER_CAP_LOWER_IF_THRESHOLD:
> +   case PIPE_SHADER_CAP_INT64_ATOMICS:
>     case PIPE_SHADER_CAP_FP16:
>        return 0;
>     case PIPE_SHADER_CAP_MAX_SHADER_BUFFERS:
> diff --git a/src/gallium/drivers/r300/r300_screen.c
> b/src/gallium/drivers/r300/r300_screen.c
> index 2838b7cf00..0a1c21bd74 100644
> --- a/src/gallium/drivers/r300/r300_screen.c
> +++ b/src/gallium/drivers/r300/r300_screen.c
> @@ -354,6 +354,7 @@ static int r300_get_shader_param(struct pipe_screen
> *pscreen,
>          case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
>          case PIPE_SHADER_CAP_SUBROUTINES:
>          case PIPE_SHADER_CAP_INTEGERS:
> +        case PIPE_SHADER_CAP_INT64_ATOMICS:
>          case PIPE_SHADER_CAP_FP16:
>          case PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED:
>          case PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED:
> diff --git a/src/gallium/drivers/r600/r600_pipe.c
> b/src/gallium/drivers/r600/r600_pipe.c
> index 2e5008c8d4..62839d4c19 100644
> --- a/src/gallium/drivers/r600/r600_pipe.c
> +++ b/src/gallium/drivers/r600/r600_pipe.c
> @@ -570,6 +570,7 @@ static int r600_get_shader_param(struct pipe_screen*
> pscreen,
>         case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
>                 return 1;
>         case PIPE_SHADER_CAP_SUBROUTINES:
> +       case PIPE_SHADER_CAP_INT64_ATOMICS:
>         case PIPE_SHADER_CAP_FP16:
>                 return 0;
>         case PIPE_SHADER_CAP_INTEGERS:
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/
> radeonsi/si_pipe.c
> index 0666798964..2eacc5d69e 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.c
> +++ b/src/gallium/drivers/radeonsi/si_pipe.c
> @@ -742,6 +742,7 @@ static int si_get_shader_param(struct pipe_screen*
> pscreen,
>         case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
>         case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
>         case PIPE_SHADER_CAP_INTEGERS:
> +       case PIPE_SHADER_CAP_INT64_ATOMICS:
>         case PIPE_SHADER_CAP_FP16:
>         case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
>         case PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE:
> diff --git a/src/gallium/drivers/svga/svga_screen.c
> b/src/gallium/drivers/svga/svga_screen.c
> index 3845d17692..7392a18ec1 100644
> --- a/src/gallium/drivers/svga/svga_screen.c
> +++ b/src/gallium/drivers/svga/svga_screen.c
> @@ -517,6 +517,7 @@ vgpu9_get_shader_param(struct pipe_screen *screen,
>           return 0;
>        case PIPE_SHADER_CAP_SUBROUTINES:
>           return 0;
> +      case PIPE_SHADER_CAP_INT64_ATOMICS:
>        case PIPE_SHADER_CAP_INTEGERS:
>           return 0;
>        case PIPE_SHADER_CAP_FP16:
> diff --git a/src/gallium/drivers/vc4/vc4_screen.c
> b/src/gallium/drivers/vc4/vc4_screen.c
> index 04ae44688d..4f38346d83 100644
> --- a/src/gallium/drivers/vc4/vc4_screen.c
> +++ b/src/gallium/drivers/vc4/vc4_screen.c
> @@ -407,6 +407,7 @@ vc4_screen_get_shader_param(struct pipe_screen
> *pscreen,
>                  return 0;
>          case PIPE_SHADER_CAP_INTEGERS:
>                  return 1;
> +        case PIPE_SHADER_CAP_INT64_ATOMICS:
>          case PIPE_SHADER_CAP_FP16:
>          case PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED:
>          case PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED:
> diff --git a/src/gallium/drivers/virgl/virgl_screen.c
> b/src/gallium/drivers/virgl/virgl_screen.c
> index 46b3bd3fd0..935ce2f9b0 100644
> --- a/src/gallium/drivers/virgl/virgl_screen.c
> +++ b/src/gallium/drivers/virgl/virgl_screen.c
> @@ -335,6 +335,7 @@ virgl_get_shader_param(struct pipe_screen *screen,
>           return 4096 * sizeof(float[4]);
>        case PIPE_SHADER_CAP_LOWER_IF_THRESHOLD:
>        case PIPE_SHADER_CAP_TGSI_SKIP_MERGE_REGISTERS:
> +      case PIPE_SHADER_CAP_INT64_ATOMICS:
>        case PIPE_SHADER_CAP_FP16:
>        default:
>           return 0;
> diff --git a/src/gallium/include/pipe/p_defines.h
> b/src/gallium/include/pipe/p_defines.h
> index 7294492017..be5907e4fb 100644
> --- a/src/gallium/include/pipe/p_defines.h
> +++ b/src/gallium/include/pipe/p_defines.h
> @@ -832,6 +832,7 @@ enum pipe_shader_cap
>     PIPE_SHADER_CAP_INDIRECT_CONST_ADDR,
>     PIPE_SHADER_CAP_SUBROUTINES, /* BGNSUB, ENDSUB, CAL, RET */
>     PIPE_SHADER_CAP_INTEGERS,
> +   PIPE_SHADER_CAP_INT64_ATOMICS,
>     PIPE_SHADER_CAP_FP16,
>     PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS,
>     PIPE_SHADER_CAP_PREFERRED_IR,
> --
> 2.13.5
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170921/76d0dc5f/attachment-0001.html>


More information about the mesa-dev mailing list