/** ****************************************************************************** * Xenia : Xbox 360 Emulator Research Project * ****************************************************************************** * Copyright 2014 Ben Vanik. All rights reserved. * * Released under the BSD license - see LICENSE in the root for more details. * ****************************************************************************** */ #ifndef XENIA_GPU_REGISTER_FILE_H_ #define XENIA_GPU_REGISTER_FILE_H_ #include #include #include "xenia/gpu/registers.h" namespace xe { namespace gpu { struct RegisterInfo { enum class Type { kDword, kFloat, }; Type type; const char* name; }; class RegisterFile { public: RegisterFile(); static const RegisterInfo* GetRegisterInfo(uint32_t index); static const size_t kRegisterCount = 0x5003; union RegisterValue { uint32_t u32; float f32; }; RegisterValue values[kRegisterCount]; RegisterValue& operator[](uint32_t reg) { return values[reg]; } RegisterValue& operator[](Register reg) { return values[reg]; } template T& Get(uint32_t reg) { return *reinterpret_cast(&values[reg]); } template T& Get(Register reg) { return *reinterpret_cast(&values[reg]); } template T& Get() { return *reinterpret_cast(&values[T::register_index]); } }; } // namespace gpu } // namespace xe #endif // XENIA_GPU_REGISTER_FILE_H_