Skip to content

Commit 52f114d

Browse files
committed
use const ACCESS_QUALIFIER:u32 instead of singletons
1 parent 708abe8 commit 52f114d

File tree

11 files changed

+187
-203
lines changed

11 files changed

+187
-203
lines changed

crates/rustc_codegen_spirv/src/abi.rs

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -883,25 +883,17 @@ fn trans_intrinsic_type<'tcx>(
883883
let multisampled = const_int_value(cx, args.const_at(4))?;
884884
let sampled = const_int_value(cx, args.const_at(5))?;
885885
let image_format = const_int_value(cx, args.const_at(6))?;
886-
887-
let access_qualifier_ty = args.type_at(8);
888-
let access_qualifier: Option<AccessQualifier> = if let TyKind::Adt(def, _) =
889-
access_qualifier_ty.kind()
890-
{
891-
match cx.tcx.def_path_str(def.did()).as_str() {
892-
"spirv_std::image::ImageAccessReadOnly" => Some(AccessQualifier::ReadOnly),
893-
"spirv_std::image::ImageAccessWriteOnly" => Some(AccessQualifier::WriteOnly),
894-
"spirv_std::image::ImageAccessReadWrite" => Some(AccessQualifier::ReadWrite),
895-
"spirv_std::image::ImageAccessUnknown" => None,
896-
s => {
897-
return Err(cx
898-
.tcx
899-
.dcx()
900-
.err(format!("Invalid image access qualifier: '{s}'")));
901-
}
886+
let access_qualifier = match const_int_value(cx, args.const_at(8))? {
887+
0u32 => Some(AccessQualifier::ReadOnly),
888+
1u32 => Some(AccessQualifier::WriteOnly),
889+
2u32 => Some(AccessQualifier::ReadWrite),
890+
3u32 => None,
891+
n => {
892+
return Err(cx
893+
.tcx
894+
.dcx()
895+
.err(format!("Invalid value for Image access qualifier: {n}")));
902896
}
903-
} else {
904-
return Err(cx.tcx.dcx().err("Invalid image access qualifier"));
905897
};
906898

907899
let ty = SpirvType::Image {

crates/spirv-std/macros/src/image.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ impl quote::ToTokens for ImageType {
413413
let sampled = params::sampled_to_tokens(&self.sampled);
414414
let sampled_type = &self.sampled_type;
415415
let components = self.components;
416-
let access = params::image_access_to_tokens(self.access);
416+
let access = params::image_access_to_const_u32(self.access);
417417

418418
tokens.append_all(quote::quote! {
419419
#crate_root::image::Image<
@@ -425,7 +425,7 @@ impl quote::ToTokens for ImageType {
425425
{ #crate_root::image::#sampled as u32 },
426426
{ #crate_root::image::#format as u32 },
427427
{ #components as u32 },
428-
#crate_root::image::__private::#access
428+
#access
429429
>
430430
});
431431
}
@@ -573,12 +573,12 @@ mod params {
573573
}
574574
}
575575

576-
pub fn image_access_to_tokens(access: Option<AccessQualifier>) -> proc_macro2::TokenStream {
576+
pub fn image_access_to_const_u32(access: Option<AccessQualifier>) -> proc_macro2::TokenStream {
577577
match access {
578-
Some(AccessQualifier::ReadOnly) => quote!(ImageAccessReadOnly),
579-
Some(AccessQualifier::WriteOnly) => quote!(ImageAccessWriteOnly),
580-
Some(AccessQualifier::ReadWrite) => quote!(ImageAccessReadWrite),
581-
None => quote!(ImageAccessUnknown),
578+
Some(AccessQualifier::ReadOnly) => quote!(AccessQualifier::ReadOnly as u32),
579+
Some(AccessQualifier::WriteOnly) => quote!(AccessQualifier::WriteOnly as u32),
580+
Some(AccessQualifier::ReadWrite) => quote!(AccessQualifier::ReadWrite as u32),
581+
None => quote!(3),
582582
}
583583
}
584584

0 commit comments

Comments
 (0)