public bool SetData(byte[] data) { try { using (var reader = new BinaryReader(new MemoryStream(data))) { if (reader.ReadInt32() != FormatMagicNumber) { return(false); } if (reader.ReadInt32() != FormatVersion) { return(false); } var nativeDataSize = reader.ReadInt32(); var nativeData = reader.ReadBytes(nativeDataSize); var shaderSpvCount = reader.ReadInt32(); var shaderSpvMap = new Dictionary <long, byte[]>(shaderSpvCount); for (var i = 0; i < shaderSpvCount; i++) { var shaderHash = reader.ReadInt64(); var shaderSpvSize = reader.ReadInt32(); var shaderSpv = reader.ReadBytes(shaderSpvSize); shaderSpvMap.Add(shaderHash, shaderSpv); } Discard(); NativePipelineCache = CreateNativePipelineCache(nativeData); shaderSpvCache = shaderSpvMap; return(true); } } catch (EndOfStreamException) { return(false); } }
private void Discard() { if (NativePipelineCache != SharpVulkan.PipelineCache.Null) { Context.Device.DestroyPipelineCache(NativePipelineCache); NativePipelineCache = SharpVulkan.PipelineCache.Null; } shaderSpvCache = null; }
public PipelineCache(PlatformRenderContext context) { Context = context; NativePipelineCache = CreateNativePipelineCache(Array.Empty <byte>()); }