mirror of
https://github.com/gfx-rs/wgpu.git
synced 2024-11-25 08:13:27 +00:00
[wgpu-hal.gles] Error log for failed GLES heuristics (#5266)
Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
This commit is contained in:
parent
7214da6820
commit
f8355a8114
@ -68,6 +68,9 @@ Bottom level categories:
|
||||
#### General
|
||||
- `wgpu::Id` now implements `PartialOrd`/`Ord` allowing it to be put in `BTreeMap`s. By @cwfitzgerald and @9291Sam in [#5176](https://github.com/gfx-rs/wgpu/pull/5176)
|
||||
|
||||
#### OpenGL
|
||||
- Log an error when OpenGL texture format heuristics fail. By @PolyMeilex in [#5266](https://github.com/gfx-rs/wgpu/issues/5266)
|
||||
|
||||
#### `wgsl-out`
|
||||
- Learned to generate acceleration structure types. By @JMS55 in [#5261](https://github.com/gfx-rs/wgpu/pull/5261)
|
||||
|
||||
@ -76,7 +79,6 @@ Bottom level categories:
|
||||
- Fix typo in `wgpu::CommandEncoder::clear_buffer` documentation. By @PWhiddy in [#5281](https://github.com/gfx-rs/wgpu/pull/5281).
|
||||
- `Surface` configuration incorrectly claimed that `wgpu::Instance::create_surface` was unsafe. By @hackaugusto in [#5265](https://github.com/gfx-rs/wgpu/pull/5265).
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
#### General
|
||||
|
@ -1194,13 +1194,16 @@ impl crate::Device<super::Api> for super::Device {
|
||||
let sampler = desc.samplers[entry.resource_index as usize];
|
||||
super::RawBinding::Sampler(sampler.raw)
|
||||
}
|
||||
wgt::BindingType::Texture { .. } => {
|
||||
wgt::BindingType::Texture { view_dimension, .. } => {
|
||||
let view = desc.textures[entry.resource_index as usize].view;
|
||||
if view.array_layers.start != 0 {
|
||||
log::error!("Unable to create a sampled texture binding for non-zero array layer.\n{}",
|
||||
"This is an implementation problem of wgpu-hal/gles backend.")
|
||||
}
|
||||
let (raw, target) = view.inner.as_native();
|
||||
|
||||
super::Texture::log_failing_target_heuristics(view_dimension, target);
|
||||
|
||||
super::RawBinding::Texture {
|
||||
raw,
|
||||
target,
|
||||
|
@ -366,6 +366,8 @@ impl Texture {
|
||||
/// Returns the `target`, whether the image is 3d and whether the image is a cubemap.
|
||||
fn get_info_from_desc(desc: &TextureDescriptor) -> u32 {
|
||||
match desc.dimension {
|
||||
// WebGL (1 and 2) as well as some GLES versions do not have 1D textures, so we are
|
||||
// doing `TEXTURE_2D` instead
|
||||
wgt::TextureDimension::D1 => glow::TEXTURE_2D,
|
||||
wgt::TextureDimension::D2 => {
|
||||
// HACK: detect a cube map; forces cube compatible textures to be cube textures
|
||||
@ -379,6 +381,43 @@ impl Texture {
|
||||
wgt::TextureDimension::D3 => glow::TEXTURE_3D,
|
||||
}
|
||||
}
|
||||
|
||||
/// More information can be found in issues #1614 and #1574
|
||||
fn log_failing_target_heuristics(view_dimension: wgt::TextureViewDimension, target: u32) {
|
||||
let expected_target = match view_dimension {
|
||||
wgt::TextureViewDimension::D1 => glow::TEXTURE_2D,
|
||||
wgt::TextureViewDimension::D2 => glow::TEXTURE_2D,
|
||||
wgt::TextureViewDimension::D2Array => glow::TEXTURE_2D_ARRAY,
|
||||
wgt::TextureViewDimension::Cube => glow::TEXTURE_CUBE_MAP,
|
||||
wgt::TextureViewDimension::CubeArray => glow::TEXTURE_CUBE_MAP_ARRAY,
|
||||
wgt::TextureViewDimension::D3 => glow::TEXTURE_3D,
|
||||
};
|
||||
|
||||
if expected_target == target {
|
||||
return;
|
||||
}
|
||||
|
||||
let buffer;
|
||||
let got = match target {
|
||||
glow::TEXTURE_2D => "D2",
|
||||
glow::TEXTURE_2D_ARRAY => "D2Array",
|
||||
glow::TEXTURE_CUBE_MAP => "Cube",
|
||||
glow::TEXTURE_CUBE_MAP_ARRAY => "CubeArray",
|
||||
glow::TEXTURE_3D => "D3",
|
||||
target => {
|
||||
buffer = target.to_string();
|
||||
&buffer
|
||||
}
|
||||
};
|
||||
|
||||
log::error!(
|
||||
"wgpu-hal heuristics assumed that the view dimension will be equal to `{got}` rather than `{view_dimension:?}`.\n{}\n{}\n{}\n{}",
|
||||
"`D2` textures with `depth_or_array_layers == 1` are assumed to have view dimension `D2`",
|
||||
"`D2` textures with `depth_or_array_layers > 1` are assumed to have view dimension `D2Array`",
|
||||
"`D2` textures with `depth_or_array_layers == 6` are assumed to have view dimension `Cube`",
|
||||
"`D2` textures with `depth_or_array_layers > 6 && depth_or_array_layers % 6 == 0` are assumed to have view dimension `CubeArray`",
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
|
Loading…
Reference in New Issue
Block a user