mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
glsl-in: inject sampler2DMSArray builtins on use
This commit is contained in:
committed by
Dzmitry Malyshau
parent
66d59eb7ac
commit
9f62feee87
@@ -74,6 +74,8 @@ bitflags::bitflags! {
|
||||
const DOUBLE = 1 << 1;
|
||||
/// Request overloads that use samplerCubeArray(Shadow)
|
||||
const CUBE_TEXTURES_ARRAY = 1 << 2;
|
||||
/// Request overloads that use sampler2DMSArray
|
||||
const D2_MULTI_TEXTURES_ARRAY = 1 << 3;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -80,6 +80,12 @@ pub fn inject_builtin(
|
||||
name: &str,
|
||||
mut variations: BuiltinVariations,
|
||||
) {
|
||||
log::trace!(
|
||||
"{} variations: {:?} {:?}",
|
||||
name,
|
||||
variations,
|
||||
declaration.variations
|
||||
);
|
||||
// Don't regeneate variations
|
||||
variations.remove(declaration.variations);
|
||||
declaration.variations |= variations;
|
||||
@@ -2202,6 +2208,8 @@ bitflags::bitflags! {
|
||||
const STANDARD = 1 << 2;
|
||||
/// Generates cube arrayed images
|
||||
const CUBE_ARRAY = 1 << 3;
|
||||
/// Generates cube arrayed images
|
||||
const D2_MULTI_ARRAY = 1 << 4;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2214,6 +2222,9 @@ impl From<BuiltinVariations> for TextureArgsOptions {
|
||||
if variations.contains(BuiltinVariations::CUBE_TEXTURES_ARRAY) {
|
||||
options |= TextureArgsOptions::CUBE_ARRAY
|
||||
}
|
||||
if variations.contains(BuiltinVariations::D2_MULTI_TEXTURES_ARRAY) {
|
||||
options |= TextureArgsOptions::D2_MULTI_ARRAY
|
||||
}
|
||||
options
|
||||
}
|
||||
}
|
||||
@@ -2238,6 +2249,13 @@ fn texture_args_generator(
|
||||
if !options.contains(TextureArgsOptions::CUBE_ARRAY) {
|
||||
continue;
|
||||
}
|
||||
} else if Dim::D2 == dim
|
||||
&& options.contains(TextureArgsOptions::MULTI)
|
||||
&& arrayed
|
||||
&& options.contains(TextureArgsOptions::D2_MULTI_ARRAY)
|
||||
{
|
||||
// multisampling for sampler2DMSArray
|
||||
f(kind, dim, arrayed, true, false);
|
||||
} else if !options.contains(TextureArgsOptions::STANDARD) {
|
||||
continue;
|
||||
}
|
||||
@@ -2251,7 +2269,7 @@ fn texture_args_generator(
|
||||
break;
|
||||
}
|
||||
|
||||
if Dim::D2 == dim && options.contains(TextureArgsOptions::MULTI) {
|
||||
if Dim::D2 == dim && options.contains(TextureArgsOptions::MULTI) && !arrayed {
|
||||
// multisampling
|
||||
f(kind, dim, arrayed, true, false);
|
||||
}
|
||||
|
||||
@@ -1498,10 +1498,18 @@ fn builtin_required_variations<'a>(args: impl Iterator<Item = &'a TypeInner>) ->
|
||||
variations |= BuiltinVariations::DOUBLE
|
||||
}
|
||||
}
|
||||
TypeInner::Image { dim, arrayed, .. } => {
|
||||
TypeInner::Image {
|
||||
dim,
|
||||
arrayed,
|
||||
class,
|
||||
} => {
|
||||
if dim == crate::ImageDimension::Cube && arrayed {
|
||||
variations |= BuiltinVariations::CUBE_TEXTURES_ARRAY
|
||||
}
|
||||
|
||||
if dim == crate::ImageDimension::D2 && arrayed && class.is_multisampled() {
|
||||
variations |= BuiltinVariations::D2_MULTI_TEXTURES_ARRAY
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user