diff options
| author | 2020-04-12 10:44:03 -0400 | |
|---|---|---|
| committer | 2020-04-12 10:44:03 -0400 | |
| commit | 3d91dbb21d8fec44ca692a7e9219daa8b3521e08 (patch) | |
| tree | cb23360139e5d9948586b66ffa6b081e77859343 /src/video_core/engines | |
| parent | Merge pull request #3644 from ReinUsesLisp/msaa (diff) | |
| parent | shader/video: Partially implement VMNMX (diff) | |
| download | yuzu-3d91dbb21d8fec44ca692a7e9219daa8b3521e08.tar.gz yuzu-3d91dbb21d8fec44ca692a7e9219daa8b3521e08.tar.xz yuzu-3d91dbb21d8fec44ca692a7e9219daa8b3521e08.zip | |
Merge pull request #3578 from ReinUsesLisp/vmnmx
shader/video: Partially implement VMNMX
Diffstat (limited to 'src/video_core/engines')
| -rw-r--r-- | src/video_core/engines/shader_bytecode.h | 57 |
1 files changed, 56 insertions, 1 deletions
diff --git a/src/video_core/engines/shader_bytecode.h b/src/video_core/engines/shader_bytecode.h index 498936f0c..c66c66f6c 100644 --- a/src/video_core/engines/shader_bytecode.h +++ b/src/video_core/engines/shader_bytecode.h | |||
| @@ -290,6 +290,23 @@ enum class VmadShr : u64 { | |||
| 290 | Shr15 = 2, | 290 | Shr15 = 2, |
| 291 | }; | 291 | }; |
| 292 | 292 | ||
| 293 | enum class VmnmxType : u64 { | ||
| 294 | Bits8, | ||
| 295 | Bits16, | ||
| 296 | Bits32, | ||
| 297 | }; | ||
| 298 | |||
| 299 | enum class VmnmxOperation : u64 { | ||
| 300 | Mrg_16H = 0, | ||
| 301 | Mrg_16L = 1, | ||
| 302 | Mrg_8B0 = 2, | ||
| 303 | Mrg_8B2 = 3, | ||
| 304 | Acc = 4, | ||
| 305 | Min = 5, | ||
| 306 | Max = 6, | ||
| 307 | Nop = 7, | ||
| 308 | }; | ||
| 309 | |||
| 293 | enum class XmadMode : u64 { | 310 | enum class XmadMode : u64 { |
| 294 | None = 0, | 311 | None = 0, |
| 295 | CLo = 1, | 312 | CLo = 1, |
| @@ -1651,6 +1668,42 @@ union Instruction { | |||
| 1651 | } vmad; | 1668 | } vmad; |
| 1652 | 1669 | ||
| 1653 | union { | 1670 | union { |
| 1671 | BitField<54, 1, u64> is_dest_signed; | ||
| 1672 | BitField<48, 1, u64> is_src_a_signed; | ||
| 1673 | BitField<49, 1, u64> is_src_b_signed; | ||
| 1674 | BitField<37, 2, u64> src_format_a; | ||
| 1675 | BitField<29, 2, u64> src_format_b; | ||
| 1676 | BitField<56, 1, u64> mx; | ||
| 1677 | BitField<55, 1, u64> sat; | ||
| 1678 | BitField<36, 2, u64> selector_a; | ||
| 1679 | BitField<28, 2, u64> selector_b; | ||
| 1680 | BitField<50, 1, u64> is_op_b_register; | ||
| 1681 | BitField<51, 3, VmnmxOperation> operation; | ||
| 1682 | |||
| 1683 | VmnmxType SourceFormatA() const { | ||
| 1684 | switch (src_format_a) { | ||
| 1685 | case 0b11: | ||
| 1686 | return VmnmxType::Bits32; | ||
| 1687 | case 0b10: | ||
| 1688 | return VmnmxType::Bits16; | ||
| 1689 | default: | ||
| 1690 | return VmnmxType::Bits8; | ||
| 1691 | } | ||
| 1692 | } | ||
| 1693 | |||
| 1694 | VmnmxType SourceFormatB() const { | ||
| 1695 | switch (src_format_b) { | ||
| 1696 | case 0b11: | ||
| 1697 | return VmnmxType::Bits32; | ||
| 1698 | case 0b10: | ||
| 1699 | return VmnmxType::Bits16; | ||
| 1700 | default: | ||
| 1701 | return VmnmxType::Bits8; | ||
| 1702 | } | ||
| 1703 | } | ||
| 1704 | } vmnmx; | ||
| 1705 | |||
| 1706 | union { | ||
| 1654 | BitField<20, 16, u64> imm20_16; | 1707 | BitField<20, 16, u64> imm20_16; |
| 1655 | BitField<35, 1, u64> high_b_rr; // used on RR | 1708 | BitField<35, 1, u64> high_b_rr; // used on RR |
| 1656 | BitField<36, 1, u64> product_shift_left; | 1709 | BitField<36, 1, u64> product_shift_left; |
| @@ -1763,6 +1816,7 @@ public: | |||
| 1763 | MEMBAR, | 1816 | MEMBAR, |
| 1764 | VMAD, | 1817 | VMAD, |
| 1765 | VSETP, | 1818 | VSETP, |
| 1819 | VMNMX, | ||
| 1766 | FFMA_IMM, // Fused Multiply and Add | 1820 | FFMA_IMM, // Fused Multiply and Add |
| 1767 | FFMA_CR, | 1821 | FFMA_CR, |
| 1768 | FFMA_RC, | 1822 | FFMA_RC, |
| @@ -2070,6 +2124,7 @@ private: | |||
| 2070 | INST("1110111110011---", Id::MEMBAR, Type::Trivial, "MEMBAR"), | 2124 | INST("1110111110011---", Id::MEMBAR, Type::Trivial, "MEMBAR"), |
| 2071 | INST("01011111--------", Id::VMAD, Type::Video, "VMAD"), | 2125 | INST("01011111--------", Id::VMAD, Type::Video, "VMAD"), |
| 2072 | INST("0101000011110---", Id::VSETP, Type::Video, "VSETP"), | 2126 | INST("0101000011110---", Id::VSETP, Type::Video, "VSETP"), |
| 2127 | INST("0011101---------", Id::VMNMX, Type::Video, "VMNMX"), | ||
| 2073 | INST("0011001-1-------", Id::FFMA_IMM, Type::Ffma, "FFMA_IMM"), | 2128 | INST("0011001-1-------", Id::FFMA_IMM, Type::Ffma, "FFMA_IMM"), |
| 2074 | INST("010010011-------", Id::FFMA_CR, Type::Ffma, "FFMA_CR"), | 2129 | INST("010010011-------", Id::FFMA_CR, Type::Ffma, "FFMA_CR"), |
| 2075 | INST("010100011-------", Id::FFMA_RC, Type::Ffma, "FFMA_RC"), | 2130 | INST("010100011-------", Id::FFMA_RC, Type::Ffma, "FFMA_RC"), |
| @@ -2170,7 +2225,7 @@ private: | |||
| 2170 | INST("0011011-11111---", Id::SHF_LEFT_IMM, Type::Shift, "SHF_LEFT_IMM"), | 2225 | INST("0011011-11111---", Id::SHF_LEFT_IMM, Type::Shift, "SHF_LEFT_IMM"), |
| 2171 | INST("0100110011100---", Id::I2I_C, Type::Conversion, "I2I_C"), | 2226 | INST("0100110011100---", Id::I2I_C, Type::Conversion, "I2I_C"), |
| 2172 | INST("0101110011100---", Id::I2I_R, Type::Conversion, "I2I_R"), | 2227 | INST("0101110011100---", Id::I2I_R, Type::Conversion, "I2I_R"), |
| 2173 | INST("0011101-11100---", Id::I2I_IMM, Type::Conversion, "I2I_IMM"), | 2228 | INST("0011100-11100---", Id::I2I_IMM, Type::Conversion, "I2I_IMM"), |
| 2174 | INST("0100110010111---", Id::I2F_C, Type::Conversion, "I2F_C"), | 2229 | INST("0100110010111---", Id::I2F_C, Type::Conversion, "I2F_C"), |
| 2175 | INST("0101110010111---", Id::I2F_R, Type::Conversion, "I2F_R"), | 2230 | INST("0101110010111---", Id::I2F_R, Type::Conversion, "I2F_R"), |
| 2176 | INST("0011100-10111---", Id::I2F_IMM, Type::Conversion, "I2F_IMM"), | 2231 | INST("0011100-10111---", Id::I2F_IMM, Type::Conversion, "I2F_IMM"), |