diff --git a/extern/dawn b/extern/dawn index 64a23ce..db82c79 160000 --- a/extern/dawn +++ b/extern/dawn @@ -1 +1 @@ -Subproject commit 64a23ce0ede5f232cc209b69d64164ede6810b65 +Subproject commit db82c79db65e502dd226f5cb4e2c03d85f8ffd2d diff --git a/lib/dawn/BackendBinding.cpp b/lib/dawn/BackendBinding.cpp index a7a6fd9..8ee5536 100644 --- a/lib/dawn/BackendBinding.cpp +++ b/lib/dawn/BackendBinding.cpp @@ -37,6 +37,22 @@ BackendBinding* CreateVulkanBinding(SDL_Window* window, WGPUDevice device); BackendBinding::BackendBinding(SDL_Window* window, WGPUDevice device) : m_window(window), m_device(device) {} +#if defined(DAWN_ENABLE_BACKEND_OPENGL) +struct GLUserData { + SDL_Window* window; + SDL_GLContext context; +}; +void GLMakeCurrent(void* userData) { + auto* data = static_cast(userData); + SDL_GL_MakeCurrent(data->window, data->context); +} +void GLDestroy(void* userData) { + auto* data = static_cast(userData); + SDL_GL_DeleteContext(data->context); + delete data; +} +#endif + bool DiscoverAdapter(dawn::native::Instance* instance, SDL_Window* window, wgpu::BackendType type) { switch (type) { #if defined(DAWN_ENABLE_BACKEND_D3D12) @@ -63,10 +79,15 @@ bool DiscoverAdapter(dawn::native::Instance* instance, SDL_Window* window, wgpu: SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 4); - SDL_GL_CreateContext(window); - auto getProc = reinterpret_cast(SDL_GL_GetProcAddress); - dawn::native::opengl::AdapterDiscoveryOptions adapterOptions; - adapterOptions.getProc = getProc; + SDL_GLContext context = SDL_GL_CreateContext(window); + dawn::native::opengl::AdapterDiscoveryOptions adapterOptions{WGPUBackendType_OpenGL}; + adapterOptions.getProc = SDL_GL_GetProcAddress; + adapterOptions.makeCurrent = GLMakeCurrent; + adapterOptions.destroy = GLDestroy; + adapterOptions.userData = new GLUserData{ + .window = window, + .context = context, + }; return instance->DiscoverAdapters(&adapterOptions); } #endif @@ -76,10 +97,15 @@ bool DiscoverAdapter(dawn::native::Instance* instance, SDL_Window* window, wgpu: SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); - SDL_GL_CreateContext(window); - auto getProc = reinterpret_cast(SDL_GL_GetProcAddress); - dawn::native::opengl::AdapterDiscoveryOptionsES adapterOptions; - adapterOptions.getProc = getProc; + SDL_GLContext context = SDL_GL_CreateContext(window); + dawn::native::opengl::AdapterDiscoveryOptions adapterOptions{WGPUBackendType_OpenGLES}; + adapterOptions.getProc = SDL_GL_GetProcAddress; + adapterOptions.makeCurrent = GLMakeCurrent; + adapterOptions.destroy = GLDestroy; + adapterOptions.userData = new GLUserData{ + .window = window, + .context = context, + }; return instance->DiscoverAdapters(&adapterOptions); } #endif diff --git a/lib/gfx/gx_shader.cpp b/lib/gfx/gx_shader.cpp index 9225ed5..da8c095 100644 --- a/lib/gfx/gx_shader.cpp +++ b/lib/gfx/gx_shader.cpp @@ -1311,14 +1311,14 @@ fn textureSamplePaletteI4(tex: texture_2d, samp: sampler, uv: vec2, tl return mix(t0, t1, f.y); }} -@stage(vertex) +@vertex fn vs_main({5} ) -> VertexOutput {{ var out: VertexOutput;{9}{6} return out; }} -@stage(fragment) +@fragment fn fs_main(in: VertexOutput) -> @location(0) vec4 {{{8}{7} return prev; }} diff --git a/lib/webgpu/gpu.cpp b/lib/webgpu/gpu.cpp index cf0c627..de526a1 100644 --- a/lib/webgpu/gpu.cpp +++ b/lib/webgpu/gpu.cpp @@ -170,7 +170,7 @@ var uvs: array, 3> = array, 3>( vec2(2.0, 0.0), ); -@stage(vertex) +@vertex fn vs_main(@builtin(vertex_index) vtxIdx: u32) -> VertexOutput { var out: VertexOutput; out.pos = vec4(pos[vtxIdx], 0.0, 1.0); @@ -178,7 +178,7 @@ fn vs_main(@builtin(vertex_index) vtxIdx: u32) -> VertexOutput { return out; } -@stage(fragment) +@fragment fn fs_main(in: VertexOutput) -> @location(0) vec4 { return textureSample(efb_texture, efb_sampler, in.uv); } diff --git a/lib/window.cpp b/lib/window.cpp index 564468f..1a39279 100644 --- a/lib/window.cpp +++ b/lib/window.cpp @@ -157,6 +157,7 @@ bool create_window(AuroraBackend backend) { #endif g_window = SDL_CreateWindow(g_config.appName, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, flags); if (g_window == nullptr) { + Log.report(LOG_WARNING, FMT_STRING("Failed to create window: {}"), SDL_GetError()); return false; } set_window_icon();