rusticl/memory: properly set pipe_image_view::access

Cc: mesa-stable
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/13294
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35305>
(cherry picked from commit f663e3330c)
This commit is contained in:
Karol Herbst 2025-06-03 09:09:46 +02:00 committed by Eric Engestrom
parent ef0df70f62
commit cb058e4b63
3 changed files with 14 additions and 33 deletions

View file

@ -664,7 +664,7 @@
"description": "rusticl/memory: properly set pipe_image_view::access",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null,
"notes": null

View file

@ -1761,19 +1761,6 @@ impl Image {
)
}
fn pipe_image_host_access(&self) -> u16 {
// those flags are all mutually exclusive
(if bit_check(self.flags, CL_MEM_HOST_READ_ONLY) {
PIPE_IMAGE_ACCESS_READ
} else if bit_check(self.flags, CL_MEM_HOST_WRITE_ONLY) {
PIPE_IMAGE_ACCESS_WRITE
} else if bit_check(self.flags, CL_MEM_HOST_NO_ACCESS) {
0
} else {
PIPE_IMAGE_ACCESS_READ_WRITE
}) as u16
}
pub fn read(
&self,
dst: MutMemoryPtr,
@ -1995,22 +1982,18 @@ impl Image {
let res = self.get_res_for_access(ctx, rw)?;
if res.is_buffer() && self.mem_type == CL_MEM_OBJECT_IMAGE2D {
Ok(res.pipe_image_view_2d_buffer(
self.pipe_format,
read_write,
self.pipe_image_host_access(),
&self.buffer_2d_info()?,
))
Ok(
res.pipe_image_view_2d_buffer(
self.pipe_format,
read_write,
&self.buffer_2d_info()?,
),
)
} else if res.is_buffer() {
let size = self.size.try_into_with_err(CL_OUT_OF_RESOURCES)?;
Ok(res.pipe_image_view_1d_buffer(
self.pipe_format,
read_write,
self.pipe_image_host_access(),
size,
))
Ok(res.pipe_image_view_1d_buffer(self.pipe_format, read_write, size))
} else {
Ok(res.pipe_image_view(read_write, self.pipe_image_host_access()))
Ok(res.pipe_image_view(read_write))
}
}
}

View file

@ -124,7 +124,7 @@ impl PipeResource {
self.as_ref().flags & PIPE_RESOURCE_FLAG_RUSTICL_IS_USER != 0
}
pub fn pipe_image_view(&self, read_write: bool, host_access: u16) -> PipeImageView {
pub fn pipe_image_view(&self, read_write: bool) -> PipeImageView {
debug_assert!(!self.is_buffer());
let pipe = self.as_ref();
@ -146,7 +146,7 @@ impl PipeResource {
PipeImageView::new(pipe_image_view {
resource: self.pipe(),
format: pipe.format(),
access: host_access,
access: shader_access,
shader_access: shader_access,
u: pipe_image_view__bindgen_ty_1 { tex: tex },
})
@ -156,7 +156,6 @@ impl PipeResource {
&self,
format: pipe_format,
read_write: bool,
host_access: u16,
size: u32,
) -> PipeImageView {
debug_assert!(self.is_buffer());
@ -170,7 +169,7 @@ impl PipeResource {
PipeImageView::new(pipe_image_view {
resource: self.pipe(),
format: format,
access: host_access,
access: shader_access,
shader_access: shader_access,
u: pipe_image_view__bindgen_ty_1 {
buf: pipe_image_view__bindgen_ty_1__bindgen_ty_2 {
@ -185,7 +184,6 @@ impl PipeResource {
&self,
format: pipe_format,
read_write: bool,
host_access: u16,
app_img_info: &AppImgInfo,
) -> PipeImageView {
debug_assert!(self.is_buffer());
@ -199,7 +197,7 @@ impl PipeResource {
PipeImageView::new(pipe_image_view {
resource: self.pipe(),
format: format,
access: PIPE_IMAGE_ACCESS_TEX2D_FROM_BUFFER as u16 | host_access,
access: PIPE_IMAGE_ACCESS_TEX2D_FROM_BUFFER as u16 | shader_access,
shader_access: shader_access,
u: pipe_image_view__bindgen_ty_1 {
tex2d_from_buf: pipe_tex2d_from_buf {