diff options
Diffstat (limited to 'Ryujinx.Graphics.Vulkan/SamplerHolder.cs')
| -rw-r--r-- | Ryujinx.Graphics.Vulkan/SamplerHolder.cs | 118 |
1 files changed, 0 insertions, 118 deletions
diff --git a/Ryujinx.Graphics.Vulkan/SamplerHolder.cs b/Ryujinx.Graphics.Vulkan/SamplerHolder.cs deleted file mode 100644 index a95e4dba..00000000 --- a/Ryujinx.Graphics.Vulkan/SamplerHolder.cs +++ /dev/null @@ -1,118 +0,0 @@ -using Ryujinx.Graphics.GAL; -using Silk.NET.Vulkan; - -namespace Ryujinx.Graphics.Vulkan -{ - class SamplerHolder : ISampler - { - private readonly VulkanRenderer _gd; - private readonly Auto<DisposableSampler> _sampler; - - public unsafe SamplerHolder(VulkanRenderer gd, Device device, GAL.SamplerCreateInfo info) - { - _gd = gd; - - gd.Samplers.Add(this); - - (Filter minFilter, SamplerMipmapMode mipFilter) = EnumConversion.Convert(info.MinFilter); - - float minLod = info.MinLod; - float maxLod = info.MaxLod; - - if (info.MinFilter == MinFilter.Nearest || info.MinFilter == MinFilter.Linear) - { - minLod = 0; - maxLod = 0.25f; - } - - var borderColor = GetConstrainedBorderColor(info.BorderColor, out var cantConstrain); - - var samplerCreateInfo = new Silk.NET.Vulkan.SamplerCreateInfo() - { - SType = StructureType.SamplerCreateInfo, - MagFilter = info.MagFilter.Convert(), - MinFilter = minFilter, - MipmapMode = mipFilter, - AddressModeU = info.AddressU.Convert(), - AddressModeV = info.AddressV.Convert(), - AddressModeW = info.AddressP.Convert(), - MipLodBias = info.MipLodBias, - AnisotropyEnable = info.MaxAnisotropy != 1f, - MaxAnisotropy = info.MaxAnisotropy, - CompareEnable = info.CompareMode == CompareMode.CompareRToTexture, - CompareOp = info.CompareOp.Convert(), - MinLod = minLod, - MaxLod = maxLod, - BorderColor = borderColor, - UnnormalizedCoordinates = false // TODO: Use unnormalized coordinates. - }; - - SamplerCustomBorderColorCreateInfoEXT customBorderColor; - - if (cantConstrain && gd.Capabilities.SupportsCustomBorderColor) - { - var color = new ClearColorValue( - info.BorderColor.Red, - info.BorderColor.Green, - info.BorderColor.Blue, - info.BorderColor.Alpha); - - customBorderColor = new SamplerCustomBorderColorCreateInfoEXT() - { - SType = StructureType.SamplerCustomBorderColorCreateInfoExt, - CustomBorderColor = color - }; - - samplerCreateInfo.PNext = &customBorderColor; - samplerCreateInfo.BorderColor = BorderColor.FloatCustomExt; - } - - gd.Api.CreateSampler(device, samplerCreateInfo, null, out var sampler).ThrowOnError(); - - _sampler = new Auto<DisposableSampler>(new DisposableSampler(gd.Api, device, sampler)); - } - - private static BorderColor GetConstrainedBorderColor(ColorF arbitraryBorderColor, out bool cantConstrain) - { - float r = arbitraryBorderColor.Red; - float g = arbitraryBorderColor.Green; - float b = arbitraryBorderColor.Blue; - float a = arbitraryBorderColor.Alpha; - - if (r == 0f && g == 0f && b == 0f) - { - if (a == 1f) - { - cantConstrain = false; - return BorderColor.FloatOpaqueBlack; - } - else if (a == 0f) - { - cantConstrain = false; - return BorderColor.FloatTransparentBlack; - } - } - else if (r == 1f && g == 1f && b == 1f && a == 1f) - { - cantConstrain = false; - return BorderColor.FloatOpaqueWhite; - } - - cantConstrain = true; - return BorderColor.FloatOpaqueBlack; - } - - public Auto<DisposableSampler> GetSampler() - { - return _sampler; - } - - public void Dispose() - { - if (_gd.Samplers.Remove(this)) - { - _sampler.Dispose(); - } - } - } -} |
