aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ryujinx.Graphics.Vulkan/Shader.cs14
1 files changed, 7 insertions, 7 deletions
diff --git a/Ryujinx.Graphics.Vulkan/Shader.cs b/Ryujinx.Graphics.Vulkan/Shader.cs
index db13af31..26d0ca40 100644
--- a/Ryujinx.Graphics.Vulkan/Shader.cs
+++ b/Ryujinx.Graphics.Vulkan/Shader.cs
@@ -9,17 +9,19 @@ using System.Threading.Tasks;
namespace Ryujinx.Graphics.Vulkan
{
- class Shader
+ class Shader : IDisposable
{
// The shaderc.net dependency's Options constructor and dispose are not thread safe.
// Take this lock when using them.
private static object _shaderOptionsLock = new object();
+ private static readonly IntPtr _ptrMainEntryPointName = Marshal.StringToHGlobalAnsi("main");
+
private readonly Vk _api;
private readonly Device _device;
private readonly ShaderStageFlags _stage;
- private IntPtr _entryPointName;
+ private bool _disposed;
private ShaderModule _module;
public ShaderStageFlags StageFlags => _stage;
@@ -39,7 +41,6 @@ namespace Ryujinx.Graphics.Vulkan
CompileStatus = ProgramLinkStatus.Incomplete;
_stage = shaderSource.Stage.Convert();
- _entryPointName = Marshal.StringToHGlobalAnsi("main");
CompileTask = Task.Run(() =>
{
@@ -145,7 +146,7 @@ namespace Ryujinx.Graphics.Vulkan
SType = StructureType.PipelineShaderStageCreateInfo,
Stage = _stage,
Module = _module,
- PName = (byte*)_entryPointName
+ PName = (byte*)_ptrMainEntryPointName
};
}
@@ -156,11 +157,10 @@ namespace Ryujinx.Graphics.Vulkan
public unsafe void Dispose()
{
- if (_entryPointName != IntPtr.Zero)
+ if (!_disposed)
{
_api.DestroyShaderModule(_device, _module, null);
- Marshal.FreeHGlobal(_entryPointName);
- _entryPointName = IntPtr.Zero;
+ _disposed = true;
}
}
}