#spir-v #shader #glsl #hlsl #compiler

sys shaderc-sys

Shaderc 系统库 FFI、构建和链接

15 个版本

使用旧的 Rust 2015

0.8.3 2023年11月30日
0.8.2 2023年1月20日
0.8.1 2022年12月10日
0.8.0 2022年4月14日
0.4.0 2019年3月30日

924图形 API

Download history 4633/week @ 2024-04-08 5259/week @ 2024-04-15 4977/week @ 2024-04-22 5456/week @ 2024-04-29 4779/week @ 2024-05-06 4412/week @ 2024-05-13 5161/week @ 2024-05-20 5371/week @ 2024-05-27 6556/week @ 2024-06-03 5481/week @ 2024-06-10 5085/week @ 2024-06-17 5135/week @ 2024-06-24 2496/week @ 2024-07-01 4390/week @ 2024-07-08 5368/week @ 2024-07-15 4459/week @ 2024-07-22

17,296 每月下载量
shaderc 中使用

Apache-2.0

28MB
619K SLoC

C++ 494K SLoC // 0.1% comments GLSL 53K SLoC // 0.0% comments Go 30K SLoC // 0.1% comments Python 12K SLoC // 0.3% comments JavaScript 6K SLoC // 0.0% comments C# 4.5K SLoC // 0.0% comments Lua 4.5K SLoC // 0.0% comments M4 4K SLoC // 0.0% comments Happy 4K SLoC D 2K SLoC // 0.0% comments Bazel 1.5K SLoC // 0.0% comments Shell 1K SLoC // 0.6% comments Rust 538 SLoC // 0.1% comments AsciiDoc 533 SLoC Forge Config 288 SLoC // 0.8% comments Bitbake 245 SLoC Batch 171 SLoC // 0.6% comments Ruby 88 SLoC // 0.1% comments HLSL 45 SLoC // 0.1% comments TypeScript 39 SLoC // 0.2% comments C 30 SLoC // 0.3% comments Emacs Lisp 9 SLoC // 0.7% comments

shaderc-rs

Version Documentation

Rust 对 shaderc 库的绑定。

免责声明

这不是一个官方的 Google 产品(实验性的或其他),它只是 Google 拥有的代码。

用法

包含的 shaderc-sys 包使用 build.rs 来发现或构建 shaderc 库的副本。请参阅设置部分。

首先添加到您的 Cargo.toml

[dependencies]
shaderc = "0.8"

然后添加到您的 crate 根目录

extern crate shaderc;

文档

shaderc 提供了将 GLSL/HLSL 源代码编译成 SPIR-V 二进制模块或汇编代码的 Compiler 接口。它还可以将 SPIR-V 汇编成二进制模块。默认的编译行为可以使用 CompileOptions 进行调整。成功的结果保存在 CompilationArtifact 中。

请参阅 Documentation 以获取详细文档。

示例

将着色器编译成 SPIR-V 二进制模块和汇编文本

use shaderc;

let source = "#version 310 es\n void EP() {}";

let mut compiler = shaderc::Compiler::new().unwrap();
let mut options = shaderc::CompileOptions::new().unwrap();
options.add_macro_definition("EP", Some("main"));
let binary_result = compiler.compile_into_spirv(
    source, shaderc::ShaderKind::Vertex,
    "shader.glsl", "main", Some(&options)).unwrap();

assert_eq!(Some(&0x07230203), binary_result.as_binary().first());

let text_result = compiler.compile_into_spirv_assembly(
    source, shaderc::ShaderKind::Vertex,
    "shader.glsl", "main", Some(&options)).unwrap();

assert!(text_result.as_text().starts_with("; SPIR-V\n"));

设置

shaderc-rs 需要使用 C++ shaderc 库。它包含在 Vulkan SDK 中。您可能可以直接在某些 Linux 发行版的包管理器中安装它。C++ shaderc 项目提供了 工件下载。您也可以 从源代码构建它

构建脚本尝试获取本地shaderc的优先顺序可以通过几个选项控制,这些选项在构建shaderc-rs时传递给shaderc-sys。

  1. 如果指定了选项--features build-from-source,则从源代码构建。
  2. 如果环境变量SHADERC_LIB_DIR设置为/path/to/shaderc/libs/,则将在该路径下搜索本地动态或静态shaderc库。
  3. 如果设置了环境变量VULKAN_SDK,则将在$VULKAN_SDK/lib下搜索本地动态或静态shaderc库。
  4. 在Linux上,如果未设置SHADERC_LIB_DIR,则将搜索系统库路径(如/usr/lib/)以查找本地动态或shaderc库。
  5. 如果通过上述步骤未找到本地shaderc库,则从源代码构建。

对于每个库目录,构建脚本将首先尝试查找并链接到动态本地shaderc库shaderc_shared,然后是静态本地shaderc库shaderc_combined。要优先搜索静态库然后是动态库,可以使用选项--features prefer-static-linking

从源代码构建

shaderc-sys的build.rs将自动检出并编译本地C++ shaderc的副本,并将其链接到生成的工件,这需要gitcmakepython存在于PATH中。

  • CMake
  • Git
  • Python(仅支持Python 3,在Windows上,可执行文件必须命名为python.exe
  • 一个支持C++11的编译器

此外,在windows-msvc上需要Ninja,但在所有其他平台上是可选的。

  • 这些要求可以通过您喜欢的包管理器或通过项目网站上的安装程序进行安装。以下是一些示例设置方法。

这些要求可以通过您喜欢的包管理器或通过项目网站上的安装程序进行安装。以下是一些示例设置方法。

windows-msvc示例设置

  1. rustupdefault stable-x86_64-pc-windows-msvc
  2. 安装Visual Studio 2017构建工具。如果您已经使用此工具链,则它可能已经安装。
  3. 安装上面列出的必要工具,并将它们的路径添加到环境变量PATH中。

windows-gnu示例设置

windows-gnu工具链不受支持,但您可以从windows-msvc交叉编译到windows-gnu。

步骤1和2是为了解决https://github.com/rust-lang/rust/issues/49078问题,通过使用rust使用的相同mingw来解决问题。

  1. 下载并解压https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/x86_64-6.3.0-release-posix-seh-rt_v5-rev2.7z
  2. 将mingw64\bin的绝对路径添加到环境变量PATH中。
  3. 运行命令:rustup default stable-x86_64-pc-windows-msvc
  4. 运行命令:rustup target install x86_64-pc-windows-gnu
  5. 安装Visual Studio 2017构建工具。如果您已经使用此工具链,则它可能已经安装。
  6. 安装msys2,按照所有说明进行操作。
  7. 然后在msys2终端运行:pacman --noconfirm -Syu mingw-w64-x86_64-cmake mingw-w64-x86_64-make mingw-w64-x86_64-python3 mingw-w64-x86_64-ninja
  8. 将msys2 mingw64二进制路径添加到环境变量PATH中。
  9. 任何构建项目的货物命令都需要包含 --target x86_64-pc-windows-gnu,例如运行: cargo run --target x86_64-pc-windows-gnu

Linux 示例设置

使用您的包管理器安装所需的开发工具

例如在 ubuntu 上

sudo apt-get install build-essential cmake git ninja python3

在 Arch linux 上,您可以直接安装 shaderc 包

macOS 示例设置

假设使用 Homebrew

brew install git cmake ninja [email protected]

贡献

本项目采用 Apache 2 许可证授权。请在贡献前查阅 贡献指南

作者

本项目由 Zhang Lei (@antiagainst) 初始化和主要开发。

依赖