diff options
author | wwylele <wwylele@gmail.com> | 2017-04-17 09:01:45 +0200 |
---|---|---|
committer | wwylele <wwylele@gmail.com> | 2017-05-20 12:50:50 +0200 |
commit | ade45b5b9930b52b6a1d399306539073e8e2196d (patch) | |
tree | 19fc2c287591990b796530c383a1153f4b8fcda5 /src/video_core/pica_state.h | |
parent | Merge pull request #2696 from Subv/vfp_revert (diff) | |
download | yuzu-ade45b5b9930b52b6a1d399306539073e8e2196d.tar yuzu-ade45b5b9930b52b6a1d399306539073e8e2196d.tar.gz yuzu-ade45b5b9930b52b6a1d399306539073e8e2196d.tar.bz2 yuzu-ade45b5b9930b52b6a1d399306539073e8e2196d.tar.lz yuzu-ade45b5b9930b52b6a1d399306539073e8e2196d.tar.xz yuzu-ade45b5b9930b52b6a1d399306539073e8e2196d.tar.zst yuzu-ade45b5b9930b52b6a1d399306539073e8e2196d.zip |
Diffstat (limited to 'src/video_core/pica_state.h')
-rw-r--r-- | src/video_core/pica_state.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/video_core/pica_state.h b/src/video_core/pica_state.h index af7536d11..f46db09fb 100644 --- a/src/video_core/pica_state.h +++ b/src/video_core/pica_state.h @@ -7,6 +7,7 @@ #include <array> #include "common/bit_field.h" #include "common/common_types.h" +#include "common/vector_math.h" #include "video_core/primitive_assembly.h" #include "video_core/regs.h" #include "video_core/shader/shader.h" @@ -25,6 +26,59 @@ struct State { Shader::AttributeBuffer input_default_attributes; + struct ProcTex { + union ValueEntry { + u32 raw; + + // LUT value, encoded as 12-bit fixed point, with 12 fraction bits + BitField<0, 12, u32> value; // 0.0.12 fixed point + + // Difference between two entry values. Used for efficient interpolation. + // 0.0.12 fixed point with two's complement. The range is [-0.5, 0.5). + // Note: the type of this is different from the one of lighting LUT + BitField<12, 12, s32> difference; + + float ToFloat() const { + return static_cast<float>(value) / 4095.f; + } + + float DiffToFloat() const { + return static_cast<float>(difference) / 4095.f; + } + }; + + union ColorEntry { + u32 raw; + BitField<0, 8, u32> r; + BitField<8, 8, u32> g; + BitField<16, 8, u32> b; + BitField<24, 8, u32> a; + + Math::Vec4<u8> ToVector() const { + return {static_cast<u8>(r), static_cast<u8>(g), static_cast<u8>(b), + static_cast<u8>(a)}; + } + }; + + union ColorDifferenceEntry { + u32 raw; + BitField<0, 8, s32> r; // half of the difference between two ColorEntry + BitField<8, 8, s32> g; + BitField<16, 8, s32> b; + BitField<24, 8, s32> a; + + Math::Vec4<s32> ToVector() const { + return Math::Vec4<s32>{r, g, b, a} * 2; + } + }; + + std::array<ValueEntry, 128> noise_table; + std::array<ValueEntry, 128> color_map_table; + std::array<ValueEntry, 128> alpha_map_table; + std::array<ColorEntry, 256> color_table; + std::array<ColorDifferenceEntry, 256> color_diff_table; + } proctex; + struct { union LutEntry { // Used for raw access |