mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-12-14 19:36:59 +00:00
Merge branch 'clip-distance' into 'master'
Shader: skip initialization of all clip distances on macOS. See merge request [ryubing/ryujinx!229](https://git.ryujinx.app/ryubing/ryujinx/-/merge_requests/229)
This commit is contained in:
commit
6c7b448168
6 changed files with 22 additions and 3 deletions
|
|
@ -10,6 +10,7 @@ namespace Ryujinx.Graphics.GAL
|
||||||
|
|
||||||
public readonly bool HasFrontFacingBug;
|
public readonly bool HasFrontFacingBug;
|
||||||
public readonly bool HasVectorIndexingBug;
|
public readonly bool HasVectorIndexingBug;
|
||||||
|
public readonly bool HasClipDistanceInitBug;
|
||||||
public readonly bool NeedsFragmentOutputSpecialization;
|
public readonly bool NeedsFragmentOutputSpecialization;
|
||||||
public readonly bool ReduceShaderPrecision;
|
public readonly bool ReduceShaderPrecision;
|
||||||
|
|
||||||
|
|
@ -79,6 +80,7 @@ namespace Ryujinx.Graphics.GAL
|
||||||
SystemMemoryType memoryType,
|
SystemMemoryType memoryType,
|
||||||
bool hasFrontFacingBug,
|
bool hasFrontFacingBug,
|
||||||
bool hasVectorIndexingBug,
|
bool hasVectorIndexingBug,
|
||||||
|
bool hasClipDistanceInitBug,
|
||||||
bool needsFragmentOutputSpecialization,
|
bool needsFragmentOutputSpecialization,
|
||||||
bool reduceShaderPrecision,
|
bool reduceShaderPrecision,
|
||||||
bool supportsAstcCompression,
|
bool supportsAstcCompression,
|
||||||
|
|
@ -141,6 +143,7 @@ namespace Ryujinx.Graphics.GAL
|
||||||
MemoryType = memoryType;
|
MemoryType = memoryType;
|
||||||
HasFrontFacingBug = hasFrontFacingBug;
|
HasFrontFacingBug = hasFrontFacingBug;
|
||||||
HasVectorIndexingBug = hasVectorIndexingBug;
|
HasVectorIndexingBug = hasVectorIndexingBug;
|
||||||
|
HasClipDistanceInitBug = hasClipDistanceInitBug;
|
||||||
NeedsFragmentOutputSpecialization = needsFragmentOutputSpecialization;
|
NeedsFragmentOutputSpecialization = needsFragmentOutputSpecialization;
|
||||||
ReduceShaderPrecision = reduceShaderPrecision;
|
ReduceShaderPrecision = reduceShaderPrecision;
|
||||||
SupportsAstcCompression = supportsAstcCompression;
|
SupportsAstcCompression = supportsAstcCompression;
|
||||||
|
|
|
||||||
|
|
@ -201,6 +201,8 @@ namespace Ryujinx.Graphics.Gpu.Shader
|
||||||
|
|
||||||
public bool QueryHostHasVectorIndexingBug() => _context.Capabilities.HasVectorIndexingBug;
|
public bool QueryHostHasVectorIndexingBug() => _context.Capabilities.HasVectorIndexingBug;
|
||||||
|
|
||||||
|
public bool QueryHostHasClipDistanceInitBug() => _context.Capabilities.HasClipDistanceInitBug;
|
||||||
|
|
||||||
public int QueryHostStorageBufferOffsetAlignment() => _context.Capabilities.StorageBufferOffsetAlignment;
|
public int QueryHostStorageBufferOffsetAlignment() => _context.Capabilities.StorageBufferOffsetAlignment;
|
||||||
|
|
||||||
public int QueryHostSubgroupSize() => _context.Capabilities.ShaderSubgroupSize;
|
public int QueryHostSubgroupSize() => _context.Capabilities.ShaderSubgroupSize;
|
||||||
|
|
|
||||||
|
|
@ -153,6 +153,7 @@ namespace Ryujinx.Graphics.OpenGL
|
||||||
memoryType: SystemMemoryType.BackendManaged,
|
memoryType: SystemMemoryType.BackendManaged,
|
||||||
hasFrontFacingBug: intelWindows,
|
hasFrontFacingBug: intelWindows,
|
||||||
hasVectorIndexingBug: amdWindows,
|
hasVectorIndexingBug: amdWindows,
|
||||||
|
hasClipDistanceInitBug: false,
|
||||||
needsFragmentOutputSpecialization: false,
|
needsFragmentOutputSpecialization: false,
|
||||||
reduceShaderPrecision: false,
|
reduceShaderPrecision: false,
|
||||||
supportsAstcCompression: HwCapabilities.SupportsAstcCompression,
|
supportsAstcCompression: HwCapabilities.SupportsAstcCompression,
|
||||||
|
|
|
||||||
|
|
@ -202,6 +202,15 @@ namespace Ryujinx.Graphics.Shader
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Queries host about the presence of the clip distance initialization bug.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>True if the bug is present on the host device used, false otherwise</returns>
|
||||||
|
bool QueryHostHasClipDistanceInitBug()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Queries host storage buffer alignment required.
|
/// Queries host storage buffer alignment required.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -259,11 +259,14 @@ namespace Ryujinx.Graphics.Shader.Translation
|
||||||
context.Store(StorageKind.Output, IoVariable.Position, null, Const(c), ConstF(c == 3 ? 1f : 0f));
|
context.Store(StorageKind.Output, IoVariable.Position, null, Const(c), ConstF(c == 3 ? 1f : 0f));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (context.Program.ClipDistancesWritten != 0)
|
if (!context.TranslatorContext.GpuAccessor.QueryHostHasClipDistanceInitBug())
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 8; i++)
|
if (context.Program.ClipDistancesWritten != 0)
|
||||||
{
|
{
|
||||||
context.Store(StorageKind.Output, IoVariable.ClipDistance, null, Const(i), ConstF(0f));
|
for (int i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
context.Store(StorageKind.Output, IoVariable.ClipDistance, null, Const(i), ConstF(0f));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -744,6 +744,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
memoryType: memoryType,
|
memoryType: memoryType,
|
||||||
hasFrontFacingBug: IsIntelWindows,
|
hasFrontFacingBug: IsIntelWindows,
|
||||||
hasVectorIndexingBug: IsQualcommProprietary,
|
hasVectorIndexingBug: IsQualcommProprietary,
|
||||||
|
hasClipDistanceInitBug: IsMoltenVk,
|
||||||
needsFragmentOutputSpecialization: IsMoltenVk,
|
needsFragmentOutputSpecialization: IsMoltenVk,
|
||||||
reduceShaderPrecision: IsMoltenVk,
|
reduceShaderPrecision: IsMoltenVk,
|
||||||
supportsAstcCompression: features2.Features.TextureCompressionAstcLdr && supportsAstcFormats,
|
supportsAstcCompression: features2.Features.TextureCompressionAstcLdr && supportsAstcFormats,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue