forked from Mirror/Ryujinx
Fix depth clamp enable bit, unit scale for polygon offset. (#1178)
Verified with deko3d and opengl driver code.
This commit is contained in:
parent
ec620e2de0
commit
c2ac45adc5
4 changed files with 5 additions and 11 deletions
|
@ -27,7 +27,7 @@ namespace Ryujinx.Graphics.GAL
|
||||||
void SetBlendState(int index, BlendDescriptor blend);
|
void SetBlendState(int index, BlendDescriptor blend);
|
||||||
|
|
||||||
void SetDepthBias(PolygonModeMask enables, float factor, float units, float clamp);
|
void SetDepthBias(PolygonModeMask enables, float factor, float units, float clamp);
|
||||||
void SetDepthClamp(bool clampNear, bool clampFar);
|
void SetDepthClamp(bool clamp);
|
||||||
void SetDepthMode(DepthMode mode);
|
void SetDepthMode(DepthMode mode);
|
||||||
void SetDepthTest(DepthTestDescriptor depthTest);
|
void SetDepthTest(DepthTestDescriptor depthTest);
|
||||||
|
|
||||||
|
|
|
@ -394,8 +394,7 @@ namespace Ryujinx.Graphics.Gpu.Engine
|
||||||
private void UpdateDepthClampState(GpuState state)
|
private void UpdateDepthClampState(GpuState state)
|
||||||
{
|
{
|
||||||
ViewVolumeClipControl clip = state.Get<ViewVolumeClipControl>(MethodOffset.ViewVolumeClipControl);
|
ViewVolumeClipControl clip = state.Get<ViewVolumeClipControl>(MethodOffset.ViewVolumeClipControl);
|
||||||
_context.Renderer.Pipeline.SetDepthClamp((clip & ViewVolumeClipControl.DepthClampNear) != 0,
|
_context.Renderer.Pipeline.SetDepthClamp((clip & ViewVolumeClipControl.DepthClampDisabled) == 0);
|
||||||
(clip & ViewVolumeClipControl.DepthClampFar) != 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -6,7 +6,6 @@ namespace Ryujinx.Graphics.Gpu.State
|
||||||
enum ViewVolumeClipControl
|
enum ViewVolumeClipControl
|
||||||
{
|
{
|
||||||
ForceDepthRangeZeroToOne = 1 << 0,
|
ForceDepthRangeZeroToOne = 1 << 0,
|
||||||
DepthClampNear = 1 << 3,
|
DepthClampDisabled = 1 << 11,
|
||||||
DepthClampFar = 1 << 4,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -549,17 +549,13 @@ namespace Ryujinx.Graphics.OpenGL
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
GL.PolygonOffset(factor, units);
|
GL.PolygonOffset(factor, units / 2f);
|
||||||
// TODO: Enable when GL_EXT_polygon_offset_clamp is supported.
|
// TODO: Enable when GL_EXT_polygon_offset_clamp is supported.
|
||||||
// GL.PolygonOffsetClamp(factor, units, clamp);
|
// GL.PolygonOffsetClamp(factor, units, clamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetDepthClamp(bool clampNear, bool clampFar)
|
public void SetDepthClamp(bool clamp)
|
||||||
{
|
{
|
||||||
// TODO: Use GL_AMD_depth_clamp_separate or similar if available?
|
|
||||||
// Currently enables clamping if either is set.
|
|
||||||
bool clamp = clampNear || clampFar;
|
|
||||||
|
|
||||||
if (!clamp)
|
if (!clamp)
|
||||||
{
|
{
|
||||||
GL.Disable(EnableCap.DepthClamp);
|
GL.Disable(EnableCap.DepthClamp);
|
||||||
|
|
Loading…
Reference in a new issue