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
@@ -2144,7 +2144,7 @@
|
|||||||
"description": "nak: Fix 8-bit selection for vectors",
|
"description": "nak: Fix 8-bit selection for vectors",
|
||||||
"nominated": true,
|
"nominated": true,
|
||||||
"nomination_type": 2,
|
"nomination_type": 2,
|
||||||
"resolution": 0,
|
"resolution": 1,
|
||||||
"main_sha": null,
|
"main_sha": null,
|
||||||
"because_sha": "9e84e9e44b111a6afe8a346fb0bb74f9c597af61",
|
"because_sha": "9e84e9e44b111a6afe8a346fb0bb74f9c597af61",
|
||||||
"notes": null
|
"notes": null
|
||||||
|
@@ -543,24 +543,41 @@ impl<'a> ShaderFromNir<'a> {
|
|||||||
}
|
}
|
||||||
8 => {
|
8 => {
|
||||||
for dc in 0..bits.div_ceil(32) {
|
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];
|
let mut psel = [0_u8; 4];
|
||||||
|
|
||||||
for b in 0..4 {
|
for b in 0..4 {
|
||||||
let sc = dc * 4 + b;
|
let sc = dc * 4 + b;
|
||||||
if sc < srcs.len() {
|
if sc < srcs.len() {
|
||||||
let (ssa, byte) = srcs[sc];
|
let (ssa, byte) = srcs[sc];
|
||||||
|
// Deduplicate psrc entries
|
||||||
for i in 0..4_u8 {
|
for i in 0..4_u8 {
|
||||||
let psrc_i = &mut psrc[usize::from(i)];
|
let psrc_i = &mut psrc[usize::from(i)];
|
||||||
if *psrc_i == Src::new_zero() {
|
if psrc_i.is_none() {
|
||||||
*psrc_i = ssa.into();
|
*psrc_i = Some(ssa.into());
|
||||||
} else if *psrc_i != Src::from(ssa) {
|
} else if *psrc_i
|
||||||
|
!= Some(Src::from(ssa))
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
psel[b] = i * 4 + byte;
|
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]);
|
comps.push(b.prmt4(psrc, psel)[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user