diff --git a/src/gallium/frontends/rusticl/api/icd.rs b/src/gallium/frontends/rusticl/api/icd.rs index 2c38be30217..3c362efadda 100644 --- a/src/gallium/frontends/rusticl/api/icd.rs +++ b/src/gallium/frontends/rusticl/api/icd.rs @@ -534,7 +534,7 @@ extern "C" fn cl_retain_command_queue(command_queue: cl_command_queue) -> cl_int } extern "C" fn cl_release_command_queue(command_queue: cl_command_queue) -> cl_int { - match_err!(command_queue.release()) + match_err!(release_command_queue(command_queue)) } extern "C" fn cl_get_command_queue_info( diff --git a/src/gallium/frontends/rusticl/api/queue.rs b/src/gallium/frontends/rusticl/api/queue.rs index aaabb30a3c4..ee2f09c7aa6 100644 --- a/src/gallium/frontends/rusticl/api/queue.rs +++ b/src/gallium/frontends/rusticl/api/queue.rs @@ -79,3 +79,11 @@ pub fn finish_queue(command_queue: cl_command_queue) -> CLResult<()> { // CL_INVALID_COMMAND_QUEUE if command_queue is not a valid host command-queue. command_queue.get_ref()?.flush(true) } + +pub fn release_command_queue(command_queue: cl_command_queue) -> CLResult<()> { + // clReleaseCommandQueue performs an implicit flush to issue any previously queued OpenCL + // commands in command_queue. + flush_queue(command_queue)?; + command_queue.release()?; + Ok(()) +}