[D3D12] Make RG16/RGBA16 RTVs range switchable
This commit is contained in:
parent
cb99afffcb
commit
57e8f05234
|
@ -2319,9 +2319,10 @@ void D3D12CommandProcessor::UpdateSystemConstantValues(
|
|||
// -32...32 range and expect shaders to give -32...32 values, but they're
|
||||
// emulated using normalized RG16/RGBA16 when not using the ROV, so the
|
||||
// value returned from the shader needs to be divided by 32 (blending will
|
||||
// be incorrect in this case, but there's no other way without using ROV).
|
||||
// be incorrect in this case, but there's no other way without using ROV,
|
||||
// though there's an option to limit the range to -1...1).
|
||||
// http://www.students.science.uu.nl/~3220516/advancedgraphics/papers/inferred_lighting.pdf
|
||||
if (!IsROVUsedForEDRAM()) {
|
||||
if (!IsROVUsedForEDRAM() && FLAGS_d3d12_16bit_rtv_full_range) {
|
||||
color_exp_bias -= 5;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,9 @@
|
|||
#include "xenia/gpu/texture_util.h"
|
||||
#include "xenia/ui/d3d12/d3d12_util.h"
|
||||
|
||||
DEFINE_bool(d3d12_16bit_rtv_full_range, true,
|
||||
"Use full -32...32 range for RG16 and RGBA16 render targets "
|
||||
"(at the expense of blending correctness) without ROV.");
|
||||
DEFINE_bool(d3d12_resolution_scale_resolve_edge_clamp, true,
|
||||
"When using resolution scale, apply the hack that duplicates the "
|
||||
"right/lower subpixel in the left and top sides of render target "
|
||||
|
@ -1171,9 +1174,12 @@ bool RenderTargetCache::ResolveCopy(SharedMemory* shared_memory,
|
|||
// sampling the host render target gives 1/32 of what is actually stored
|
||||
// there on the guest side.
|
||||
// http://www.students.science.uu.nl/~3220516/advancedgraphics/papers/inferred_lighting.pdf
|
||||
if (command_processor_->IsROVUsedForEDRAM() ||
|
||||
FLAGS_d3d12_16bit_rtv_full_range) {
|
||||
dest_exp_bias += 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
bool dest_swap = !is_depth && ((dest_info >> 24) & 0x1);
|
||||
|
||||
// Get the destination location.
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
#ifndef XENIA_GPU_D3D12_RENDER_TARGET_CACHE_H_
|
||||
#define XENIA_GPU_D3D12_RENDER_TARGET_CACHE_H_
|
||||
|
||||
#include <gflags/gflags.h>
|
||||
|
||||
#include <unordered_map>
|
||||
|
||||
#include "xenia/gpu/d3d12/d3d12_shader.h"
|
||||
|
@ -20,6 +22,8 @@
|
|||
#include "xenia/memory.h"
|
||||
#include "xenia/ui/d3d12/d3d12_api.h"
|
||||
|
||||
DECLARE_bool(d3d12_16bit_rtv_full_range);
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
namespace d3d12 {
|
||||
|
|
Loading…
Reference in New Issue