diff --git a/src/gallium/frontends/rusticl/api/memory.rs b/src/gallium/frontends/rusticl/api/memory.rs index 80d7955e987..f06e133badd 100644 --- a/src/gallium/frontends/rusticl/api/memory.rs +++ b/src/gallium/frontends/rusticl/api/memory.rs @@ -510,7 +510,7 @@ fn validate_image_desc( fn validate_image_bounds(i: &Mem, origin: CLVec, region: CLVec) -> CLResult<()> { let bound = region + origin; - if bound > i.image_desc.size() { + if bound > i.image_desc.api_size() { return Err(CL_INVALID_VALUE); } Ok(()) diff --git a/src/gallium/frontends/rusticl/core/memory.rs b/src/gallium/frontends/rusticl/core/memory.rs index 4d428f2d4fd..91dd70fdca7 100644 --- a/src/gallium/frontends/rusticl/core/memory.rs +++ b/src/gallium/frontends/rusticl/core/memory.rs @@ -66,6 +66,7 @@ pub trait CLImageDescInfo { fn row_pitch(&self) -> CLResult; fn slice_pitch(&self) -> CLResult; fn size(&self) -> CLVec; + fn api_size(&self) -> CLVec; fn dims(&self) -> u8 { self.type_info().0 @@ -124,6 +125,17 @@ impl CLImageDescInfo for cl_image_desc { CLVec::new([self.image_width, height, depth]) } + fn api_size(&self) -> CLVec { + let mut size = self.size(); + + if self.is_array() && self.dims() == 1 { + size[1] = size[2]; + size[2] = 1; + } + + size + } + fn bx(&self) -> CLResult { let size = self.size();