Module: Mesa
Branch: staging/22.1
Commit: fdb6bb31af52aca34d5515186b6ff5618ab1b9cc
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fdb6bb31af52aca34d5515186b6ff5618ab1b9cc

Author: Autumn on Tape <[email protected]>
Date:   Fri Apr  1 13:03:20 2022 -0700

lavapipe: enable subgroup shuffle operations

Bits flipped in VkPhysicalDeviceSubgroupProperties.supportedOperations:
  * SUBGROUP_FEATURE_SHUFFLE_BIT
  * SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT

Signed-off-by: Autumn on Tape <[email protected]>
Reviewed-by: Dave Airlie <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13671>

---

 src/gallium/frontends/lavapipe/lvp_device.c   | 4 ++++
 src/gallium/frontends/lavapipe/lvp_pipeline.c | 3 +++
 src/gallium/frontends/lavapipe/lvp_private.h  | 2 ++
 src/gallium/frontends/lavapipe/meson.build    | 2 +-
 4 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/gallium/frontends/lavapipe/lvp_device.c 
b/src/gallium/frontends/lavapipe/lvp_device.c
index 1bc9a936c89..88b0daff7d5 100644
--- a/src/gallium/frontends/lavapipe/lvp_device.c
+++ b/src/gallium/frontends/lavapipe/lvp_device.c
@@ -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;
diff --git a/src/gallium/frontends/lavapipe/lvp_pipeline.c 
b/src/gallium/frontends/lavapipe/lvp_pipeline.c
index 247a898714a..81d5a9c32a9 100644
--- a/src/gallium/frontends/lavapipe/lvp_pipeline.c
+++ b/src/gallium/frontends/lavapipe/lvp_pipeline.c
@@ -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,
diff --git a/src/gallium/frontends/lavapipe/lvp_private.h 
b/src/gallium/frontends/lavapipe/lvp_private.h
index 51957c1a55a..0965bdf2c6c 100644
--- a/src/gallium/frontends/lavapipe/lvp_private.h
+++ b/src/gallium/frontends/lavapipe/lvp_private.h
@@ -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"
diff --git a/src/gallium/frontends/lavapipe/meson.build 
b/src/gallium/frontends/lavapipe/meson.build
index 3eba9701606..a63f3220c31 100644
--- a/src/gallium/frontends/lavapipe/meson.build
+++ b/src/gallium/frontends/lavapipe/meson.build
@@ -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 ]
 )

Reply via email to