vulkan_x11.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // SPDX-License-Identifier: Unlicense OR MIT
  2. //go:build ((linux && !android) || freebsd) && !nox11
  3. // +build linux,!android freebsd
  4. // +build !nox11
  5. package vk
  6. /*
  7. #define VK_USE_PLATFORM_XLIB_KHR
  8. #define VK_NO_PROTOTYPES 1
  9. #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
  10. #include <vulkan/vulkan.h>
  11. static VkResult vkCreateXlibSurfaceKHR(PFN_vkCreateXlibSurfaceKHR f, VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) {
  12. return f(instance, pCreateInfo, pAllocator, pSurface);
  13. }
  14. */
  15. import "C"
  16. import (
  17. "fmt"
  18. "unsafe"
  19. )
  20. var x11Funcs struct {
  21. vkCreateXlibSurfaceKHR C.PFN_vkCreateXlibSurfaceKHR
  22. }
  23. func init() {
  24. loadFuncs = append(loadFuncs, func(dlopen func(name string) *[0]byte) {
  25. x11Funcs.vkCreateXlibSurfaceKHR = dlopen("vkCreateXlibSurfaceKHR")
  26. })
  27. }
  28. func CreateXlibSurface(inst Instance, dpy unsafe.Pointer, window uintptr) (Surface, error) {
  29. inf := C.VkXlibSurfaceCreateInfoKHR{
  30. sType: C.VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR,
  31. dpy: (*C.Display)(dpy),
  32. window: (C.Window)(window),
  33. }
  34. var surf Surface
  35. if err := vkErr(C.vkCreateXlibSurfaceKHR(x11Funcs.vkCreateXlibSurfaceKHR, inst, &inf, nil, &surf)); err != nil {
  36. return 0, fmt.Errorf("vulkan: vkCreateXlibSurfaceKHR: %w", err)
  37. }
  38. return surf, nil
  39. }