Files
Xenia-Canary/src/xenia/gpu/ucode.cc
Triang3l b42680abf7 [GPU] Shader ALU refactoring + documentation
Mainly move instruction info from the ShaderTranslator to xe::gpu::ucode for future use in the CPU shader interpreter
2022-04-27 20:52:20 +03:00

121 lines
5.8 KiB
C++

/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/gpu/ucode.h"
namespace xe {
namespace gpu {
namespace ucode {
const AluScalarOpcodeInfo kAluScalarOpcodeInfos[64] = {
{"adds", 1, true, kAluOpChangedStateNone},
{"adds_prev", 1, false, kAluOpChangedStateNone},
{"muls", 1, true, kAluOpChangedStateNone},
{"muls_prev", 1, false, kAluOpChangedStateNone},
{"muls_prev2", 1, true, kAluOpChangedStateNone},
{"maxs", 1, true, kAluOpChangedStateNone},
{"mins", 1, true, kAluOpChangedStateNone},
{"seqs", 1, false, kAluOpChangedStateNone},
{"sgts", 1, false, kAluOpChangedStateNone},
{"sges", 1, false, kAluOpChangedStateNone},
{"snes", 1, false, kAluOpChangedStateNone},
{"frcs", 1, false, kAluOpChangedStateNone},
{"truncs", 1, false, kAluOpChangedStateNone},
{"floors", 1, false, kAluOpChangedStateNone},
{"exp", 1, false, kAluOpChangedStateNone},
{"logc", 1, false, kAluOpChangedStateNone},
{"log", 1, false, kAluOpChangedStateNone},
{"rcpc", 1, false, kAluOpChangedStateNone},
{"rcpf", 1, false, kAluOpChangedStateNone},
{"rcp", 1, false, kAluOpChangedStateNone},
{"rsqc", 1, false, kAluOpChangedStateNone},
{"rsqf", 1, false, kAluOpChangedStateNone},
{"rsq", 1, false, kAluOpChangedStateNone},
{"maxas", 1, true, kAluOpChangedStateAddressRegister},
{"maxasf", 1, true, kAluOpChangedStateAddressRegister},
{"subs", 1, true, kAluOpChangedStateNone},
{"subs_prev", 1, false, kAluOpChangedStateNone},
{"setp_eq", 1, false, kAluOpChangedStatePredicate},
{"setp_ne", 1, false, kAluOpChangedStatePredicate},
{"setp_gt", 1, false, kAluOpChangedStatePredicate},
{"setp_ge", 1, false, kAluOpChangedStatePredicate},
{"setp_inv", 1, false, kAluOpChangedStatePredicate},
{"setp_pop", 1, false, kAluOpChangedStatePredicate},
{"setp_clr", 0, false, kAluOpChangedStatePredicate},
{"setp_rstr", 1, false, kAluOpChangedStatePredicate},
{"kills_eq", 1, false, kAluOpChangedStatePixelKill},
{"kills_gt", 1, false, kAluOpChangedStatePixelKill},
{"kills_ge", 1, false, kAluOpChangedStatePixelKill},
{"kills_ne", 1, false, kAluOpChangedStatePixelKill},
{"kills_one", 1, false, kAluOpChangedStatePixelKill},
{"sqrt", 1, false, kAluOpChangedStateNone},
{"opcode_41", 0, false, kAluOpChangedStateNone},
{"mulsc", 2, false, kAluOpChangedStateNone},
{"mulsc", 2, false, kAluOpChangedStateNone},
{"addsc", 2, false, kAluOpChangedStateNone},
{"addsc", 2, false, kAluOpChangedStateNone},
{"subsc", 2, false, kAluOpChangedStateNone},
{"subsc", 2, false, kAluOpChangedStateNone},
{"sin", 1, false, kAluOpChangedStateNone},
{"cos", 1, false, kAluOpChangedStateNone},
{"retain_prev", 0, false, kAluOpChangedStateNone},
{"opcode_51", 0, false, kAluOpChangedStateNone},
{"opcode_52", 0, false, kAluOpChangedStateNone},
{"opcode_53", 0, false, kAluOpChangedStateNone},
{"opcode_54", 0, false, kAluOpChangedStateNone},
{"opcode_55", 0, false, kAluOpChangedStateNone},
{"opcode_56", 0, false, kAluOpChangedStateNone},
{"opcode_57", 0, false, kAluOpChangedStateNone},
{"opcode_58", 0, false, kAluOpChangedStateNone},
{"opcode_59", 0, false, kAluOpChangedStateNone},
{"opcode_60", 0, false, kAluOpChangedStateNone},
{"opcode_61", 0, false, kAluOpChangedStateNone},
{"opcode_62", 0, false, kAluOpChangedStateNone},
{"opcode_63", 0, false, kAluOpChangedStateNone},
};
const AluVectorOpcodeInfo kAluVectorOpcodeInfos[32] = {
{"add", {0b1111, 0b1111}, kAluOpChangedStateNone},
{"mul", {0b1111, 0b1111}, kAluOpChangedStateNone},
{"max", {0b1111, 0b1111}, kAluOpChangedStateNone},
{"min", {0b1111, 0b1111}, kAluOpChangedStateNone},
{"seq", {0b1111, 0b1111}, kAluOpChangedStateNone},
{"sgt", {0b1111, 0b1111}, kAluOpChangedStateNone},
{"sge", {0b1111, 0b1111}, kAluOpChangedStateNone},
{"sne", {0b1111, 0b1111}, kAluOpChangedStateNone},
{"frc", {0b1111}, kAluOpChangedStateNone},
{"trunc", {0b1111}, kAluOpChangedStateNone},
{"floor", {0b1111}, kAluOpChangedStateNone},
{"mad", {0b1111, 0b1111, 0b1111}, kAluOpChangedStateNone},
{"cndeq", {0b1111, 0b1111, 0b1111}, kAluOpChangedStateNone},
{"cndge", {0b1111, 0b1111, 0b1111}, kAluOpChangedStateNone},
{"cndgt", {0b1111, 0b1111, 0b1111}, kAluOpChangedStateNone},
{"dp4", {0b1111, 0b1111}, kAluOpChangedStateNone},
{"dp3", {0b0111, 0b0111}, kAluOpChangedStateNone},
{"dp2add", {0b0011, 0b0011, 0b0001}, kAluOpChangedStateNone},
{"cube", {0b1111, 0b1111}, kAluOpChangedStateNone},
{"max4", {0b1111}, kAluOpChangedStateNone},
{"setp_eq_push", {0b1001, 0b1001}, kAluOpChangedStatePredicate},
{"setp_ne_push", {0b1001, 0b1001}, kAluOpChangedStatePredicate},
{"setp_gt_push", {0b1001, 0b1001}, kAluOpChangedStatePredicate},
{"setp_ge_push", {0b1001, 0b1001}, kAluOpChangedStatePredicate},
{"kill_eq", {0b1111, 0b1111}, kAluOpChangedStatePixelKill},
{"kill_gt", {0b1111, 0b1111}, kAluOpChangedStatePixelKill},
{"kill_ge", {0b1111, 0b1111}, kAluOpChangedStatePixelKill},
{"kill_ne", {0b1111, 0b1111}, kAluOpChangedStatePixelKill},
{"dst", {0b0110, 0b1010}, kAluOpChangedStateNone},
{"maxa", {0b1111, 0b1111}, kAluOpChangedStateAddressRegister},
{"opcode_30", {}, kAluOpChangedStateNone},
{"opcode_31", {}, kAluOpChangedStateNone},
};
} // namespace ucode
} // namespace gpu
} // namespace xe