From: Karol Herbst Date: Fri, 16 Jun 2023 17:54:04 +0000 (+0200) Subject: clc: allow passing custom validator options X-Git-Tag: upstream/23.3.3~6801 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=99a480ba9bbae4df47f90a84fc150944b3465ae6;p=platform%2Fupstream%2Fmesa.git clc: allow passing custom validator options Signed-off-by: Karol Herbst Reviewed-by: Jesse Natalie Part-of: --- diff --git a/src/compiler/clc/clc.h b/src/compiler/clc/clc.h index 690c3db..a7d20e8 100644 --- a/src/compiler/clc/clc.h +++ b/src/compiler/clc/clc.h @@ -81,6 +81,10 @@ struct clc_compile_args { unsigned address_bits; }; +struct clc_validator_options { + uint32_t limit_max_function_arg; +}; + struct clc_binary { void *data; size_t size; diff --git a/src/compiler/clc/clc_helpers.cpp b/src/compiler/clc/clc_helpers.cpp index 8af3944..b144302 100644 --- a/src/compiler/clc/clc_helpers.cpp +++ b/src/compiler/clc/clc_helpers.cpp @@ -1162,13 +1162,22 @@ clc_link_spirv_binaries(const struct clc_linker_args *args, bool clc_validate_spirv(const struct clc_binary *spirv, - const struct clc_logger *logger) + const struct clc_logger *logger, + const struct clc_validator_options *options) { SPIRVMessageConsumer msgconsumer(logger); spvtools::SpirvTools tools(spirv_target); tools.SetMessageConsumer(msgconsumer); + spvtools::ValidatorOptions spirv_options; const uint32_t *data = static_cast(spirv->data); - return tools.Validate(data, spirv->size / 4); + + if (options) { + spirv_options.SetUniversalLimit( + spv_validator_limit_max_function_args, + options->limit_max_function_arg); + } + + return tools.Validate(data, spirv->size / 4, spirv_options); } int diff --git a/src/compiler/clc/clc_helpers.h b/src/compiler/clc/clc_helpers.h index 0bfb90d..aa87284 100644 --- a/src/compiler/clc/clc_helpers.h +++ b/src/compiler/clc/clc_helpers.h @@ -75,7 +75,8 @@ clc_link_spirv_binaries(const struct clc_linker_args *args, bool clc_validate_spirv(const struct clc_binary *spirv, - const struct clc_logger *logger); + const struct clc_logger *logger, + const struct clc_validator_options *options); int clc_spirv_specialize(const struct clc_binary *in_spirv, diff --git a/src/gallium/frontends/rusticl/mesa/compiler/clc/spirv.rs b/src/gallium/frontends/rusticl/mesa/compiler/clc/spirv.rs index d6458da..8caa8b7 100644 --- a/src/gallium/frontends/rusticl/mesa/compiler/clc/spirv.rs +++ b/src/gallium/frontends/rusticl/mesa/compiler/clc/spirv.rs @@ -206,7 +206,7 @@ impl SPIRVBin { pub fn clone_on_validate(&self) -> (Option, String) { let mut msgs: Vec = Vec::new(); let logger = create_clc_logger(&mut msgs); - let res = unsafe { clc_validate_spirv(&self.spirv, &logger) }; + let res = unsafe { clc_validate_spirv(&self.spirv, &logger, ptr::null()) }; (res.then(|| self.clone()), msgs.join("\n")) }