diff options
| author | 2018-06-04 20:48:15 -0400 | |
|---|---|---|
| committer | 2018-06-04 20:48:15 -0400 | |
| commit | e8bfff7b4bee1472ae618cecb52343a41be39b8b (patch) | |
| tree | 69b5926ccdfbc50eeb46737488ae8fe696fa090c /src/video_core/engines | |
| parent | Merge pull request #510 from Subv/isetp (diff) | |
| parent | GPU: Implemented the LOP32I instruction. (diff) | |
| download | yuzu-e8bfff7b4bee1472ae618cecb52343a41be39b8b.tar.gz yuzu-e8bfff7b4bee1472ae618cecb52343a41be39b8b.tar.xz yuzu-e8bfff7b4bee1472ae618cecb52343a41be39b8b.zip | |
Merge pull request #514 from Subv/lop32i
GPU: Implemented the LOP32I instruction.
Diffstat (limited to 'src/video_core/engines')
| -rw-r--r-- | src/video_core/engines/shader_bytecode.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/video_core/engines/shader_bytecode.h b/src/video_core/engines/shader_bytecode.h index 3add56155..22c122fcc 100644 --- a/src/video_core/engines/shader_bytecode.h +++ b/src/video_core/engines/shader_bytecode.h | |||
| @@ -156,6 +156,13 @@ enum class PredOperation : u64 { | |||
| 156 | Xor = 2, | 156 | Xor = 2, |
| 157 | }; | 157 | }; |
| 158 | 158 | ||
| 159 | enum class LogicOperation : u64 { | ||
| 160 | And = 0, | ||
| 161 | Or = 1, | ||
| 162 | Xor = 2, | ||
| 163 | PassB = 3, | ||
| 164 | }; | ||
| 165 | |||
| 159 | enum class SubOp : u64 { | 166 | enum class SubOp : u64 { |
| 160 | Cos = 0x0, | 167 | Cos = 0x0, |
| 161 | Sin = 0x1, | 168 | Sin = 0x1, |
| @@ -202,6 +209,12 @@ union Instruction { | |||
| 202 | BitField<42, 1, u64> negate_pred; | 209 | BitField<42, 1, u64> negate_pred; |
| 203 | } fmnmx; | 210 | } fmnmx; |
| 204 | 211 | ||
| 212 | union { | ||
| 213 | BitField<53, 2, LogicOperation> operation; | ||
| 214 | BitField<55, 1, u64> invert_a; | ||
| 215 | BitField<56, 1, u64> invert_b; | ||
| 216 | } lop; | ||
| 217 | |||
| 205 | float GetImm20_19() const { | 218 | float GetImm20_19() const { |
| 206 | float result{}; | 219 | float result{}; |
| 207 | u32 imm{static_cast<u32>(imm20_19)}; | 220 | u32 imm{static_cast<u32>(imm20_19)}; |
| @@ -391,6 +404,7 @@ public: | |||
| 391 | enum class Type { | 404 | enum class Type { |
| 392 | Trivial, | 405 | Trivial, |
| 393 | Arithmetic, | 406 | Arithmetic, |
| 407 | Logic, | ||
| 394 | Ffma, | 408 | Ffma, |
| 395 | Flow, | 409 | Flow, |
| 396 | Memory, | 410 | Memory, |
| @@ -524,7 +538,6 @@ private: | |||
| 524 | INST("0100110010110---", Id::F2I_C, Type::Arithmetic, "F2I_C"), | 538 | INST("0100110010110---", Id::F2I_C, Type::Arithmetic, "F2I_C"), |
| 525 | INST("0101110010110---", Id::F2I_R, Type::Arithmetic, "F2I_R"), | 539 | INST("0101110010110---", Id::F2I_R, Type::Arithmetic, "F2I_R"), |
| 526 | INST("0011100-10110---", Id::F2I_IMM, Type::Arithmetic, "F2I_IMM"), | 540 | INST("0011100-10110---", Id::F2I_IMM, Type::Arithmetic, "F2I_IMM"), |
| 527 | INST("000001----------", Id::LOP32I, Type::Arithmetic, "LOP32I"), | ||
| 528 | INST("0100110010011---", Id::MOV_C, Type::Arithmetic, "MOV_C"), | 541 | INST("0100110010011---", Id::MOV_C, Type::Arithmetic, "MOV_C"), |
| 529 | INST("0101110010011---", Id::MOV_R, Type::Arithmetic, "MOV_R"), | 542 | INST("0101110010011---", Id::MOV_R, Type::Arithmetic, "MOV_R"), |
| 530 | INST("0011100-10011---", Id::MOV_IMM, Type::Arithmetic, "MOV_IMM"), | 543 | INST("0011100-10011---", Id::MOV_IMM, Type::Arithmetic, "MOV_IMM"), |
| @@ -535,6 +548,7 @@ private: | |||
| 535 | INST("0100110001100---", Id::FMNMX_C, Type::Arithmetic, "FMNMX_C"), | 548 | INST("0100110001100---", Id::FMNMX_C, Type::Arithmetic, "FMNMX_C"), |
| 536 | INST("0101110001100---", Id::FMNMX_R, Type::Arithmetic, "FMNMX_R"), | 549 | INST("0101110001100---", Id::FMNMX_R, Type::Arithmetic, "FMNMX_R"), |
| 537 | INST("0011100-01100---", Id::FMNMX_IMM, Type::Arithmetic, "FMNMX_IMM"), | 550 | INST("0011100-01100---", Id::FMNMX_IMM, Type::Arithmetic, "FMNMX_IMM"), |
| 551 | INST("000001----------", Id::LOP32I, Type::Logic, "LOP32I"), | ||
| 538 | INST("0100110011100---", Id::I2I_C, Type::Conversion, "I2I_C"), | 552 | INST("0100110011100---", Id::I2I_C, Type::Conversion, "I2I_C"), |
| 539 | INST("0101110011100---", Id::I2I_R, Type::Conversion, "I2I_R"), | 553 | INST("0101110011100---", Id::I2I_R, Type::Conversion, "I2I_R"), |
| 540 | INST("01110001-1000---", Id::I2I_IMM, Type::Conversion, "I2I_IMM"), | 554 | INST("01110001-1000---", Id::I2I_IMM, Type::Conversion, "I2I_IMM"), |