From 84d16045d034cf34e782febea7cf7d933b730ba6 Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Thu, 17 Mar 2022 12:18:39 +0100 Subject: [PATCH] rusticl/api: add param to query which contains application provided values this is required for e.g. CL_PROGRAM_BINARIES Signed-off-by: Karol Herbst Acked-by: Alyssa Rosenzweig Part-of: --- src/gallium/frontends/rusticl/api/context.rs | 2 +- src/gallium/frontends/rusticl/api/device.rs | 2 +- src/gallium/frontends/rusticl/api/event.rs | 2 +- src/gallium/frontends/rusticl/api/kernel.rs | 2 +- src/gallium/frontends/rusticl/api/memory.rs | 6 +++--- src/gallium/frontends/rusticl/api/platform.rs | 2 +- src/gallium/frontends/rusticl/api/program.rs | 2 +- src/gallium/frontends/rusticl/api/queue.rs | 2 +- src/gallium/frontends/rusticl/api/util.rs | 10 ++++++++-- 9 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/gallium/frontends/rusticl/api/context.rs b/src/gallium/frontends/rusticl/api/context.rs index 5eb49a5..94af6ff 100644 --- a/src/gallium/frontends/rusticl/api/context.rs +++ b/src/gallium/frontends/rusticl/api/context.rs @@ -17,7 +17,7 @@ use std::slice; use std::sync::Arc; impl CLInfo for cl_context { - fn query(&self, q: cl_context_info) -> CLResult> { + fn query(&self, q: cl_context_info, _: &[u8]) -> CLResult> { let ctx = self.get_ref()?; Ok(match q { CL_CONTEXT_DEVICES => { diff --git a/src/gallium/frontends/rusticl/api/device.rs b/src/gallium/frontends/rusticl/api/device.rs index 7a57194..97adf53 100644 --- a/src/gallium/frontends/rusticl/api/device.rs +++ b/src/gallium/frontends/rusticl/api/device.rs @@ -16,7 +16,7 @@ use std::sync::Arc; use std::sync::Once; impl CLInfo for cl_device_id { - fn query(&self, q: cl_device_info) -> CLResult> { + fn query(&self, q: cl_device_info, _: &[u8]) -> CLResult> { let dev = self.get_ref()?; Ok(match q { CL_DEVICE_ADDRESS_BITS => cl_prop::(dev.address_bits()), diff --git a/src/gallium/frontends/rusticl/api/event.rs b/src/gallium/frontends/rusticl/api/event.rs index 9411f0a..d3eace0 100644 --- a/src/gallium/frontends/rusticl/api/event.rs +++ b/src/gallium/frontends/rusticl/api/event.rs @@ -13,7 +13,7 @@ use std::ptr; use std::sync::Arc; impl CLInfo for cl_event { - fn query(&self, q: cl_event_info) -> CLResult> { + fn query(&self, q: cl_event_info, _: &[u8]) -> CLResult> { let event = self.get_ref()?; Ok(match q { CL_EVENT_COMMAND_EXECUTION_STATUS => cl_prop::(event.status()), diff --git a/src/gallium/frontends/rusticl/api/kernel.rs b/src/gallium/frontends/rusticl/api/kernel.rs index f29eaf6..bb3a494 100644 --- a/src/gallium/frontends/rusticl/api/kernel.rs +++ b/src/gallium/frontends/rusticl/api/kernel.rs @@ -19,7 +19,7 @@ use std::slice; use std::sync::Arc; impl CLInfo for cl_kernel { - fn query(&self, q: cl_kernel_info) -> CLResult> { + fn query(&self, q: cl_kernel_info, _: &[u8]) -> CLResult> { let kernel = self.get_ref()?; Ok(match q { CL_KERNEL_CONTEXT => { diff --git a/src/gallium/frontends/rusticl/api/memory.rs b/src/gallium/frontends/rusticl/api/memory.rs index 9d26c8d..f4bb068 100644 --- a/src/gallium/frontends/rusticl/api/memory.rs +++ b/src/gallium/frontends/rusticl/api/memory.rs @@ -171,7 +171,7 @@ fn validate_matching_buffer_flags(mem: &Mem, flags: cl_mem_flags) -> CLResult<() } impl CLInfo for cl_mem { - fn query(&self, q: cl_mem_info) -> CLResult> { + fn query(&self, q: cl_mem_info, _: &[u8]) -> CLResult> { let mem = self.get_ref()?; Ok(match *q { CL_MEM_ASSOCIATED_MEMOBJECT => { @@ -629,7 +629,7 @@ fn validate_buffer( } impl CLInfo for cl_mem { - fn query(&self, q: cl_image_info) -> CLResult> { + fn query(&self, q: cl_image_info, _: &[u8]) -> CLResult> { let mem = self.get_ref()?; Ok(match *q { CL_IMAGE_ARRAY_SIZE => cl_prop::(mem.image_desc.image_array_size), @@ -742,7 +742,7 @@ pub fn get_supported_image_formats( } impl CLInfo for cl_sampler { - fn query(&self, q: cl_sampler_info) -> CLResult> { + fn query(&self, q: cl_sampler_info, _: &[u8]) -> CLResult> { let sampler = self.get_ref()?; Ok(match q { CL_SAMPLER_ADDRESSING_MODE => cl_prop::(sampler.addressing_mode), diff --git a/src/gallium/frontends/rusticl/api/platform.rs b/src/gallium/frontends/rusticl/api/platform.rs index 215e261..362ce24 100644 --- a/src/gallium/frontends/rusticl/api/platform.rs +++ b/src/gallium/frontends/rusticl/api/platform.rs @@ -18,7 +18,7 @@ pub struct _cl_platform_id { } impl CLInfo for cl_platform_id { - fn query(&self, q: cl_platform_info) -> CLResult> { + fn query(&self, q: cl_platform_info, _: &[u8]) -> CLResult> { let p = self.get_ref()?; Ok(match q { CL_PLATFORM_EXTENSIONS => cl_prop("cl_khr_icd"), diff --git a/src/gallium/frontends/rusticl/api/program.rs b/src/gallium/frontends/rusticl/api/program.rs index 9cfb69b..c7c08da 100644 --- a/src/gallium/frontends/rusticl/api/program.rs +++ b/src/gallium/frontends/rusticl/api/program.rs @@ -20,7 +20,7 @@ use std::slice; use std::sync::Arc; impl CLInfo for cl_program { - fn query(&self, q: cl_program_info) -> CLResult> { + fn query(&self, q: cl_program_info, _: &[u8]) -> CLResult> { let prog = self.get_ref()?; Ok(match q { CL_PROGRAM_CONTEXT => { diff --git a/src/gallium/frontends/rusticl/api/queue.rs b/src/gallium/frontends/rusticl/api/queue.rs index 9da0f6b..73cf88d 100644 --- a/src/gallium/frontends/rusticl/api/queue.rs +++ b/src/gallium/frontends/rusticl/api/queue.rs @@ -11,7 +11,7 @@ use self::rusticl_opencl_gen::*; use std::sync::Arc; impl CLInfo for cl_command_queue { - fn query(&self, q: cl_command_queue_info) -> CLResult> { + fn query(&self, q: cl_command_queue_info, _: &[u8]) -> CLResult> { let queue = self.get_ref()?; Ok(match q { CL_QUEUE_CONTEXT => { diff --git a/src/gallium/frontends/rusticl/api/util.rs b/src/gallium/frontends/rusticl/api/util.rs index eb9f284..2e6adfd 100644 --- a/src/gallium/frontends/rusticl/api/util.rs +++ b/src/gallium/frontends/rusticl/api/util.rs @@ -20,7 +20,7 @@ use std::slice; use std::sync::Arc; pub trait CLInfo { - fn query(&self, q: I) -> CLResult>; + fn query(&self, q: I, vals: &[u8]) -> CLResult>; fn get_info( &self, @@ -29,7 +29,13 @@ pub trait CLInfo { param_value: *mut ::std::os::raw::c_void, param_value_size_ret: *mut usize, ) -> CLResult<()> { - let d = self.query(param_name)?; + let arr = if !param_value.is_null() { + unsafe { slice::from_raw_parts(param_value.cast(), param_value_size) } + } else { + &[] + }; + + let d = self.query(param_name, arr)?; let size: usize = d.len(); // CL_INVALID_VALUE [...] if size in bytes specified by param_value_size is < size of return -- 2.7.4