mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-11 08:00:13 +01:00
rusticl: use image_copy_buffer
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35809>
This commit is contained in:
parent
0003e16fc6
commit
c1ba062a30
2 changed files with 53 additions and 0 deletions
|
|
@ -1359,6 +1359,18 @@ impl Buffer {
|
|||
);
|
||||
}
|
||||
|
||||
if ctx.has_buffer_texture_copies() {
|
||||
let src_res = self.get_res_for_access(ctx, RWFlags::RD)?;
|
||||
let dst_res = dst.get_res_for_access(ctx, RWFlags::WR)?;
|
||||
|
||||
let src_offset = self
|
||||
.apply_offset(src_offset)?
|
||||
.try_into_with_err(CL_OUT_OF_HOST_MEMORY)?;
|
||||
let bx = create_pipe_box(dst_origin, *region, dst.mem_type)?;
|
||||
ctx.resource_copy_buffer_texture(src_res, dst_res, src_offset, &bx);
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let size = CLVec::calc_size(region, src_pitch);
|
||||
let src_offset = self.apply_offset(src_offset)?;
|
||||
let tx_src = self.tx(ctx, src_offset, size, RWFlags::RD)?;
|
||||
|
|
@ -1695,6 +1707,18 @@ impl Image {
|
|||
);
|
||||
}
|
||||
|
||||
if ctx.has_buffer_texture_copies() {
|
||||
let src_res = self.get_res_for_access(ctx, RWFlags::RD)?;
|
||||
let dst_res = dst.get_res_for_access(ctx, RWFlags::WR)?;
|
||||
|
||||
let dst_offset = dst
|
||||
.apply_offset(dst_offset)?
|
||||
.try_into_with_err(CL_OUT_OF_HOST_MEMORY)?;
|
||||
let bx = create_pipe_box(src_origin, *region, self.mem_type)?;
|
||||
ctx.resource_copy_buffer_texture(src_res, dst_res, dst_offset, &bx);
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let tx_src = self.tx_image(
|
||||
ctx,
|
||||
&create_pipe_box(src_origin, *region, self.mem_type)?,
|
||||
|
|
|
|||
|
|
@ -235,6 +235,35 @@ impl PipeContext {
|
|||
self.resource_copy_region(src, dst, dst_offset, bx)
|
||||
}
|
||||
|
||||
pub fn has_buffer_texture_copies(&self) -> bool {
|
||||
unsafe { self.pipe.as_ref() }.image_copy_buffer.is_some()
|
||||
}
|
||||
|
||||
/// Copies between a buffer and a texture if supported by the context
|
||||
/// ([Self::has_buffer_texture_copies]).
|
||||
pub fn resource_copy_buffer_texture(
|
||||
&self,
|
||||
src: &PipeResource,
|
||||
dst: &PipeResource,
|
||||
buffer_offset: u32,
|
||||
bx: &pipe_box,
|
||||
) {
|
||||
debug_assert_ne!(src.is_buffer(), dst.is_buffer());
|
||||
|
||||
unsafe {
|
||||
self.pipe.as_ref().image_copy_buffer.unwrap()(
|
||||
self.pipe.as_ptr(),
|
||||
dst.pipe(),
|
||||
src.pipe(),
|
||||
buffer_offset,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
bx,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn resource_map(
|
||||
&self,
|
||||
res: &PipeResource,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue