59 lines
1.8 KiB
Go
59 lines
1.8 KiB
Go
package instance
|
|
|
|
import (
|
|
"github.com/vkngwrapper/core/v2"
|
|
"github.com/vkngwrapper/core/v2/core1_0"
|
|
"github.com/vkngwrapper/extensions/v2/ext_debug_utils"
|
|
"github.com/vkngwrapper/extensions/v2/khr_portability_enumeration"
|
|
"zworld/engine/window"
|
|
)
|
|
|
|
type FVulkanHelp struct{}
|
|
|
|
func (h *FVulkanHelp) getCreateInstanceExtension(instanceOptions *core1_0.InstanceCreateInfo, loader *core.VulkanLoader, win *window.FSDLWindow) error {
|
|
// Add extensions
|
|
sdlExtensions := win.GetInstance().VulkanGetInstanceExtensions()
|
|
extensions, _, err := loader.AvailableExtensions()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, ext := range sdlExtensions {
|
|
_, hasExt := extensions[ext]
|
|
if !hasExt {
|
|
return nil
|
|
}
|
|
instanceOptions.EnabledExtensionNames = append(instanceOptions.EnabledExtensionNames, ext)
|
|
}
|
|
|
|
if enableValidationLayers {
|
|
instanceOptions.EnabledExtensionNames = append(instanceOptions.EnabledExtensionNames, ext_debug_utils.ExtensionName)
|
|
}
|
|
|
|
_, enumerationSupported := extensions[khr_portability_enumeration.ExtensionName]
|
|
if enumerationSupported {
|
|
instanceOptions.EnabledExtensionNames = append(instanceOptions.EnabledExtensionNames, khr_portability_enumeration.ExtensionName)
|
|
instanceOptions.Flags |= khr_portability_enumeration.InstanceCreateEnumeratePortability
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (h *FVulkanHelp) getCreateInstanceLayer(instanceOptions *core1_0.InstanceCreateInfo, loader *core.VulkanLoader, win *window.FSDLWindow) error {
|
|
// Add extensions
|
|
layers, _, err := loader.AvailableLayers()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if enableValidationLayers {
|
|
for _, layer := range validationLayers {
|
|
_, hasValidation := layers[layer]
|
|
if !hasValidation {
|
|
return nil
|
|
}
|
|
instanceOptions.EnabledLayerNames = append(instanceOptions.EnabledLayerNames, layer)
|
|
}
|
|
}
|
|
return nil
|
|
}
|