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

Ian Romanick idr at freedesktop.org
Mon Nov 27 21:21:33 UTC 2017


On 11/15/2017 05:22 AM, Eduardo Lima Mitev wrote:
> 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_ {

Please, no more of this typedef nonsense.  Having to type "enum " in a
few places isn't going to hurt anyone, and it gives information to the
reader.

> +   SPV_AMD_shader_explicit_vertex_parameter = 0,

Are these in this order for a reason, or can they be sorted in a similar
manner to extension names elsewhere in Mesa?  Is there a reason to add a
bunch of the extensions that Mesa doesn't (and probably never will) support?

> +   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 */


More information about the mesa-dev mailing list