Skip to content

Commit e8d7429

Browse files
committed
hal/vulkan: Increment counter for intermediate shaders
The counter is decremented for raw and intermediate shaders but only incremented for raw shaders, this lead to a negative counter value and did not represent the number of allocated shaders.
1 parent 9a8dbfb commit e8d7429

File tree

1 file changed

+28
-32
lines changed

1 file changed

+28
-32
lines changed

wgpu-hal/src/vulkan/device.rs

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
use alloc::{
2-
borrow::{Cow, ToOwned as _},
3-
collections::BTreeMap,
4-
ffi::CString,
5-
sync::Arc,
6-
vec::Vec,
7-
};
1+
use alloc::{borrow::ToOwned as _, collections::BTreeMap, ffi::CString, sync::Arc, vec::Vec};
82
use core::{
93
ffi::CStr,
104
mem::{self, MaybeUninit},
@@ -832,6 +826,7 @@ impl super::Device {
832826
fn create_shader_module_impl(
833827
&self,
834828
spv: &[u32],
829+
label: &crate::Label<'_>,
835830
) -> Result<vk::ShaderModule, crate::DeviceError> {
836831
let vk_info = vk::ShaderModuleCreateInfo::default()
837832
.flags(vk::ShaderModuleCreateFlags::empty())
@@ -849,6 +844,11 @@ impl super::Device {
849844
// VK_ERROR_INVALID_SHADER_NV
850845
super::map_host_device_oom_err(err)
851846
}
847+
848+
if let Some(label) = label {
849+
unsafe { self.shared.set_object_name(raw, label) };
850+
}
851+
852852
Ok(raw)
853853
}
854854

@@ -924,7 +924,7 @@ impl super::Device {
924924
naga::back::spv::write_vec(&module, &info, options, Some(&pipeline_options))
925925
}
926926
.map_err(|e| crate::PipelineError::Linkage(stage_flags, format!("{e}")))?;
927-
self.create_shader_module_impl(&spv)?
927+
self.create_shader_module_impl(&spv, &None)?
928928
}
929929
};
930930

@@ -1899,19 +1899,20 @@ impl crate::Device for super::Device {
18991899
desc: &crate::ShaderModuleDescriptor,
19001900
shader: crate::ShaderInput,
19011901
) -> Result<super::ShaderModule, crate::ShaderError> {
1902-
let spv = match shader {
1903-
crate::ShaderInput::Naga(naga_shader) => {
1902+
let shader_module = match shader {
1903+
crate::ShaderInput::Naga(naga_shader)
19041904
if self
19051905
.shared
19061906
.workarounds
19071907
.contains(super::Workarounds::SEPARATE_ENTRY_POINTS)
1908-
|| !naga_shader.module.overrides.is_empty()
1909-
{
1910-
return Ok(super::ShaderModule::Intermediate {
1911-
naga_shader,
1912-
runtime_checks: desc.runtime_checks,
1913-
});
1908+
|| !naga_shader.module.overrides.is_empty() =>
1909+
{
1910+
super::ShaderModule::Intermediate {
1911+
naga_shader,
1912+
runtime_checks: desc.runtime_checks,
19141913
}
1914+
}
1915+
crate::ShaderInput::Naga(naga_shader) => {
19151916
let mut naga_options = self.naga_options.clone();
19161917
naga_options.debug_info =
19171918
naga_shader
@@ -1930,32 +1931,27 @@ impl crate::Device for super::Device {
19301931
binding_array: naga::proc::BoundsCheckPolicy::Unchecked,
19311932
};
19321933
}
1933-
Cow::Owned(
1934-
naga::back::spv::write_vec(
1935-
&naga_shader.module,
1936-
&naga_shader.info,
1937-
&naga_options,
1938-
None,
1939-
)
1940-
.map_err(|e| crate::ShaderError::Compilation(format!("{e}")))?,
1934+
let spv = naga::back::spv::write_vec(
1935+
&naga_shader.module,
1936+
&naga_shader.info,
1937+
&naga_options,
1938+
None,
19411939
)
1940+
.map_err(|e| crate::ShaderError::Compilation(format!("{e}")))?;
1941+
super::ShaderModule::Raw(self.create_shader_module_impl(&spv, &desc.label)?)
1942+
}
1943+
crate::ShaderInput::SpirV(data) => {
1944+
super::ShaderModule::Raw(self.create_shader_module_impl(data, &desc.label)?)
19421945
}
1943-
crate::ShaderInput::SpirV(data) => Cow::Borrowed(data),
19441946
crate::ShaderInput::Msl { .. }
19451947
| crate::ShaderInput::Dxil { .. }
19461948
| crate::ShaderInput::Hlsl { .. }
19471949
| crate::ShaderInput::Glsl { .. } => unreachable!(),
19481950
};
19491951

1950-
let raw = self.create_shader_module_impl(&spv)?;
1951-
1952-
if let Some(label) = desc.label {
1953-
unsafe { self.shared.set_object_name(raw, label) };
1954-
}
1955-
19561952
self.counters.shader_modules.add(1);
19571953

1958-
Ok(super::ShaderModule::Raw(raw))
1954+
Ok(shader_module)
19591955
}
19601956

19611957
unsafe fn destroy_shader_module(&self, module: super::ShaderModule) {

0 commit comments

Comments
 (0)