mirror of
https://github.com/gfx-rs/wgpu.git
synced 2025-12-08 21:26:17 +00:00
Refactor GLES's texture_format_capabilities
This commit is contained in:
parent
499e9e628e
commit
259991e258
@ -525,6 +525,7 @@ impl super::Adapter {
|
|||||||
context,
|
context,
|
||||||
private_caps,
|
private_caps,
|
||||||
workarounds,
|
workarounds,
|
||||||
|
features,
|
||||||
shading_language_version,
|
shading_language_version,
|
||||||
max_texture_size,
|
max_texture_size,
|
||||||
}),
|
}),
|
||||||
@ -639,34 +640,45 @@ impl crate::Adapter<super::Api> for super::Adapter {
|
|||||||
// The storage types are based on table 8.26, in section
|
// The storage types are based on table 8.26, in section
|
||||||
// "TEXTURE IMAGE LOADS AND STORES" of OpenGLES-3.2 spec.
|
// "TEXTURE IMAGE LOADS AND STORES" of OpenGLES-3.2 spec.
|
||||||
let empty = Tfc::empty();
|
let empty = Tfc::empty();
|
||||||
let unfilterable = Tfc::SAMPLED;
|
let base = Tfc::COPY_SRC | Tfc::COPY_DST;
|
||||||
let depth = Tfc::SAMPLED | Tfc::MULTISAMPLE | Tfc::DEPTH_STENCIL_ATTACHMENT;
|
let unfilterable = base | Tfc::SAMPLED;
|
||||||
|
let depth = base | Tfc::SAMPLED | Tfc::MULTISAMPLE | Tfc::DEPTH_STENCIL_ATTACHMENT;
|
||||||
let filterable = unfilterable | Tfc::SAMPLED_LINEAR;
|
let filterable = unfilterable | Tfc::SAMPLED_LINEAR;
|
||||||
let renderable =
|
let renderable =
|
||||||
unfilterable | Tfc::COLOR_ATTACHMENT | Tfc::MULTISAMPLE | Tfc::MULTISAMPLE_RESOLVE;
|
unfilterable | Tfc::COLOR_ATTACHMENT | Tfc::MULTISAMPLE | Tfc::MULTISAMPLE_RESOLVE;
|
||||||
let filterable_renderable = filterable | renderable | Tfc::COLOR_ATTACHMENT_BLEND;
|
let filterable_renderable = filterable | renderable | Tfc::COLOR_ATTACHMENT_BLEND;
|
||||||
let storage = Tfc::STORAGE | Tfc::STORAGE_READ_WRITE;
|
let storage = base | Tfc::STORAGE | Tfc::STORAGE_READ_WRITE;
|
||||||
|
|
||||||
let half_float_renderable = if self
|
let feature_fn = |f, caps| {
|
||||||
.shared
|
if self.shared.features.contains(f) {
|
||||||
.private_caps
|
caps
|
||||||
.contains(super::PrivateCapabilities::COLOR_BUFFER_HALF_FLOAT)
|
} else {
|
||||||
{
|
empty
|
||||||
Tfc::COLOR_ATTACHMENT | Tfc::COLOR_ATTACHMENT_BLEND
|
}
|
||||||
} else {
|
|
||||||
Tfc::empty()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let float_renderable = if self
|
let bcn_features = feature_fn(wgt::Features::TEXTURE_COMPRESSION_BC, filterable);
|
||||||
.shared
|
let etc2_features = feature_fn(wgt::Features::TEXTURE_COMPRESSION_ETC2, filterable);
|
||||||
.private_caps
|
let astc_features = feature_fn(wgt::Features::TEXTURE_COMPRESSION_ASTC_LDR, filterable);
|
||||||
.contains(super::PrivateCapabilities::COLOR_BUFFER_FLOAT)
|
|
||||||
{
|
let private_caps_fn = |f, caps| {
|
||||||
Tfc::COLOR_ATTACHMENT | Tfc::COLOR_ATTACHMENT_BLEND
|
if self.shared.private_caps.contains(f) {
|
||||||
} else {
|
caps
|
||||||
Tfc::empty()
|
} else {
|
||||||
|
empty
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let half_float_renderable = private_caps_fn(
|
||||||
|
super::PrivateCapabilities::COLOR_BUFFER_HALF_FLOAT,
|
||||||
|
Tfc::COLOR_ATTACHMENT | Tfc::COLOR_ATTACHMENT_BLEND,
|
||||||
|
);
|
||||||
|
|
||||||
|
let float_renderable = private_caps_fn(
|
||||||
|
super::PrivateCapabilities::COLOR_BUFFER_FLOAT,
|
||||||
|
Tfc::COLOR_ATTACHMENT | Tfc::COLOR_ATTACHMENT_BLEND,
|
||||||
|
);
|
||||||
|
|
||||||
match format {
|
match format {
|
||||||
Tf::R8Unorm => filterable_renderable,
|
Tf::R8Unorm => filterable_renderable,
|
||||||
Tf::R8Snorm => filterable,
|
Tf::R8Snorm => filterable,
|
||||||
@ -712,8 +724,8 @@ impl crate::Adapter<super::Api> for super::Adapter {
|
|||||||
| Tf::Depth24Plus
|
| Tf::Depth24Plus
|
||||||
| Tf::Depth24PlusStencil8
|
| Tf::Depth24PlusStencil8
|
||||||
| Tf::Depth24UnormStencil8 => depth,
|
| Tf::Depth24UnormStencil8 => depth,
|
||||||
Tf::Rgb9e5Ufloat
|
Tf::Rgb9e5Ufloat => filterable,
|
||||||
| Tf::Bc1RgbaUnorm
|
Tf::Bc1RgbaUnorm
|
||||||
| Tf::Bc1RgbaUnormSrgb
|
| Tf::Bc1RgbaUnormSrgb
|
||||||
| Tf::Bc2RgbaUnorm
|
| Tf::Bc2RgbaUnorm
|
||||||
| Tf::Bc2RgbaUnormSrgb
|
| Tf::Bc2RgbaUnormSrgb
|
||||||
@ -726,8 +738,8 @@ impl crate::Adapter<super::Api> for super::Adapter {
|
|||||||
| Tf::Bc6hRgbSfloat
|
| Tf::Bc6hRgbSfloat
|
||||||
| Tf::Bc6hRgbUfloat
|
| Tf::Bc6hRgbUfloat
|
||||||
| Tf::Bc7RgbaUnorm
|
| Tf::Bc7RgbaUnorm
|
||||||
| Tf::Bc7RgbaUnormSrgb
|
| Tf::Bc7RgbaUnormSrgb => bcn_features,
|
||||||
| Tf::Etc2Rgb8Unorm
|
Tf::Etc2Rgb8Unorm
|
||||||
| Tf::Etc2Rgb8UnormSrgb
|
| Tf::Etc2Rgb8UnormSrgb
|
||||||
| Tf::Etc2Rgb8A1Unorm
|
| Tf::Etc2Rgb8A1Unorm
|
||||||
| Tf::Etc2Rgb8A1UnormSrgb
|
| Tf::Etc2Rgb8A1UnormSrgb
|
||||||
@ -736,15 +748,15 @@ impl crate::Adapter<super::Api> for super::Adapter {
|
|||||||
| Tf::EacR11Unorm
|
| Tf::EacR11Unorm
|
||||||
| Tf::EacR11Snorm
|
| Tf::EacR11Snorm
|
||||||
| Tf::EacRg11Unorm
|
| Tf::EacRg11Unorm
|
||||||
| Tf::EacRg11Snorm
|
| Tf::EacRg11Snorm => etc2_features,
|
||||||
| Tf::Astc {
|
Tf::Astc {
|
||||||
block: _,
|
block: _,
|
||||||
channel: AstcChannel::Unorm | AstcChannel::UnormSrgb,
|
channel: AstcChannel::Unorm | AstcChannel::UnormSrgb,
|
||||||
} => filterable,
|
} => astc_features,
|
||||||
Tf::Astc {
|
Tf::Astc {
|
||||||
block: _,
|
block: _,
|
||||||
channel: AstcChannel::Hdr,
|
channel: AstcChannel::Hdr,
|
||||||
} => empty,
|
} => Tfc::empty(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -185,6 +185,7 @@ struct TextureFormatDesc {
|
|||||||
struct AdapterShared {
|
struct AdapterShared {
|
||||||
context: AdapterContext,
|
context: AdapterContext,
|
||||||
private_caps: PrivateCapabilities,
|
private_caps: PrivateCapabilities,
|
||||||
|
features: wgt::Features,
|
||||||
workarounds: Workarounds,
|
workarounds: Workarounds,
|
||||||
shading_language_version: naga::back::glsl::Version,
|
shading_language_version: naga::back::glsl::Version,
|
||||||
max_texture_size: u32,
|
max_texture_size: u32,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user