bevyengine / bevyengine/bevy

Bevy Atmosphere not supported on iOS devices without 32 bit surface filtering support

Open
#25,335 5 comments 0 reactions 0 assignees View on GitHub
A-Rendering C-Bug S-Needs-Design
Dominant language
Rust
Stars
48.2k
Forks
4.8k
Avg merge
3d 16h
Merged PRs (30d)
171

Description

## Bevy version and features
bevy = { version = "0.19", features = ["wav", "vorbis", "webgpu", "debug"] }

If your bug is rendering-related, copy the adapter info that appears when you run Bevy.

```AdapterInfo { name: "Apple A12X GPU", vendor: 0, device: 0, device_type: IntegratedGpu, device_pci_bus_id: "", driver: "", driver_info: "", backend: Metal, subgroup_min_size: 4, subgroup_max_size: 64, transient_saves_memory: true }
```

## What you did

Ran bevy atmosphere based scene on iOS device without 32 bit surface filtering capabilities

## What went wrong

Game crashes due to GPU lacking capability to filter 32 bit surfaces, in particular when using
```
WgpuSettings {
features: WgpuFeatures::FLOAT32_FILTERABLE,
..default()
}
```
Initialization failed because the feature is explicitly not supported and the atmosphere pipeline requires a 32 bit surface

## Additional information

While lower precision does reduce the quality of the image, using gamma correction when downcasting the values to half precision and reversing it when sampling on the GPU results in a usable image with no banding and allows developers to use this on older devices that don't have the required GPU processing capabilities at a decent FPS (A12X is able to get 30 fps on average, worst case scenario being 15 FPS which seems to be when there are a lot of reflections, this is without applying metalfx rendered at full scale native resolution)

Downcast atmosphere without gamma correction

Image

Downcast atmosphere with gamma correction

Image

Contributor guide

Open the contributing guide

Research direction

Reproduce the Bevy Atmosphere scene on an iOS device with the Apple A12X GPU and the shown WgpuSettings using FLOAT32_FILTERABLE. Then trace the atmosphere pipeline and its 32-bit surface requirement; done means initialization succeeds on devices without that filtering capability while retaining a usable image and performance.

Written by the indexing model from the issue text.

Assessment

Tech stack
ios, rust
Domain
computer-graphics, game-dev, mobile-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.