nak: Fix 8-bit selection for vectors
This fix at least permutation issues on vec16 of 8-bits values for cooperative matrix. Fixes:9e84e9e44b
("nak: Add base support for 8 and 16-bit types") Suggested-by: M Henning <drawoc@darkrefraction.com> Signed-off-by: Mary Guillemard <mary.guillemard@collabora.com> Reviewed-by: M Henning <drawoc@darkrefraction.com> (cherry picked from commit979dfaf0bb
) Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32852>
This commit is contained in:

committed by
Dylan Baker

parent
6d33b742b0
commit
c1ecf08e0d
@@ -543,24 +543,41 @@ impl<'a> ShaderFromNir<'a> {
|
||||
}
|
||||
8 => {
|
||||
for dc in 0..bits.div_ceil(32) {
|
||||
let mut psrc = [Src::new_zero(); 4];
|
||||
let mut psrc = [None; 4];
|
||||
let mut psel = [0_u8; 4];
|
||||
|
||||
for b in 0..4 {
|
||||
let sc = dc * 4 + b;
|
||||
if sc < srcs.len() {
|
||||
let (ssa, byte) = srcs[sc];
|
||||
// Deduplicate psrc entries
|
||||
for i in 0..4_u8 {
|
||||
let psrc_i = &mut psrc[usize::from(i)];
|
||||
if *psrc_i == Src::new_zero() {
|
||||
*psrc_i = ssa.into();
|
||||
} else if *psrc_i != Src::from(ssa) {
|
||||
if psrc_i.is_none() {
|
||||
*psrc_i = Some(ssa.into());
|
||||
} else if *psrc_i
|
||||
!= Some(Src::from(ssa))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
psel[b] = i * 4 + byte;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let psrc = {
|
||||
let mut res = [Src::new_zero(); 4];
|
||||
|
||||
for (idx, src) in psrc.iter().enumerate() {
|
||||
if let Some(src) = src {
|
||||
res[idx] = *src;
|
||||
}
|
||||
}
|
||||
|
||||
res
|
||||
};
|
||||
|
||||
comps.push(b.prmt4(psrc, psel)[0]);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user