1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2024-12-04 16:24:29 +01:00

[d3d11] Use FORCE_UNORM depth bias representation for UNORM formats

This commit is contained in:
Joshua Ashton 2023-06-15 19:02:26 +01:00 committed by Joshie
parent b30a4f0cc7
commit 6f87ccdafc
3 changed files with 31 additions and 1 deletions

View File

@ -3389,8 +3389,24 @@ namespace dxvk {
}
static VkDepthBiasRepresentationEXT FormatToDepthBiasRepresentation(DXGI_FORMAT format) {
switch (format) {
default:
case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
case DXGI_FORMAT_D32_FLOAT:
return VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORMAT_EXT;
case DXGI_FORMAT_D24_UNORM_S8_UINT:
case DXGI_FORMAT_D16_UNORM:
return VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORCE_UNORM_EXT;
}
}
template<typename ContextType>
void D3D11CommonContext<ContextType>::BindFramebuffer() {
DxvkDepthBiasRepresentation depthBiasRepresentation =
{ VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORMAT_EXT,
m_device->features().extDepthBiasControl.depthBiasExact };
DxvkRenderTargets attachments;
uint32_t sampleCount = 0;
@ -3411,12 +3427,17 @@ namespace dxvk {
m_state.om.dsv->GetImageView(),
m_state.om.dsv->GetRenderLayout() };
sampleCount = m_state.om.dsv->GetSampleCount();
if (m_device->features().extDepthBiasControl.leastRepresentableValueForceUnormRepresentation)
depthBiasRepresentation.depthBiasRepresentation = FormatToDepthBiasRepresentation(m_state.om.dsv->GetViewFormat());
}
// Create and bind the framebuffer object to the context
EmitCs([
cAttachments = std::move(attachments)
cAttachments = std::move(attachments),
cRepresentation = depthBiasRepresentation
] (DxvkContext* ctx) mutable {
ctx->setDepthBiasRepresentation(cRepresentation);
ctx->bindRenderTargets(Forwarder::move(cAttachments), 0u);
});

View File

@ -1953,6 +1953,11 @@ namespace dxvk {
enabled.core.features.shaderFloat64 = supported.core.features.shaderFloat64;
enabled.core.features.shaderInt64 = supported.core.features.shaderInt64;
// Depth bias control
enabled.extDepthBiasControl.depthBiasControl = supported.extDepthBiasControl.depthBiasControl;
enabled.extDepthBiasControl.depthBiasExact = supported.extDepthBiasControl.depthBiasExact;
enabled.extDepthBiasControl.leastRepresentableValueForceUnormRepresentation = supported.extDepthBiasControl.leastRepresentableValueForceUnormRepresentation;
return enabled;
}

View File

@ -77,6 +77,10 @@ namespace dxvk {
return mask;
}
DXGI_FORMAT GetViewFormat() const {
return m_desc.Format;
}
D3D10DepthStencilView* GetD3D10Iface() {
return &m_d3d10;
}