Skip to content

Commit

Permalink
Alter compile_{f,d}xc to take Option<&CStr>
Browse files Browse the repository at this point in the history
  • Loading branch information
workingjubilee committed Jun 14, 2024
1 parent a6d3d13 commit 525364d
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 14 deletions.
7 changes: 1 addition & 6 deletions wgpu-hal/src/dx12/device.rs
Original file line number Diff line number Diff line change
Expand Up @@ -259,12 +259,7 @@ impl super::Device {
.as_ref()
.map_err(|e| crate::PipelineError::Linkage(stage_bit, format!("{e}")))?;

let source_name = stage
.module
.raw_name
.as_ref()
.and_then(|cstr| cstr.to_str().ok())
.unwrap_or_default();
let source_name = stage.module.raw_name.as_deref();

// Compile with DXC if available, otherwise fall back to FXC
let (result, log_level) = if let Some(ref dxc_container) = self.dxc_container {
Expand Down
17 changes: 9 additions & 8 deletions wgpu-hal/src/dx12/shader_compilation.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use std::ptr;
use std::ffi::CStr;

pub(super) use dxc::{compile_dxc, get_dxc_container, DxcContainer};
use winapi::um::d3dcompiler;
Expand All @@ -14,7 +15,7 @@ use crate::auxil::dxgi::result::HResult;
pub(super) fn compile_fxc(
device: &super::Device,
source: &str,
source_name: &str,
source_name: Option<&CStr>,
raw_ep: &std::ffi::CString,
stage_bit: wgt::ShaderStages,
full_stage: String,
Expand All @@ -34,11 +35,7 @@ pub(super) fn compile_fxc(
}

// If no name has been set, D3DCompile wants the null pointer.
let source_name = if source_name.is_empty() {
ptr::null()
} else {
source_name.as_ptr()
};
let source_name = source_name.map(|cstr| cstr.as_ptr()).unwrap_or(ptr::null());

let mut error = d3d12::Blob::null();
let hr = unsafe {
Expand Down Expand Up @@ -86,6 +83,7 @@ pub(super) fn compile_fxc(
// The Dxc implementation is behind a feature flag so that users who don't want to use dxc can disable the feature.
#[cfg(feature = "dxc_shader_compiler")]
mod dxc {
use std::ffi::CStr;
use std::path::PathBuf;

// Destructor order should be fine since _dxil and _dxc don't rely on each other.
Expand Down Expand Up @@ -140,7 +138,7 @@ mod dxc {
pub(crate) fn compile_dxc(
device: &crate::dx12::Device,
source: &str,
source_name: &str,
source_name: Option<&CStr>,
raw_ep: &str,
stage_bit: wgt::ShaderStages,
full_stage: String,
Expand Down Expand Up @@ -174,6 +172,8 @@ mod dxc {
Err(e) => return (Err(e), log::Level::Error),
};

let source_name = source_name.map(|cstr| cstr.to_str()).unwrap_or(&"");

let compiled = dxc_container.compiler.compile(
&blob,
source_name,
Expand Down Expand Up @@ -271,6 +271,7 @@ mod dxc {
// These are stubs for when the `dxc_shader_compiler` feature is disabled.
#[cfg(not(feature = "dxc_shader_compiler"))]
mod dxc {
use std::ffi::CStr;
use std::path::PathBuf;

pub(crate) struct DxcContainer {}
Expand All @@ -288,7 +289,7 @@ mod dxc {
pub(crate) fn compile_dxc(
_device: &crate::dx12::Device,
_source: &str,
_source_name: &str,
_source_name: Option<&CStr>,
_raw_ep: &str,
_stage_bit: wgt::ShaderStages,
_full_stage: String,
Expand Down

0 comments on commit 525364d

Please sign in to comment.