summaryrefslogtreecommitdiff
path: root/src/video_core/swrasterizer/rasterizer.cpp
diff options
context:
space:
mode:
authorGravatar Yuri Kunde Schlesner2017-01-29 19:25:48 -0800
committerGravatar Yuri Kunde Schlesner2017-02-12 18:13:04 -0800
commit426fda1d524b17acd10d962a03af872a85342eca (patch)
treec9ad03dd5495a9a83b30209492720e979e4fbeb9 /src/video_core/swrasterizer/rasterizer.cpp
parentSWRasterizer: Move texturing functions to their own file (diff)
downloadyuzu-426fda1d524b17acd10d962a03af872a85342eca.tar.gz
yuzu-426fda1d524b17acd10d962a03af872a85342eca.tar.xz
yuzu-426fda1d524b17acd10d962a03af872a85342eca.zip
SWRasterizer: Move more framebuffer functions to file
Diffstat (limited to 'src/video_core/swrasterizer/rasterizer.cpp')
-rw-r--r--src/video_core/swrasterizer/rasterizer.cpp100
1 files changed, 0 insertions, 100 deletions
diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp
index 0fd842abe..7557fcb89 100644
--- a/src/video_core/swrasterizer/rasterizer.cpp
+++ b/src/video_core/swrasterizer/rasterizer.cpp
@@ -31,106 +31,6 @@
31namespace Pica { 31namespace Pica {
32namespace Rasterizer { 32namespace Rasterizer {
33 33
34static Math::Vec4<u8> EvaluateBlendEquation(const Math::Vec4<u8>& src,
35 const Math::Vec4<u8>& srcfactor,
36 const Math::Vec4<u8>& dest,
37 const Math::Vec4<u8>& destfactor,
38 FramebufferRegs::BlendEquation equation) {
39 Math::Vec4<int> result;
40
41 auto src_result = (src * srcfactor).Cast<int>();
42 auto dst_result = (dest * destfactor).Cast<int>();
43
44 switch (equation) {
45 case FramebufferRegs::BlendEquation::Add:
46 result = (src_result + dst_result) / 255;
47 break;
48
49 case FramebufferRegs::BlendEquation::Subtract:
50 result = (src_result - dst_result) / 255;
51 break;
52
53 case FramebufferRegs::BlendEquation::ReverseSubtract:
54 result = (dst_result - src_result) / 255;
55 break;
56
57 // TODO: How do these two actually work? OpenGL doesn't include the blend factors in the
58 // min/max computations, but is this what the 3DS actually does?
59 case FramebufferRegs::BlendEquation::Min:
60 result.r() = std::min(src.r(), dest.r());
61 result.g() = std::min(src.g(), dest.g());
62 result.b() = std::min(src.b(), dest.b());
63 result.a() = std::min(src.a(), dest.a());
64 break;
65
66 case FramebufferRegs::BlendEquation::Max:
67 result.r() = std::max(src.r(), dest.r());
68 result.g() = std::max(src.g(), dest.g());
69 result.b() = std::max(src.b(), dest.b());
70 result.a() = std::max(src.a(), dest.a());
71 break;
72
73 default:
74 LOG_CRITICAL(HW_GPU, "Unknown RGB blend equation %x", equation);
75 UNIMPLEMENTED();
76 }
77
78 return Math::Vec4<u8>(MathUtil::Clamp(result.r(), 0, 255), MathUtil::Clamp(result.g(), 0, 255),
79 MathUtil::Clamp(result.b(), 0, 255), MathUtil::Clamp(result.a(), 0, 255));
80};
81
82static u8 LogicOp(u8 src, u8 dest, FramebufferRegs::LogicOp op) {
83 switch (op) {
84 case FramebufferRegs::LogicOp::Clear:
85 return 0;
86
87 case FramebufferRegs::LogicOp::And:
88 return src & dest;
89
90 case FramebufferRegs::LogicOp::AndReverse:
91 return src & ~dest;
92
93 case FramebufferRegs::LogicOp::Copy:
94 return src;
95
96 case FramebufferRegs::LogicOp::Set:
97 return 255;
98
99 case FramebufferRegs::LogicOp::CopyInverted:
100 return ~src;
101
102 case FramebufferRegs::LogicOp::NoOp:
103 return dest;
104
105 case FramebufferRegs::LogicOp::Invert:
106 return ~dest;
107
108 case FramebufferRegs::LogicOp::Nand:
109 return ~(src & dest);
110
111 case FramebufferRegs::LogicOp::Or:
112 return src | dest;
113
114 case FramebufferRegs::LogicOp::Nor:
115 return ~(src | dest);
116
117 case FramebufferRegs::LogicOp::Xor:
118 return src ^ dest;
119
120 case FramebufferRegs::LogicOp::Equiv:
121 return ~(src ^ dest);
122
123 case FramebufferRegs::LogicOp::AndInverted:
124 return ~src & dest;
125
126 case FramebufferRegs::LogicOp::OrReverse:
127 return src | ~dest;
128
129 case FramebufferRegs::LogicOp::OrInverted:
130 return ~src | dest;
131 }
132};
133
134// NOTE: Assuming that rasterizer coordinates are 12.4 fixed-point values 34// NOTE: Assuming that rasterizer coordinates are 12.4 fixed-point values
135struct Fix12P4 { 35struct Fix12P4 {
136 Fix12P4() {} 36 Fix12P4() {}