Files
RobustToolbox/Robust.Client.Graphics.Rhi/WebGpu/RhiWebGpu.ShaderModule.cs
PJB3005 b7a3526131 Move RHI to its own project
Move some of Robust.Shared to a new project so it can be depended upon without adding longer dependency chains.
2025-10-07 18:18:48 +02:00

47 lines
1.4 KiB
C#

using System.Text;
namespace Robust.Client.Graphics.Rhi.WebGpu;
internal sealed unsafe partial class RhiWebGpu
{
private readonly Dictionary<RhiHandle, ShaderModuleReg> _shaderModuleRegistry = new();
public override RhiShaderModule CreateShaderModule(in RhiShaderModuleDescriptor descriptor)
{
var codeBytes = Encoding.UTF8.GetBytes(descriptor.Code);
WGPUShaderModule shaderModule;
fixed (byte* pCode = codeBytes)
fixed (byte* pLabel = MakeLabel(descriptor.Label))
{
var descWgsl = new WGPUShaderSourceWGSL();
descWgsl.code = new WGPUStringView
{
data = (sbyte*)pCode,
length = WGPU_STRLEN
};
descWgsl.chain.sType = WGPUSType.WGPUSType_ShaderSourceWGSL;
var desc = new WGPUShaderModuleDescriptor();
desc.label = new WGPUStringView
{
data = (sbyte*)pLabel,
length = WGPU_STRLEN
};
desc.nextInChain = (WGPUChainedStruct*) (&descWgsl);
shaderModule = wgpuDeviceCreateShaderModule(_wgpuDevice, &desc);
}
// TODO: Thread safety
var handle = AllocRhiHandle();
_shaderModuleRegistry.Add(handle, new ShaderModuleReg { Native = shaderModule });
return new RhiShaderModule(this, handle);
}
private sealed class ShaderModuleReg
{
public WGPUShaderModule Native;
}
}