Merge branch 'master' of https://github.com/xenia-project/xenia into canary_experimental
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
*/
|
||||
|
||||
#include "xenia/gpu/xenos.h"
|
||||
#include "xenia/base/memory.h"
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
@@ -22,7 +23,7 @@ namespace xenos {
|
||||
float PWLGammaToLinear(float gamma) {
|
||||
// Not found in game executables, so just using the logic similar to that in
|
||||
// the Source Engine.
|
||||
gamma = xe::saturate_unsigned(gamma);
|
||||
gamma = xe::saturate(gamma);
|
||||
float scale, offset;
|
||||
// While the compiled code for linear to gamma conversion uses `vcmpgtfp
|
||||
// constant, value` comparison (constant > value, or value < constant), it's
|
||||
@@ -63,7 +64,7 @@ float PWLGammaToLinear(float gamma) {
|
||||
}
|
||||
|
||||
float LinearToPWLGamma(float linear) {
|
||||
linear = xe::saturate_unsigned(linear);
|
||||
linear = xe::saturate(linear);
|
||||
float scale, offset;
|
||||
// While the compiled code uses `vcmpgtfp constant, value` comparison
|
||||
// (constant > value, or value < constant), it's preferable to use `value >=
|
||||
@@ -114,8 +115,8 @@ float Float7e3To32(uint32_t f10) {
|
||||
exponent = uint32_t(1 - int32_t(mantissa_lzcnt));
|
||||
mantissa = (mantissa << mantissa_lzcnt) & 0x7F;
|
||||
}
|
||||
uint32_t f32 = ((exponent + 124) << 23) | (mantissa << 3);
|
||||
return *reinterpret_cast<const float*>(&f32);
|
||||
return xe::memory::Reinterpret<float>(
|
||||
uint32_t(((exponent + 124) << 23) | (mantissa << 3)));
|
||||
}
|
||||
|
||||
// Based on CFloat24 from d3dref9.dll and the 6e4 code from:
|
||||
@@ -127,7 +128,7 @@ uint32_t Float32To20e4(float f32, bool round_to_nearest_even) noexcept {
|
||||
// Positive only, and not -0 or NaN.
|
||||
return 0;
|
||||
}
|
||||
uint32_t f32u32 = *reinterpret_cast<const uint32_t*>(&f32);
|
||||
auto f32u32 = xe::memory::Reinterpret<uint32_t>(f32);
|
||||
if (f32u32 >= 0x3FFFFFF8) {
|
||||
// Saturate.
|
||||
return 0xFFFFFF;
|
||||
@@ -161,8 +162,8 @@ float Float20e4To32(uint32_t f24) noexcept {
|
||||
exponent = uint32_t(1 - int32_t(mantissa_lzcnt));
|
||||
mantissa = (mantissa << mantissa_lzcnt) & 0xFFFFF;
|
||||
}
|
||||
uint32_t f32 = ((exponent + 112) << 23) | (mantissa << 3);
|
||||
return *reinterpret_cast<const float*>(&f32);
|
||||
return xe::memory::Reinterpret<float>(
|
||||
uint32_t(((exponent + 112) << 23) | (mantissa << 3)));
|
||||
}
|
||||
|
||||
const char* GetColorRenderTargetFormatName(ColorRenderTargetFormat format) {
|
||||
@@ -241,4 +242,4 @@ const char* GetPrimitiveTypeEnglishDescription(xenos::PrimitiveType prim_type) {
|
||||
}
|
||||
} // namespace xenos
|
||||
} // namespace gpu
|
||||
} // namespace xe
|
||||
} // namespace xe
|
||||
Reference in New Issue
Block a user