radeonsi: only support at most 1024 threads per block
[mesa.git] / src / gallium / drivers / radeonsi / si_get.c
index c9895edafb8d262d652bc268f4e5575646e0bc25..111279674e6318edc832f4bab88e72b49b9bfcde 100644 (file)
@@ -33,6 +33,7 @@
 #include "util/u_video.h"
 #include "compiler/nir/nir.h"
 
+#include <llvm/Config/llvm-config.h>
 #include <sys/utsname.h>
 
 static const char *si_get_vendor(struct pipe_screen *pscreen)
@@ -156,7 +157,7 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
        case PIPE_CAP_FBFETCH:
        case PIPE_CAP_COMPUTE_GRID_INFO_LAST_BLOCK:
        case PIPE_CAP_IMAGE_LOAD_FORMATTED:
-       case PIPE_CAP_PREFER_COMPUTE_BLIT_FOR_MULTIMEDIA:
+       case PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA:
        case PIPE_CAP_TGSI_DIV:
                return 1;
 
@@ -207,7 +208,7 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
        case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY:
        case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY:
        case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY:
-               return HAVE_LLVM < 0x0900 && !sscreen->info.has_unaligned_shader_loads;
+               return LLVM_VERSION_MAJOR < 9 && !sscreen->info.has_unaligned_shader_loads;
 
        case PIPE_CAP_SPARSE_BUFFER_PAGE_SIZE:
                return sscreen->info.has_sparse_vm_mappings ?
@@ -219,6 +220,11 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
                        return 1;
                return 0;
 
+       case PIPE_CAP_PREFER_IMM_ARRAYS_AS_CONSTBUF:
+               if (sscreen->options.enable_nir)
+                       return 0;
+               return 1;
+
        /* Unsupported features. */
        case PIPE_CAP_BUFFER_SAMPLER_VIEW_RGBA_ONLY:
        case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
@@ -340,7 +346,7 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
        case PIPE_CAP_PCI_FUNCTION:
                return sscreen->info.pci_func;
        case PIPE_CAP_TGSI_ATOMINC_WRAP:
-               return HAVE_LLVM >= 0x1000;
+               return LLVM_VERSION_MAJOR >= 10;
 
        default:
                return u_pipe_screen_get_param_defaults(pscreen, param);
@@ -643,9 +649,7 @@ static int si_get_video_param(struct pipe_screen *screen,
                                return profile == PIPE_VIDEO_PROFILE_HEVC_MAIN;
                        return false;
                case PIPE_VIDEO_FORMAT_JPEG:
-                       if (sscreen->info.family == CHIP_RAVEN ||
-                           sscreen->info.family == CHIP_RAVEN2 ||
-                           sscreen->info.family == CHIP_NAVI10)
+                       if (sscreen->info.family >= CHIP_RAVEN)
                                return true;
                        if (sscreen->info.family < CHIP_CARRIZO || sscreen->info.family >= CHIP_VEGA10)
                                return false;
@@ -748,14 +752,8 @@ static unsigned get_max_threads_per_block(struct si_screen *screen,
        if (ir_type == PIPE_SHADER_IR_NATIVE)
                return 256;
 
-       /* Only 16 waves per thread-group on gfx9. */
-       if (screen->info.chip_class >= GFX9)
-               return 1024;
-
-       /* Up to 40 waves per thread-group on GCN < gfx9. Expose a nice
-        * round number.
-        */
-       return 2048;
+        /* LLVM 10 only supports 1024 threads per block. */
+       return 1024;
 }
 
 static int si_get_compute_param(struct pipe_screen *screen,