Skip to content

Commit 910fb7c

Browse files
authored
Remove GPU based validation in Tests (#5271)
* Remove GPU based validation in Tests * Lol Typo
1 parent 2e9ee0a commit 910fb7c

File tree

3 files changed

+39
-30
lines changed

3 files changed

+39
-30
lines changed

tests/src/init.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ pub fn initialize_instance() -> Instance {
3131
let gles_minor_version = wgpu::util::gles_minor_version_from_env().unwrap_or_default();
3232
Instance::new(wgpu::InstanceDescriptor {
3333
backends,
34-
flags: wgpu::InstanceFlags::advanced_debugging().with_env(),
34+
flags: wgpu::InstanceFlags::debugging().with_env(),
3535
dx12_shader_compiler,
3636
gles_minor_version,
3737
})

tests/tests/shader/struct_layout.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -263,11 +263,6 @@ static UNIFORM_INPUT: GpuTestConfiguration = GpuTestConfiguration::new()
263263
FailureCase::backend(wgpu::Backends::VULKAN)
264264
.validation_error("a matrix with stride 8 not satisfying alignment to 16"),
265265
)
266-
.expect_fail(
267-
FailureCase::backend(wgpu::Backends::VULKAN).validation_error(
268-
"Failure to instrument shader. Proceeding with non-instrumented shader.",
269-
),
270-
)
271266
.limits(Limits::downlevel_defaults()),
272267
)
273268
.run_async(|ctx| {

wgpu-hal/src/vulkan/instance.rs

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use std::{
66
thread,
77
};
88

9+
use arrayvec::ArrayVec;
910
use ash::{
1011
extensions::{ext, khr},
1112
vk,
@@ -653,26 +654,27 @@ impl crate::Instance<super::Api> for super::Instance {
653654
let validation_layer_name =
654655
CStr::from_bytes_with_nul(b"VK_LAYER_KHRONOS_validation\0").unwrap();
655656
let validation_layer_properties = find_layer(&instance_layers, validation_layer_name);
656-
let validation_features_are_enabled = || {
657-
validation_layer_properties.is_some().then(|| {
658-
let exts = Self::enumerate_instance_extension_properties(
659-
&entry,
660-
Some(validation_layer_name),
661-
)?;
662-
let mut ext_names = exts
663-
.iter()
664-
.filter_map(|ext| cstr_from_bytes_until_nul(&ext.extension_name));
665-
let found =
666-
ext_names.any(|ext_name| ext_name == vk::ExtValidationFeaturesFn::name());
667-
Ok(found)
668-
})
657+
658+
// Determine if VK_EXT_validation_features is available, so we can enable
659+
// GPU assisted validation and synchronization validation.
660+
let validation_features_are_enabled = if validation_layer_properties.is_some() {
661+
// Get the all the instance extension properties.
662+
let exts =
663+
Self::enumerate_instance_extension_properties(&entry, Some(validation_layer_name))?;
664+
// Convert all the names of the extensions into an iterator of CStrs.
665+
let mut ext_names = exts
666+
.iter()
667+
.filter_map(|ext| cstr_from_bytes_until_nul(&ext.extension_name));
668+
// Find the validation features extension.
669+
ext_names.any(|ext_name| ext_name == vk::ExtValidationFeaturesFn::name())
670+
} else {
671+
false
669672
};
673+
670674
let should_enable_gpu_based_validation = desc
671675
.flags
672676
.intersects(wgt::InstanceFlags::GPU_BASED_VALIDATION)
673-
&& validation_features_are_enabled()
674-
.transpose()?
675-
.unwrap_or(false);
677+
&& validation_features_are_enabled;
676678

677679
let nv_optimus_layer = CStr::from_bytes_with_nul(b"VK_LAYER_NV_optimus\0").unwrap();
678680
let has_nv_optimus = find_layer(&instance_layers, nv_optimus_layer).is_some();
@@ -787,14 +789,26 @@ impl crate::Instance<super::Api> for super::Instance {
787789
create_info = create_info.push_next(vk_create_info);
788790
}
789791

790-
let mut gpu_assisted_validation = vk::ValidationFeaturesEXT::builder()
791-
.enabled_validation_features(&[
792-
vk::ValidationFeatureEnableEXT::GPU_ASSISTED,
793-
vk::ValidationFeatureEnableEXT::GPU_ASSISTED_RESERVE_BINDING_SLOT,
794-
vk::ValidationFeatureEnableEXT::SYNCHRONIZATION_VALIDATION,
795-
]);
796-
if should_enable_gpu_based_validation {
797-
create_info = create_info.push_next(&mut gpu_assisted_validation);
792+
// Enable explicit validation features if available
793+
let mut validation_features;
794+
let mut validation_feature_list: ArrayVec<_, 3>;
795+
if validation_features_are_enabled {
796+
validation_feature_list = ArrayVec::new();
797+
798+
// Always enable synchronization validation
799+
validation_feature_list
800+
.push(vk::ValidationFeatureEnableEXT::SYNCHRONIZATION_VALIDATION);
801+
802+
// Only enable GPU assisted validation if requested.
803+
if should_enable_gpu_based_validation {
804+
validation_feature_list.push(vk::ValidationFeatureEnableEXT::GPU_ASSISTED);
805+
validation_feature_list
806+
.push(vk::ValidationFeatureEnableEXT::GPU_ASSISTED_RESERVE_BINDING_SLOT);
807+
}
808+
809+
validation_features = vk::ValidationFeaturesEXT::builder()
810+
.enabled_validation_features(&validation_feature_list);
811+
create_info = create_info.push_next(&mut validation_features);
798812
}
799813

800814
unsafe {

0 commit comments

Comments
 (0)