mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 22:08:26 +02:00
rusticl/mesa: add buffer and texture variant for resource_copy_region
We'll add mipmap parameters to it, so it's better to split it up, so it's easier to use the interface. Reviewed-by: Adam Jackson <ajax@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33426>
This commit is contained in:
parent
a2a3be3baa
commit
16623f654f
3 changed files with 47 additions and 14 deletions
|
|
@ -477,7 +477,7 @@ pub fn copy_cube_to_slice(ctx: &QueueContext, mem_objects: &[Mem]) -> CLResult<(
|
|||
let cl_res = image.get_res_for_access(ctx, RWFlags::WR)?;
|
||||
let gl_res = gl_obj.shadow_map.as_ref().unwrap().get(cl_res).unwrap();
|
||||
|
||||
ctx.resource_copy_region(gl_res.as_ref(), cl_res.as_ref(), &dst_offset, &src_bx);
|
||||
ctx.resource_copy_texture(gl_res.as_ref(), cl_res.as_ref(), &dst_offset, &src_bx);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
|
@ -505,7 +505,7 @@ pub fn copy_slice_to_cube(ctx: &QueueContext, mem_objects: &[Mem]) -> CLResult<(
|
|||
let cl_res = image.get_res_for_access(ctx, RWFlags::WR)?;
|
||||
let gl_res = gl_obj.shadow_map.as_ref().unwrap().get(cl_res).unwrap();
|
||||
|
||||
ctx.resource_copy_region(cl_res.as_ref(), gl_res.as_ref(), &dst_offset, &src_bx);
|
||||
ctx.resource_copy_texture(cl_res.as_ref(), gl_res.as_ref(), &dst_offset, &src_bx);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
|
|
|||
|
|
@ -1172,19 +1172,17 @@ impl Buffer {
|
|||
dst_offset: usize,
|
||||
size: usize,
|
||||
) -> CLResult<()> {
|
||||
let src_offset = self.apply_offset(src_offset)?;
|
||||
let dst_offset = dst.apply_offset(dst_offset)?;
|
||||
let src_res = self.get_res_for_access(ctx, RWFlags::RD)?;
|
||||
let dst_res = dst.get_res_for_access(ctx, RWFlags::WR)?;
|
||||
let size = size.try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?;
|
||||
let src_offset = self
|
||||
.apply_offset(src_offset)?
|
||||
.try_into_with_err(CL_OUT_OF_HOST_MEMORY)?;
|
||||
let dst_offset = dst
|
||||
.apply_offset(dst_offset)?
|
||||
.try_into_with_err(CL_OUT_OF_HOST_MEMORY)?;
|
||||
|
||||
let bx = create_pipe_box(
|
||||
[src_offset, 0, 0].into(),
|
||||
[size, 1, 1].into(),
|
||||
CL_MEM_OBJECT_BUFFER,
|
||||
)?;
|
||||
let dst_origin: [u32; 3] = [dst_offset.try_into_with_err(CL_OUT_OF_HOST_MEMORY)?, 0, 0];
|
||||
|
||||
ctx.resource_copy_region(src_res, dst_res, &dst_origin, &bx);
|
||||
ctx.resource_copy_buffer(src_res, src_offset, dst_res, dst_offset, size);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
@ -1620,7 +1618,7 @@ impl Image {
|
|||
(dst_origin[1], dst_origin[2]) = (dst_origin[2], dst_origin[1]);
|
||||
}
|
||||
|
||||
ctx.resource_copy_region(src_res, dst_res, &dst_origin, &bx);
|
||||
ctx.resource_copy_texture(src_res, dst_res, &dst_origin, &bx);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ impl PipeContext {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn resource_copy_region(
|
||||
fn resource_copy_region(
|
||||
&self,
|
||||
src: &PipeResource,
|
||||
dst: &PipeResource,
|
||||
|
|
@ -184,6 +184,41 @@ impl PipeContext {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn resource_copy_buffer(
|
||||
&self,
|
||||
src: &PipeResource,
|
||||
src_offset: i32,
|
||||
dst: &PipeResource,
|
||||
dst_offset: u32,
|
||||
width: i32,
|
||||
) {
|
||||
debug_assert!(src.is_buffer());
|
||||
debug_assert!(dst.is_buffer());
|
||||
|
||||
let bx = pipe_box {
|
||||
x: src_offset,
|
||||
width: width,
|
||||
height: 1,
|
||||
depth: 1,
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
self.resource_copy_region(src, dst, &[dst_offset, 0, 0], &bx)
|
||||
}
|
||||
|
||||
pub fn resource_copy_texture(
|
||||
&self,
|
||||
src: &PipeResource,
|
||||
dst: &PipeResource,
|
||||
dst_offset: &[u32; 3],
|
||||
bx: &pipe_box,
|
||||
) {
|
||||
debug_assert!(!src.is_buffer());
|
||||
debug_assert!(!dst.is_buffer());
|
||||
|
||||
self.resource_copy_region(src, dst, dst_offset, bx)
|
||||
}
|
||||
|
||||
fn resource_map(
|
||||
&self,
|
||||
res: &PipeResource,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue