[GPU] Ownership-transfer-based RT cache, 3x3 resolution scaling
The ROV path is also disabled by default because of lower performance
This commit is contained in:
@@ -17,6 +17,26 @@ namespace xe {
|
||||
namespace gpu {
|
||||
namespace xenos {
|
||||
|
||||
// https://github.com/Microsoft/DirectXTex/blob/master/DirectXTex/DirectXTexConvert.cpp
|
||||
|
||||
float Float7e3To32(uint32_t f10) {
|
||||
f10 &= 0x3FF;
|
||||
if (!f10) {
|
||||
return 0.0f;
|
||||
}
|
||||
uint32_t mantissa = f10 & 0x7F;
|
||||
uint32_t exponent = f10 >> 7;
|
||||
if (!exponent) {
|
||||
// Normalize the value in the resulting float.
|
||||
// do { Exponent--; Mantissa <<= 1; } while ((Mantissa & 0x80) == 0)
|
||||
uint32_t mantissa_lzcnt = xe::lzcnt(mantissa) - (32 - 8);
|
||||
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);
|
||||
}
|
||||
|
||||
// Based on CFloat24 from d3dref9.dll and the 6e4 code from:
|
||||
// https://github.com/Microsoft/DirectXTex/blob/master/DirectXTex/DirectXTexConvert.cpp
|
||||
// 6e4 has a different exponent bias allowing [0,512) values, 20e4 allows [0,2).
|
||||
@@ -54,7 +74,7 @@ float Float20e4To32(uint32_t f24) {
|
||||
// Normalize the value in the resulting float.
|
||||
// do { Exponent--; Mantissa <<= 1; } while ((Mantissa & 0x100000) == 0)
|
||||
uint32_t mantissa_lzcnt = xe::lzcnt(mantissa) - (32 - 21);
|
||||
exponent = uint32_t(1 - mantissa_lzcnt);
|
||||
exponent = uint32_t(1 - int32_t(mantissa_lzcnt));
|
||||
mantissa = (mantissa << mantissa_lzcnt) & 0xFFFFF;
|
||||
}
|
||||
uint32_t f32 = ((exponent + 112) << 23) | (mantissa << 3);
|
||||
|
||||
Reference in New Issue
Block a user