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"))
     }

Reply via email to