void CreateShader(ShaderModuleCreateInfo mInfo)
        {
            VkShaderModuleCreateInfo info = new VkShaderModuleCreateInfo();

            info.sType    = VkStructureType.ShaderModuleCreateInfo;
            info.codeSize = (ulong)mInfo.Data.LongLength;

            var dataPinned = new PinnedArray <byte>(mInfo.Data);

            info.pCode = dataPinned.Address;

            using (dataPinned) {
                var result = createShaderModule(device.Native, ref info, device.Instance.AllocationCallbacks, out shaderModule);
                if (result != VkResult.Success)
                {
                    throw new ShaderModuleException(string.Format("Error creating shader module: {0}"));
                }
            }
        }
        public ShaderModule(Device device, ShaderModuleCreateInfo info)
        {
            if (device == null)
            {
                throw new ArgumentNullException(nameof(device));
            }
            if (info == null)
            {
                throw new ArgumentNullException(nameof(info));
            }
            if (info.Data == null)
            {
                throw new ArgumentNullException(nameof(info.Data));
            }

            this.device = device;

            createShaderModule  = device.Commands.createShaderModule;
            destroyShaderModule = device.Commands.destroyShaderModule;

            CreateShader(info);
        }