src/video


Log

Author Commit Date CI Message
Manuel Alfayate Corchete 78c274cb 2020-09-26T19:18:09 kmsdrm: merge patches from Ozkan Sezer for removing c-99'isms and raising libgbm version reqeriments.
Sylvain Becker 955f3184 2020-09-25T10:14:42 Fixed bug 5239 - Play audio on Android while backgrounded (Thanks Superfury) Add hint SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO not to pause audio when the app goes to background. (It requires SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking")
Manuel Alfayate Corchete 9c342e76 2020-09-13T21:41:10 kmsdrm: merge heap buffer overflow and cursor creation patches from meyraud705.
Manuel Alfayate Corchete 0cb9bfa5 2020-09-12T15:58:47 kmsdrm: less excessive error checkhing
Manuel Alfayate Corchete 5bed30dd 2020-09-12T04:56:55 kmsdrm: also do pending modeseting in SwapWindowDoubleBuffered().
Manuel Alfayate Corchete 9e9227ad 2020-09-12T04:52:56 kmsdrm: reimplement modesetting for fullscreen window scaling and AR-correction.
Manuel Alfayate Corchete 4575c694 2020-09-12T02:36:02 kmsdrm: delete ununsed variable.
Manuel Alfayate Corchete 01b0cf1c 2020-09-12T00:47:00 Backed out changeset 4a45d1a30d25 kmsdrm: Fake KMSDRM_SetDisplayMode() is needed for some programs after all.
Manuel Alfayate Corchete 7b676548 2020-09-12T00:16:08 kmsdrm: don't fool SDL into thinking that changing the physical videomode is done.
Manuel Alfayate Corchete a6d182d3 2020-09-11T23:47:26 kmsdrm: no need to reconnect/reactivate things in SwapWindowDoubleBuffered().
Manuel Alfayate Corchete 47e2d030 2020-09-10T23:26:02 kmsdrm: greatly improve comments in SwapBuffersFenced() for future reference.
Ryan C. Gordon 3c6004fe 2020-09-10T15:07:23 kmsdrm: Choose how to swap buffers based on EGL extension availability.
Ryan C. Gordon c7e761f8 2020-09-10T15:05:55 kmsdrm: Patched to compile if EGL headers lack EGL_ANDROID_native_fence_sync.
Ryan C. Gordon 224aa45b 2020-09-10T15:04:35 kmsdrm: Implement GL_DefaultProfileConfig for Raspberry Pi compatibility. If we think this might be a Raspberry Pi device, default to ES2. Otherwise, accept SDL's higher-level defaults.
Ryan C. Gordon 092162ed 2020-09-10T15:02:51 video: Set up default before calling GL_DefaultProfileConfig(). This way, the implementation can opt to do nothing to accept SDL's defaults.
Ryan C. Gordon e758dd53 2020-09-10T15:02:00 egl: Make SDL_EGL_HasExtension() available outside of SDL_egl.c.
Manuel Alfayate Corchete 055cad49 2020-09-10T02:15:53 kmsdrm: no need to re-connect/reactivate things in SwapWindow() anymore because we use a dumb buffer on KMS buffers destruction now.
Manuel Alfayate Corchete 351219bf 2020-09-09T03:18:26 kmsdrm: On VideoQuit(), only destroy dumb buffer if it exists.
Sam Lantinga 8709f67e 2020-09-08T08:42:30 Fixed bug 5215 - Fixing filenames passed to dlopen for OpenBSD Brad Smith Attached is a patch to use the proper filenames when trying to dlopen the respective shared libraries on OpenBSD.
Manuel Alfayate Corchete 244d0ad8 2020-09-08T15:30:45 kmsdrm: Tell SDL that mouse has entered the window via artificial event. Fixes sticky mouse in Scummvm.
Cameron Gutman 9a769da0 2020-09-07T20:10:50 X11: Remove our X11 error callback in X11_DeleteDevice() If we don't remove it, we will infinitely recurse if X11_CreateDevice() is called again and orig_x11_errhandler becomes X11_SafetyNetErrHandler().
Manuel Alfayate Corchete 550e1533 2020-09-08T02:42:32 kmsdrm: No need to test for display driverdata when freeing a plane.
Manuel Alfayate Corchete 6e03fab9 2020-09-07T23:15:33 kmsdrm: add temporary RPI4_COMPAT define to try RPI4+current Rasbian compatibility.
Manuel Alfayate Corchete 0f807fd6 2020-09-07T22:54:15 kmsdrm: use a black dumb buffer for keeping the PRIMARY PLANE occupied when we destroy the KMS buffers, instead of using the TTY buffer, to avoid flickering.
Sylvain Becker ebc12a2f 2020-09-07T18:50:30 SDL_Surface refcount: destination surface keep track of surfaces that are mapped to it and automatically invalidate them when it is freed - refcount is kept so that an external application can still create a reference to SDL_Surface. - lock_data was un-used and is now renamed and used as a list keep track of the blitmap
Manuel Alfayate Corchete cce6c605 2020-09-07T01:33:04 kmsdrm: fix errors when trying to free up videomode driverdata pointers on quit.
Manuel Alfayate Corchete 9501b1c6 2020-09-07T00:18:13 kmsdrm: fix scaling for SDL_WINDOW_FULLSCREEN windows.
Manuel Alfayate Corchete daa752b1 2020-09-06T23:19:54 kmsdrm: fix first frame display: no need to wait for SwapWindow() for EGL surface creation.
Manuel Alfayate Corchete 68ac9349 2020-09-06T12:48:39 kmsdrm: more coherent returns for SwapWindow.
Manuel Alfayate Corchete d3d9d432 2020-09-06T12:17:27 kmsdrm: Remove debug printfs in SwapWindow.
Manuel Alfayate Corchete d7aebbd5 2020-09-06T12:08:22 kmsdrm: Don't create surfaces until EGL context is available.
Cameron Gutman 1b6de9a9 2020-09-05T15:01:45 Fix SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH=1 on Metal windows SDL_cocoametalview was consuming the first click rather than passing it through to the SDLView underneath which overrides [NSView acceptsFirstMouse] based on the user's SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH preference.
Manuel Alfayate Corchete f4e02a5c 2020-08-31T19:17:17 kmsdrm: Do NOT modify window size manually from the backend: doing so caused renderer scaling params miscalculation.
Manuel Alfayate Corchete c09d1cee 2020-08-28T23:04:00 kmsdrm: Apply window reconfiguration in SetWindowSize(), too.
Manuel Alfayate Corchete 31b17945 2020-08-28T22:38:26 kmsdrm: use PLANE and CRTC to do hardware-driven window scaling and AR-correction.
Manuel Alfayate Corchete fe3f9796 2020-08-26T01:37:30 kmsdrm: unload EGL and GL lib only if using them.
Manuel Alfayate Corchete 9b43464d 2020-08-25T16:30:23 kmsdrm: Add programmer credits to the Atomic KMSDRM driver.
Manuel Alfayate Corchete 9316a8d9 2020-08-25T16:18:49 kmsdrm: move FENCE FD props setting to SwapWindow(), where it belongs.
Manuel Alfayate Corchete 3f38009b 2020-08-25T15:40:36 kmsdrm: comment out atomic commit fast-debugging printf.
Manuel Alfayate Corchete 0d16761c 2020-08-25T05:53:13 kmsdrm: fix segfault on quit beacuse of freed _this->egl_data.
Manuel Alfayate Corchete d43e666e 2020-08-25T04:05:36 kmsdrm: Buffer management refactoring. Fixes for compatibility with more video drivers.
Manuel Alfayate Corchete eade05ca 2020-08-24T12:51:20 kmsdrm: Finetune integer type usage. Add some comments.
Manuel Alfayate Corchete a76f1763 2020-08-24T01:10:11 kmsdrm: Move cursor plane setup and freeing to MouseInit() and MouseQuit(), for better consistency.
Manuel Alfayate Corchete 0d593d7e 2020-08-23T23:44:07 kmsdrm: Add error control to plane prop setting function. Do most plane prop setting with a single function.
Manuel Alfayate Corchete e06e9c35 2020-08-23T11:26:55 kmsdrm: move cursor-related atomic helper functions and related struct typedefs to the SDL_kmsdrmmouse unit.
Manuel Alfayate Corchete 0b7b7721 2020-08-23T03:13:50 kmsdrm: remove redundant function, use drm_atomic_setbuffers() for disconnecting planes instead.
Manuel Alfayate Corchete 16c04f26 2020-08-23T02:58:57 kmsdrm: Init cursor surface on SetCursor() ONLY. Removal of dynamic modeset because it causes A LOT of problems with some kernel video drivers. Some refactoring and cleanups.
Manuel Alfayate Corchete 0d0ba111 2020-08-19T01:34:56 kmsdrm: correct parameter name.
Manuel Alfayate Corchete 5d32eda9 2020-08-19T01:31:22 kmsdrm: implement smarter surface recreation function to be used in videomode changes. Other minor arrangements.
Manuel Alfayate Corchete f79da817 2020-08-18T01:52:15 kmsdrm: free all connector, crtc and plane memory on KMSDRM_VideoQuit().
Manuel Alfayate Corchete 92cb9192 2020-08-17T18:35:04 kmsdrm: move hardware cursor functionality to the ATOMIC interface. Disconnect the display plane from the GBM surface buffers before destroying the GBM surface.
Manuel Alfayate Corchete c437729b 2020-08-08T14:27:55 kmsdrm: separate requests in different functions so we only need one atomic commit for everything, as expected by atomic design.
Manuel Alfayate Corchete 3b9f1073 2020-08-07T11:53:04 kmsdrm: wait for possible pending atomic commits before destroying surfaces, and before restoring video on quit. Move messages to the SDL_Log* functions.
Manuel Alfayate Corchete 96c99693 2020-08-06T01:36:56 kmsdrm: wait for pending atomic commits before restoring videomode and crtc->buffer on VideoQuit, and simplify double-buffer SwapWindow() implementation.
Manuel Alfayate Corchete 09692b61 2020-08-05T18:55:22 kmsdrm: move videomode restoration on VideoQuit() to using the atomic interface instead of the legacy drmModeSetCrtc() function. Refactoring of get_plane_id().
Manuel Alfayate Corchete fc722b2d 2020-08-05T15:28:51 kmsdrm: free memory for plane, crtc and connector property tables on VideoQuit.
Manuel Alfayate Corchete 2d69ce08 2020-08-05T02:06:59 kmsdrm: double and triple buffered versions of SwapWindow() are now both reimplemented in atomic pageflipping versions, and can be selected via SDL_VIDEO_DOUBLE_BUFFER env variable.
Manuel Alfayate Corchete 8996ee17 2020-08-03T22:24:49 kmsdrm: update SwapWindow fn, moving it to triple-buffer.
Ryan C. Gordon ea171c05 2020-08-01T18:58:42 winrt: Another attempt at getting this to compile. IntPtr isn't a POD type like I thought, so hopefully we can just construct one that works out? C++/CX is so weird.
Manuel Alfayate Corchete b131661c 2020-08-01T18:23:34 kmsdrm: rewrite the new SwapWindow() fn to avoid tearing. Double-buffer only for now.
Ryan C. Gordon 282e4c65 2020-07-31T19:42:23 winrt: Patched to compile...? Microsoft's C++/CX is weird, no idea if this will actually fix it. :/
Manuel Alfayate Corchete 1a5503ce 2020-07-28T21:11:25 kmsdrm: Moved to the ATOMIC KMS/DRM interface for buffer swapping, leaving DRM-legacy behind.
Tudor Brindus c0943328 2020-07-21T13:14:24 wayland: defer pointer confine creation until pointer unlock It is a protocol error to attempt to create a pointer confine (i.e. `SDL_SetWindowGrab`) while a locked pointer is active, and vice-versa. Instead of aborting due to a protocol error, this commit makes SDL gracefully downgrade locked pointers to confines when appropriate.
RALOVICH, Kristof c7eb557d 2020-07-20T10:09:07 kmsdrm: do not leak drmModeConnector Previously conn was leaked on the success path (when available was set to SDL_TRUE).
Manuel Alfayate Corchete 412b21b0 2020-07-20T11:42:23 Rename the gbm device struct from gbm to gbm_dev for better readabilty.
RALOVICH, Kristof 155fdc7a 2020-07-19T21:48:17 kmsdrm: settle with first card that has a connected connector Previously the first card with non-empty connectors, encoders and crtcs would be selected, however KMSDRM_VideoInit could still reject it if the connector was not connected. This allow finding the first card (in a multi GPU setup) that is actually connected to a display.
RALOVICH, Kristof b78b88f7 2020-07-19T21:46:41 kmsdrm: fix typo
Manuel Alfayate Corchete 75fe4b14 2020-07-19T19:53:57 Added comment about window creation behaviour in KMSDRM.
Manuel Alfayate Corchete 2f660c4f 2020-07-19T19:11:02 Delete windata variable no longer needed in KMSDR_SetDisplayMode().
Manuel Alfayate Corchete 3a1d7d9c 2020-07-19T19:09:15 Surfaces have to be recreated immediately from KMSDRM_SetDisplayMode().
Manuel Alfayate Corchete b6a818b6 2020-07-19T18:45:29 Fix SDL_Window recreation: drmModeSetCrtc() has to be called everytime the EGL and GBM surfaces are recreated.
Sam Lantinga 71e9df99 2020-07-19T08:55:01 Fixed bug 5231 - Fix for hardware cursor: size and alpha-premultiplication. Manuel Alfayate Corchete I noticed pt2-clone had problems with it's optional hardware mouse on the KMSDRM backend: cursor had a transparent block around it. So I was investigating and it seems that a GBM cursor needs it's pixels to be alpha-premultiplied instead of straight-alpha. A lso, I was previously relying on "manual testing" for the cursor size, but it's far better to use whatever the DRM driver recommends via drmGetCap(): any working driver should make a size recommendation via drmGetCap(), so that's what we use now. I took this decision because I found out that the AMDGPU driver reported working cursor sizes that would appear garbled on screen, and only the recommended cursor size works.
Ryan C. Gordon b5affd12 2020-07-16T13:28:59 Patched to compile.
Ryan C. Gordon 3b38e61a 2020-07-16T13:25:50 winrt: Fix casting a pointer to int. Fixes Bugzilla #5202.
Ryan C. Gordon 8babda2c 2020-07-16T13:18:19 egl: SDL_EGL_LoadLibaryOnly() shouldn't set _this->gl_config.driver_loaded = 1 This is handled in in the higher-level SDL_GL_LoadLibrary(). All uses of SDL_EGL_LoadLibrary (which calls the Only version) are just target-specific wrappers for their own GL_LoadLibrary hook, with two exceptions which now handle driver_loaded correctly (although it's questionable if these init-if-no-one-did-it-correctly-already code blocks should exist at all, fwiw). Fixes Bugzilla #5190.
M Stoeckl 8669a87f 2020-07-14T21:13:27 Reuse X11 connection from availability check Instead of creating an X11 connection to test that X11 is available, closing the connection, and then reconnecting for real, use the same connection to handle both cases. The X11 connection retry delay mechanism in the case where X11 is dynamically loaded has been removed. It was only necessary to avoid authetnication token reuse from the XOpenDisplay call that used to exist in X11_Available. Now that this call is only made once, it is no longer needed. Also drop unused and inapplicable code from a comment. ***
M Stoeckl a78b9763 2020-07-14T19:18:16 Reuse Wayland connection from availability check
M Stoeckl 052a1373 2020-07-12T19:11:15 Merge VideoBootStrap::available into VideoBootStrap::create The two are only ever called together, and combining them makes it possible to eliminate redundant symbol loading and redundant attempts to connect to a display server.
Sylvain Beucler e594a673 2020-06-27T16:25:47 emscripten: Introduce SDL_HINT_EMSCRIPTEN_ASYNCIFY See https://github.com/emscripten-core/emscripten/issues/10746 and https://github.com/emscripten-ports/SDL2/pull/112 Fixes Bugzilla #4997.
Sylvain Beucler 01af7b02 2020-06-27T16:22:50 emscripten: support pseudo-synchronous screen refresh and events update using asyncify
Ryan C. Gordon 694fea8a 2020-06-26T21:37:29 video: Make SDL_CreateWindow use SDL_Init(SDL_INIT_VIDEO), not SDL_VideoInit. Otherwise, the video subsystem won't deinitialize during SDL_Quit(). Fixes Bugzilla #5067.
Ryan C. Gordon 1947ca70 2020-06-26T20:16:43 video: Changed SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS to default to FALSE. Fixes Bugzilla #5106. (and probably many others, too!)
Sam Lantinga ce293eed 2020-06-23T10:12:24 Fixed bug 5208 - Fix libGL loading on OpenBSD
Sam Lantinga b9f55b6d 2020-06-19T10:37:14 Fixed bug 5199 - Fix KMSDRM_CreateWindow() segfault when starting L?VE2D engine. Manuel Alfayate Corchete This small patch fixes the KMSDRM_CreateSurfaces() call in KMSDRM_CreateWindow(), that was segfaulting deeper into SDL internals because the windata->viddata pointer wasn't set before the KMSDRM_CreateSurfaces() call. So that's what this small patch does. Now, L?VE2D works perfectly well on the Raspberry Pi 3, instead of just segfaulting.
Sam Lantinga 48989e2a 2020-06-17T08:47:27 Reverted comment change in previous commit
Sam Lantinga a7ff6e96 2020-06-17T08:44:45 Fixed overflow in surface pitch calculation
James Legg f1d5ced1 2020-06-17T12:48:40 x11: Fix spurious keyboard focus events
Sam Lantinga 20aada0e 2020-06-10T09:38:43 Fixed bug 5170 - Build fails when using Visual Studio 2017 with Windows 10 SDK 10.0.19041.0 in uwp JackBoosY In src/video/winrt/SDL_winrtgamebar.cpp line 55: virtual HRESULT STDMETHODCALLTYPE add_VisibilityChanged( __FIEventHandler_1_IInspectable *handler, Windows::Foundation::EventRegistrationToken *token) = 0; The macro __FIEventHandler_1_IInspectable defined in windows.fondation.h(Windows10 SDK 10.0.17763.0) line 3576: #define __FIVector_1_Windows__CFoundation__CPoint ABI::Windows::Foundation::Collections::__FIVector_1_Windows__CFoundation__CPoint_t but no longer exists in Windows 10 SDK 10.0.19041.0. After searching this macro in the sdk include path, I found that it was defined in many header files. But it should be replaced in windows.system.h .
Sam Lantinga 44f50c64 2020-06-09T21:47:41 Fixed bug 5171 - PollEvent impacts performance in 2.0.12 On some systems, GetClipCursor() impacts performance when called frequently, so only call it every once in a while to make sure we haven't lost our capture.
Sam Lantinga 511a9702 2020-06-09T21:43:00 Fixed whitespace
Sam Lantinga 3ac24bfc 2020-06-08T17:01:50 Fixed mouse drag with an external mouse on iOS
Sam Lantinga 958c4282 2020-06-04T09:13:49 Fixed build warning
Ryan C. Gordon 60435712 2020-06-03T16:42:19 video: Set window->surface NULL after freeing it. Otherwise, when SDL_CreateWindowFramebuffer() is called again, it will return the free'd surface instead of creating a new one.
Sam Lantinga d48c97c4 2020-06-02T16:57:20 Fixed bug 5147 - KMSDRM: SetWindowFullscreen() failing with SDL_WINDOW_FULLSCREEN_DESKTOP Manuel Alfayate Corchete This patch is needed so programs that do this work as expected: 1) Start in a different video mode than the mode used by the system and then... 2) Try to go fullscreen with the mode originally used by the system via SetWindowFullScreen() with the SDL_WINDOW_FULLSCREEN_DESKTOP flag. An example would be pt2-clone in https://github.com/8bitbubsy/pt2-clone. This program does this: Starts with: video.window = SDL_CreateWindow("", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, screenW, screenH, windowFlags); and then, *IF* the user has configured it in fullscreen mode in its .ini, it tries to go fullscreen with the desktop mode: SDL_SetWindowFullscreen(video.window, SDL_WINDOW_FULLSCREEN_DESKTOP); This sequence of operations is currently failing because SDL_SetDisplayModeForDisplay() in SDL_video.c fails because display->desktop_mode is not being initialized with its correct value: SetDisplayMode() in SDL_kmsdrmvideo.c will not be able to set the mode because it detects the mode to have a driverdata of 0x0 ("if (!modedata)") and rightfully returns an error. So, the included patch fixes this small problem, and programs that first change the video mode and then try to go fullscreen with the system video mode will now work. The patch simply fixes an small omission, but its really needed now that dynamic video mode changing was implemented on the KMSDRM backend.
Sam Lantinga 9325b22e 2020-05-29T21:26:32 Fixed bug 5113 - SDL_UpdateWindowSurfaceRects BitBlt the entire surface on Win32 Ryan C. Gordon As discussed here: https://discourse.libsdl.org/t/question-about-implementation-of-sdl-updatewindowsurfacerects/27561 "As you can see this function [WIN_UpdateWindowFramebuffer, in src/video/windows/SDL_windowsframebuffer.c] calls BitBlt on entire screen, even though it accepts the rects. Rects variable is not even used in this function at all. Now my question is why is that the case?"
Sam Lantinga bdfd1b68 2020-05-29T16:02:49 Fixed bug 5146 - SDL_RenderFillRect doesn't work in DirectFB Lacky It looks like refactoring of SDL2 internal API has broken SDL_RenderFillRect for DirectFB. In new version function SDL_RenderFillRect returns 0, but rectangle is not visible. Replacing "count" with "len" in the argument list for SDL_memcpy in DirectFB_QueueFillRects fixes problem.
James Legg e2dbed9c 2020-05-29T13:05:37 SDL_blit: Fix undefined bitshift operations Arithmatic operations promote Uint8 to signed int. If the top bit of a Uint8 is set, and it is left shifted 24 places, then the result is not representable in a signed 32 bit int. This would be undefined behaviour on systems where int is 32 bits.
Ryan C. Gordon aa259ed5 2020-05-28T15:18:41 wayland: Changed output removal in handle_surface_leave() No longer needs an extra malloc, handles unexpected cases like the same output being listed twice.
Ryan C. Gordon ce7ae4ec 2020-05-28T14:57:10 wayland: Move buffer copy into mime_data_list_add() It makes it clearer who owns the memory, and more reasonable to free it on failure in the creating function. (and, of course, pacifies static analysis.)
Ryan C. Gordon 22da9d4d 2020-05-28T14:47:55 wayland: assert that mmap() didn't return NULL. In practice, it never _would_, but in theory it _might_, so this assertion tells the static analyzer not to worry about it.