Skip to main content

pebble/graphics/types/
limits.rs

1/// GPU limits granted to the device — see [`Backend::limits`](super::render::Backend::limits).
2///
3/// Like [`DeviceFeatures`](super::flags::DeviceFeatures), this mirrors a curated
4/// subset of `wgpu::Limits` rather than every field wgpu exposes — the omitted
5/// fields are mostly mesh-shader/ray-tracing-specific limits that pair with
6/// `DeviceFeatures::MESH_SHADER`/`RAY_QUERY`, which aren't commonly needed
7/// outside those features.
8#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
9pub struct DeviceLimits {
10    pub max_texture_dimension_1d: u32,
11    pub max_texture_dimension_2d: u32,
12    pub max_texture_dimension_3d: u32,
13    pub max_texture_array_layers: u32,
14    pub max_bind_groups: u32,
15    pub max_bindings_per_bind_group: u32,
16    pub max_dynamic_uniform_buffers_per_pipeline_layout: u32,
17    pub max_dynamic_storage_buffers_per_pipeline_layout: u32,
18    pub max_sampled_textures_per_shader_stage: u32,
19    pub max_samplers_per_shader_stage: u32,
20    pub max_storage_buffers_per_shader_stage: u32,
21    pub max_storage_textures_per_shader_stage: u32,
22    pub max_uniform_buffers_per_shader_stage: u32,
23    pub max_uniform_buffer_binding_size: u64,
24    pub max_storage_buffer_binding_size: u64,
25    pub max_vertex_buffers: u32,
26    pub max_buffer_size: u64,
27    pub max_vertex_attributes: u32,
28    pub max_vertex_buffer_array_stride: u32,
29    pub min_uniform_buffer_offset_alignment: u32,
30    pub min_storage_buffer_offset_alignment: u32,
31    pub max_color_attachments: u32,
32    pub max_color_attachment_bytes_per_sample: u32,
33    pub max_compute_workgroup_storage_size: u32,
34    pub max_compute_invocations_per_workgroup: u32,
35    pub max_compute_workgroup_size_x: u32,
36    pub max_compute_workgroup_size_y: u32,
37    pub max_compute_workgroup_size_z: u32,
38    pub max_compute_workgroups_per_dimension: u32,
39}
40
41impl From<wgpu::Limits> for DeviceLimits {
42    fn from(value: wgpu::Limits) -> Self {
43        Self {
44            max_texture_dimension_1d: value.max_texture_dimension_1d,
45            max_texture_dimension_2d: value.max_texture_dimension_2d,
46            max_texture_dimension_3d: value.max_texture_dimension_3d,
47            max_texture_array_layers: value.max_texture_array_layers,
48            max_bind_groups: value.max_bind_groups,
49            max_bindings_per_bind_group: value.max_bindings_per_bind_group,
50            max_dynamic_uniform_buffers_per_pipeline_layout: value
51                .max_dynamic_uniform_buffers_per_pipeline_layout,
52            max_dynamic_storage_buffers_per_pipeline_layout: value
53                .max_dynamic_storage_buffers_per_pipeline_layout,
54            max_sampled_textures_per_shader_stage: value.max_sampled_textures_per_shader_stage,
55            max_samplers_per_shader_stage: value.max_samplers_per_shader_stage,
56            max_storage_buffers_per_shader_stage: value.max_storage_buffers_per_shader_stage,
57            max_storage_textures_per_shader_stage: value.max_storage_textures_per_shader_stage,
58            max_uniform_buffers_per_shader_stage: value.max_uniform_buffers_per_shader_stage,
59            max_uniform_buffer_binding_size: value.max_uniform_buffer_binding_size,
60            max_storage_buffer_binding_size: value.max_storage_buffer_binding_size,
61            max_vertex_buffers: value.max_vertex_buffers,
62            max_buffer_size: value.max_buffer_size,
63            max_vertex_attributes: value.max_vertex_attributes,
64            max_vertex_buffer_array_stride: value.max_vertex_buffer_array_stride,
65            min_uniform_buffer_offset_alignment: value.min_uniform_buffer_offset_alignment,
66            min_storage_buffer_offset_alignment: value.min_storage_buffer_offset_alignment,
67            max_color_attachments: value.max_color_attachments,
68            max_color_attachment_bytes_per_sample: value.max_color_attachment_bytes_per_sample,
69            max_compute_workgroup_storage_size: value.max_compute_workgroup_storage_size,
70            max_compute_invocations_per_workgroup: value.max_compute_invocations_per_workgroup,
71            max_compute_workgroup_size_x: value.max_compute_workgroup_size_x,
72            max_compute_workgroup_size_y: value.max_compute_workgroup_size_y,
73            max_compute_workgroup_size_z: value.max_compute_workgroup_size_z,
74            max_compute_workgroups_per_dimension: value.max_compute_workgroups_per_dimension,
75        }
76    }
77}