lavapipe: enable subgroup shuffle operations
authorAutumn on Tape <autumn@cyfox.net>
Fri, 1 Apr 2022 20:03:20 +0000 (13:03 -0700)
committerMarge Bot <emma+marge@anholt.net>
Tue, 3 May 2022 23:09:37 +0000 (23:09 +0000)
Bits flipped in VkPhysicalDeviceSubgroupProperties.supportedOperations:
  * SUBGROUP_FEATURE_SHUFFLE_BIT
  * SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT

Signed-off-by: Autumn on Tape <autumn@cyfox.net>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13671>

src/gallium/frontends/lavapipe/lvp_device.c
src/gallium/frontends/lavapipe/lvp_pipeline.c
src/gallium/frontends/lavapipe/lvp_private.h
src/gallium/frontends/lavapipe/meson.build

index f695104..4b73965 100644 (file)
@@ -1007,6 +1007,10 @@ lvp_get_physical_device_properties_1_1(struct lvp_physical_device *pdevice,
    p->subgroupSupportedOperations = VK_SUBGROUP_FEATURE_BASIC_BIT | VK_SUBGROUP_FEATURE_VOTE_BIT | VK_SUBGROUP_FEATURE_ARITHMETIC_BIT | VK_SUBGROUP_FEATURE_BALLOT_BIT;
    p->subgroupQuadOperationsInAllStages = false;
 
+#if LLVM_VERSION_MAJOR >= 10
+   p->subgroupSupportedOperations |= VK_SUBGROUP_FEATURE_SHUFFLE_BIT | VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT;
+#endif
+
    p->pointClippingBehavior = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES;
    p->maxMultiviewViewCount = 6;
    p->maxMultiviewInstanceIndex = INT_MAX;
index 1d556ce..018485c 100644 (file)
@@ -849,6 +849,9 @@ lvp_shader_compile_to_ir(struct lvp_pipeline *pipeline,
          .subgroup_basic = true,
          .subgroup_ballot = true,
          .subgroup_quad = true,
+#if LLVM_VERSION_MAJOR >= 10
+         .subgroup_shuffle = true,
+#endif
          .subgroup_vote = true,
          .vk_memory_model = true,
          .vk_memory_model_device_scope = true,
index 51957c1..0965bdf 100644 (file)
@@ -29,6 +29,8 @@
 #include <assert.h>
 #include <stdint.h>
 
+#include <llvm/Config/llvm-config.h>
+
 #include "util/macros.h"
 #include "util/list.h"
 #include "util/u_dynarray.h"
index 3eba970..a63f322 100644 (file)
@@ -44,6 +44,6 @@ liblavapipe_st = static_library(
   c_args : [ c_msvc_compat_args, lvp_flags ],
   gnu_symbol_visibility : 'hidden',
   include_directories : [ inc_include, inc_src, inc_util, inc_gallium, inc_compiler, inc_gallium_aux ],
-  dependencies : [ idep_nir, idep_mesautil, idep_vulkan_util, idep_vulkan_wsi,
+  dependencies : [ dep_llvm, idep_nir, idep_mesautil, idep_vulkan_util, idep_vulkan_wsi,
                    idep_vulkan_runtime, lvp_deps ]
 )