Files
aurora/lib/dawn/BackendBinding.cpp
Pieter-Jan Briers da0e2886f3 asan: fix std::unique_ptr<wgpu::ChainedStruct> base cast (#63)
This is UB because of some C++ insanity. Moving to shared_ptr fixes it.
2026-03-16 10:09:25 -06:00

47 lines
2.0 KiB
C++

#include "BackendBinding.hpp"
#include <memory>
#if !defined(SDL_PLATFORM_MACOS)
#include <SDL3/SDL_video.h>
#endif
namespace aurora::webgpu::utils {
std::shared_ptr<wgpu::ChainedStruct> SetupWindowAndGetSurfaceDescriptorCocoa(SDL_Window* window);
std::shared_ptr<wgpu::ChainedStruct> SetupWindowAndGetSurfaceDescriptor(SDL_Window* window) {
#if defined(SDL_PLATFORM_MACOS)
return SetupWindowAndGetSurfaceDescriptorCocoa(window);
#else
const auto props = SDL_GetWindowProperties(window);
#if defined(SDL_PLATFORM_ANDROID)
std::shared_ptr<wgpu::SurfaceSourceAndroidNativeWindow> desc =
std::make_shared<wgpu::SurfaceSourceAndroidNativeWindow>();
desc->window = SDL_GetPointerProperty(props, SDL_PROP_WINDOW_ANDROID_WINDOW_POINTER, nullptr);
return std::move(desc);
#elif defined(SDL_PLATFORM_WIN32)
std::shared_ptr<wgpu::SurfaceSourceWindowsHWND> desc = std::make_shared<wgpu::SurfaceSourceWindowsHWND>();
desc->hwnd = SDL_GetPointerProperty(props, SDL_PROP_WINDOW_WIN32_HWND_POINTER, nullptr);
desc->hinstance = SDL_GetPointerProperty(props, SDL_PROP_WINDOW_WIN32_INSTANCE_POINTER, nullptr);
return std::move(desc);
#elif defined(SDL_PLATFORM_LINUX)
const char* driver = SDL_GetCurrentVideoDriver();
if (SDL_strcmp(driver, "wayland") == 0) {
std::shared_ptr<wgpu::SurfaceSourceWaylandSurface> desc = std::make_shared<wgpu::SurfaceSourceWaylandSurface>();
desc->display = SDL_GetPointerProperty(props, SDL_PROP_WINDOW_WAYLAND_DISPLAY_POINTER, nullptr);
desc->surface = SDL_GetPointerProperty(props, SDL_PROP_WINDOW_WAYLAND_SURFACE_POINTER, nullptr);
return std::move(desc);
}
if (SDL_strcmp(driver, "x11") == 0) {
std::shared_ptr<wgpu::SurfaceSourceXlibWindow> desc = std::make_shared<wgpu::SurfaceSourceXlibWindow>();
desc->display = SDL_GetPointerProperty(props, SDL_PROP_WINDOW_X11_DISPLAY_POINTER, nullptr);
desc->window = SDL_GetNumberProperty(props, SDL_PROP_WINDOW_X11_WINDOW_NUMBER, 0);
return std::move(desc);
}
#endif
return nullptr;
#endif
}
} // namespace aurora::webgpu::utils