From dad973a55e31fa6f9a8781f334ecfd7ee5d6bc2f Mon Sep 17 00:00:00 2001 From: GrygrFlzr Date: Wed, 6 Jan 2021 02:27:57 +0700 Subject: [PATCH] Control building from feature flag Properly skips optional dependencies pending rust-lang/cargo#7914 More extensible for addition of new platforms --- .cargo/config.toml | 64 ---- .gitignore | 3 +- .gitmodules | 2 +- Cargo.toml | 22 +- build/build.rs | 89 ------ glslang | 1 - glslang_actual_builder/Cargo.toml | 18 ++ glslang_actual_builder/build.rs | 110 +++++++ .../android-arm64-v8a/libHLSL.glsltospirv.a | Bin .../libOGLCompiler.glsltospirv.a | Bin .../libOSDependent.glsltospirv.a | Bin .../android-arm64-v8a/libSPIRV.glsltospirv.a | Bin .../libSPVRemapper.glsltospirv.a | Bin .../libglslang.glsltospirv.a | Bin .../android-armeabi-v7a/libHLSL.glsltospirv.a | Bin .../libOGLCompiler.glsltospirv.a | Bin .../libOSDependent.glsltospirv.a | Bin .../libSPIRV.glsltospirv.a | Bin .../libSPVRemapper.glsltospirv.a | Bin .../libglslang.glsltospirv.a | Bin .../build}/linux/libHLSL.glsltospirv.a | Bin .../build}/linux/libOGLCompiler.glsltospirv.a | Bin .../build}/linux/libOSDependent.glsltospirv.a | Bin .../linux/libSPIRV-Tools-opt.glsltospirv.a | Bin .../build}/linux/libSPIRV-Tools.glsltospirv.a | Bin .../build}/linux/libSPIRV.glsltospirv.a | Bin .../build}/linux/libSPVRemapper.glsltospirv.a | Bin .../build}/linux/libglslang.glsltospirv.a | Bin .../build}/osx/libHLSL.glsltospirv.a | Bin .../build}/osx/libOGLCompiler.glsltospirv.a | Bin .../build}/osx/libOSDependent.glsltospirv.a | Bin .../osx/libSPIRV-Tools-opt.glsltospirv.a | Bin .../build}/osx/libSPIRV-Tools.glsltospirv.a | Bin .../build}/osx/libSPIRV.glsltospirv.a | Bin .../build}/osx/libSPVRemapper.glsltospirv.a | Bin .../build}/osx/libglslang.glsltospirv.a | Bin .../build}/windows/HLSL.glsltospirv.lib | Bin .../windows/OGLCompiler.glsltospirv.lib | Bin .../windows/OSDependent.glsltospirv.lib | Bin .../build}/windows/SPIRV.glsltospirv.lib | Bin .../windows/SPVRemapper.glsltospirv.lib | Bin .../build}/windows/glslang.glsltospirv.lib | Bin .../src}/glslang_c_interface.rs | 0 glslang_actual_builder/src/lib.rs | 275 +++++++++++++++++ src/lib.rs | 276 +----------------- 45 files changed, 425 insertions(+), 435 deletions(-) delete mode 100644 .cargo/config.toml delete mode 100644 build/build.rs delete mode 160000 glslang create mode 100644 glslang_actual_builder/Cargo.toml create mode 100644 glslang_actual_builder/build.rs rename {build => glslang_actual_builder/build}/android-arm64-v8a/libHLSL.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/android-arm64-v8a/libOGLCompiler.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/android-arm64-v8a/libOSDependent.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/android-arm64-v8a/libSPIRV.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/android-arm64-v8a/libSPVRemapper.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/android-arm64-v8a/libglslang.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/android-armeabi-v7a/libHLSL.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/android-armeabi-v7a/libOGLCompiler.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/android-armeabi-v7a/libOSDependent.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/android-armeabi-v7a/libSPIRV.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/android-armeabi-v7a/libSPVRemapper.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/android-armeabi-v7a/libglslang.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/linux/libHLSL.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/linux/libOGLCompiler.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/linux/libOSDependent.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/linux/libSPIRV-Tools-opt.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/linux/libSPIRV-Tools.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/linux/libSPIRV.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/linux/libSPVRemapper.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/linux/libglslang.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/osx/libHLSL.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/osx/libOGLCompiler.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/osx/libOSDependent.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/osx/libSPIRV-Tools-opt.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/osx/libSPIRV-Tools.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/osx/libSPIRV.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/osx/libSPVRemapper.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/osx/libglslang.glsltospirv.a (100%) rename {build => glslang_actual_builder/build}/windows/HLSL.glsltospirv.lib (100%) rename {build => glslang_actual_builder/build}/windows/OGLCompiler.glsltospirv.lib (100%) rename {build => glslang_actual_builder/build}/windows/OSDependent.glsltospirv.lib (100%) rename {build => glslang_actual_builder/build}/windows/SPIRV.glsltospirv.lib (100%) rename {build => glslang_actual_builder/build}/windows/SPVRemapper.glsltospirv.lib (100%) rename {build => glslang_actual_builder/build}/windows/glslang.glsltospirv.lib (100%) rename {src => glslang_actual_builder/src}/glslang_c_interface.rs (100%) create mode 100644 glslang_actual_builder/src/lib.rs diff --git a/.cargo/config.toml b/.cargo/config.toml deleted file mode 100644 index cc76fcb..0000000 --- a/.cargo/config.toml +++ /dev/null @@ -1,64 +0,0 @@ -[target.x86_64-pc-windows-msvc.glslang] -rustc-link-search = ["build/windows"] -rustc-link-lib = [ - "HLSL.glsltospirv", - "OGLCompiler.glsltospirv", - "OSDependent.glsltospirv", - "SPIRV.glsltospirv", - "SPVRemapper.glsltospirv", - "glslang.glsltospirv" -] - -[target.x86_64-unknown-linux-gnu.glslang] -rustc-link-search = ["build/linux"] -rustc-link-lib = [ - "HLSL.glsltospirv", - "OGLCompiler.glsltospirv", - "OSDependent.glsltospirv", - "SPIRV.glsltospirv", - "SPVRemapper.glsltospirv", - "glslang.glsltospirv", - # linux and macOS-specific libraries - "SPIRV-Tools-opt.glsltospirv", - "SPIRV-Tools.glsltospirv" -] - -[target.x86_64-apple-darwin.glslang] -rustc-link-search = ["build/osx"] -rustc-link-lib = [ - "HLSL.glsltospirv", - "OGLCompiler.glsltospirv", - "OSDependent.glsltospirv", - "SPIRV.glsltospirv", - "SPVRemapper.glsltospirv", - "glslang.glsltospirv", - # linux and macOS-specific libraries - "SPIRV-Tools-opt.glsltospirv", - "SPIRV-Tools.glsltospirv" -] - -[target.aarch64-linux-android.glslang] -rustc-link-search = ["build/android-arm64-v8a"] -rustc-link-lib = [ - "HLSL.glsltospirv", - "OGLCompiler.glsltospirv", - "OSDependent.glsltospirv", - "SPIRV.glsltospirv", - "SPVRemapper.glsltospirv", - "glslang.glsltospirv", - # android-specific libraries - "c++_shared" -] - -[target.armv7-linux-androideabi.glslang] -rustc-link-search = ["build/android-armeabi-v7a"] -rustc-link-lib = [ - "HLSL.glsltospirv", - "OGLCompiler.glsltospirv", - "OSDependent.glsltospirv", - "SPIRV.glsltospirv", - "SPVRemapper.glsltospirv", - "glslang.glsltospirv", - # android-specific libraries - "c++_shared" -] diff --git a/.gitignore b/.gitignore index b39df26..163e8f9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /target **/*.rs.bk Cargo.lock -.cargo/config \ No newline at end of file +.cargo/config +glslang_actual_builder/glslang/ diff --git a/.gitmodules b/.gitmodules index debdb18..0685416 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "glslang"] - path = glslang + path = glslang_actual_builder/glslang url = https://github.com/KhronosGroup/glslang.git diff --git a/Cargo.toml b/Cargo.toml index 334a088..d62f9c4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,11 +5,23 @@ authors = ["Pierre Krieger ", "The vulkano contrib description = "Deprecated. This crate is a temporary measure until native rust shader compilation like https://github.com/gfx-rs/naga lands." repository = "https://github.com/cart/glsl-to-spirv" license = "MIT/Apache-2.0" -build = "build/build.rs" categories = ["rendering::graphics-api"] edition = "2018" -links = "glslang" -[build-dependencies] -cmake = "0.1.45" -cc = { version = "1.0.66", features = ["parallel"] } +[target.x86_64-pc-windows-msvc.dependencies] +glslang_actual_builder = { path = "glslang_actual_builder", default-features = false } + +[target.x86_64-unknown-linux-gnu.dependencies] +glslang_actual_builder = { path = "glslang_actual_builder", default-features = false } + +[target.x86_64-apple-darwin.dependencies] +glslang_actual_builder = { path = "glslang_actual_builder", default-features = false } + +[target.aarch64-linux-android.dependencies] +glslang_actual_builder = { path = "glslang_actual_builder", default-features = false } + +[target.armv7-linux-androideabi.dependencies] +glslang_actual_builder = { path = "glslang_actual_builder", default-features = false } + +[target.i686-pc-windows-msvc.dependencies] +glslang_actual_builder = { path = "glslang_actual_builder", features = ["build-from-source"] } diff --git a/build/build.rs b/build/build.rs deleted file mode 100644 index 4e12350..0000000 --- a/build/build.rs +++ /dev/null @@ -1,89 +0,0 @@ -extern crate cmake; - -use std::env; -use std::fs::copy; -use std::path::Path; -use std::path::PathBuf; - -const COMMON_FILES: &[&str] = &[ - "glslang", - "HLSL", - "OGLCompiler", - "OSDependent", - "SPIRV", - "SPVRemapper", -]; - -fn main() { - let target: &str = &env::var("TARGET").unwrap(); - let bin_dir = match target { - "i686-pc-windows-msvc" => build_libraries(), - _ => panic!("Missing target support {}", target), - }; - - // Link order matters, make sure dependents are linked before their dependencies. - println!("cargo:rustc-link-search={}", bin_dir.to_str().unwrap()); - println!("cargo:rustc-link-lib=glslang.glsltospirv"); - println!("cargo:rustc-link-lib=HLSL.glsltospirv"); - println!("cargo:rustc-link-lib=OGLCompiler.glsltospirv"); - println!("cargo:rustc-link-lib=OSDependent.glsltospirv"); - println!("cargo:rustc-link-lib=SPIRV.glsltospirv"); - println!("cargo:rustc-link-lib=SPVRemapper.glsltospirv"); - if target.contains("x86_64-unknown-linux-gnu") || target.contains("x86_64-apple-darwin") { - println!("cargo:rustc-link-lib=SPIRV-Tools-opt.glsltospirv"); - println!("cargo:rustc-link-lib=SPIRV-Tools.glsltospirv"); - } - if target.contains("android") { - println!("cargo:rustc-link-lib=c++_shared"); - } -} - -/// Build target libraries and returns the path they're in -pub fn build_libraries() -> PathBuf { - // Prepare directories - let cargo_dir = Path::new(env!("CARGO_MANIFEST_DIR")); - let source_dir = cargo_dir.join("glslang"); - - let out_dir_env = env::var("OUT_DIR").unwrap().clone(); - let out_dir = Path::new(&out_dir_env); - let install_dir = out_dir.join("install"); - let library_dir = install_dir.join("lib"); - - // Re-use libraries if they exist - if library_dir.exists() { - return library_dir; - } - - // Check glslang folder is initialized - let cmakelists = source_dir.join("CMakeLists.txt"); - if !cmakelists.exists() { - panic!("Please make sure the glslang submodule is initialized"); - } - - // Set up "install" subdirectory - match std::fs::create_dir_all(&install_dir) { - Ok(_) => {} - Err(err) => panic!("Unable to create directory: {:?}", err), - } - - // Configure and run build - cmake::Config::new(&source_dir) - .define("CMAKE_INSTALL_PREFIX", &install_dir) - .define("ENABLE_GLSLANG_BINARIES", "OFF") - .profile("Release") - .build_target("install") - .build(); - - // Rename library files - COMMON_FILES.iter().for_each(|file| { - match copy( - library_dir.join(file).with_extension("lib"), - library_dir.join(file).with_extension("glsltospirv.lib"), - ) { - Ok(_) => {} - Err(err) => panic!("Error renaming glslang libaries: {}", err), - } - }); - - return library_dir; -} diff --git a/glslang b/glslang deleted file mode 160000 index bcf6a24..0000000 --- a/glslang +++ /dev/null @@ -1 +0,0 @@ -Subproject commit bcf6a2430e99e8fc24f9f266e99316905e6d5134 diff --git a/glslang_actual_builder/Cargo.toml b/glslang_actual_builder/Cargo.toml new file mode 100644 index 0000000..e007068 --- /dev/null +++ b/glslang_actual_builder/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "glslang_actual_builder" +version = "0.1.0" +authors = ["Pierre Krieger ", "The vulkano contributors", "Carter Anderson ", "Nicholas Rishel ", "Martin Krisnanto Putra "] +description = "Internal builder" +repository = "https://github.com/cart/glsl-to-spirv" +license = "MIT/Apache-2.0" +build = "build.rs" +categories = ["rendering::graphics-api"] +edition = "2018" + +[features] +default = [] +build-from-source = ["cmake", "cc"] + +[build-dependencies] +cmake = { version = "0.1.45", optional = true } +cc = { version = "1.0.66", features = ["parallel"], optional = true } diff --git a/glslang_actual_builder/build.rs b/glslang_actual_builder/build.rs new file mode 100644 index 0000000..a6b901c --- /dev/null +++ b/glslang_actual_builder/build.rs @@ -0,0 +1,110 @@ +use std::path::Path; + +fn main() { + let target: &str = &std::env::var("TARGET").unwrap(); + let cargo_dir = Path::new(env!("CARGO_MANIFEST_DIR")); + let bin_dir = match target { + "x86_64-pc-windows-msvc" => cargo_dir.join("build/windows"), + "x86_64-unknown-linux-gnu" => cargo_dir.join("build/linux"), + "x86_64-apple-darwin" => cargo_dir.join("build/osx"), + "aarch64-linux-android" => cargo_dir.join("build/android-arm64-v8a"), + "armv7-linux-androideabi" => cargo_dir.join("build/android-armeabi-v7a"), + "i686-pc-windows-msvc" => build::build_libraries(), + _ => panic!("Unsupported target {}", target), + }; + + // Link order matters, make sure dependants are linked before their dependencies. + println!("cargo:rustc-link-search={}", bin_dir.to_str().unwrap()); + println!("cargo:rustc-link-lib=glslang.glsltospirv"); + println!("cargo:rustc-link-lib=HLSL.glsltospirv"); + println!("cargo:rustc-link-lib=OGLCompiler.glsltospirv"); + println!("cargo:rustc-link-lib=OSDependent.glsltospirv"); + println!("cargo:rustc-link-lib=SPIRV.glsltospirv"); + println!("cargo:rustc-link-lib=SPVRemapper.glsltospirv"); + if target.contains("x86_64-unknown-linux-gnu") || target.contains("x86_64-apple-darwin") { + println!("cargo:rustc-link-lib=SPIRV-Tools-opt.glsltospirv"); + println!("cargo:rustc-link-lib=SPIRV-Tools.glsltospirv"); + } + if target.contains("android") { + println!("cargo:rustc-link-lib=c++_shared"); + } +} + +#[cfg(feature = "build-from-source")] +mod build { + extern crate cmake; + + use std::path::Path; + use std::path::PathBuf; + + const COMMON_FILES: &[&str] = &[ + "glslang", + "HLSL", + "OGLCompiler", + "OSDependent", + "SPIRV", + "SPVRemapper", + ]; + + /// Build target libraries if required, + /// and returns the location of library files + pub fn build_libraries() -> PathBuf { + // Prepare directories + let cargo_dir = Path::new(env!("CARGO_MANIFEST_DIR")); + let source_dir = cargo_dir.join("glslang"); + + let out_dir_env = std::env::var("OUT_DIR").unwrap().clone(); + let out_dir = Path::new(&out_dir_env); + let install_dir = out_dir.join("install"); + let library_dir = install_dir.join("lib"); + + // Re-use libraries if they exist + if library_dir.exists() { + return library_dir; + } + + // Check glslang folder is initialized + let cmakelists = source_dir.join("CMakeLists.txt"); + if !cmakelists.exists() { + panic!("Please make sure the glslang submodule is initialized"); + } + + // Set up "install" subdirectory + match std::fs::create_dir_all(&install_dir) { + Ok(_) => {} + Err(err) => panic!("Unable to create directory: {:?}", err), + } + + // Configure and run build + cmake::Config::new(&source_dir) + .define("CMAKE_INSTALL_PREFIX", &install_dir) + .define("ENABLE_GLSLANG_BINARIES", "OFF") + .profile("Release") + .build_target("install") + .build(); + + // Rename library files + COMMON_FILES.iter().for_each(|file| { + match std::fs::copy( + library_dir.join(file).with_extension("lib"), + library_dir.join(file).with_extension("glsltospirv.lib"), + ) { + Ok(_) => {} + Err(err) => panic!("Error renaming glslang libaries: {}", err), + } + }); + + return library_dir; + } +} + +#[cfg(not(feature = "build-from-source"))] +mod build { + use std::path::PathBuf; + + /// Build target libraries if required, + /// and returns the location of library files + pub fn build_libraries() -> PathBuf { + panic!("This platform must build glslang from source."); + } +} diff --git a/build/android-arm64-v8a/libHLSL.glsltospirv.a b/glslang_actual_builder/build/android-arm64-v8a/libHLSL.glsltospirv.a similarity index 100% rename from build/android-arm64-v8a/libHLSL.glsltospirv.a rename to glslang_actual_builder/build/android-arm64-v8a/libHLSL.glsltospirv.a diff --git a/build/android-arm64-v8a/libOGLCompiler.glsltospirv.a b/glslang_actual_builder/build/android-arm64-v8a/libOGLCompiler.glsltospirv.a similarity index 100% rename from build/android-arm64-v8a/libOGLCompiler.glsltospirv.a rename to glslang_actual_builder/build/android-arm64-v8a/libOGLCompiler.glsltospirv.a diff --git a/build/android-arm64-v8a/libOSDependent.glsltospirv.a b/glslang_actual_builder/build/android-arm64-v8a/libOSDependent.glsltospirv.a similarity index 100% rename from build/android-arm64-v8a/libOSDependent.glsltospirv.a rename to glslang_actual_builder/build/android-arm64-v8a/libOSDependent.glsltospirv.a diff --git a/build/android-arm64-v8a/libSPIRV.glsltospirv.a b/glslang_actual_builder/build/android-arm64-v8a/libSPIRV.glsltospirv.a similarity index 100% rename from build/android-arm64-v8a/libSPIRV.glsltospirv.a rename to glslang_actual_builder/build/android-arm64-v8a/libSPIRV.glsltospirv.a diff --git a/build/android-arm64-v8a/libSPVRemapper.glsltospirv.a b/glslang_actual_builder/build/android-arm64-v8a/libSPVRemapper.glsltospirv.a similarity index 100% rename from build/android-arm64-v8a/libSPVRemapper.glsltospirv.a rename to glslang_actual_builder/build/android-arm64-v8a/libSPVRemapper.glsltospirv.a diff --git a/build/android-arm64-v8a/libglslang.glsltospirv.a b/glslang_actual_builder/build/android-arm64-v8a/libglslang.glsltospirv.a similarity index 100% rename from build/android-arm64-v8a/libglslang.glsltospirv.a rename to glslang_actual_builder/build/android-arm64-v8a/libglslang.glsltospirv.a diff --git a/build/android-armeabi-v7a/libHLSL.glsltospirv.a b/glslang_actual_builder/build/android-armeabi-v7a/libHLSL.glsltospirv.a similarity index 100% rename from build/android-armeabi-v7a/libHLSL.glsltospirv.a rename to glslang_actual_builder/build/android-armeabi-v7a/libHLSL.glsltospirv.a diff --git a/build/android-armeabi-v7a/libOGLCompiler.glsltospirv.a b/glslang_actual_builder/build/android-armeabi-v7a/libOGLCompiler.glsltospirv.a similarity index 100% rename from build/android-armeabi-v7a/libOGLCompiler.glsltospirv.a rename to glslang_actual_builder/build/android-armeabi-v7a/libOGLCompiler.glsltospirv.a diff --git a/build/android-armeabi-v7a/libOSDependent.glsltospirv.a b/glslang_actual_builder/build/android-armeabi-v7a/libOSDependent.glsltospirv.a similarity index 100% rename from build/android-armeabi-v7a/libOSDependent.glsltospirv.a rename to glslang_actual_builder/build/android-armeabi-v7a/libOSDependent.glsltospirv.a diff --git a/build/android-armeabi-v7a/libSPIRV.glsltospirv.a b/glslang_actual_builder/build/android-armeabi-v7a/libSPIRV.glsltospirv.a similarity index 100% rename from build/android-armeabi-v7a/libSPIRV.glsltospirv.a rename to glslang_actual_builder/build/android-armeabi-v7a/libSPIRV.glsltospirv.a diff --git a/build/android-armeabi-v7a/libSPVRemapper.glsltospirv.a b/glslang_actual_builder/build/android-armeabi-v7a/libSPVRemapper.glsltospirv.a similarity index 100% rename from build/android-armeabi-v7a/libSPVRemapper.glsltospirv.a rename to glslang_actual_builder/build/android-armeabi-v7a/libSPVRemapper.glsltospirv.a diff --git a/build/android-armeabi-v7a/libglslang.glsltospirv.a b/glslang_actual_builder/build/android-armeabi-v7a/libglslang.glsltospirv.a similarity index 100% rename from build/android-armeabi-v7a/libglslang.glsltospirv.a rename to glslang_actual_builder/build/android-armeabi-v7a/libglslang.glsltospirv.a diff --git a/build/linux/libHLSL.glsltospirv.a b/glslang_actual_builder/build/linux/libHLSL.glsltospirv.a similarity index 100% rename from build/linux/libHLSL.glsltospirv.a rename to glslang_actual_builder/build/linux/libHLSL.glsltospirv.a diff --git a/build/linux/libOGLCompiler.glsltospirv.a b/glslang_actual_builder/build/linux/libOGLCompiler.glsltospirv.a similarity index 100% rename from build/linux/libOGLCompiler.glsltospirv.a rename to glslang_actual_builder/build/linux/libOGLCompiler.glsltospirv.a diff --git a/build/linux/libOSDependent.glsltospirv.a b/glslang_actual_builder/build/linux/libOSDependent.glsltospirv.a similarity index 100% rename from build/linux/libOSDependent.glsltospirv.a rename to glslang_actual_builder/build/linux/libOSDependent.glsltospirv.a diff --git a/build/linux/libSPIRV-Tools-opt.glsltospirv.a b/glslang_actual_builder/build/linux/libSPIRV-Tools-opt.glsltospirv.a similarity index 100% rename from build/linux/libSPIRV-Tools-opt.glsltospirv.a rename to glslang_actual_builder/build/linux/libSPIRV-Tools-opt.glsltospirv.a diff --git a/build/linux/libSPIRV-Tools.glsltospirv.a b/glslang_actual_builder/build/linux/libSPIRV-Tools.glsltospirv.a similarity index 100% rename from build/linux/libSPIRV-Tools.glsltospirv.a rename to glslang_actual_builder/build/linux/libSPIRV-Tools.glsltospirv.a diff --git a/build/linux/libSPIRV.glsltospirv.a b/glslang_actual_builder/build/linux/libSPIRV.glsltospirv.a similarity index 100% rename from build/linux/libSPIRV.glsltospirv.a rename to glslang_actual_builder/build/linux/libSPIRV.glsltospirv.a diff --git a/build/linux/libSPVRemapper.glsltospirv.a b/glslang_actual_builder/build/linux/libSPVRemapper.glsltospirv.a similarity index 100% rename from build/linux/libSPVRemapper.glsltospirv.a rename to glslang_actual_builder/build/linux/libSPVRemapper.glsltospirv.a diff --git a/build/linux/libglslang.glsltospirv.a b/glslang_actual_builder/build/linux/libglslang.glsltospirv.a similarity index 100% rename from build/linux/libglslang.glsltospirv.a rename to glslang_actual_builder/build/linux/libglslang.glsltospirv.a diff --git a/build/osx/libHLSL.glsltospirv.a b/glslang_actual_builder/build/osx/libHLSL.glsltospirv.a similarity index 100% rename from build/osx/libHLSL.glsltospirv.a rename to glslang_actual_builder/build/osx/libHLSL.glsltospirv.a diff --git a/build/osx/libOGLCompiler.glsltospirv.a b/glslang_actual_builder/build/osx/libOGLCompiler.glsltospirv.a similarity index 100% rename from build/osx/libOGLCompiler.glsltospirv.a rename to glslang_actual_builder/build/osx/libOGLCompiler.glsltospirv.a diff --git a/build/osx/libOSDependent.glsltospirv.a b/glslang_actual_builder/build/osx/libOSDependent.glsltospirv.a similarity index 100% rename from build/osx/libOSDependent.glsltospirv.a rename to glslang_actual_builder/build/osx/libOSDependent.glsltospirv.a diff --git a/build/osx/libSPIRV-Tools-opt.glsltospirv.a b/glslang_actual_builder/build/osx/libSPIRV-Tools-opt.glsltospirv.a similarity index 100% rename from build/osx/libSPIRV-Tools-opt.glsltospirv.a rename to glslang_actual_builder/build/osx/libSPIRV-Tools-opt.glsltospirv.a diff --git a/build/osx/libSPIRV-Tools.glsltospirv.a b/glslang_actual_builder/build/osx/libSPIRV-Tools.glsltospirv.a similarity index 100% rename from build/osx/libSPIRV-Tools.glsltospirv.a rename to glslang_actual_builder/build/osx/libSPIRV-Tools.glsltospirv.a diff --git a/build/osx/libSPIRV.glsltospirv.a b/glslang_actual_builder/build/osx/libSPIRV.glsltospirv.a similarity index 100% rename from build/osx/libSPIRV.glsltospirv.a rename to glslang_actual_builder/build/osx/libSPIRV.glsltospirv.a diff --git a/build/osx/libSPVRemapper.glsltospirv.a b/glslang_actual_builder/build/osx/libSPVRemapper.glsltospirv.a similarity index 100% rename from build/osx/libSPVRemapper.glsltospirv.a rename to glslang_actual_builder/build/osx/libSPVRemapper.glsltospirv.a diff --git a/build/osx/libglslang.glsltospirv.a b/glslang_actual_builder/build/osx/libglslang.glsltospirv.a similarity index 100% rename from build/osx/libglslang.glsltospirv.a rename to glslang_actual_builder/build/osx/libglslang.glsltospirv.a diff --git a/build/windows/HLSL.glsltospirv.lib b/glslang_actual_builder/build/windows/HLSL.glsltospirv.lib similarity index 100% rename from build/windows/HLSL.glsltospirv.lib rename to glslang_actual_builder/build/windows/HLSL.glsltospirv.lib diff --git a/build/windows/OGLCompiler.glsltospirv.lib b/glslang_actual_builder/build/windows/OGLCompiler.glsltospirv.lib similarity index 100% rename from build/windows/OGLCompiler.glsltospirv.lib rename to glslang_actual_builder/build/windows/OGLCompiler.glsltospirv.lib diff --git a/build/windows/OSDependent.glsltospirv.lib b/glslang_actual_builder/build/windows/OSDependent.glsltospirv.lib similarity index 100% rename from build/windows/OSDependent.glsltospirv.lib rename to glslang_actual_builder/build/windows/OSDependent.glsltospirv.lib diff --git a/build/windows/SPIRV.glsltospirv.lib b/glslang_actual_builder/build/windows/SPIRV.glsltospirv.lib similarity index 100% rename from build/windows/SPIRV.glsltospirv.lib rename to glslang_actual_builder/build/windows/SPIRV.glsltospirv.lib diff --git a/build/windows/SPVRemapper.glsltospirv.lib b/glslang_actual_builder/build/windows/SPVRemapper.glsltospirv.lib similarity index 100% rename from build/windows/SPVRemapper.glsltospirv.lib rename to glslang_actual_builder/build/windows/SPVRemapper.glsltospirv.lib diff --git a/build/windows/glslang.glsltospirv.lib b/glslang_actual_builder/build/windows/glslang.glsltospirv.lib similarity index 100% rename from build/windows/glslang.glsltospirv.lib rename to glslang_actual_builder/build/windows/glslang.glsltospirv.lib diff --git a/src/glslang_c_interface.rs b/glslang_actual_builder/src/glslang_c_interface.rs similarity index 100% rename from src/glslang_c_interface.rs rename to glslang_actual_builder/src/glslang_c_interface.rs diff --git a/glslang_actual_builder/src/lib.rs b/glslang_actual_builder/src/lib.rs new file mode 100644 index 0000000..fc82d60 --- /dev/null +++ b/glslang_actual_builder/src/lib.rs @@ -0,0 +1,275 @@ +// Copyright (c) 2016 The vulkano developers +// Licensed under the Apache License, Version 2.0 +// or the MIT +// license , +// at your option. All files in the project carrying such +// notice may not be copied, modified, or distributed except +// according to those terms. + +use std::ffi::{CStr, CString}; +use std::os::raw::c_char; + +mod glslang_c_interface; + +use glslang_c_interface::*; + +pub type SpirvOutput = Vec; + +pub fn compile( + code: &str, + ty: ShaderType, + shader_defs: Option<&[String]>, +) -> Result { + compile_inner(Some((code, ty)), shader_defs) +} + +// Eventually the API will look like this, with an iterator for multiple shader stages. +// However for the moment GLSLang doesn't like that, so we only pass one shader at a time. +fn compile_inner<'a, I>(shaders: I, shader_defs: Option<&[String]>) -> Result +where + I: IntoIterator, +{ + let mut preamble = String::new(); + if let Some(defs) = shader_defs { + for def in defs { + preamble.push_str("#define "); + + let mut def = def.clone(); + if let Some(end) = def.find('\n') { + def.truncate(end); + } + + let def = def.replacen('=', " ", 1); + + preamble.push_str(&def); + preamble.push('\n'); + } + } + + let mut data = Vec::new(); + + unsafe { + glslang_initialize_process(); + + for (source, ty) in shaders.into_iter() { + let stage = match ty { + ShaderType::Vertex => glslang_stage_t_GLSLANG_STAGE_VERTEX, + ShaderType::Fragment => glslang_stage_t_GLSLANG_STAGE_FRAGMENT, + ShaderType::Geometry => glslang_stage_t_GLSLANG_STAGE_GEOMETRY, + ShaderType::TessellationControl => glslang_stage_t_GLSLANG_STAGE_TESSCONTROL, + ShaderType::TessellationEvaluation => glslang_stage_t_GLSLANG_STAGE_TESSEVALUATION, + ShaderType::Compute => glslang_stage_t_GLSLANG_STAGE_COMPUTE, + }; + + let mut source = String::from(source); + if shader_defs.is_some() { + if let Some(version) = source.find(r##"#version"##) { + if let Some(newline) = &source[version..].find('\n') { + source.insert_str(version + newline + 1, &preamble); + } + } + } + + let c_str = CString::new(source.as_str()).unwrap(); + let code: *const c_char = c_str.as_ptr(); + + let input = &glslang_input_t { + language: glslang_source_t_GLSLANG_SOURCE_GLSL, + stage, + client: glslang_client_t_GLSLANG_CLIENT_VULKAN, + client_version: glslang_target_client_version_t_GLSLANG_TARGET_VULKAN_1_0, + target_language: glslang_target_language_t_GLSLANG_TARGET_SPV, + target_language_version: glslang_target_language_version_t_GLSLANG_TARGET_SPV_1_0, + code, + default_version: 100, + default_profile: glslang_profile_t_GLSLANG_NO_PROFILE, + force_default_version_and_profile: 0, + forward_compatible: 0, + messages: glslang_messages_t_GLSLANG_MSG_DEFAULT_BIT + | glslang_messages_t_GLSLANG_MSG_SPV_RULES_BIT + | glslang_messages_t_GLSLANG_MSG_VULKAN_RULES_BIT, + resource: DEFAULT_RESOURCE_LIMITS, + }; + + let shader = glslang_shader_create(input); + + if glslang_shader_preprocess(shader, input) == 0 { + let c_info: &CStr = CStr::from_ptr(glslang_shader_get_info_log(shader)); + let c_debug: &CStr = CStr::from_ptr(glslang_shader_get_info_debug_log(shader)); + + let mut error = String::from("glslang_shader_preprocess:\n"); + error.push_str(&format!("Info log:\n{}\n", c_info.to_str().unwrap())); + error.push_str(&format!("Debug log:\n{}\n", c_debug.to_str().unwrap())); + + return Err(error); + } + if glslang_shader_parse(shader, input) == 0 { + let c_info: &CStr = CStr::from_ptr(glslang_shader_get_info_log(shader)); + let c_debug: &CStr = CStr::from_ptr(glslang_shader_get_info_debug_log(shader)); + + let mut error = String::from("glslang_shader_parse:\n"); + error.push_str(&format!("Info log:\n{}\n", c_info.to_str().unwrap())); + error.push_str(&format!("Debug log:\n{}\n", c_debug.to_str().unwrap())); + + return Err(error); + } + + let program = glslang_program_create(); + glslang_program_add_shader(program, shader); + + if glslang_program_link( + program, + glslang_messages_t_GLSLANG_MSG_SPV_RULES_BIT + | glslang_messages_t_GLSLANG_MSG_VULKAN_RULES_BIT, + ) == 0 + { + let c_info: &CStr = CStr::from_ptr(glslang_program_get_info_log(program)); + let c_debug: &CStr = CStr::from_ptr(glslang_program_get_info_debug_log(program)); + + let mut error = String::from("glslang_program_link:\n"); + error.push_str(&format!("Info log:\n{}\n", c_info.to_str().unwrap())); + error.push_str(&format!("Debug log:\n{}\n", c_debug.to_str().unwrap())); + + return Err(error); + } + + glslang_program_SPIRV_generate(program, input.stage); + + if glslang_program_SPIRV_get_messages(program) != std::ptr::null() { + let c_messages: &CStr = CStr::from_ptr(glslang_program_SPIRV_get_messages(program)); + + println!("{:?}", c_messages); + } + + let size = glslang_program_SPIRV_get_size(program) as usize; + let ptr = glslang_program_SPIRV_get_ptr(program) as *mut u32; + data = std::slice::from_raw_parts(ptr, size).to_vec(); + + glslang_program_delete(program); + glslang_shader_delete(shader); + } + + glslang_finalize_process(); + } + + return Ok(data); +} + +/// Type of shader. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum ShaderType { + Vertex, + Fragment, + Geometry, + TessellationControl, + TessellationEvaluation, + Compute, +} + +// values copied from glslang default resource limits +const DEFAULT_RESOURCE_LIMITS: &glslang_resource_t = &glslang_resource_t { + max_lights: 32, + max_clip_planes: 6, + max_texture_units: 32, + max_texture_coords: 32, + max_vertex_attribs: 64, + max_vertex_uniform_components: 4096, + max_varying_floats: 64, + max_vertex_texture_image_units: 32, + max_combined_texture_image_units: 80, + max_texture_image_units: 32, + max_fragment_uniform_components: 4096, + max_draw_buffers: 32, + max_vertex_uniform_vectors: 128, + max_varying_vectors: 8, + max_fragment_uniform_vectors: 16, + max_vertex_output_vectors: 16, + max_fragment_input_vectors: 15, + min_program_texel_offset: -8, + max_program_texel_offset: 7, + max_clip_distances: 8, + max_compute_work_group_count_x: 65535, + max_compute_work_group_count_y: 65535, + max_compute_work_group_count_z: 65535, + max_compute_work_group_size_x: 1024, + max_compute_work_group_size_y: 1024, + max_compute_work_group_size_z: 64, + max_compute_uniform_components: 1024, + max_compute_texture_image_units: 16, + max_compute_image_uniforms: 8, + max_compute_atomic_counters: 8, + max_compute_atomic_counter_buffers: 1, + max_varying_components: 60, + max_vertex_output_components: 64, + max_geometry_input_components: 64, + max_geometry_output_components: 128, + max_fragment_input_components: 128, + max_image_units: 8, + max_combined_image_units_and_fragment_outputs: 8, + max_combined_shader_output_resources: 8, + max_image_samples: 0, + max_vertex_image_uniforms: 0, + max_tess_control_image_uniforms: 0, + max_tess_evaluation_image_uniforms: 0, + max_geometry_image_uniforms: 0, + max_fragment_image_uniforms: 8, + max_combined_image_uniforms: 8, + max_geometry_texture_image_units: 16, + max_geometry_output_vertices: 256, + max_geometry_total_output_components: 1024, + max_geometry_uniform_components: 1024, + max_geometry_varying_components: 64, + max_tess_control_input_components: 128, + max_tess_control_output_components: 128, + max_tess_control_texture_image_units: 16, + max_tess_control_uniform_components: 1024, + max_tess_control_total_output_components: 4096, + max_tess_evaluation_input_components: 128, + max_tess_evaluation_output_components: 128, + max_tess_evaluation_texture_image_units: 16, + max_tess_evaluation_uniform_components: 1024, + max_tess_patch_components: 120, + max_patch_vertices: 32, + max_tess_gen_level: 64, + max_viewports: 16, + max_vertex_atomic_counters: 0, + max_tess_control_atomic_counters: 0, + max_tess_evaluation_atomic_counters: 0, + max_geometry_atomic_counters: 0, + max_fragment_atomic_counters: 8, + max_combined_atomic_counters: 8, + max_atomic_counter_bindings: 1, + max_vertex_atomic_counter_buffers: 0, + max_tess_control_atomic_counter_buffers: 0, + max_tess_evaluation_atomic_counter_buffers: 0, + max_geometry_atomic_counter_buffers: 0, + max_fragment_atomic_counter_buffers: 1, + max_combined_atomic_counter_buffers: 1, + max_atomic_counter_buffer_size: 16384, + max_transform_feedback_buffers: 4, + max_transform_feedback_interleaved_components: 64, + max_cull_distances: 8, + max_combined_clip_and_cull_distances: 8, + max_samples: 4, + max_mesh_output_vertices_nv: 256, + max_mesh_output_primitives_nv: 512, + max_mesh_work_group_size_x_nv: 32, + max_mesh_work_group_size_y_nv: 1, + max_mesh_work_group_size_z_nv: 1, + max_task_work_group_size_x_nv: 32, + max_task_work_group_size_y_nv: 1, + max_task_work_group_size_z_nv: 1, + max_mesh_view_count_nv: 4, + limits: glslang_limits_s { + non_inductive_for_loops: true, + while_loops: true, + do_while_loops: true, + general_uniform_indexing: true, + general_attribute_matrix_vector_indexing: true, + general_varying_indexing: true, + general_sampler_indexing: true, + general_variable_indexing: true, + general_constant_matrix_vector_indexing: true, + }, +}; diff --git a/src/lib.rs b/src/lib.rs index fc82d60..5c5f405 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,275 +1,3 @@ -// Copyright (c) 2016 The vulkano developers -// Licensed under the Apache License, Version 2.0 -// or the MIT -// license , -// at your option. All files in the project carrying such -// notice may not be copied, modified, or distributed except -// according to those terms. +extern crate glslang_actual_builder; -use std::ffi::{CStr, CString}; -use std::os::raw::c_char; - -mod glslang_c_interface; - -use glslang_c_interface::*; - -pub type SpirvOutput = Vec; - -pub fn compile( - code: &str, - ty: ShaderType, - shader_defs: Option<&[String]>, -) -> Result { - compile_inner(Some((code, ty)), shader_defs) -} - -// Eventually the API will look like this, with an iterator for multiple shader stages. -// However for the moment GLSLang doesn't like that, so we only pass one shader at a time. -fn compile_inner<'a, I>(shaders: I, shader_defs: Option<&[String]>) -> Result -where - I: IntoIterator, -{ - let mut preamble = String::new(); - if let Some(defs) = shader_defs { - for def in defs { - preamble.push_str("#define "); - - let mut def = def.clone(); - if let Some(end) = def.find('\n') { - def.truncate(end); - } - - let def = def.replacen('=', " ", 1); - - preamble.push_str(&def); - preamble.push('\n'); - } - } - - let mut data = Vec::new(); - - unsafe { - glslang_initialize_process(); - - for (source, ty) in shaders.into_iter() { - let stage = match ty { - ShaderType::Vertex => glslang_stage_t_GLSLANG_STAGE_VERTEX, - ShaderType::Fragment => glslang_stage_t_GLSLANG_STAGE_FRAGMENT, - ShaderType::Geometry => glslang_stage_t_GLSLANG_STAGE_GEOMETRY, - ShaderType::TessellationControl => glslang_stage_t_GLSLANG_STAGE_TESSCONTROL, - ShaderType::TessellationEvaluation => glslang_stage_t_GLSLANG_STAGE_TESSEVALUATION, - ShaderType::Compute => glslang_stage_t_GLSLANG_STAGE_COMPUTE, - }; - - let mut source = String::from(source); - if shader_defs.is_some() { - if let Some(version) = source.find(r##"#version"##) { - if let Some(newline) = &source[version..].find('\n') { - source.insert_str(version + newline + 1, &preamble); - } - } - } - - let c_str = CString::new(source.as_str()).unwrap(); - let code: *const c_char = c_str.as_ptr(); - - let input = &glslang_input_t { - language: glslang_source_t_GLSLANG_SOURCE_GLSL, - stage, - client: glslang_client_t_GLSLANG_CLIENT_VULKAN, - client_version: glslang_target_client_version_t_GLSLANG_TARGET_VULKAN_1_0, - target_language: glslang_target_language_t_GLSLANG_TARGET_SPV, - target_language_version: glslang_target_language_version_t_GLSLANG_TARGET_SPV_1_0, - code, - default_version: 100, - default_profile: glslang_profile_t_GLSLANG_NO_PROFILE, - force_default_version_and_profile: 0, - forward_compatible: 0, - messages: glslang_messages_t_GLSLANG_MSG_DEFAULT_BIT - | glslang_messages_t_GLSLANG_MSG_SPV_RULES_BIT - | glslang_messages_t_GLSLANG_MSG_VULKAN_RULES_BIT, - resource: DEFAULT_RESOURCE_LIMITS, - }; - - let shader = glslang_shader_create(input); - - if glslang_shader_preprocess(shader, input) == 0 { - let c_info: &CStr = CStr::from_ptr(glslang_shader_get_info_log(shader)); - let c_debug: &CStr = CStr::from_ptr(glslang_shader_get_info_debug_log(shader)); - - let mut error = String::from("glslang_shader_preprocess:\n"); - error.push_str(&format!("Info log:\n{}\n", c_info.to_str().unwrap())); - error.push_str(&format!("Debug log:\n{}\n", c_debug.to_str().unwrap())); - - return Err(error); - } - if glslang_shader_parse(shader, input) == 0 { - let c_info: &CStr = CStr::from_ptr(glslang_shader_get_info_log(shader)); - let c_debug: &CStr = CStr::from_ptr(glslang_shader_get_info_debug_log(shader)); - - let mut error = String::from("glslang_shader_parse:\n"); - error.push_str(&format!("Info log:\n{}\n", c_info.to_str().unwrap())); - error.push_str(&format!("Debug log:\n{}\n", c_debug.to_str().unwrap())); - - return Err(error); - } - - let program = glslang_program_create(); - glslang_program_add_shader(program, shader); - - if glslang_program_link( - program, - glslang_messages_t_GLSLANG_MSG_SPV_RULES_BIT - | glslang_messages_t_GLSLANG_MSG_VULKAN_RULES_BIT, - ) == 0 - { - let c_info: &CStr = CStr::from_ptr(glslang_program_get_info_log(program)); - let c_debug: &CStr = CStr::from_ptr(glslang_program_get_info_debug_log(program)); - - let mut error = String::from("glslang_program_link:\n"); - error.push_str(&format!("Info log:\n{}\n", c_info.to_str().unwrap())); - error.push_str(&format!("Debug log:\n{}\n", c_debug.to_str().unwrap())); - - return Err(error); - } - - glslang_program_SPIRV_generate(program, input.stage); - - if glslang_program_SPIRV_get_messages(program) != std::ptr::null() { - let c_messages: &CStr = CStr::from_ptr(glslang_program_SPIRV_get_messages(program)); - - println!("{:?}", c_messages); - } - - let size = glslang_program_SPIRV_get_size(program) as usize; - let ptr = glslang_program_SPIRV_get_ptr(program) as *mut u32; - data = std::slice::from_raw_parts(ptr, size).to_vec(); - - glslang_program_delete(program); - glslang_shader_delete(shader); - } - - glslang_finalize_process(); - } - - return Ok(data); -} - -/// Type of shader. -#[derive(Debug, Clone, PartialEq, Eq)] -pub enum ShaderType { - Vertex, - Fragment, - Geometry, - TessellationControl, - TessellationEvaluation, - Compute, -} - -// values copied from glslang default resource limits -const DEFAULT_RESOURCE_LIMITS: &glslang_resource_t = &glslang_resource_t { - max_lights: 32, - max_clip_planes: 6, - max_texture_units: 32, - max_texture_coords: 32, - max_vertex_attribs: 64, - max_vertex_uniform_components: 4096, - max_varying_floats: 64, - max_vertex_texture_image_units: 32, - max_combined_texture_image_units: 80, - max_texture_image_units: 32, - max_fragment_uniform_components: 4096, - max_draw_buffers: 32, - max_vertex_uniform_vectors: 128, - max_varying_vectors: 8, - max_fragment_uniform_vectors: 16, - max_vertex_output_vectors: 16, - max_fragment_input_vectors: 15, - min_program_texel_offset: -8, - max_program_texel_offset: 7, - max_clip_distances: 8, - max_compute_work_group_count_x: 65535, - max_compute_work_group_count_y: 65535, - max_compute_work_group_count_z: 65535, - max_compute_work_group_size_x: 1024, - max_compute_work_group_size_y: 1024, - max_compute_work_group_size_z: 64, - max_compute_uniform_components: 1024, - max_compute_texture_image_units: 16, - max_compute_image_uniforms: 8, - max_compute_atomic_counters: 8, - max_compute_atomic_counter_buffers: 1, - max_varying_components: 60, - max_vertex_output_components: 64, - max_geometry_input_components: 64, - max_geometry_output_components: 128, - max_fragment_input_components: 128, - max_image_units: 8, - max_combined_image_units_and_fragment_outputs: 8, - max_combined_shader_output_resources: 8, - max_image_samples: 0, - max_vertex_image_uniforms: 0, - max_tess_control_image_uniforms: 0, - max_tess_evaluation_image_uniforms: 0, - max_geometry_image_uniforms: 0, - max_fragment_image_uniforms: 8, - max_combined_image_uniforms: 8, - max_geometry_texture_image_units: 16, - max_geometry_output_vertices: 256, - max_geometry_total_output_components: 1024, - max_geometry_uniform_components: 1024, - max_geometry_varying_components: 64, - max_tess_control_input_components: 128, - max_tess_control_output_components: 128, - max_tess_control_texture_image_units: 16, - max_tess_control_uniform_components: 1024, - max_tess_control_total_output_components: 4096, - max_tess_evaluation_input_components: 128, - max_tess_evaluation_output_components: 128, - max_tess_evaluation_texture_image_units: 16, - max_tess_evaluation_uniform_components: 1024, - max_tess_patch_components: 120, - max_patch_vertices: 32, - max_tess_gen_level: 64, - max_viewports: 16, - max_vertex_atomic_counters: 0, - max_tess_control_atomic_counters: 0, - max_tess_evaluation_atomic_counters: 0, - max_geometry_atomic_counters: 0, - max_fragment_atomic_counters: 8, - max_combined_atomic_counters: 8, - max_atomic_counter_bindings: 1, - max_vertex_atomic_counter_buffers: 0, - max_tess_control_atomic_counter_buffers: 0, - max_tess_evaluation_atomic_counter_buffers: 0, - max_geometry_atomic_counter_buffers: 0, - max_fragment_atomic_counter_buffers: 1, - max_combined_atomic_counter_buffers: 1, - max_atomic_counter_buffer_size: 16384, - max_transform_feedback_buffers: 4, - max_transform_feedback_interleaved_components: 64, - max_cull_distances: 8, - max_combined_clip_and_cull_distances: 8, - max_samples: 4, - max_mesh_output_vertices_nv: 256, - max_mesh_output_primitives_nv: 512, - max_mesh_work_group_size_x_nv: 32, - max_mesh_work_group_size_y_nv: 1, - max_mesh_work_group_size_z_nv: 1, - max_task_work_group_size_x_nv: 32, - max_task_work_group_size_y_nv: 1, - max_task_work_group_size_z_nv: 1, - max_mesh_view_count_nv: 4, - limits: glslang_limits_s { - non_inductive_for_loops: true, - while_loops: true, - do_while_loops: true, - general_uniform_indexing: true, - general_attribute_matrix_vector_indexing: true, - general_varying_indexing: true, - general_sampler_indexing: true, - general_variable_indexing: true, - general_constant_matrix_vector_indexing: true, - }, -}; +pub use glslang_actual_builder::*;