Use shaderc for aarch64-apple-darwin. (#1027)

This commit is contained in:
Corey Farwell 2020-12-09 16:02:43 -05:00 committed by GitHub
parent f53ee54eb6
commit 66f972c850
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 9 deletions

View File

@ -44,10 +44,10 @@ parking_lot = "0.11.0"
[target.'cfg(not(target_arch = "wasm32"))'.dependencies] [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
spirv-reflect = "0.2.3" spirv-reflect = "0.2.3"
[target.'cfg(all(not(target_os = "ios"), not(target_arch = "wasm32")))'.dependencies] [target.'cfg(all(not(target_os = "ios"), not(target_arch = "wasm32"), not(all(target_arch = "aarch64", target_os = "macos"))))'.dependencies]
bevy-glsl-to-spirv = "0.2.0" bevy-glsl-to-spirv = "0.2.0"
[target.'cfg(target_os = "ios")'.dependencies] [target.'cfg(any(target_os = "ios", all(target_arch = "aarch64", target_os = "macos")))'.dependencies]
shaderc = "0.7.0" shaderc = "0.7.0"
[features] [features]

View File

@ -26,13 +26,26 @@ pub enum ShaderError {
/// Shader compilation error. /// Shader compilation error.
#[error("Shader compilation error: {0}")] #[error("Shader compilation error: {0}")]
Compilation(String), Compilation(String),
#[cfg(target_os = "ios")]
#[cfg(any(target_os = "ios", all(target_arch = "aarch64", target_os = "macos")))]
/// shaderc error. /// shaderc error.
#[error("shaderc error")] #[error("shaderc error")]
ShaderC(#[from] shaderc::Error), ShaderC(#[from] shaderc::Error),
#[cfg(any(target_os = "ios", all(target_arch = "aarch64", target_os = "macos")))]
#[error("Error initializing shaderc Compiler")]
ErrorInitializingShadercCompiler,
#[cfg(any(target_os = "ios", all(target_arch = "aarch64", target_os = "macos")))]
#[error("Error initializing shaderc CompileOptions")]
ErrorInitializingShadercCompileOptions,
} }
#[cfg(all(not(target_os = "ios"), not(target_arch = "wasm32")))] #[cfg(all(
not(target_os = "ios"),
not(target_arch = "wasm32"),
not(all(target_arch = "aarch64", target_os = "macos"))
))]
impl Into<bevy_glsl_to_spirv::ShaderType> for ShaderStage { impl Into<bevy_glsl_to_spirv::ShaderType> for ShaderStage {
fn into(self) -> bevy_glsl_to_spirv::ShaderType { fn into(self) -> bevy_glsl_to_spirv::ShaderType {
match self { match self {
@ -43,7 +56,11 @@ impl Into<bevy_glsl_to_spirv::ShaderType> for ShaderStage {
} }
} }
#[cfg(all(not(target_os = "ios"), not(target_arch = "wasm32")))] #[cfg(all(
not(target_os = "ios"),
not(target_arch = "wasm32"),
not(all(target_arch = "aarch64", target_os = "macos"))
))]
pub fn glsl_to_spirv( pub fn glsl_to_spirv(
glsl_source: &str, glsl_source: &str,
stage: ShaderStage, stage: ShaderStage,
@ -53,7 +70,7 @@ pub fn glsl_to_spirv(
.map_err(ShaderError::Compilation) .map_err(ShaderError::Compilation)
} }
#[cfg(target_os = "ios")] #[cfg(any(target_os = "ios", all(target_arch = "aarch64", target_os = "macos")))]
impl Into<shaderc::ShaderKind> for ShaderStage { impl Into<shaderc::ShaderKind> for ShaderStage {
fn into(self) -> shaderc::ShaderKind { fn into(self) -> shaderc::ShaderKind {
match self { match self {
@ -64,14 +81,16 @@ impl Into<shaderc::ShaderKind> for ShaderStage {
} }
} }
#[cfg(target_os = "ios")] #[cfg(any(target_os = "ios", all(target_arch = "aarch64", target_os = "macos")))]
pub fn glsl_to_spirv( pub fn glsl_to_spirv(
glsl_source: &str, glsl_source: &str,
stage: ShaderStage, stage: ShaderStage,
shader_defs: Option<&[String]>, shader_defs: Option<&[String]>,
) -> Result<Vec<u32>, ShaderError> { ) -> Result<Vec<u32>, ShaderError> {
let mut compiler = shaderc::Compiler::new()?; let mut compiler =
let mut options = shaderc::CompileOptions::new()?; shaderc::Compiler::new().ok_or(ShaderError::ErrorInitializingShadercCompiler)?;
let mut options = shaderc::CompileOptions::new()
.ok_or(ShaderError::ErrorInitializingShadercCompileOptions)?;
if let Some(shader_defs) = shader_defs { if let Some(shader_defs) = shader_defs {
for def in shader_defs.iter() { for def in shader_defs.iter() {
options.add_macro_definition(def, None); options.add_macro_definition(def, None);