Пример #1
0
 public ShaderInfo(VkShaderStageFlags _stageFlags, string _spirvPath, SpecializationInfo specializationInfo = null, string _entryPoint = "main")
 {
     StageFlags = _stageFlags;
     SpirvPath  = _spirvPath;
     EntryPoint = new FixedUtf8String(_entryPoint);
     this.SpecializationInfo = specializationInfo;
 }
Пример #2
0
        /// <summary>
        /// Create a new ShaderInfo object by providing directly a VkShaderModule. Note
        /// that this module will not be own by this ShaderInfo, and so will not be
        /// destroyed on Dispose.
        /// </summary>
        public ShaderInfo(VkShaderStageFlags stageFlags, VkShaderModule module, SpecializationInfo specializationInfo = null, string entryPoint = "main")
        {
            EntryPoint = new FixedUtf8String(entryPoint);

            info.stage  = stageFlags;
            info.pName  = EntryPoint;
            info.module = module;
            info.pSpecializationInfo = (specializationInfo == null) ? IntPtr.Zero : specializationInfo.InfosPtr;
        }
        private VkResult CreateInstance(FixedUtf8String name, bool enableValidation)
        {
            Settings.Validation = enableValidation;

            VkApplicationInfo appInfo = new VkApplicationInfo()
            {
                sType            = VkStructureType.ApplicationInfo,
                apiVersion       = new Version(1, 0, 0),
                pApplicationName = name,
                pEngineName      = name,
            };

            using NativeList <IntPtr> instanceExtensions = new NativeList <IntPtr>(2);
            instanceExtensions.Add(new FixedUtf8String(Strings.VK_KHR_SURFACE_EXTENSION_NAME));
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                instanceExtensions.Add(new FixedUtf8String(Strings.VK_KHR_WIN32_SURFACE_EXTENSION_NAME));
            }
            else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
            {
                instanceExtensions.Add(new FixedUtf8String(Strings.VK_KHR_XLIB_SURFACE_EXTENSION_NAME));
            }
            else
            {
                throw new PlatformNotSupportedException();
            }

            VkInstanceCreateInfo instanceCreateInfo = VkInstanceCreateInfo.New();

            instanceCreateInfo.pApplicationInfo = &appInfo;

            if (instanceExtensions.Count > 0)
            {
                if (enableValidation)
                {
                    instanceExtensions.Add(new FixedUtf8String(Strings.VK_EXT_DEBUG_REPORT_EXTENSION_NAME));
                }
                instanceCreateInfo.enabledExtensionCount   = instanceExtensions.Count;
                instanceCreateInfo.ppEnabledExtensionNames = (byte **)instanceExtensions.Data;
            }

            using NativeList <IntPtr> enabledLayerNames = new NativeList <IntPtr>(0);
            if (enableValidation)
            {
                enabledLayerNames.Add(new FixedUtf8String(Strings.StandardValidationLayerName));
                instanceCreateInfo.enabledLayerCount   = enabledLayerNames.Count;
                instanceCreateInfo.ppEnabledLayerNames = (byte **)enabledLayerNames.Data;
            }

            VkInstance instance;
            VkResult   result = vkCreateInstance(&instanceCreateInfo, null, &instance);

            Instance = instance;

            return(result);
        }
Пример #4
0
 public void GetDelegate <T> (string name, out T del)
 {
     using (FixedUtf8String n = new FixedUtf8String(name)) {
         del = Marshal.GetDelegateForFunctionPointer <T> (vkGetInstanceProcAddr(Handle, (IntPtr)n));
     }
 }