[D3D12] Minor RT code style/comments cleanup
This commit is contained in:
@@ -3516,7 +3516,7 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
if (source_is_color) {
|
||||
switch (source_color_format) {
|
||||
case xenos::ColorRenderTargetFormat::k_8_8_8_8:
|
||||
case xenos::ColorRenderTargetFormat::k_8_8_8_8_GAMMA:
|
||||
case xenos::ColorRenderTargetFormat::k_8_8_8_8_GAMMA: {
|
||||
color_packed_in_r0x_and_r1x = true;
|
||||
for (uint32_t i = 0; i < 2; ++i) {
|
||||
a.OpMAd(dxbc::Dest::R(i), dxbc::Src::R(i), dxbc::Src::LF(255.0f),
|
||||
@@ -3528,9 +3528,9 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
dxbc::Src::R(i, dxbc::Src::kXXXX));
|
||||
}
|
||||
}
|
||||
break;
|
||||
} break;
|
||||
case xenos::ColorRenderTargetFormat::k_2_10_10_10:
|
||||
case xenos::ColorRenderTargetFormat::k_2_10_10_10_AS_10_10_10_10:
|
||||
case xenos::ColorRenderTargetFormat::k_2_10_10_10_AS_10_10_10_10: {
|
||||
color_packed_in_r0x_and_r1x = true;
|
||||
for (uint32_t i = 0; i < 2; ++i) {
|
||||
a.OpMAd(dxbc::Dest::R(i), dxbc::Src::R(i),
|
||||
@@ -3543,9 +3543,10 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
dxbc::Src::R(i, dxbc::Src::kXXXX));
|
||||
}
|
||||
}
|
||||
break;
|
||||
} break;
|
||||
case xenos::ColorRenderTargetFormat::k_2_10_10_10_FLOAT:
|
||||
case xenos::ColorRenderTargetFormat::k_2_10_10_10_FLOAT_AS_16_16_16_16:
|
||||
case xenos::ColorRenderTargetFormat::
|
||||
k_2_10_10_10_FLOAT_AS_16_16_16_16: {
|
||||
color_packed_in_r0x_and_r1x = true;
|
||||
for (uint32_t i = 0; i < 2; ++i) {
|
||||
// Float16 has a wider range for both color and alpha, also NaNs -
|
||||
@@ -3569,12 +3570,12 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
dxbc::Src::LU(30), dxbc::Src::R(i, dxbc::Src::kWWWW),
|
||||
dxbc::Src::R(i, dxbc::Src::kXXXX));
|
||||
}
|
||||
break;
|
||||
} break;
|
||||
// All 64bpp formats, and all 16 bits per component formats, are
|
||||
// represented as integers in ownership transfer for safe handling of
|
||||
// NaNs and -32768 / -32767.
|
||||
case xenos::ColorRenderTargetFormat::k_16_16:
|
||||
case xenos::ColorRenderTargetFormat::k_16_16_FLOAT:
|
||||
case xenos::ColorRenderTargetFormat::k_16_16_FLOAT: {
|
||||
if (dest_color_format ==
|
||||
xenos::ColorRenderTargetFormat::k_32_32_FLOAT) {
|
||||
for (uint32_t i = 0; i < 2; ++i) {
|
||||
@@ -3586,9 +3587,9 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
a.OpMov(dxbc::Dest::O(0, 0b0011), dxbc::Src::R(0));
|
||||
a.OpMov(dxbc::Dest::O(0, 0b1100), dxbc::Src::R(1, 0b0100 << 4));
|
||||
}
|
||||
break;
|
||||
} break;
|
||||
case xenos::ColorRenderTargetFormat::k_16_16_16_16:
|
||||
case xenos::ColorRenderTargetFormat::k_16_16_16_16_FLOAT:
|
||||
case xenos::ColorRenderTargetFormat::k_16_16_16_16_FLOAT: {
|
||||
if (dest_color_format ==
|
||||
xenos::ColorRenderTargetFormat::k_32_32_FLOAT) {
|
||||
a.OpBFI(dxbc::Dest::O(0, 0b0011), dxbc::Src::LU(16),
|
||||
@@ -3597,11 +3598,11 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
} else {
|
||||
a.OpMov(dxbc::Dest::O(0), dxbc::Src::R(1));
|
||||
}
|
||||
break;
|
||||
case xenos::ColorRenderTargetFormat::k_32_FLOAT:
|
||||
} break;
|
||||
case xenos::ColorRenderTargetFormat::k_32_FLOAT: {
|
||||
color_packed_in_r0x_and_r1x = true;
|
||||
break;
|
||||
case xenos::ColorRenderTargetFormat::k_32_32_FLOAT:
|
||||
} break;
|
||||
case xenos::ColorRenderTargetFormat::k_32_32_FLOAT: {
|
||||
if (dest_color_format ==
|
||||
xenos::ColorRenderTargetFormat::k_32_32_FLOAT) {
|
||||
a.OpMov(dxbc::Dest::O(0, 0b0011), dxbc::Src::R(1));
|
||||
@@ -3609,14 +3610,14 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
a.OpUBFE(dxbc::Dest::O(0), dxbc::Src::LU(16),
|
||||
dxbc::Src::LU(0, 16, 0, 16), dxbc::Src::R(1, 0b01010000));
|
||||
}
|
||||
break;
|
||||
} break;
|
||||
}
|
||||
} else {
|
||||
assert_not_zero(rs & kTransferUsedRootParameterDepthSRVBit);
|
||||
color_packed_in_r0x_and_r1x = true;
|
||||
for (uint32_t i = 0; i < 2; ++i) {
|
||||
switch (source_depth_format) {
|
||||
case xenos::DepthRenderTargetFormat::kD24S8:
|
||||
case xenos::DepthRenderTargetFormat::kD24S8: {
|
||||
// Round to the nearest even integer. This seems to be the correct,
|
||||
// adding +0.5 and rounding towards zero results in red instead of
|
||||
// black in the 4D5307E6 clear shader.
|
||||
@@ -3626,12 +3627,12 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
dxbc::Src::R(i, dxbc::Src::kWWWW));
|
||||
a.OpFToU(dxbc::Dest::R(i, 0b1000),
|
||||
dxbc::Src::R(i, dxbc::Src::kWWWW));
|
||||
break;
|
||||
case xenos::DepthRenderTargetFormat::kD24FS8:
|
||||
} break;
|
||||
case xenos::DepthRenderTargetFormat::kD24FS8: {
|
||||
// Convert using r1.y as temporary.
|
||||
DxbcShaderTranslator::PreClampedDepthTo20e4(a, i, 3, i, 3, 1, 1,
|
||||
true);
|
||||
break;
|
||||
} break;
|
||||
}
|
||||
// Merge depth and stencil into r0/r1.x.
|
||||
a.OpBFI(dxbc::Dest::R(i, 0b0001), dxbc::Src::LU(24), dxbc::Src::LU(8),
|
||||
@@ -3652,14 +3653,15 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Handle 32bpp color. If color_packed_in_r1x is true, a raw 32bpp color
|
||||
// value was written, and common handling will be done.
|
||||
// Handle a 32bpp destination (32bpp color, or depth / stencil). If
|
||||
// color_packed_in_r1x is true, a raw 32bpp color value was written, and
|
||||
// common handling will be done.
|
||||
bool color_packed_in_r1x = false;
|
||||
bool depth_loaded_in_guest_format = false;
|
||||
if (source_is_color) {
|
||||
switch (source_color_format) {
|
||||
case xenos::ColorRenderTargetFormat::k_8_8_8_8:
|
||||
case xenos::ColorRenderTargetFormat::k_8_8_8_8_GAMMA:
|
||||
case xenos::ColorRenderTargetFormat::k_8_8_8_8_GAMMA: {
|
||||
if (dest_is_stencil_bit) {
|
||||
a.OpMAd(dxbc::Dest::R(1, 0b0001), dxbc::Src::R(1, dxbc::Src::kXXXX),
|
||||
dxbc::Src::LF(255.0f), dxbc::Src::LF(0.5f));
|
||||
@@ -3706,9 +3708,9 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
dxbc::Src::R(1, dxbc::Src::kXXXX));
|
||||
}
|
||||
}
|
||||
break;
|
||||
} break;
|
||||
case xenos::ColorRenderTargetFormat::k_2_10_10_10:
|
||||
case xenos::ColorRenderTargetFormat::k_2_10_10_10_AS_10_10_10_10:
|
||||
case xenos::ColorRenderTargetFormat::k_2_10_10_10_AS_10_10_10_10: {
|
||||
if (dest_is_stencil_bit) {
|
||||
a.OpMAd(dxbc::Dest::R(1, 0b0001), dxbc::Src::R(1, dxbc::Src::kXXXX),
|
||||
dxbc::Src::LF(1023.0f), dxbc::Src::LF(0.5f));
|
||||
@@ -3732,9 +3734,10 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
dxbc::Src::R(1, dxbc::Src::kXXXX));
|
||||
}
|
||||
}
|
||||
break;
|
||||
} break;
|
||||
case xenos::ColorRenderTargetFormat::k_2_10_10_10_FLOAT:
|
||||
case xenos::ColorRenderTargetFormat::k_2_10_10_10_FLOAT_AS_16_16_16_16:
|
||||
case xenos::ColorRenderTargetFormat::
|
||||
k_2_10_10_10_FLOAT_AS_16_16_16_16: {
|
||||
if (dest_is_stencil_bit) {
|
||||
DxbcShaderTranslator::UnclampedFloat32To7e3(a, 1, 0, 1, 0, 2, 0);
|
||||
} else if (dest_is_color &&
|
||||
@@ -3767,11 +3770,11 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
dxbc::Src::LU(30), dxbc::Src::R(1, dxbc::Src::kWWWW),
|
||||
dxbc::Src::R(1, dxbc::Src::kXXXX));
|
||||
}
|
||||
break;
|
||||
} break;
|
||||
case xenos::ColorRenderTargetFormat::k_16_16:
|
||||
case xenos::ColorRenderTargetFormat::k_16_16_16_16:
|
||||
case xenos::ColorRenderTargetFormat::k_16_16_FLOAT:
|
||||
case xenos::ColorRenderTargetFormat::k_16_16_16_16_FLOAT:
|
||||
case xenos::ColorRenderTargetFormat::k_16_16_16_16_FLOAT: {
|
||||
// All 16 bits per component formats are represented as integers in
|
||||
// ownership transfer for safe handling of NaNs and -32768 / -32767.
|
||||
if (dest_is_stencil_bit) {
|
||||
@@ -3789,11 +3792,11 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
dxbc::Src::LU(16), dxbc::Src::R(1, dxbc::Src::kYYYY),
|
||||
dxbc::Src::R(1, dxbc::Src::kXXXX));
|
||||
}
|
||||
break;
|
||||
} break;
|
||||
case xenos::ColorRenderTargetFormat::k_32_FLOAT:
|
||||
case xenos::ColorRenderTargetFormat::k_32_32_FLOAT:
|
||||
case xenos::ColorRenderTargetFormat::k_32_32_FLOAT: {
|
||||
color_packed_in_r1x = true;
|
||||
break;
|
||||
} break;
|
||||
}
|
||||
} else if (rs & kTransferUsedRootParameterDepthSRVBit) {
|
||||
if (dest_is_color || dest_depth_format != source_depth_format) {
|
||||
@@ -3801,7 +3804,7 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
// format. Convert the depth within r1.w.
|
||||
depth_loaded_in_guest_format = true;
|
||||
switch (source_depth_format) {
|
||||
case xenos::DepthRenderTargetFormat::kD24S8:
|
||||
case xenos::DepthRenderTargetFormat::kD24S8: {
|
||||
// Round to the nearest even integer. This seems to be the correct,
|
||||
// adding +0.5 and rounding towards zero results in red instead of
|
||||
// black in the 4D5307E6 clear shader.
|
||||
@@ -3811,12 +3814,12 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
dxbc::Src::R(1, dxbc::Src::kWWWW));
|
||||
a.OpFToU(dxbc::Dest::R(1, 0b1000),
|
||||
dxbc::Src::R(1, dxbc::Src::kWWWW));
|
||||
break;
|
||||
case xenos::DepthRenderTargetFormat::kD24FS8:
|
||||
} break;
|
||||
case xenos::DepthRenderTargetFormat::kD24FS8: {
|
||||
// Convert using r1.y as temporary.
|
||||
DxbcShaderTranslator::PreClampedDepthTo20e4(a, 1, 3, 1, 3, 1, 1,
|
||||
true);
|
||||
break;
|
||||
} break;
|
||||
}
|
||||
if (dest_is_color) {
|
||||
// Merge depth and stencil into r1.x for reinterpretation as color.
|
||||
@@ -3835,16 +3838,16 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
if (color_packed_in_r1x) {
|
||||
switch (dest_color_format) {
|
||||
case xenos::ColorRenderTargetFormat::k_8_8_8_8:
|
||||
case xenos::ColorRenderTargetFormat::k_8_8_8_8_GAMMA:
|
||||
case xenos::ColorRenderTargetFormat::k_8_8_8_8_GAMMA: {
|
||||
a.OpUBFE(dxbc::Dest::R(1), dxbc::Src::LU(8),
|
||||
dxbc::Src::LU(0, 8, 16, 24),
|
||||
dxbc::Src::R(1, dxbc::Src::kXXXX));
|
||||
a.OpUToF(dxbc::Dest::R(1), dxbc::Src::R(1));
|
||||
a.OpMul(dxbc::Dest::O(0), dxbc::Src::R(1),
|
||||
dxbc::Src::LF(1.0f / 255.0f));
|
||||
break;
|
||||
} break;
|
||||
case xenos::ColorRenderTargetFormat::k_2_10_10_10:
|
||||
case xenos::ColorRenderTargetFormat::k_2_10_10_10_AS_10_10_10_10:
|
||||
case xenos::ColorRenderTargetFormat::k_2_10_10_10_AS_10_10_10_10: {
|
||||
a.OpUBFE(dxbc::Dest::R(1), dxbc::Src::LU(10, 10, 10, 2),
|
||||
dxbc::Src::LU(0, 10, 20, 30),
|
||||
dxbc::Src::R(1, dxbc::Src::kXXXX));
|
||||
@@ -3852,10 +3855,10 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
a.OpMul(dxbc::Dest::O(0), dxbc::Src::R(1),
|
||||
dxbc::Src::LF(1.0f / 1023.0f, 1.0f / 1023.0f,
|
||||
1.0f / 1023.0f, 1.0f / 3.0f));
|
||||
break;
|
||||
} break;
|
||||
case xenos::ColorRenderTargetFormat::k_2_10_10_10_FLOAT:
|
||||
case xenos::ColorRenderTargetFormat::
|
||||
k_2_10_10_10_FLOAT_AS_16_16_16_16:
|
||||
k_2_10_10_10_FLOAT_AS_16_16_16_16: {
|
||||
// Color using r1.yz as temporary.
|
||||
for (uint32_t i = 0; i < 3; ++i) {
|
||||
DxbcShaderTranslator::Float7e3To32(a, dxbc::Dest::O(0, 1 << i),
|
||||
@@ -3869,21 +3872,21 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
a.OpMul(dxbc::Dest::O(0, 0b1000),
|
||||
dxbc::Src::R(1, dxbc::Src::kWWWW),
|
||||
dxbc::Src::LF(1.0f / 3.0f));
|
||||
break;
|
||||
} break;
|
||||
case xenos::ColorRenderTargetFormat::k_16_16:
|
||||
case xenos::ColorRenderTargetFormat::k_16_16_FLOAT:
|
||||
case xenos::ColorRenderTargetFormat::k_16_16_FLOAT: {
|
||||
// All 16 bits per component formats are represented as integers
|
||||
// in ownership transfer for safe handling of NaNs and
|
||||
// -32768 / -32767.
|
||||
a.OpUBFE(dxbc::Dest::O(0, 0b0011), dxbc::Src::LU(16),
|
||||
dxbc::Src::LU(0, 16, 0, 0),
|
||||
dxbc::Src::R(1, dxbc::Src::kXXXX));
|
||||
break;
|
||||
case xenos::ColorRenderTargetFormat::k_32_FLOAT:
|
||||
} break;
|
||||
case xenos::ColorRenderTargetFormat::k_32_FLOAT: {
|
||||
// Already as a 32-bit value.
|
||||
a.OpMov(dxbc::Dest::O(0, 0b0001),
|
||||
dxbc::Src::R(1, dxbc::Src::kXXXX));
|
||||
break;
|
||||
} break;
|
||||
default:
|
||||
// A 64bpp format (handled separately) or an invalid one.
|
||||
assert_unhandled_case(dest_color_format);
|
||||
@@ -4178,7 +4181,7 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
// using r0.z as a temporary and check if it matches the value in
|
||||
// the currently owning guest render target.
|
||||
switch (dest_depth_format) {
|
||||
case xenos::DepthRenderTargetFormat::kD24S8:
|
||||
case xenos::DepthRenderTargetFormat::kD24S8: {
|
||||
// Round to the nearest even integer. This seems to be the
|
||||
// correct, adding +0.5 and rounding towards zero results in red
|
||||
// instead of black in the 4D5307E6 clear shader.
|
||||
@@ -4189,11 +4192,11 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
dxbc::Src::R(0, dxbc::Src::kYYYY));
|
||||
a.OpFToU(dxbc::Dest::R(0, 0b0010),
|
||||
dxbc::Src::R(0, dxbc::Src::kYYYY));
|
||||
break;
|
||||
case xenos::DepthRenderTargetFormat::kD24FS8:
|
||||
} break;
|
||||
case xenos::DepthRenderTargetFormat::kD24FS8: {
|
||||
DxbcShaderTranslator::PreClampedDepthTo20e4(a, 0, 1, 0, 0, 0, 2,
|
||||
true);
|
||||
break;
|
||||
} break;
|
||||
}
|
||||
a.OpIEq(dxbc::Dest::R(0, 0b0010), dxbc::Src::R(0, dxbc::Src::kYYYY),
|
||||
dxbc::Src::R(1, dxbc::Src::kWWWW));
|
||||
@@ -4206,7 +4209,7 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
}
|
||||
// Convert using r0.x as a temporary.
|
||||
switch (dest_depth_format) {
|
||||
case xenos::DepthRenderTargetFormat::kD24S8:
|
||||
case xenos::DepthRenderTargetFormat::kD24S8: {
|
||||
// Multiplying by 1.0 / 0xFFFFFF produces an incorrect result (for
|
||||
// 0xC00000, for instance - which is 2_10_10_10 clear to 0001) -
|
||||
// rescale from 0...0xFFFFFF to 0...0x1000000 doing what true
|
||||
@@ -4223,11 +4226,11 @@ D3D12RenderTargetCache::GetOrCreateTransferPipelines(TransferShaderKey key) {
|
||||
a.OpMul(dxbc::Dest::R(1, 0b1000),
|
||||
dxbc::Src::R(1, dxbc::Src::kWWWW),
|
||||
dxbc::Src::LF(1.0f / float(1 << 24)));
|
||||
break;
|
||||
case xenos::DepthRenderTargetFormat::kD24FS8:
|
||||
} break;
|
||||
case xenos::DepthRenderTargetFormat::kD24FS8: {
|
||||
DxbcShaderTranslator::Depth20e4To32(a, dxbc::Dest::R(1, 0b1000),
|
||||
1, 3, 0, 1, 3, 0, 0, true);
|
||||
break;
|
||||
} break;
|
||||
}
|
||||
// Host depth is different, or not available - convert the guest depth
|
||||
// to the destination format.
|
||||
@@ -5273,13 +5276,15 @@ void D3D12RenderTargetCache::PerformTransfersAndResolveClears(
|
||||
if (transfer_root_parameters_used &
|
||||
kTransferUsedRootParameterHostDepthAddressConstantBit) {
|
||||
assert_not_null(host_depth_source_d3d12_rt);
|
||||
RenderTargetKey host_depth_source_rt_key =
|
||||
host_depth_source_d3d12_rt->key();
|
||||
TransferAddressConstant host_depth_address_constant;
|
||||
host_depth_address_constant.dest_pitch = dest_pitch_tiles;
|
||||
host_depth_address_constant.source_pitch =
|
||||
host_depth_source_d3d12_rt->key().GetPitchTiles();
|
||||
host_depth_source_rt_key.GetPitchTiles();
|
||||
host_depth_address_constant.source_to_dest =
|
||||
int32_t(dest_rt_key.base_tiles) -
|
||||
int32_t(host_depth_source_d3d12_rt->key().base_tiles);
|
||||
int32_t(host_depth_source_rt_key.base_tiles);
|
||||
if (last_host_depth_address_constant != host_depth_address_constant) {
|
||||
last_host_depth_address_constant = host_depth_address_constant;
|
||||
transfer_root_parameters_set &=
|
||||
|
||||
Reference in New Issue
Block a user