diff --git a/docs/envvars.rst b/docs/envvars.rst index c607fc77a48..0c0c0e49f2d 100644 --- a/docs/envvars.rst +++ b/docs/envvars.rst @@ -910,6 +910,11 @@ Rusticl environment variables - ``RUSTICL_ENABLE=iris:1,radeonsi:0,2`` (enables second iris and first and third radeonsi device) +.. envvar:: RUSTICL_FEATURES + + a comma-separated list of features to enable. Those are disabled by default + as they might not be stable enough or break OpenCL conformance. + .. envvar:: RUSTICL_DEBUG a comma-separated list of debug channels to enable. diff --git a/src/gallium/frontends/rusticl/core/platform.rs b/src/gallium/frontends/rusticl/core/platform.rs index e5c9005f69d..c5873e81325 100644 --- a/src/gallium/frontends/rusticl/core/platform.rs +++ b/src/gallium/frontends/rusticl/core/platform.rs @@ -21,6 +21,8 @@ pub struct PlatformDebug { pub program: bool, } +pub struct PlatformFeatures {} + static PLATFORM_ENV_ONCE: Once = Once::new(); static PLATFORM_ONCE: Once = Once::new(); @@ -33,6 +35,7 @@ static mut PLATFORM: Platform = Platform { devs: Vec::new(), }; static mut PLATFORM_DBG: PlatformDebug = PlatformDebug { program: false }; +static mut PLATFORM_FEATURES: PlatformFeatures = PlatformFeatures {}; fn load_env() { let debug = unsafe { &mut PLATFORM_DBG }; @@ -44,6 +47,15 @@ fn load_env() { } } } + + let features = unsafe { &mut PLATFORM_FEATURES }; + if let Ok(feature_flags) = env::var("RUSTICL_FEATURES") { + for flag in feature_flags.split(',') { + match flag { + _ => eprintln!("Unknown RUSTICL_FEATURES flag found: {}", flag), + } + } + } } impl Platform { @@ -62,6 +74,11 @@ impl Platform { unsafe { &PLATFORM_DBG } } + pub fn features() -> &'static PlatformFeatures { + debug_assert!(PLATFORM_ENV_ONCE.is_completed()); + unsafe { &PLATFORM_FEATURES } + } + fn init(&mut self) { unsafe { glsl_type_singleton_init_or_ref();