makepad_platform/
gpu_info.rs

1 
2pub enum GpuPerformance {
3    Tier1, // quest 1
4    Tier2, // quest 2
5    Tier3, // intel, androids
6    Tier4, // nvidia/ati/apple
7    Tier5, // need a way to detect a 3090 :)
8}
9
10pub struct GpuInfo {
11    pub min_uniform_vectors: u32,
12    pub performance: GpuPerformance,
13    pub vendor: String,
14    pub renderer: String
15} 
16
17impl Default for GpuInfo{
18    fn default()->Self{
19        Self{// default to a nice gpu
20            min_uniform_vectors:1024,
21            performance: GpuPerformance::Tier4,
22            vendor: "unknown".to_string(),
23            renderer: "unknown".to_string()
24        }
25    }
26}
27
28impl GpuInfo{
29
30    pub fn init_from_info(&mut self, min_uniform_vectors:u32, vendor:String, renderer:String){
31        self.vendor = vendor;
32        self.vendor.make_ascii_lowercase();
33        self.renderer = renderer;
34        self.renderer.make_ascii_lowercase();
35
36        self.min_uniform_vectors = min_uniform_vectors;
37
38        // default tier 3
39        self.performance = GpuPerformance::Tier3;
40        
41        // extremely useless performance separation. need to make this better
42        if self.vendor.contains("qualcomm") && self.renderer.contains("540"){ // its a quest 1
43            self.performance = GpuPerformance::Tier1;
44        }
45        if self.vendor.contains("qualcomm") && self.renderer.contains("610"){ // its a quest 2
46            self.performance = GpuPerformance::Tier2;
47        }
48        if self.vendor.contains("intel"){
49            self.performance = GpuPerformance::Tier3;
50        }
51        if self.vendor.contains("ati"){
52            self.performance = GpuPerformance::Tier4;
53        }
54        if self.vendor.contains("nvidia"){
55            self.performance = GpuPerformance::Tier4;
56        }
57    }
58
59    pub fn is_low_on_uniform_vectors(&self)->bool{
60        self.min_uniform_vectors < 512
61    }
62    
63}
64