-
-
Notifications
You must be signed in to change notification settings - Fork 24.3k
Windows: Fix EnumDevices stall using IAT hooks. #113013
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Co-authored-by: Davi <[email protected]>
|
I've tested the same empty project with this build and with a stable 4.5 build. |
akien-mga
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me.
Let's get this tested in the next dev snapshot and get wider confirmations that it solves the problem (or not).
|
Thanks! |
|
Thanks! This was a major bug in Godot. Please consider cherrypick to Godot 3 branch. |
|
I'm running into this compilation error on Fedora 40 with MinGW 11.0.1 and GCC 14.1.1. |
Likely an issue with |
|
Cherry-picked for 4.5.2. |
I'm running into this issue on the latest Ubuntu LTS release 24.04.3, which ships with MinGW 11.0.1. It might be prudent to update the Compiling for Windows docs to mention which version of MinGW is required to build the engine. |
|
No we should fix the build regression. |
|
The only way to fix it on old MinGW is probably to load these function dynamically. |
|
From a quick check the definitions do seem to exist in MinGW 11.0.x, so I'm not sure what changed in later versions. |
|
Maybe https://sourceforge.net/p/mingw-w64/mingw-w64/ci/04ae98c97503f0bc56ff80a40978a8481dcdd7e7/ ? Not sure what's the implication but could be worth checking if it builds fine if we move this code to |
|
I guess we can try adding |
|
Yeah I'm testing this now. |
Follow-up to godotengine#113013. (cherry picked from commit dac1721)
* Core: Don't strip data in `class_get_method_list` * Fix wrong play position for the `AnimationMarkerEdit` * Fix editor ColorPicker icon scale * Wayland: Allow non-interactive window resizing Despite what I thought in the past, it is allowed, as long as we follow certain limitations depending on the toplevel's state. As usual I peppered the code with comments expaining what those limitations are. Regarding popups, AFAICT there are no major limitations, although we should eventually use the new `reposition` method, which autoadjusts the popup to follow the screen's borders and whatnot. I didn't do that in this patch as it requires some elbow grease, especially if we want to do it synchronously. * CONNECT_APPEND_SOURCE_OBJECT on signal emission * Limit maximum luminance for elevated surfaces in modern theme * Fix wrong offset for `TabBar` with hidden tabs * Fix viewport rotation gizmo aligned axis reversing * Remove checkbox icon tint in Create Scene popup * README: Minor tweaks and remove broken badge * OpenXR: change profile name for Valve Frame Controller * Revert "Core: Switch `RID_alloc::owns` to lock-free" This reverts commit bdfe854. This caused a regression for GPUParticles3D emitters on macOS arm64, which is proving to be both tricky to reproduce and solve. Other parts of the engine using RID_Owner might be affected too. Given that we're about to release 4.6, reverting might be the safest option at this time, and this optimization can be re-attempted for 4.7. Fixes godotengine#114900. * Split `EmbeddedProcess::reset` to allow stopping timers without full reset. * Remove link for consoles in EditorExportPlatform * Fix buffers in D3D12 not getting cleared with the right usage. * Fix TileSet dock becoming focused when switching TileMapLayers * Windows: Add missing `extern "C"` for `hidsdi.h` on MinGW < 12.0.0 Follow-up to godotengine#113013. * Fix TileMap wide button errors * Fix quick open history not always recorded * Fix Sprite3D modulate propagation on reparenting * Fix size issues with inspector editors * Do not store SPIR-V in memory unless pipeline statistics are used. * Add inner tab styling to Manage Theme Items dialog * Remove clip ignore from Tree background * Unify dock focus methods to prevent inconsistencies * Wayland: Fix IME The spec tells us to ignore certain events if we didn't get an `enter` event first. Certainly we need to at least acknowledge the `enter` event itself 😅 * Process system events during boot splash wait time. * OpenXR: Allow setting a specific version of OpenXR to initialize. * Sync translations with Weblate * Audio: Check if on tree before calling can_process() * Fix favorite files handling * Fix EditorFileDialog icon scale in list mode * Increase precision of ninepatch source rect to ensure pixel perfect alignment * Fix XR build regression reported in GodotVR/godot_openxr_vendors#429 * Do not update script editor before scene root init. * Add null verification to avoid background theme error in texture shader properties * Revert "Fix fixed size flag on StandardMaterial3D when rendering in stereo" This reverts commit 748f35c. Fixes godotengine#114995. This will be redone for 4.7 / possibly 4.6.1 with a more involved solution. * Add Fossilize to the disabled Vulkan layer list for the editor. * Allow ONE_SHOT_REQUEST_FIRE to override abort * Fix crash when converting `Variant` to incompatible `RequiredPtr<T>` * Remove experimental flag from graph nodes * Hide signals prefixed by underscore * Revert "Always stop script debugger when stopping game" This reverts commit d1a5d9d. This unfortunately breaks the DAP. Fixes godotengine#115188. * Restore period in loaded node paths * Wayland: Update popup scale information on creation Popups start with their size and position already scaled based on the parent. We forgot to update the popup's scale itself, leading to a double-scale. * Process events during splash on macOS only. * Remove arc_tolerance scaling and the comment related to that. clipper2 1.5.3 does the scaling internally. * Sync translations with Weblate * Fix stale reference bug in FramebufferCache. * Tweak IKModifier3D docs and comment * Fix colors of code editor in modern theme * Don't force list icon size in EditorFileDialog * Fix not being able to remove empty theme overrides in the editor * Update DONORS list * Sync translations with Weblate * Add changelog for Godot 4.6 * Bump version to 4.6-stable \o/ Almost 3 years after the 4.0 release, Godot 4 is starting to be a mature engine, including a wide array of features that enable countless developers to publish games in all genres. For example, Steam got over [1,200 new Godot games](https://steamdb.info/stats/releases/?tech=Engine.Godot) in 2025, while itch.io consistently gets around [500 new Godot games per week](https://itch.io/game-development/engines/most-projects) (game jams, prototypes, etc.). While every Godot user still has their own favorite missing feature which they're eagerly awaiting, for the most part the engine is fully capable. But there are still so many minor roadblocks, papercuts, workflow issues or outright bugs which can make the experience of developing and publishing games more painful than we'd like. So for this release, there was a significant focus on polish and usability, aiming to firmly establish Godot as an engine that you can rely upon, while keeping the iteration speed, lightweightness, and flexibility which make users love it. Close to 400 contributors were involved in this new feature release, authoring 2,001 (!) commits, and we want to thank them all for their amazing contributions, as well as all users who sponsor the Development Fund, reported bugs, opened proposals, or supported each other on our community platforms. See the release page for details: https://godotengine.org/releases/4.6/ * ci: add workflows for automation fork (#1) - sync-upstream.yml: nightly sync of master from upstream, then rebase automation branch onto updated master - build-automation.yml: build Godot editor and templates for Linux, Windows, and macOS with artifact upload Co-authored-by: Claude <[email protected]> * feat(debugger): add automation protocol for external control (#2) Extend RemoteDebugger with automation message capture: - automation:get_tree - get full scene tree hierarchy - automation:get_node - get node info by path - automation:get_property - get node property value - automation:set_property - set node property value - automation:call_method - call method on node Enables external tools like PlayGodot to control Godot games via the existing debugger infrastructure. Co-authored-by: Claude <[email protected]> * Add PlayGodot integration test workflow (#3) * Add PlayGodot integration test workflow Adds automated integration testing that runs against the Godot automation build. This workflow: - Triggers on successful automation builds or manual dispatch - Downloads the linux-editor-mono artifact - Runs PlayGodot unit tests and tic-tac-toe integration tests - Uses xvfb for headless Godot execution * Fix workflow references to match existing workflows Update playgodot-integration.yml to reference the actual workflows: - Trigger on "🔗 GHA" (runner.yml) instead of non-existent "Build Godot Automation" - Download artifacts from runner.yml instead of build-automation.yml The "🔗 GHA" workflow is the main orchestrator that triggers Linux builds, which produce the linux-editor-mono artifact needed for integration tests. --------- Co-authored-by: Claude <[email protected]> * Add input injection to automation protocol (Phase 2) (#4) Extends the existing automation protocol with input injection capabilities: New Commands: - automation:mouse_button - [x, y, button, pressed, double_click?] - automation:mouse_motion - [x, y, rel_x, rel_y] - automation:key - [keycode, pressed, physical?] - automation:touch - [index, x, y, pressed] - automation:action - [name, pressed, strength?] Features: - All events use DEVICE_ID_EMULATION to distinguish from real input - Mouse motion queries current button mask for proper drag support - Mouse button supports optional double_click flag - Each command responds with automation:input_result This builds on the Phase 1 automation protocol in the automation branch. Co-authored-by: Claude <[email protected]> * Update workflow to use `git checkout -B` for creating/updating branches * Add permissions to sync-upstream workflow * Remove unused trigger-build step from sync-upstream workflow * Remove unused `workflows: write` permission from sync-upstream workflow * Remove unused `workflows: write` permission from sync-upstream workflow * Add extended automation commands to RemoteDebugger Phase 3 automation features: - screenshot: Capture viewport or specific node as PNG - query_nodes: Find nodes matching a pattern - count_nodes: Count nodes matching a pattern - get_current_scene: Return current scene path and name - change_scene: Switch to a different scene - reload_scene: Reload the current scene - pause/unpause: Control game pause state - time_scale: Get/set Engine.time_scale for slow-mo/speed-up * Fix get_current_scene, pause, and time_scale commands - get_current_scene now returns both scene path and name - pause/time_scale now support query mode (pass null to get current state) - pause/time_scale return actual state instead of just true * Add release step to automation build workflow - Download Linux and macOS editor artifacts after build - Create zip files for each platform - Upload to automation-latest release - Only runs on push to automation branch * Update README with automation support details - Highlight the fork's automation capabilities and usage with PlayGodot - Add build instructions for macOS, Linux, and Windows - List new RemoteDebugger commands for automation - Provide examples of usage and related projects * Fix linux-editor artifact name in release workflow The Linux build uploads artifact as 'linux-editor-mono' (matching cache-name), not 'linux-editor'. Also fixed the binary name to include .mono suffix. * Fix automation commands failing before scene tree initialization Add is_inside_tree() guards to automation protocol functions in RemoteDebugger. When automation commands arrive before SceneTree::initialize() completes, these functions now return graceful empty responses instead of crashing with "Can't use get_node() with absolute paths from outside the active scene tree." Functions fixed: - _send_scene_tree() - _send_node_info() - _send_property() - _set_property() - _call_method() - _send_screenshot() - _query_nodes() - _count_nodes() This allows PlayGodot clients to use wait_for_node() which polls until the tree is ready, rather than failing immediately on startup. * Fix GUI input in headless mode for automation - DisplayServerHeadless now stores and returns the window resolution instead of returning empty Size2i(). This ensures the viewport has the correct size for input coordinate mapping. - Added process_events() calls after input injection to ensure events are properly flushed and dispatched to the GUI system. Fixes mouse clicks not reaching Control nodes in headless mode, which was caused by gui_find_control() failing to find controls when the viewport size was incorrectly reported as 64x64 (minimum) instead of the requested resolution. * Fix change_scene automation to wait for deferred scene load (#6) * Fix change_scene automation to wait for deferred scene load Scene changes in Godot are deferred (the actual switch happens in _flush_scene_change during idle processing). The automation protocol was sending success responses immediately, before the new scene was actually loaded and ready, causing race conditions in PlayGodot. Changes: - Add is_inside_tree() guards to _change_scene and _reload_scene - Connect to scene_changed signal with CONNECT_ONE_SHOT to send the automation:scene_result response only after the scene is fully loaded - Send immediate failure response for errors like file not found * Add missing include for callable_mp_static Include callable_method_pointer.h which is required for callable_mp_static used in the scene change signal connection. * Add AGENTS.md with guidelines for this codebase Documents common pitfalls like missing includes for callable_mp_static and automation protocol patterns to follow. * Add CLAUDE.md referencing AGENTS.md * Fix include order for style check * Add include ordering guidance to AGENTS.md * Fix callable_mp_static usage for file-scope static function Remove '&' from callable_mp_static calls - for file-scope static functions, use the function name directly without address-of operator. Class static methods use '&ClassName::method', but file-scope functions use just the function name. * Add callable_mp_static syntax guidance to AGENTS.md * Fix CONNECT_ONE_SHOT to use Object:: namespace qualifier * Update AGENTS.md: CONNECT_ONE_SHOT requires Object:: qualifier --------- Co-authored-by: Claude <[email protected]> --------- Co-authored-by: Thaddeus Crews <[email protected]> Co-authored-by: Michael Alexsander <[email protected]> Co-authored-by: passivestar <[email protected]> Co-authored-by: Dery Almas <[email protected]> Co-authored-by: kleonc <[email protected]> Co-authored-by: Robert Yevdokimov <[email protected]> Co-authored-by: Rémi Verschelde <[email protected]> Co-authored-by: Bastiaan Olij <[email protected]> Co-authored-by: Pāvels Nadtočajevs <[email protected]> Co-authored-by: Max Hilbrunner <[email protected]> Co-authored-by: Skyth <[email protected]> Co-authored-by: kobewi <[email protected]> Co-authored-by: Logan Detrick <[email protected]> Co-authored-by: Dario <[email protected]> Co-authored-by: Giganzo <[email protected]> Co-authored-by: Rémi Verschelde <[email protected]> Co-authored-by: sigmund68k <[email protected]> Co-authored-by: Clay John <[email protected]> Co-authored-by: Fredia Huya-Kouadio <[email protected]> Co-authored-by: M4rchyS <[email protected]> Co-authored-by: vaner-org <[email protected]> Co-authored-by: David Snopek <[email protected]> Co-authored-by: Raul Santos <[email protected]> Co-authored-by: Frank Becker <[email protected]> Co-authored-by: Silc Lizard (Tokage) Renew <[email protected]> Co-authored-by: Claude <[email protected]>
Fixes #20566
Fixes #105271
Fixes #110663
Same as #76810, but without DLL files.
I do not like this, but since it seems to be still relevant even after switching to SDL and no better solution was found, it should be OK.
Note: I do not have any device that triggering the issue, so only tested that it's intercepting the same methods as #76810