[Mesa-dev] [PATCH 11/24] spirv_extensions: add list of extensions and to_string method

Eduardo Lima Mitev elima at igalia.com
Wed Nov 15 13:22:14 UTC 2017


From: Alejandro Piñeiro <apinheiro at igalia.com>

Ideally this should be generated somehow. One option would be gather
all the extension dependencies listed on the core grammar, but there
would be the possibility of not including some of the extensions.

Note that spirv-tools is doing it just slightly better, as it has a
hardcoded list of extensions manually took from the registry, that
they parse to get the enum and the to_string method (see
generate_grammar_tables.py).
---
 src/compiler/Makefile.sources         |  2 +
 src/compiler/spirv/spirv_extensions.c | 61 +++++++++++++++++++++++++++++++
 src/compiler/spirv/spirv_extensions.h | 69 +++++++++++++++++++++++++++++++++++
 3 files changed, 132 insertions(+)
 create mode 100644 src/compiler/spirv/spirv_extensions.c
 create mode 100644 src/compiler/spirv/spirv_extensions.h

diff --git a/src/compiler/Makefile.sources b/src/compiler/Makefile.sources
index 2ab8e163a26..f198456c751 100644
--- a/src/compiler/Makefile.sources
+++ b/src/compiler/Makefile.sources
@@ -293,6 +293,8 @@ SPIRV_FILES = \
 	spirv/GLSL.std.450.h \
 	spirv/nir_spirv.h \
 	spirv/spirv.h \
+	spirv/spirv_extensions.c \
+	spirv/spirv_extensions.h \
 	spirv/spirv_info.h \
 	spirv/spirv_to_nir.c \
 	spirv/vtn_alu.c \
diff --git a/src/compiler/spirv/spirv_extensions.c b/src/compiler/spirv/spirv_extensions.c
new file mode 100644
index 00000000000..64d61c49d31
--- /dev/null
+++ b/src/compiler/spirv/spirv_extensions.c
@@ -0,0 +1,61 @@
+/*
+ * Copyright © 2017 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#include "spirv.h"
+#include "spirv_extensions.h"
+
+const char *
+spirv_extensions_to_string(SpvExtension ext)
+{
+   switch (ext) {
+   case SPV_AMD_shader_explicit_vertex_parameter: return "SPV_AMD_shader_explicit_vertex_parameter";
+   case SPV_AMD_shader_trinary_minmax: return "SPV_AMD_shader_trinary_minmax";
+   case SPV_AMD_gcn_shader: return "SPV_AMD_gcn_shader";
+   case SPV_KHR_shader_ballot: return "SPV_KHR_shader_ballot";
+   case SPV_AMD_shader_ballot: return "SPV_AMD_shader_ballot";
+   case SPV_AMD_gpu_shader_half_float: return "SPV_AMD_gpu_shader_half_float";
+   case SPV_KHR_shader_draw_parameters: return "SPV_KHR_shader_draw_parameters";
+   case SPV_KHR_subgroup_vote: return "SPV_KHR_subgroup_vote";
+   case SPV_KHR_16bit_storage: return "SPV_KHR_16bit_storage";
+   case SPV_KHR_device_group: return "SPV_KHR_device_group";
+   case SPV_KHR_multiview: return "SPV_KHR_multiview";
+   case SPV_NVX_multiview_per_view_attributes: return "SPV_NVX_multiview_per_view_attributes";
+   case SPV_NV_viewport_array2: return "SPV_NV_viewport_array2";
+   case SPV_NV_stereo_view_rendering: return "SPV_NV_stereo_view_rendering";
+   case SPV_NV_sample_mask_override_coverage: return "SPV_NV_sample_mask_override_coverage";
+   case SPV_NV_geometry_shader_passthrough: return "SPV_NV_geometry_shader_passthrough";
+   case SPV_AMD_texture_gather_bias_lod: return "SPV_AMD_texture_gather_bias_lod";
+   case SPV_KHR_storage_buffer_storage_class: return "SPV_KHR_storage_buffer_storage_class";
+   case SPV_KHR_variable_pointers: return "SPV_KHR_variable_pointers";
+   case SPV_AMD_gpu_shader_int16: return "SPV_AMD_gpu_shader_int16";
+   case SPV_KHR_post_depth_coverage: return "SPV_KHR_post_depth_coverage";
+   case SPV_KHR_shader_atomic_counter_ops: return "SPV_KHR_shader_atomic_counter_ops";
+   case SPV_EXT_shader_stencil_export: return "SPV_EXT_shader_stencil_export";
+   case SPV_EXT_shader_viewport_index_layer: return "SPV_EXT_shader_viewport_index_layer";
+   case SPV_AMD_shader_image_load_store_lod: return "SPV_AMD_shader_image_load_store_lod";
+   case SPV_AMD_shader_fragment_mask: return "SPV_AMD_shader_fragment_mask";
+   default: return "unknown";
+   }
+
+   return "unknown";
+}
diff --git a/src/compiler/spirv/spirv_extensions.h b/src/compiler/spirv/spirv_extensions.h
new file mode 100644
index 00000000000..54bc7f2dbe0
--- /dev/null
+++ b/src/compiler/spirv/spirv_extensions.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright © 2017 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#ifndef _SPIRV_EXTENSIONS_H_
+#define _SPIRV_EXTENSIONS_H_
+
+#include "compiler/nir/nir.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum SpvExtension_ {
+   SPV_AMD_shader_explicit_vertex_parameter = 0,
+   SPV_AMD_shader_trinary_minmax,
+   SPV_AMD_gcn_shader,
+   SPV_KHR_shader_ballot,
+   SPV_AMD_shader_ballot,
+   SPV_AMD_gpu_shader_half_float,
+   SPV_KHR_shader_draw_parameters,
+   SPV_KHR_subgroup_vote,
+   SPV_KHR_16bit_storage,
+   SPV_KHR_device_group,
+   SPV_KHR_multiview,
+   SPV_NVX_multiview_per_view_attributes,
+   SPV_NV_viewport_array2,
+   SPV_NV_stereo_view_rendering,
+   SPV_NV_sample_mask_override_coverage,
+   SPV_NV_geometry_shader_passthrough,
+   SPV_AMD_texture_gather_bias_lod,
+   SPV_KHR_storage_buffer_storage_class,
+   SPV_KHR_variable_pointers,
+   SPV_AMD_gpu_shader_int16,
+   SPV_KHR_post_depth_coverage,
+   SPV_KHR_shader_atomic_counter_ops,
+   SPV_EXT_shader_stencil_export,
+   SPV_EXT_shader_viewport_index_layer,
+   SPV_AMD_shader_image_load_store_lod,
+   SPV_AMD_shader_fragment_mask,
+   SPV_EXTENSIONS_COUNT
+} SpvExtension;
+
+const char *spirv_extensions_to_string(SpvExtension ext);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SPIRV_EXTENSIONS */
-- 
2.11.0



More information about the mesa-dev mailing list