mesa/src/compiler/spirv/nir_spirv.h
Charlie Turner 786fa3435c spirv_to_nir: Add environment variable to change default log level
During dEQP runs for radv, I see a lot of warnings like,

ERROR - dEQP error: SPIR-V WARNING:
ERROR - dEQP error:     In file ../src/compiler/spirv/spirv_to_nir.c:1073
ERROR - dEQP error:     Decoration not allowed on struct members: SpvDecorationRestrict
ERROR - dEQP error:     408 bytes into the SPIR-V binary

This fails jobs on Gitlab, due to,

Job's log exceeded limit of 4194304 bytes.
Job execution will continue but no more output will be collected.

Since it doesn't seem feasible right now to fix the many shaders in
the VK-CTS triggering this warning, add an environment toggle that
allows test runners to only see the level of commentary they want.

v2 from Martin:
 - Add my SoB

v3 from Martin:
 - fix the indentation (suggested by Eric)
 - put the declarations at the top of the function

v4 from Martin:
 - make vtn_default_log_level() static (Marcin)
 - cache the default level in vtn_log (Marcin)
 - move vtn_log_level_strings inside vtn_default_log_level()
 - Fix the build issue on MSC

Signed-off-by: Martin Peres <martin.peres@mupuf.org>
Reviewed-by: Eric Engestrom <eric@engestrom.ch>
Acked-by: Andres Gomez <agomez@igalia.com>
Acked-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Acked-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11491>
2021-06-22 13:59:43 +03:00

131 lines
4.2 KiB
C

/*
* Copyright © 2015 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.
*
* Authors:
* Jason Ekstrand (jason@jlekstrand.net)
*
*/
#ifndef _NIR_SPIRV_H_
#define _NIR_SPIRV_H_
#include "util/disk_cache.h"
#include "compiler/nir/nir.h"
#include "compiler/shader_info.h"
#ifdef __cplusplus
extern "C" {
#endif
struct nir_spirv_specialization {
uint32_t id;
nir_const_value value;
bool defined_on_module;
};
enum nir_spirv_debug_level {
NIR_SPIRV_DEBUG_LEVEL_INVALID = -1,
NIR_SPIRV_DEBUG_LEVEL_INFO,
NIR_SPIRV_DEBUG_LEVEL_WARNING,
NIR_SPIRV_DEBUG_LEVEL_ERROR,
};
enum nir_spirv_execution_environment {
NIR_SPIRV_VULKAN = 0,
NIR_SPIRV_OPENCL,
NIR_SPIRV_OPENGL,
};
struct spirv_to_nir_options {
enum nir_spirv_execution_environment environment;
/* Whether to make FragCoord to a system value, the same as
* GLSLFragCoordIsSysVal in GLSL.
*/
bool frag_coord_is_sysval;
/* Whether to keep ViewIndex as an input instead of rewriting to a sysval.
*/
bool view_index_is_input;
/* Create a nir library. */
bool create_library;
/* Whether to use nir_intrinsic_deref_buffer_array_length intrinsic instead
* of nir_intrinsic_get_ssbo_size to lower OpArrayLength.
*/
bool use_deref_buffer_array_length;
/* Initial value for shader_info::float_controls_execution_mode,
* indicates hardware requirements rather than shader author intent
*/
uint16_t float_controls_execution_mode;
struct spirv_supported_capabilities caps;
/* Address format for various kinds of pointers. */
nir_address_format ubo_addr_format;
nir_address_format ssbo_addr_format;
nir_address_format phys_ssbo_addr_format;
nir_address_format push_const_addr_format;
nir_address_format shared_addr_format;
nir_address_format global_addr_format;
nir_address_format temp_addr_format;
nir_address_format constant_addr_format;
const nir_shader *clc_shader;
struct {
void (*func)(void *private_data,
enum nir_spirv_debug_level level,
size_t spirv_offset,
const char *message);
void *private_data;
} debug;
};
bool gl_spirv_validation(const uint32_t *words, size_t word_count,
struct nir_spirv_specialization *spec, unsigned num_spec,
gl_shader_stage stage, const char *entry_point_name);
nir_shader *spirv_to_nir(const uint32_t *words, size_t word_count,
struct nir_spirv_specialization *specializations,
unsigned num_specializations,
gl_shader_stage stage, const char *entry_point_name,
const struct spirv_to_nir_options *options,
const nir_shader_compiler_options *nir_options);
bool nir_can_find_libclc(unsigned ptr_bit_size);
nir_shader *
nir_load_libclc_shader(unsigned ptr_bit_size,
struct disk_cache *disk_cache,
const struct spirv_to_nir_options *spirv_options,
const nir_shader_compiler_options *nir_options);
bool nir_lower_libclc(nir_shader *shader, const nir_shader *clc_shader);
#ifdef __cplusplus
}
#endif
#endif /* _NIR_SPIRV_H_ */