From d1910063d8a3298138404a181967578c8bf938bc Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Sat, 4 Oct 2025 22:25:35 +0200 Subject: [PATCH] compile-shaders: vendor shaderc-sys --- compile-shaders/Cargo.lock | 29 ---- compile-shaders/Cargo.toml | 5 +- compile-shaders/shaderc-sys/Cargo.toml | 11 ++ compile-shaders/shaderc-sys/build.rs | 5 + compile-shaders/shaderc-sys/src/lib.rs | 198 +++++++++++++++++++++++++ 5 files changed, 218 insertions(+), 30 deletions(-) create mode 100644 compile-shaders/shaderc-sys/Cargo.toml create mode 100644 compile-shaders/shaderc-sys/build.rs create mode 100644 compile-shaders/shaderc-sys/src/lib.rs diff --git a/compile-shaders/Cargo.lock b/compile-shaders/Cargo.lock index f1564570..66784e8b 100644 --- a/compile-shaders/Cargo.lock +++ b/compile-shaders/Cargo.lock @@ -49,15 +49,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" -[[package]] -name = "cmake" -version = "0.1.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" -dependencies = [ - "cc", -] - [[package]] name = "compile-shaders-build-rs" version = "0.1.0" @@ -102,27 +93,12 @@ version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" -[[package]] -name = "link-cplusplus" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f78c730aaa7d0b9336a299029ea49f9ee53b0ed06e9202e8cb7db9bae7b8c82" -dependencies = [ - "cc", -] - [[package]] name = "pkg-config" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" -[[package]] -name = "roxmltree" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" - [[package]] name = "same-file" version = "1.0.6" @@ -145,14 +121,9 @@ dependencies = [ [[package]] name = "shaderc-sys" version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdceb85b2c6d2c27b95ffe2d341063dfded0aca8046f7f60c544bbeaeaf8bcae" dependencies = [ - "cmake", "libc", - "link-cplusplus", "pkg-config", - "roxmltree", ] [[package]] diff --git a/compile-shaders/Cargo.toml b/compile-shaders/Cargo.toml index f639be3e..c2ca5f4f 100644 --- a/compile-shaders/Cargo.toml +++ b/compile-shaders/Cargo.toml @@ -1,3 +1,6 @@ [workspace] resolver = "3" -members = ["build-rs", "compile", "core"] +members = ["build-rs", "compile", "core", "shaderc-sys"] + +[patch."crates-io"] +shaderc-sys.path = "shaderc-sys" diff --git a/compile-shaders/shaderc-sys/Cargo.toml b/compile-shaders/shaderc-sys/Cargo.toml new file mode 100644 index 00000000..dda295b7 --- /dev/null +++ b/compile-shaders/shaderc-sys/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "shaderc-sys" +version = "0.10.1" +edition = "2024" +authors = ["Lei Zhang ", "Mr. Knapp "] + +[dependencies] +libc = "0.2" + +[build-dependencies] +pkg-config = "0.3" diff --git a/compile-shaders/shaderc-sys/build.rs b/compile-shaders/shaderc-sys/build.rs new file mode 100644 index 00000000..d479f75b --- /dev/null +++ b/compile-shaders/shaderc-sys/build.rs @@ -0,0 +1,5 @@ +use pkg_config::Config; + +fn main() { + Config::new().probe("shaderc").unwrap(); +} diff --git a/compile-shaders/shaderc-sys/src/lib.rs b/compile-shaders/shaderc-sys/src/lib.rs new file mode 100644 index 00000000..6d278ebf --- /dev/null +++ b/compile-shaders/shaderc-sys/src/lib.rs @@ -0,0 +1,198 @@ +// Copyright 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#![allow(non_camel_case_types)] + +extern crate libc; +use libc::{c_char, c_int, c_void, size_t}; + +pub enum ShadercCompiler {} +pub enum ShadercCompileOptions {} +pub enum ShadercCompilationResult {} + +#[repr(C)] +pub struct shaderc_include_result { + pub source_name: *const c_char, + pub source_name_length: size_t, + pub content: *const c_char, + pub content_length: size_t, + pub user_data: *mut c_void, +} + +type shaderc_include_resolve_fn = extern "C" fn( + user_data: *mut c_void, + requested_source: *const c_char, + type_: c_int, + requesting_source: *const c_char, + include_depth: size_t, +) -> *mut shaderc_include_result; + +type shaderc_include_result_release_fn = + extern "C" fn(user_data: *mut c_void, include_result: *mut shaderc_include_result); + +unsafe extern "C" { + pub fn shaderc_compiler_initialize() -> *mut ShadercCompiler; + pub fn shaderc_compiler_release(compiler: *mut ShadercCompiler); + + pub fn shaderc_compile_into_spv( + compiler: *const ShadercCompiler, + source_text: *const c_char, + source_size: size_t, + shader_kind: i32, + input_file_name: *const c_char, + entry_point_name: *const c_char, + additional_options: *const ShadercCompileOptions, + ) -> *mut ShadercCompilationResult; + pub fn shaderc_compile_into_spv_assembly( + compiler: *const ShadercCompiler, + source_text: *const c_char, + source_size: size_t, + shader_kind: i32, + input_file_name: *const c_char, + entry_point_name: *const c_char, + additional_options: *const ShadercCompileOptions, + ) -> *mut ShadercCompilationResult; + pub fn shaderc_compile_into_preprocessed_text( + compiler: *const ShadercCompiler, + source_text: *const c_char, + source_size: size_t, + shader_kind: i32, + input_file_name: *const c_char, + entry_point_name: *const c_char, + additional_options: *const ShadercCompileOptions, + ) -> *mut ShadercCompilationResult; + pub fn shaderc_assemble_into_spv( + compiler: *const ShadercCompiler, + source_assembly: *const c_char, + source_size: size_t, + additional_options: *const ShadercCompileOptions, + ) -> *mut ShadercCompilationResult; + + pub fn shaderc_compile_options_initialize() -> *mut ShadercCompileOptions; + pub fn shaderc_compile_options_clone( + options: *const ShadercCompileOptions, + ) -> *mut ShadercCompileOptions; + pub fn shaderc_compile_options_release(options: *mut ShadercCompileOptions); + + pub fn shaderc_compile_options_add_macro_definition( + options: *mut ShadercCompileOptions, + name: *const c_char, + name_length: size_t, + value: *const c_char, + vaule_length: size_t, + ); + pub fn shaderc_compile_options_set_source_language( + options: *mut ShadercCompileOptions, + language: i32, + ); + pub fn shaderc_compile_options_set_generate_debug_info(options: *mut ShadercCompileOptions); + pub fn shaderc_compile_options_set_optimization_level( + options: *mut ShadercCompileOptions, + level: i32, + ); + pub fn shaderc_compile_options_set_forced_version_profile( + options: *mut ShadercCompileOptions, + version: c_int, + profile: i32, + ); + pub fn shaderc_compile_options_set_include_callbacks( + options: *mut ShadercCompileOptions, + resolver: shaderc_include_resolve_fn, + result_releaser: shaderc_include_result_release_fn, + user_data: *mut c_void, + ); + pub fn shaderc_compile_options_set_suppress_warnings(options: *mut ShadercCompileOptions); + pub fn shaderc_compile_options_set_warnings_as_errors(options: *mut ShadercCompileOptions); + pub fn shaderc_compile_options_set_target_env( + options: *mut ShadercCompileOptions, + env: i32, + version: u32, + ); + pub fn shaderc_compile_options_set_target_spirv( + options: *mut ShadercCompileOptions, + version: i32, + ); + pub fn shaderc_compile_options_set_limit( + options: *mut ShadercCompileOptions, + limit: i32, + value: c_int, + ); + pub fn shaderc_compile_options_set_auto_bind_uniforms( + options: *mut ShadercCompileOptions, + auto_bind: bool, + ); + pub fn shaderc_compile_options_set_auto_combined_image_sampler( + options: *mut ShadercCompileOptions, + auto_combine: bool, + ); + pub fn shaderc_compile_options_set_hlsl_io_mapping( + options: *mut ShadercCompileOptions, + hlsl_iomap: bool, + ); + pub fn shaderc_compile_options_set_hlsl_offsets( + options: *mut ShadercCompileOptions, + hlsl_offsets: bool, + ); + pub fn shaderc_compile_options_set_binding_base( + options: *mut ShadercCompileOptions, + resource_kind: c_int, + base: u32, + ); + pub fn shaderc_compile_options_set_binding_base_for_stage( + options: *mut ShadercCompileOptions, + shader_kind: c_int, + resource_kind: c_int, + base: u32, + ); + pub fn shaderc_compile_options_set_hlsl_register_set_and_binding( + options: *mut ShadercCompileOptions, + register: *const c_char, + set: *const c_char, + binding: *const c_char, + ); + pub fn shaderc_compile_options_set_auto_map_locations( + options: *mut ShadercCompileOptions, + auto_map: bool, + ); + pub fn shaderc_compile_options_set_hlsl_register_set_and_binding_for_stage( + options: *mut ShadercCompileOptions, + shader_kind: c_int, + register: *const c_char, + set: *const c_char, + binding: *const c_char, + ); + pub fn shaderc_compile_options_set_hlsl_functionality1( + options: *mut ShadercCompileOptions, + enable: bool, + ); + pub fn shaderc_compile_options_set_invert_y(options: *mut ShadercCompileOptions, enable: bool); + pub fn shaderc_compile_options_set_nan_clamp(options: *mut ShadercCompileOptions, enable: bool); + + pub fn shaderc_result_release(result: *mut ShadercCompilationResult); + pub fn shaderc_result_get_compilation_status(result: *const ShadercCompilationResult) -> i32; + pub fn shaderc_result_get_num_errors(result: *const ShadercCompilationResult) -> size_t; + pub fn shaderc_result_get_num_warnings(result: *const ShadercCompilationResult) -> size_t; + pub fn shaderc_result_get_error_message( + result: *const ShadercCompilationResult, + ) -> *const c_char; + pub fn shaderc_result_get_length(result: *const ShadercCompilationResult) -> size_t; + pub fn shaderc_result_get_bytes(result: *const ShadercCompilationResult) -> *const c_char; + + pub fn shaderc_get_spv_version(version: *mut c_int, revision: *mut c_int); + pub fn shaderc_parse_version_profile( + str: *const c_char, + version: *mut c_int, + profile: *mut i32, + ) -> bool; +}