diff --git a/docs/envvars.rst b/docs/envvars.rst index a7b44ef1827..e7cd7a69f57 100644 --- a/docs/envvars.rst +++ b/docs/envvars.rst @@ -945,6 +945,7 @@ Rusticl environment variables a comma-separated list of debug channels to enable. + - ``allow_invalid_spirv`` disables validation of any input SPIR-V - ``clc`` dumps all OpenCL C source being compiled - ``program`` dumps compilation logs to stderr diff --git a/src/gallium/frontends/rusticl/core/platform.rs b/src/gallium/frontends/rusticl/core/platform.rs index 93ae650d849..049cab2597b 100644 --- a/src/gallium/frontends/rusticl/core/platform.rs +++ b/src/gallium/frontends/rusticl/core/platform.rs @@ -17,6 +17,7 @@ pub struct Platform { } pub struct PlatformDebug { + pub allow_invalid_spirv: bool, pub clc: bool, pub program: bool, } @@ -57,6 +58,7 @@ static mut PLATFORM: Platform = Platform { devs: Vec::new(), }; static mut PLATFORM_DBG: PlatformDebug = PlatformDebug { + allow_invalid_spirv: false, clc: false, program: false, }; @@ -70,6 +72,7 @@ fn load_env() { if let Ok(debug_flags) = env::var("RUSTICL_DEBUG") { for flag in debug_flags.split(',') { match flag { + "allow_invalid_spirv" => debug.allow_invalid_spirv = true, "clc" => debug.clc = true, "program" => debug.program = true, _ => eprintln!("Unknown RUSTICL_DEBUG flag found: {}", flag), diff --git a/src/gallium/frontends/rusticl/core/program.rs b/src/gallium/frontends/rusticl/core/program.rs index b75b510b996..fe0403203f9 100644 --- a/src/gallium/frontends/rusticl/core/program.rs +++ b/src/gallium/frontends/rusticl/core/program.rs @@ -559,7 +559,11 @@ impl Program { // has to match CL_DEVICE_MAX_PARAMETER_SIZE limit_max_function_arg: dev.param_max_size() as u32, }; - spirv.clone_on_validate(&options) + if Platform::dbg().allow_invalid_spirv { + (Some(spirv.clone()), String::new()) + } else { + spirv.clone_on_validate(&options) + } } ProgramSourceType::Src(src) => { let args = prepare_options(&options, dev);