From 508f81f913dd2925bce0e3dd2703c7a5efcc340f Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Mon, 15 May 2023 18:46:47 +0200 Subject: rusticl: explicitly state supported SPIR-V extensions We'll need to be explicit about supported extensions. Signed-off-by: Karol Herbst Part-of: --- src/gallium/frontends/rusticl/core/device.rs | 9 +++++++++ src/gallium/frontends/rusticl/core/program.rs | 1 + src/gallium/frontends/rusticl/mesa/compiler/clc/spirv.rs | 6 +++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/gallium/frontends/rusticl/core/device.rs b/src/gallium/frontends/rusticl/core/device.rs index c82dabfd8a3..09ace891fcc 100644 --- a/src/gallium/frontends/rusticl/core/device.rs +++ b/src/gallium/frontends/rusticl/core/device.rs @@ -22,6 +22,7 @@ use std::cmp::min; use std::collections::HashMap; use std::convert::TryInto; use std::env; +use std::ffi::CString; use std::os::raw::*; use std::sync::Arc; use std::sync::Mutex; @@ -37,6 +38,7 @@ pub struct Device { pub embedded: bool, pub extension_string: String, pub extensions: Vec, + pub spirv_extensions: Vec, pub clc_features: Vec, pub formats: HashMap>, pub lib_clc: NirShader, @@ -194,6 +196,7 @@ impl Device { embedded: false, extension_string: String::from(""), extensions: Vec::new(), + spirv_extensions: Vec::new(), clc_features: Vec::new(), formats: HashMap::new(), lib_clc: lib_clc?, @@ -474,6 +477,7 @@ impl Device { let mut exts_str: Vec = Vec::new(); let mut exts = PLATFORM_EXTENSIONS.to_vec(); let mut feats = Vec::new(); + let mut spirv_exts = Vec::new(); let mut add_ext = |major, minor, patch, ext: &str| { exts.push(mk_cl_version_ext(major, minor, patch, ext)); exts_str.push(ext.to_owned()); @@ -481,12 +485,16 @@ impl Device { let mut add_feat = |major, minor, patch, feat: &str| { feats.push(mk_cl_version_ext(major, minor, patch, feat)); }; + let mut add_spirv = |ext: &str| { + spirv_exts.push(CString::new(ext).unwrap()); + }; // add extensions all drivers support for now add_ext(1, 0, 0, "cl_khr_global_int32_base_atomics"); add_ext(1, 0, 0, "cl_khr_global_int32_extended_atomics"); add_ext(1, 0, 0, "cl_khr_local_int32_base_atomics"); add_ext(1, 0, 0, "cl_khr_local_int32_extended_atomics"); + add_spirv("SPV_KHR_float_controls"); if self.doubles_supported() { add_ext(1, 0, 0, "cl_khr_fp64"); @@ -529,6 +537,7 @@ impl Device { self.extensions = exts; self.clc_features = feats; self.extension_string = format!("{} {}", PLATFORM_EXTENSION_STR, exts_str.join(" ")); + self.spirv_extensions = spirv_exts; } fn shader_param(&self, cap: pipe_shader_cap) -> i32 { diff --git a/src/gallium/frontends/rusticl/core/program.rs b/src/gallium/frontends/rusticl/core/program.rs index a369bd238e8..16b6e1d7935 100644 --- a/src/gallium/frontends/rusticl/core/program.rs +++ b/src/gallium/frontends/rusticl/core/program.rs @@ -564,6 +564,7 @@ impl Program { headers, get_disk_cache(), dev.cl_features(), + &dev.spirv_extensions, dev.address_bits(), ) } diff --git a/src/gallium/frontends/rusticl/mesa/compiler/clc/spirv.rs b/src/gallium/frontends/rusticl/mesa/compiler/clc/spirv.rs index 8aadb26a8f6..f53203af000 100644 --- a/src/gallium/frontends/rusticl/mesa/compiler/clc/spirv.rs +++ b/src/gallium/frontends/rusticl/mesa/compiler/clc/spirv.rs @@ -70,11 +70,15 @@ impl SPIRVBin { headers: &[CLCHeader], cache: &Option, features: clc_optional_features, + spirv_extensions: &[CString], address_bits: u32, ) -> (Option, String) { let mut hash_key = None; let has_includes = args.iter().any(|a| a.as_bytes()[0..2] == *b"-I"); + let mut spirv_extensions: Vec<_> = spirv_extensions.iter().map(|s| s.as_ptr()).collect(); + spirv_extensions.push(ptr::null()); + if let Some(cache) = cache { if !has_includes { let mut key = Vec::new(); @@ -117,7 +121,7 @@ impl SPIRVBin { num_args: c_args.len() as u32, spirv_version: clc_spirv_version::CLC_SPIRV_VERSION_MAX, features: features, - allowed_spirv_extensions: ptr::null(), + allowed_spirv_extensions: spirv_extensions.as_ptr(), address_bits: address_bits, }; let mut msgs: Vec = Vec::new(); -- cgit v1.2.1