Ryan C. Gordon
224aa45b59
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.
2020-09-10 15:04:35 -04:00
Manuel Alfayate Corchete
055cad49b6
kmsdrm: no need to re-connect/reactivate things in SwapWindow() anymore because we use a dumb buffer on KMS buffers destruction now.
2020-09-10 02:15:53 +02:00
Manuel Alfayate Corchete
351219bfd8
kmsdrm: On VideoQuit(), only destroy dumb buffer if it exists.
2020-09-09 03:18:26 +02:00
Manuel Alfayate Corchete
244d0ad854
kmsdrm: Tell SDL that mouse has entered the window via artificial event. Fixes sticky mouse in Scummvm.
2020-09-08 15:30:45 +02:00
Manuel Alfayate Corchete
550e153365
kmsdrm: No need to test for display driverdata when freeing a plane.
2020-09-08 02:42:32 +02:00
Manuel Alfayate Corchete
6e03fab982
kmsdrm: add temporary RPI4_COMPAT define to try RPI4+current Rasbian compatibility.
2020-09-07 23:15:33 +02:00
Manuel Alfayate Corchete
0f807fd607
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.
2020-09-07 22:54:15 +02:00
Manuel Alfayate Corchete
cce6c60518
kmsdrm: fix errors when trying to free up videomode driverdata pointers on quit.
2020-09-07 01:33:04 +02:00
Manuel Alfayate Corchete
9501b1c698
kmsdrm: fix scaling for SDL_WINDOW_FULLSCREEN windows.
2020-09-07 00:18:13 +02:00
Manuel Alfayate Corchete
daa752b10e
kmsdrm: fix first frame display: no need to wait for SwapWindow() for EGL surface creation.
2020-09-06 23:19:54 +02:00
Manuel Alfayate Corchete
68ac9349aa
kmsdrm: more coherent returns for SwapWindow.
2020-09-06 12:48:39 +02:00
Manuel Alfayate Corchete
d3d9d432ac
kmsdrm: Remove debug printfs in SwapWindow.
2020-09-06 12:17:27 +02:00
Manuel Alfayate Corchete
d7aebbd58f
kmsdrm: Don't create surfaces until EGL context is available.
2020-09-06 12:08:22 +02:00
Manuel Alfayate Corchete
f4e02a5c1b
kmsdrm: Do NOT modify window size manually from the backend: doing so caused renderer scaling params miscalculation.
2020-08-31 19:17:17 +02:00
Manuel Alfayate Corchete
c09d1cee95
kmsdrm: Apply window reconfiguration in SetWindowSize(), too.
2020-08-28 23:04:00 +02:00
Manuel Alfayate Corchete
31b1794534
kmsdrm: use PLANE and CRTC to do hardware-driven window scaling and AR-correction.
2020-08-28 22:38:26 +02:00
Manuel Alfayate Corchete
fe3f97961b
kmsdrm: unload EGL and GL lib only if using them.
2020-08-26 01:37:30 +02:00
Manuel Alfayate Corchete
9b43464d81
kmsdrm: Add programmer credits to the Atomic KMSDRM driver.
2020-08-25 16:30:23 +02:00
Manuel Alfayate Corchete
9316a8d979
kmsdrm: move FENCE FD props setting to SwapWindow(), where it belongs.
2020-08-25 16:18:49 +02:00
Manuel Alfayate Corchete
3f38009b2f
kmsdrm: comment out atomic commit fast-debugging printf.
2020-08-25 15:40:36 +02:00
Manuel Alfayate Corchete
0d16761cbe
kmsdrm: fix segfault on quit beacuse of freed _this->egl_data.
2020-08-25 05:53:13 +02:00
Manuel Alfayate Corchete
d43e666eed
kmsdrm: Buffer management refactoring. Fixes for compatibility with more video drivers.
2020-08-25 04:05:36 +02:00
Manuel Alfayate Corchete
eade05ca03
kmsdrm: Finetune integer type usage. Add some comments.
2020-08-24 12:51:20 +02:00
Manuel Alfayate Corchete
a76f176361
kmsdrm: Move cursor plane setup and freeing to MouseInit() and MouseQuit(), for better consistency.
2020-08-24 01:10:11 +02:00
Manuel Alfayate Corchete
0d593d7ead
kmsdrm: Add error control to plane prop setting function. Do most plane prop setting with a single function.
2020-08-23 23:44:07 +02:00
Manuel Alfayate Corchete
e06e9c35c8
kmsdrm: move cursor-related atomic helper functions and related struct typedefs to the SDL_kmsdrmmouse unit.
2020-08-23 11:26:55 +02:00
Manuel Alfayate Corchete
0b7b7721b9
kmsdrm: remove redundant function, use drm_atomic_setbuffers() for disconnecting planes instead.
2020-08-23 03:13:50 +02:00
Manuel Alfayate Corchete
16c04f266a
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.
2020-08-23 02:58:57 +02:00
Manuel Alfayate Corchete
0d0ba111ae
kmsdrm: correct parameter name.
2020-08-19 01:34:56 +02:00
Manuel Alfayate Corchete
5d32eda956
kmsdrm: implement smarter surface recreation function to be used in videomode changes. Other minor arrangements.
2020-08-19 01:31:22 +02:00
Manuel Alfayate Corchete
f79da81721
kmsdrm: free all connector, crtc and plane memory on KMSDRM_VideoQuit().
2020-08-18 01:52:15 +02:00
Manuel Alfayate Corchete
92cb9192e3
kmsdrm: move hardware cursor functionality to the ATOMIC interface. Disconnect the display plane from the GBM surface buffers before destroying the GBM surface.
2020-08-17 18:35:04 +02:00
Manuel Alfayate Corchete
c437729b21
kmsdrm: separate requests in different functions so we only need one atomic commit for everything, as expected by atomic design.
2020-08-08 14:27:55 +02:00
Manuel Alfayate Corchete
3b9f1073c6
kmsdrm: wait for possible pending atomic commits before destroying surfaces, and before restoring video on quit. Move messages to the SDL_Log* functions.
2020-08-07 11:53:04 +02:00
Manuel Alfayate Corchete
96c99693a2
kmsdrm: wait for pending atomic commits before restoring videomode and crtc->buffer on VideoQuit, and simplify double-buffer SwapWindow() implementation.
2020-08-06 01:36:56 +02:00
Manuel Alfayate Corchete
09692b6170
kmsdrm: move videomode restoration on VideoQuit() to using the atomic interface instead of the legacy drmModeSetCrtc() function. Refactoring of get_plane_id().
2020-08-05 18:55:22 +02:00
Manuel Alfayate Corchete
fc722b2d21
kmsdrm: free memory for plane, crtc and connector property tables on VideoQuit.
2020-08-05 15:28:51 +02:00
Manuel Alfayate Corchete
2d69ce08ba
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.
2020-08-05 02:06:59 +02:00
Manuel Alfayate Corchete
8996ee1786
kmsdrm: update SwapWindow fn, moving it to triple-buffer.
2020-08-03 22:24:49 +02:00
Manuel Alfayate Corchete
b131661c6d
kmsdrm: rewrite the new SwapWindow() fn to avoid tearing. Double-buffer only for now.
2020-08-01 18:23:34 +02:00
Manuel Alfayate Corchete
1a5503ce9f
kmsdrm: Moved to the ATOMIC KMS/DRM interface for buffer swapping, leaving DRM-legacy behind.
2020-07-28 21:11:25 +02:00
RALOVICH, Kristof
c7eb557d89
kmsdrm: do not leak drmModeConnector
...
Previously conn was leaked on the success path (when available was
set to SDL_TRUE).
2020-07-20 10:09:07 -07:00
Manuel Alfayate Corchete
412b21b0e8
Rename the gbm device struct from gbm to gbm_dev for better readabilty.
2020-07-20 11:42:23 +02:00
RALOVICH, Kristof
155fdc7ac0
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.
2020-07-19 21:48:17 -04:00
RALOVICH, Kristof
b78b88f7fb
kmsdrm: fix typo
2020-07-19 21:46:41 -04:00
Manuel Alfayate Corchete
75fe4b14e3
Added comment about window creation behaviour in KMSDRM.
2020-07-19 19:53:57 +02:00
Manuel Alfayate Corchete
2f660c4fdd
Delete windata variable no longer needed in KMSDR_SetDisplayMode().
2020-07-19 19:11:02 +02:00
Manuel Alfayate Corchete
3a1d7d9c9a
Surfaces have to be recreated immediately from KMSDRM_SetDisplayMode().
2020-07-19 19:09:15 +02:00
Manuel Alfayate Corchete
b6a818b6a2
Fix SDL_Window recreation: drmModeSetCrtc() has to be called everytime the EGL and GBM surfaces are recreated.
2020-07-19 18:45:29 +02:00
Sam Lantinga
71e9df99c7
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.
2020-07-19 08:55:01 -07:00