From 6ab7a2f722e4d5aee842e163085aee155e1b665f Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Mon, 6 Jun 2022 10:42:05 -0700 Subject: [PATCH] read ShaderModules from stream --- src/Graphics/Resources/ShaderModule.cs | 23 ++++++++++++++---- src/Graphics/Utility/Bytecode.cs | 33 -------------------------- 2 files changed, 19 insertions(+), 37 deletions(-) delete mode 100644 src/Graphics/Utility/Bytecode.cs diff --git a/src/Graphics/Resources/ShaderModule.cs b/src/Graphics/Resources/ShaderModule.cs index d76037ba..f66c0c34 100644 --- a/src/Graphics/Resources/ShaderModule.cs +++ b/src/Graphics/Resources/ShaderModule.cs @@ -1,5 +1,6 @@ using RefreshCS; using System; +using System.IO; namespace MoonWorks.Graphics { @@ -12,15 +13,29 @@ namespace MoonWorks.Graphics public unsafe ShaderModule(GraphicsDevice device, string filePath) : base(device) { - var bytecode = Bytecode.ReadBytecodeAsUInt32(filePath); + using (FileStream stream = new FileStream(filePath, FileMode.Open)) + { + Handle = CreateFromStream(device, stream); + } + } - fixed (uint* ptr = bytecode) + public unsafe ShaderModule(GraphicsDevice device, Stream stream) : base(device) + { + Handle = CreateFromStream(device, stream); + } + + private unsafe static IntPtr CreateFromStream(GraphicsDevice device, Stream stream) + { + var bytecode = new byte[stream.Length]; + stream.Read(bytecode, 0, (int) stream.Length); + + fixed (byte* ptr = bytecode) { Refresh.ShaderModuleCreateInfo shaderModuleCreateInfo; - shaderModuleCreateInfo.codeSize = (UIntPtr) (bytecode.Length * sizeof(uint)); + shaderModuleCreateInfo.codeSize = (UIntPtr) bytecode.Length; shaderModuleCreateInfo.byteCode = (IntPtr) ptr; - Handle = Refresh.Refresh_CreateShaderModule(device.Handle, shaderModuleCreateInfo); + return Refresh.Refresh_CreateShaderModule(device.Handle, shaderModuleCreateInfo); } } } diff --git a/src/Graphics/Utility/Bytecode.cs b/src/Graphics/Utility/Bytecode.cs deleted file mode 100644 index 76eed8dc..00000000 --- a/src/Graphics/Utility/Bytecode.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.IO; - -namespace MoonWorks.Graphics -{ - public static class Bytecode - { - public static uint[] ReadBytecodeAsUInt32(string filePath) - { - byte[] data; - int size; - using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) - { - size = (int) stream.Length; - data = new byte[size]; - stream.Read(data, 0, size); - } - - uint[] uintData = new uint[size / 4]; - using (var memoryStream = new MemoryStream(data)) - { - using (var reader = new BinaryReader(memoryStream)) - { - for (int i = 0; i < size / 4; i++) - { - uintData[i] = reader.ReadUInt32(); - } - } - } - - return uintData; - } - } -}