[Mesa-dev] [PATCH 21/56] nir/spirv: Add support for device groups

Jason Ekstrand jason at jlekstrand.net
Wed Mar 7 14:35:09 UTC 2018


Reviewed-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>
---
 src/compiler/nir/nir.h                     | 2 ++
 src/compiler/nir/nir_lower_system_values.c | 5 +++++
 src/compiler/shader_enums.c                | 1 +
 src/compiler/shader_enums.h                | 3 +++
 src/compiler/shader_info.h                 | 1 +
 src/compiler/spirv/spirv_to_nir.c          | 4 ++++
 src/compiler/spirv/vtn_variables.c         | 4 ++++
 7 files changed, 20 insertions(+)

diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index c676331..804a656 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -1888,6 +1888,8 @@ typedef struct nir_shader_compiler_options {
 
    bool lower_cs_local_index_from_id;
 
+   bool lower_device_index_to_zero;
+
    /**
     * Should nir_lower_io() create load_interpolated_input intrinsics?
     *
diff --git a/src/compiler/nir/nir_lower_system_values.c b/src/compiler/nir/nir_lower_system_values.c
index 3594f4a..fb560ee 100644
--- a/src/compiler/nir/nir_lower_system_values.c
+++ b/src/compiler/nir/nir_lower_system_values.c
@@ -133,6 +133,11 @@ convert_block(nir_block *block, nir_builder *b)
          break;
       }
 
+      case SYSTEM_VALUE_DEVICE_INDEX:
+         if (b->shader->options->lower_device_index_to_zero)
+            sysval = nir_imm_int(b, 0);
+         break;
+
       default:
          break;
       }
diff --git a/src/compiler/shader_enums.c b/src/compiler/shader_enums.c
index 2179c47..62c1ac1 100644
--- a/src/compiler/shader_enums.c
+++ b/src/compiler/shader_enums.c
@@ -232,6 +232,7 @@ gl_system_value_name(gl_system_value sysval)
      ENUM(SYSTEM_VALUE_GLOBAL_INVOCATION_ID),
      ENUM(SYSTEM_VALUE_WORK_GROUP_ID),
      ENUM(SYSTEM_VALUE_NUM_WORK_GROUPS),
+     ENUM(SYSTEM_VALUE_DEVICE_INDEX),
      ENUM(SYSTEM_VALUE_VIEW_INDEX),
      ENUM(SYSTEM_VALUE_VERTEX_CNT),
    };
diff --git a/src/compiler/shader_enums.h b/src/compiler/shader_enums.h
index ac83c65..64fb688 100644
--- a/src/compiler/shader_enums.h
+++ b/src/compiler/shader_enums.h
@@ -558,6 +558,9 @@ typedef enum
    SYSTEM_VALUE_LOCAL_GROUP_SIZE,
    /*@}*/
 
+   /** Required for VK_KHR_device_group */
+   SYSTEM_VALUE_DEVICE_INDEX,
+
    /** Required for VK_KHX_multiview */
    SYSTEM_VALUE_VIEW_INDEX,
 
diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h
index e7fd7db..eafb78f 100644
--- a/src/compiler/shader_info.h
+++ b/src/compiler/shader_info.h
@@ -36,6 +36,7 @@ struct spirv_supported_capabilities {
    bool float64;
    bool image_ms_array;
    bool tessellation;
+   bool device_group;
    bool draw_parameters;
    bool image_read_without_format;
    bool image_write_without_format;
diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c
index 8629f87..61c24ad 100644
--- a/src/compiler/spirv/spirv_to_nir.c
+++ b/src/compiler/spirv/spirv_to_nir.c
@@ -3283,6 +3283,10 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
          spv_check_supported(image_write_without_format, cap);
          break;
 
+      case SpvCapabilityDeviceGroup:
+         spv_check_supported(device_group, cap);
+         break;
+
       case SpvCapabilityMultiView:
          spv_check_supported(multiview, cap);
          break;
diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c
index 7e8a090..d83ab78 100644
--- a/src/compiler/spirv/vtn_variables.c
+++ b/src/compiler/spirv/vtn_variables.c
@@ -1285,6 +1285,10 @@ vtn_get_builtin_location(struct vtn_builder *b,
       *location = SYSTEM_VALUE_DRAW_ID;
       set_mode_system_value(b, mode);
       break;
+   case SpvBuiltInDeviceIndex:
+      *location = SYSTEM_VALUE_DEVICE_INDEX;
+      set_mode_system_value(b, mode);
+      break;
    case SpvBuiltInViewIndex:
       *location = SYSTEM_VALUE_VIEW_INDEX;
       set_mode_system_value(b, mode);
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list