nak: Use the right source types for I2F, F2I, and F2F
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26246>
This commit is contained in:
committed by
Marge Bot
parent
d621f2ccfd
commit
16e55dc7d5
@@ -2630,11 +2630,10 @@ impl DisplayOp for OpShf {
|
||||
impl_display_for_op!(OpShf);
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(SrcsAsSlice, DstsAsSlice)]
|
||||
#[derive(DstsAsSlice)]
|
||||
pub struct OpF2F {
|
||||
pub dst: Dst,
|
||||
|
||||
#[src_type(F32)]
|
||||
pub src: Src,
|
||||
|
||||
pub src_type: FloatType,
|
||||
@@ -2645,6 +2644,25 @@ pub struct OpF2F {
|
||||
pub high: bool,
|
||||
}
|
||||
|
||||
impl SrcsAsSlice for OpF2F {
|
||||
fn srcs_as_slice(&self) -> &[Src] {
|
||||
std::slice::from_ref(&self.src)
|
||||
}
|
||||
|
||||
fn srcs_as_mut_slice(&mut self) -> &mut [Src] {
|
||||
std::slice::from_mut(&mut self.src)
|
||||
}
|
||||
|
||||
fn src_types(&self) -> SrcTypeList {
|
||||
let src_type = match self.src_type {
|
||||
FloatType::F16 => SrcType::ALU,
|
||||
FloatType::F32 => SrcType::F32,
|
||||
FloatType::F64 => SrcType::F64,
|
||||
};
|
||||
SrcTypeList::Uniform(src_type)
|
||||
}
|
||||
}
|
||||
|
||||
impl DisplayOp for OpF2F {
|
||||
fn fmt_op(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "f2f")?;
|
||||
@@ -2661,11 +2679,10 @@ impl DisplayOp for OpF2F {
|
||||
impl_display_for_op!(OpF2F);
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(SrcsAsSlice, DstsAsSlice)]
|
||||
#[derive(DstsAsSlice)]
|
||||
pub struct OpF2I {
|
||||
pub dst: Dst,
|
||||
|
||||
#[src_type(F32)]
|
||||
pub src: Src,
|
||||
|
||||
pub src_type: FloatType,
|
||||
@@ -2673,6 +2690,25 @@ pub struct OpF2I {
|
||||
pub rnd_mode: FRndMode,
|
||||
}
|
||||
|
||||
impl SrcsAsSlice for OpF2I {
|
||||
fn srcs_as_slice(&self) -> &[Src] {
|
||||
std::slice::from_ref(&self.src)
|
||||
}
|
||||
|
||||
fn srcs_as_mut_slice(&mut self) -> &mut [Src] {
|
||||
std::slice::from_mut(&mut self.src)
|
||||
}
|
||||
|
||||
fn src_types(&self) -> SrcTypeList {
|
||||
let src_type = match self.src_type {
|
||||
FloatType::F16 => SrcType::ALU,
|
||||
FloatType::F32 => SrcType::F32,
|
||||
FloatType::F64 => SrcType::F64,
|
||||
};
|
||||
SrcTypeList::Uniform(src_type)
|
||||
}
|
||||
}
|
||||
|
||||
impl DisplayOp for OpF2I {
|
||||
fn fmt_op(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(
|
||||
@@ -2685,11 +2721,10 @@ impl DisplayOp for OpF2I {
|
||||
impl_display_for_op!(OpF2I);
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(SrcsAsSlice, DstsAsSlice)]
|
||||
#[derive(DstsAsSlice)]
|
||||
pub struct OpI2F {
|
||||
pub dst: Dst,
|
||||
|
||||
#[src_type(ALU)]
|
||||
pub src: Src,
|
||||
|
||||
pub dst_type: FloatType,
|
||||
@@ -2697,6 +2732,24 @@ pub struct OpI2F {
|
||||
pub rnd_mode: FRndMode,
|
||||
}
|
||||
|
||||
impl SrcsAsSlice for OpI2F {
|
||||
fn srcs_as_slice(&self) -> &[Src] {
|
||||
std::slice::from_ref(&self.src)
|
||||
}
|
||||
|
||||
fn srcs_as_mut_slice(&mut self) -> &mut [Src] {
|
||||
std::slice::from_mut(&mut self.src)
|
||||
}
|
||||
|
||||
fn src_types(&self) -> SrcTypeList {
|
||||
if self.src_type.bits() <= 32 {
|
||||
SrcTypeList::Uniform(SrcType::ALU)
|
||||
} else {
|
||||
SrcTypeList::Uniform(SrcType::GPR)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl DisplayOp for OpI2F {
|
||||
fn fmt_op(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(
|
||||
@@ -2731,7 +2784,7 @@ impl SrcsAsSlice for OpFRnd {
|
||||
|
||||
fn src_types(&self) -> SrcTypeList {
|
||||
let src_type = match self.src_type {
|
||||
FloatType::F16 => unimplemented!(),
|
||||
FloatType::F16 => SrcType::ALU,
|
||||
FloatType::F32 => SrcType::F32,
|
||||
FloatType::F64 => SrcType::F64,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user