Exemplo n.º 1
0
 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);
     }
 }
Exemplo n.º 2
0
 private void Discard()
 {
     if (NativePipelineCache != SharpVulkan.PipelineCache.Null)
     {
         Context.Device.DestroyPipelineCache(NativePipelineCache);
         NativePipelineCache = SharpVulkan.PipelineCache.Null;
     }
     shaderSpvCache = null;
 }
Exemplo n.º 3
0
 public PipelineCache(PlatformRenderContext context)
 {
     Context             = context;
     NativePipelineCache = CreateNativePipelineCache(Array.Empty <byte>());
 }