<div dir="ltr"><div>Reviewed-by: Marek Olšák <<a href="mailto:marek.olsak@amd.com">marek.olsak@amd.com</a>></div><div><br></div><div>Marek</div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 15, 2018 at 6:29 AM, Christian Gmeiner <span dir="ltr"><<a href="mailto:christian.gmeiner@gmail.com" target="_blank">christian.gmeiner@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">v1 -> v2:<br>
 - nv30 is _NOT_ scalar as suggested by Ilia Mirkin.<br>
 - Change from a screen cap to a shader cap as suggested<br>
   by Eric Anholt.<br>
 - radeonsi is scalar as suggested by Marek Olšák.<br>
 - Change missing ones to be scalar.<br>
<br>
v2 -> v3:<br>
 - r600 prefers vec4 as suggested by Marek Olšák.<br>
<br>
Signed-off-by: Christian Gmeiner <<a href="mailto:christian.gmeiner@gmail.com">christian.gmeiner@gmail.com</a>><br>
Reviewed-by: Eric Anholt <<a href="mailto:eric@anholt.net">eric@anholt.net</a>><br>
---<br>
 src/gallium/auxiliary/gallivm/<wbr>lp_bld_limits.h    | 2 ++<br>
 src/gallium/auxiliary/tgsi/<wbr>tgsi_exec.h           | 2 ++<br>
 src/gallium/docs/source/<wbr>screen.rst               | 1 +<br>
 src/gallium/drivers/etnaviv/<wbr>etnaviv_screen.c     | 1 +<br>
 src/gallium/drivers/freedreno/<wbr>freedreno_screen.c | 3 ++-<br>
 src/gallium/drivers/nouveau/<wbr>nv30/nv30_screen.c   | 2 ++<br>
 src/gallium/drivers/nouveau/<wbr>nv50/nv50_screen.c   | 2 ++<br>
 src/gallium/drivers/nouveau/<wbr>nvc0/nvc0_screen.c   | 2 ++<br>
 src/gallium/drivers/r600/r600_<wbr>pipe.c             | 2 ++<br>
 src/gallium/drivers/radeonsi/<wbr>si_get.c            | 2 ++<br>
 src/gallium/drivers/svga/svga_<wbr>screen.c           | 6 ++++++<br>
 src/gallium/drivers/v3d/v3d_<wbr>screen.c             | 2 ++<br>
 src/gallium/drivers/vc4/vc4_<wbr>screen.c             | 2 ++<br>
 src/gallium/drivers/virgl/<wbr>virgl_screen.c         | 3 +++<br>
 src/gallium/include/pipe/p_<wbr>defines.h             | 1 +<br>
 15 files changed, 32 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/src/gallium/auxiliary/<wbr>gallivm/lp_bld_limits.h b/src/gallium/auxiliary/<wbr>gallivm/lp_bld_limits.h<br>
index c7755bfe1d..7b66b75872 100644<br>
--- a/src/gallium/auxiliary/<wbr>gallivm/lp_bld_limits.h<br>
+++ b/src/gallium/auxiliary/<wbr>gallivm/lp_bld_limits.h<br>
@@ -143,6 +143,8 @@ gallivm_get_shader_param(enum pipe_shader_cap param)<br>
    case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTERS:<br>
    case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTER_BUFFERS:<br>
       return 0;<br>
+   case PIPE_SHADER_CAP_SCALAR_ISA:<br>
+      return 1;<br>
    case PIPE_SHADER_CAP_MAX_UNROLL_<wbr>ITERATIONS_HINT:<br>
       return 32;<br>
    }<br>
diff --git a/src/gallium/auxiliary/tgsi/<wbr>tgsi_exec.h b/src/gallium/auxiliary/tgsi/<wbr>tgsi_exec.h<br>
index 0fac7ea456..ed8b9e8869 100644<br>
--- a/src/gallium/auxiliary/tgsi/<wbr>tgsi_exec.h<br>
+++ b/src/gallium/auxiliary/tgsi/<wbr>tgsi_exec.h<br>
@@ -544,6 +544,8 @@ tgsi_exec_get_shader_param(<wbr>enum pipe_shader_cap param)<br>
    case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTERS:<br>
    case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTER_BUFFERS:<br>
       return 0;<br>
+   case PIPE_SHADER_CAP_SCALAR_ISA:<br>
+      return 1;<br>
    case PIPE_SHADER_CAP_MAX_SHADER_<wbr>BUFFERS:<br>
       return PIPE_MAX_SHADER_BUFFERS;<br>
    case PIPE_SHADER_CAP_MAX_SHADER_<wbr>IMAGES:<br>
diff --git a/src/gallium/docs/source/<wbr>screen.rst b/src/gallium/docs/source/<wbr>screen.rst<br>
index 0f18b7a94b..a044099873 100644<br>
--- a/src/gallium/docs/source/<wbr>screen.rst<br>
+++ b/src/gallium/docs/source/<wbr>screen.rst<br>
@@ -546,6 +546,7 @@ MOV OUT[0], CONST[0][3]  # copy vector 3 of constbuf 0<br>
   how many HW counters are available for this stage. (0 uses SSBO atomics).<br>
 * ``PIPE_SHADER_CAP_MAX_HW_<wbr>ATOMIC_COUNTER_BUFFERS``: If atomic counters are<br>
   separate, how many atomic counter buffers are available for this stage.<br>
+* ``PIPE_SHADER_CAP_SCALAR_ISA``<wbr>: Whether the ISA is a scalar one.<br>
<br>
 .. _pipe_compute_cap:<br>
<br>
diff --git a/src/gallium/drivers/etnaviv/<wbr>etnaviv_screen.c b/src/gallium/drivers/etnaviv/<wbr>etnaviv_screen.c<br>
index e031807117..e426514cc6 100644<br>
--- a/src/gallium/drivers/etnaviv/<wbr>etnaviv_screen.c<br>
+++ b/src/gallium/drivers/etnaviv/<wbr>etnaviv_screen.c<br>
@@ -473,6 +473,7 @@ etna_screen_get_shader_param(<wbr>struct pipe_screen *pscreen,<br>
    case PIPE_SHADER_CAP_TGSI_SKIP_<wbr>MERGE_REGISTERS:<br>
    case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTERS:<br>
    case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTER_BUFFERS:<br>
+   case PIPE_SHADER_CAP_SCALAR_ISA:<br>
       return 0;<br>
    }<br>
<br>
diff --git a/src/gallium/drivers/<wbr>freedreno/freedreno_screen.c b/src/gallium/drivers/<wbr>freedreno/freedreno_screen.c<br>
index a414cb6d60..97eec73238 100644<br>
--- a/src/gallium/drivers/<wbr>freedreno/freedreno_screen.c<br>
+++ b/src/gallium/drivers/<wbr>freedreno/freedreno_screen.c<br>
@@ -592,7 +592,8 @@ fd_screen_get_shader_param(<wbr>struct pipe_screen *pscreen,<br>
        case PIPE_SHADER_CAP_TGSI_SKIP_<wbr>MERGE_REGISTERS:<br>
        case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTERS:<br>
        case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTER_BUFFERS:<br>
-               return 0;<br>
+       case PIPE_SHADER_CAP_SCALAR_ISA:<br>
+               return 1;<br>
        case PIPE_SHADER_CAP_MAX_SHADER_<wbr>BUFFERS:<br>
        case PIPE_SHADER_CAP_MAX_SHADER_<wbr>IMAGES:<br>
                if (is_a5xx(screen)) {<br>
diff --git a/src/gallium/drivers/nouveau/<wbr>nv30/nv30_screen.c b/src/gallium/drivers/nouveau/<wbr>nv30/nv30_screen.c<br>
index a77f70e6bb..dce88e1b1a 100644<br>
--- a/src/gallium/drivers/nouveau/<wbr>nv30/nv30_screen.c<br>
+++ b/src/gallium/drivers/nouveau/<wbr>nv30/nv30_screen.c<br>
@@ -343,6 +343,7 @@ nv30_screen_get_shader_param(<wbr>struct pipe_screen *pscreen,<br>
       case PIPE_SHADER_CAP_TGSI_SKIP_<wbr>MERGE_REGISTERS:<br>
       case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTERS:<br>
       case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTER_BUFFERS:<br>
+      case PIPE_SHADER_CAP_SCALAR_ISA:<br>
          return 0;<br>
       default:<br>
          debug_printf("unknown vertex shader param %d\n", param);<br>
@@ -395,6 +396,7 @@ nv30_screen_get_shader_param(<wbr>struct pipe_screen *pscreen,<br>
       case PIPE_SHADER_CAP_TGSI_SKIP_<wbr>MERGE_REGISTERS:<br>
       case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTERS:<br>
       case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTER_BUFFERS:<br>
+      case PIPE_SHADER_CAP_SCALAR_ISA:<br>
          return 0;<br>
       default:<br>
          debug_printf("unknown fragment shader param %d\n", param);<br>
diff --git a/src/gallium/drivers/nouveau/<wbr>nv50/nv50_screen.c b/src/gallium/drivers/nouveau/<wbr>nv50/nv50_screen.c<br>
index 2495a545fd..0aa227799d 100644<br>
--- a/src/gallium/drivers/nouveau/<wbr>nv50/nv50_screen.c<br>
+++ b/src/gallium/drivers/nouveau/<wbr>nv50/nv50_screen.c<br>
@@ -386,6 +386,8 @@ nv50_screen_get_shader_param(<wbr>struct pipe_screen *pscreen,<br>
    case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTERS:<br>
    case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTER_BUFFERS:<br>
       return 0;<br>
+   case PIPE_SHADER_CAP_SCALAR_ISA:<br>
+      return 1;<br>
    default:<br>
       NOUVEAU_ERR("unknown PIPE_SHADER_CAP %d\n", param);<br>
       return 0;<br>
diff --git a/src/gallium/drivers/nouveau/<wbr>nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/<wbr>nvc0/nvc0_screen.c<br>
index f679cbdba3..055872a1d6 100644<br>
--- a/src/gallium/drivers/nouveau/<wbr>nvc0/nvc0_screen.c<br>
+++ b/src/gallium/drivers/nouveau/<wbr>nvc0/nvc0_screen.c<br>
@@ -425,6 +425,8 @@ nvc0_screen_get_shader_param(<wbr>struct pipe_screen *pscreen,<br>
    case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTERS:<br>
    case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTER_BUFFERS:<br>
       return 0;<br>
+   case PIPE_SHADER_CAP_SCALAR_ISA:<br>
+      return 1;<br>
    case PIPE_SHADER_CAP_MAX_SHADER_<wbr>BUFFERS:<br>
       return NVC0_MAX_BUFFERS;<br>
    case PIPE_SHADER_CAP_MAX_TEXTURE_<wbr>SAMPLERS:<br>
diff --git a/src/gallium/drivers/r600/<wbr>r600_pipe.c b/src/gallium/drivers/r600/<wbr>r600_pipe.c<br>
index ff7306998b..cbfe605d61 100644<br>
--- a/src/gallium/drivers/r600/<wbr>r600_pipe.c<br>
+++ b/src/gallium/drivers/r600/<wbr>r600_pipe.c<br>
@@ -652,6 +652,8 @@ static int r600_get_shader_param(struct pipe_screen* pscreen,<br>
                        return EG_MAX_ATOMIC_BUFFERS;<br>
                }<br>
                return 0;<br>
+       case PIPE_SHADER_CAP_SCALAR_ISA:<br>
+               return 0;<br>
        case PIPE_SHADER_CAP_MAX_UNROLL_<wbr>ITERATIONS_HINT:<br>
                /* due to a bug in the shader compiler, some loops hang<br>
                 * if they are not unrolled, see:<br>
diff --git a/src/gallium/drivers/<wbr>radeonsi/si_get.c b/src/gallium/drivers/<wbr>radeonsi/si_get.c<br>
index 01050cf02b..cbde0fe3c3 100644<br>
--- a/src/gallium/drivers/<wbr>radeonsi/si_get.c<br>
+++ b/src/gallium/drivers/<wbr>radeonsi/si_get.c<br>
@@ -492,6 +492,8 @@ static int si_get_shader_param(struct pipe_screen* pscreen,<br>
        case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTERS:<br>
        case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTER_BUFFERS:<br>
                return 0;<br>
+       case PIPE_SHADER_CAP_SCALAR_ISA:<br>
+               return 1;<br>
        }<br>
        return 0;<br>
 }<br>
diff --git a/src/gallium/drivers/svga/<wbr>svga_screen.c b/src/gallium/drivers/svga/<wbr>svga_screen.c<br>
index 2744f3100e..3fbf748a6e 100644<br>
--- a/src/gallium/drivers/svga/<wbr>svga_screen.c<br>
+++ b/src/gallium/drivers/svga/<wbr>svga_screen.c<br>
@@ -555,6 +555,8 @@ vgpu9_get_shader_param(struct pipe_screen *screen,<br>
       case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTERS:<br>
       case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTER_BUFFERS:<br>
          return 0;<br>
+      case PIPE_SHADER_CAP_SCALAR_ISA:<br>
+         return 1;<br>
       case PIPE_SHADER_CAP_MAX_UNROLL_<wbr>ITERATIONS_HINT:<br>
          return 32;<br>
       }<br>
@@ -622,6 +624,8 @@ vgpu9_get_shader_param(struct pipe_screen *screen,<br>
       case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTERS:<br>
       case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTER_BUFFERS:<br>
          return 0;<br>
+      case PIPE_SHADER_CAP_SCALAR_ISA:<br>
+         return 1;<br>
       case PIPE_SHADER_CAP_MAX_UNROLL_<wbr>ITERATIONS_HINT:<br>
          return 32;<br>
       }<br>
@@ -723,6 +727,8 @@ vgpu10_get_shader_param(struct pipe_screen *screen,<br>
    case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTERS:<br>
    case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTER_BUFFERS:<br>
       return 0;<br>
+   case PIPE_SHADER_CAP_SCALAR_ISA:<br>
+      return 1;<br>
    case PIPE_SHADER_CAP_MAX_UNROLL_<wbr>ITERATIONS_HINT:<br>
       return 32;<br>
    default:<br>
diff --git a/src/gallium/drivers/v3d/v3d_<wbr>screen.c b/src/gallium/drivers/v3d/v3d_<wbr>screen.c<br>
index d578265eef..bf1af7e404 100644<br>
--- a/src/gallium/drivers/v3d/v3d_<wbr>screen.c<br>
+++ b/src/gallium/drivers/v3d/v3d_<wbr>screen.c<br>
@@ -410,6 +410,8 @@ v3d_screen_get_shader_param(<wbr>struct pipe_screen *pscreen, unsigned shader,<br>
         case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTERS:<br>
         case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTER_BUFFERS:<br>
                 return 0;<br>
+        case PIPE_SHADER_CAP_SCALAR_ISA:<br>
+                return 1;<br>
         case PIPE_SHADER_CAP_MAX_TEXTURE_<wbr>SAMPLERS:<br>
         case PIPE_SHADER_CAP_MAX_SAMPLER_<wbr>VIEWS:<br>
         case PIPE_SHADER_CAP_MAX_SHADER_<wbr>IMAGES:<br>
diff --git a/src/gallium/drivers/vc4/vc4_<wbr>screen.c b/src/gallium/drivers/vc4/vc4_<wbr>screen.c<br>
index 6415d95746..d7577ed90a 100644<br>
--- a/src/gallium/drivers/vc4/vc4_<wbr>screen.c<br>
+++ b/src/gallium/drivers/vc4/vc4_<wbr>screen.c<br>
@@ -464,6 +464,8 @@ vc4_screen_get_shader_param(<wbr>struct pipe_screen *pscreen,<br>
         case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTERS:<br>
         case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTER_BUFFERS:<br>
                 return 0;<br>
+        case PIPE_SHADER_CAP_SCALAR_ISA:<br>
+                return 1;<br>
         default:<br>
                 fprintf(stderr, "unknown shader param %d\n", param);<br>
                 return 0;<br>
diff --git a/src/gallium/drivers/virgl/<wbr>virgl_screen.c b/src/gallium/drivers/virgl/<wbr>virgl_screen.c<br>
index e8d1c75177..7a33ca1be5 100644<br>
--- a/src/gallium/drivers/virgl/<wbr>virgl_screen.c<br>
+++ b/src/gallium/drivers/virgl/<wbr>virgl_screen.c<br>
@@ -363,6 +363,9 @@ virgl_get_shader_param(struct pipe_screen *screen,<br>
       case PIPE_SHADER_CAP_FP16:<br>
       case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTERS:<br>
       case PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTER_BUFFERS:<br>
+         return 0;<br>
+      case PIPE_SHADER_CAP_SCALAR_ISA:<br>
+         return 1;<br>
       default:<br>
          return 0;<br>
       }<br>
diff --git a/src/gallium/include/pipe/p_<wbr>defines.h b/src/gallium/include/pipe/p_<wbr>defines.h<br>
index 6cc73a31bf..62d2bd3abb 100644<br>
--- a/src/gallium/include/pipe/p_<wbr>defines.h<br>
+++ b/src/gallium/include/pipe/p_<wbr>defines.h<br>
@@ -897,6 +897,7 @@ enum pipe_shader_cap<br>
    PIPE_SHADER_CAP_TGSI_LDEXP_<wbr>SUPPORTED,<br>
    PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTERS,<br>
    PIPE_SHADER_CAP_MAX_HW_ATOMIC_<wbr>COUNTER_BUFFERS,<br>
+   PIPE_SHADER_CAP_SCALAR_ISA,<br>
 };<br>
<br>
 /**<br>
<span class="HOEnZb"><font color="#888888">-- <br>
2.17.1<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div>