rusticl: print missing context features

Signed-off-by: Thomas Debesse <dev@illwieckz.net>
Reviewed-by: Karol Herbst <kherbst@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19498>
This commit is contained in:
Thomas Debesse 2022-11-03 11:16:45 +01:00 committed by Marge Bot
parent bdc240e13e
commit 20c936bee1
5 changed files with 58 additions and 36 deletions

View File

@ -5,6 +5,7 @@ use crate::pipe::screen::*;
use crate::pipe::transfer::*;
use mesa_rust_gen::*;
use mesa_rust_util::has_required_feature;
use std::os::raw::*;
use std::ptr;
@ -475,28 +476,30 @@ impl Drop for PipeContext {
}
}
fn has_required_cbs(c: &pipe_context) -> bool {
c.destroy.is_some()
&& c.bind_compute_state.is_some()
&& c.bind_sampler_states.is_some()
&& c.buffer_map.is_some()
&& c.buffer_subdata.is_some()
&& c.buffer_unmap.is_some()
&& c.clear_buffer.is_some()
&& c.clear_texture.is_some()
&& c.create_compute_state.is_some()
&& c.delete_compute_state.is_some()
&& c.delete_sampler_state.is_some()
&& c.flush.is_some()
&& c.launch_grid.is_some()
&& c.memory_barrier.is_some()
&& c.resource_copy_region.is_some()
&& c.sampler_view_destroy.is_some()
&& c.set_constant_buffer.is_some()
&& c.set_global_binding.is_some()
&& c.set_sampler_views.is_some()
&& c.set_shader_images.is_some()
&& c.texture_map.is_some()
&& c.texture_subdata.is_some()
&& c.texture_unmap.is_some()
fn has_required_cbs(context: &pipe_context) -> bool {
// Use '&' to evaluate all features and to not stop
// on first missing one to list all missing features.
has_required_feature!(context, destroy)
& has_required_feature!(context, bind_compute_state)
& has_required_feature!(context, bind_sampler_states)
& has_required_feature!(context, buffer_map)
& has_required_feature!(context, buffer_subdata)
& has_required_feature!(context, buffer_unmap)
& has_required_feature!(context, clear_buffer)
& has_required_feature!(context, clear_texture)
& has_required_feature!(context, create_compute_state)
& has_required_feature!(context, delete_compute_state)
& has_required_feature!(context, delete_sampler_state)
& has_required_feature!(context, flush)
& has_required_feature!(context, launch_grid)
& has_required_feature!(context, memory_barrier)
& has_required_feature!(context, resource_copy_region)
& has_required_feature!(context, sampler_view_destroy)
& has_required_feature!(context, set_constant_buffer)
& has_required_feature!(context, set_global_binding)
& has_required_feature!(context, set_sampler_views)
& has_required_feature!(context, set_shader_images)
& has_required_feature!(context, texture_map)
& has_required_feature!(context, texture_subdata)
& has_required_feature!(context, texture_unmap)
}

View File

@ -5,6 +5,7 @@ use crate::pipe::resource::*;
use crate::util::disk_cache::*;
use mesa_rust_gen::*;
use mesa_rust_util::has_required_feature;
use mesa_rust_util::string::*;
use std::convert::TryInto;
@ -326,16 +327,18 @@ impl Drop for PipeScreen {
}
fn has_required_cbs(screen: *mut pipe_screen) -> bool {
let s = unsafe { *screen };
s.context_create.is_some()
&& s.destroy.is_some()
&& s.fence_finish.is_some()
&& s.fence_reference.is_some()
&& s.get_compiler_options.is_some()
&& s.get_compute_param.is_some()
&& s.get_name.is_some()
&& s.get_param.is_some()
&& s.get_shader_param.is_some()
&& s.is_format_supported.is_some()
&& s.resource_create.is_some()
let screen = unsafe { *screen };
// Use '&' to evaluate all features and to not stop
// on first missing one to list all missing features.
has_required_feature!(screen, context_create)
& has_required_feature!(screen, destroy)
& has_required_feature!(screen, fence_finish)
& has_required_feature!(screen, fence_reference)
& has_required_feature!(screen, get_compiler_options)
& has_required_feature!(screen, get_compute_param)
& has_required_feature!(screen, get_name)
& has_required_feature!(screen, get_param)
& has_required_feature!(screen, get_shader_param)
& has_required_feature!(screen, is_format_supported)
& has_required_feature!(screen, resource_create)
}

View File

@ -24,6 +24,7 @@ libmesa_rust_util_files = files(
'util/lib.rs',
'util/assert.rs',
'util/bitset.rs',
'util/feature.rs',
'util/properties.rs',
'util/ptr.rs',
'util/string.rs',

View File

@ -0,0 +1,14 @@
#[macro_export]
macro_rules! has_required_feature {
($object:ident, $feature:ident) => {{
let has_feature = $object.$feature.is_some();
if !has_feature {
println!(
"Missing {} feature {}",
stringify!($object),
stringify!($feature)
);
}
has_feature
}};
}

View File

@ -1,5 +1,6 @@
pub mod assert;
pub mod bitset;
pub mod feature;
pub mod math;
pub mod properties;
pub mod ptr;