Module: Mesa Branch: main Commit: 4d26b38caf962367b16487bfe6c180a15bba7990 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4d26b38caf962367b16487bfe6c180a15bba7990
Author: Karol Herbst <[email protected]> Date: Fri Jun 16 19:58:28 2023 +0200 rusticl/program: pass our max param size along to the spirv validator Fixes "api min_max_parameter_size" in spir-v mode Signed-off-by: Karol Herbst <[email protected]> Reviewed-by: Jesse Natalie <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23700> --- src/gallium/frontends/rusticl/core/program.rs | 8 +++++++- src/gallium/frontends/rusticl/mesa/compiler/clc/spirv.rs | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/gallium/frontends/rusticl/core/program.rs b/src/gallium/frontends/rusticl/core/program.rs index 50c1eb8ea98..214fa30e4b5 100644 --- a/src/gallium/frontends/rusticl/core/program.rs +++ b/src/gallium/frontends/rusticl/core/program.rs @@ -554,7 +554,13 @@ impl Program { let mut d = info.dev_build_mut(dev); let (spirv, log) = match &self.src { - ProgramSourceType::Il(spirv) => spirv.clone_on_validate(), + ProgramSourceType::Il(spirv) => { + let options = clc_validator_options { + // has to match CL_DEVICE_MAX_PARAMETER_SIZE + limit_max_function_arg: dev.param_max_size() as u32, + }; + spirv.clone_on_validate(&options) + } ProgramSourceType::Src(src) => { let args = prepare_options(&options, dev); spirv::SPIRVBin::from_clc( diff --git a/src/gallium/frontends/rusticl/mesa/compiler/clc/spirv.rs b/src/gallium/frontends/rusticl/mesa/compiler/clc/spirv.rs index 8caa8b7fb02..641ecc898ae 100644 --- a/src/gallium/frontends/rusticl/mesa/compiler/clc/spirv.rs +++ b/src/gallium/frontends/rusticl/mesa/compiler/clc/spirv.rs @@ -203,10 +203,10 @@ impl SPIRVBin { (res, msgs.join("\n")) } - pub fn clone_on_validate(&self) -> (Option<Self>, String) { + pub fn clone_on_validate(&self, options: &clc_validator_options) -> (Option<Self>, String) { let mut msgs: Vec<String> = Vec::new(); let logger = create_clc_logger(&mut msgs); - let res = unsafe { clc_validate_spirv(&self.spirv, &logger, ptr::null()) }; + let res = unsafe { clc_validate_spirv(&self.spirv, &logger, options) }; (res.then(|| self.clone()), msgs.join("\n")) }
