diff --git a/crates/bevy_render/src/batching/gpu_preprocessing.rs b/crates/bevy_render/src/batching/gpu_preprocessing.rs index 4e955df6b3003..95e0b3d804efc 100644 --- a/crates/bevy_render/src/batching/gpu_preprocessing.rs +++ b/crates/bevy_render/src/batching/gpu_preprocessing.rs @@ -1328,10 +1328,14 @@ impl FromWorld for GpuPreprocessingSupport { // - We filter out Adreno 730 and earlier GPUs (except 720, as it's newer // than 730). // - We filter out Mali GPUs with driver versions lower than 48. + // - We limit Pixel 10 GPUs (all versions for now) to preprocessing only (no culling) fn is_non_supported_android_device(adapter_info: &RenderAdapterInfo) -> bool { crate::get_adreno_model(adapter_info).is_some_and(|model| model != 720 && model <= 730) || crate::get_mali_driver_version(adapter_info).is_some_and(|version| version < 48) } + fn is_preprocessing_only_android_device(adapter_info: &RenderAdapterInfo) -> bool { + crate::get_pixel10_driver_version(adapter_info).is_some() + } let culling_feature_support = device .features() @@ -1362,7 +1366,9 @@ impl FromWorld for GpuPreprocessingSupport { Falling back to CPU preprocessing.", ); GpuPreprocessingMode::None - } else if !(culling_feature_support && limit_support && downlevel_support) { + } else if !(culling_feature_support && limit_support && downlevel_support) + || is_preprocessing_only_android_device(&adapter_info) + { info_once!("Some GPU preprocessing are limited on this device."); GpuPreprocessingMode::PreprocessingOnly } else { diff --git a/crates/bevy_render/src/lib.rs b/crates/bevy_render/src/lib.rs index d9a7f033c0358..9febbfff70d30 100644 --- a/crates/bevy_render/src/lib.rs +++ b/crates/bevy_render/src/lib.rs @@ -566,6 +566,19 @@ pub fn get_mali_driver_version(adapter_info: &RenderAdapterInfo) -> Option None } +pub fn get_pixel10_driver_version(adapter_info: &RenderAdapterInfo) -> Option { + if !cfg!(target_os = "android") { + return None; + } + + if adapter_info.name != "PowerVR D-Series DXT-48-1536 MC1" { + return None; + } + + let (_, driver_version) = adapter_info.driver_info.split_once('@')?; + driver_version.parse::().ok() +} + /// Returns true if storage buffers are unsupported on this platform or false /// if they are supported. pub fn storage_buffers_are_unsupported(limits: &WgpuLimits) -> bool {