src/video


Log

Author Commit Date CI Message
Manuel Alfayate Corchete a8dbcab1 2020-12-20T21:48:05 [Video/KMSDRM] Don't copy the cursor bitmap to the cursor GBM BO until we're showing it.
Manuel Alfayate Corchete 2756b0f3 2020-12-20T14:29:58 [Video/KMSDRM] Init and deinit mouse stuff at the same time that GBM stuff.
Manuel Alfayate Corchete cf71e017 2020-12-19T23:32:09 [Video/KMSDRM] Remove auxiliary AMDGPU compatibility workarounds not needed anymore.
Manuel Alfayate Corchete af1f91cb 2020-12-19T20:21:07 [Video/KMSDRM] Correct typo.
Manuel Alfayate Corchete cf489556 2020-12-19T20:15:50 [Video/KMSDRM] Honor the device index in Vulkan. Add notes about the display index.
Manuel Alfayate Corchete ab3a390e 2020-12-19T17:35:04 [Video/KMSDRM] Better ATOMIC caps testing: patch by Oskan Sezer.
Manuel Alfayate Corchete 436499f3 2020-12-19T02:08:59 [Video/KMSDRM] Comment out some debug info, adjust comments for future work.
Ozkan Sezer 6b81cac4 2020-12-19T01:25:50 remove duplicated SDL_SetError after calling check_atomic_modesetting()
Manuel Alfayate Corchete 8952a613 2020-12-18T23:17:42 [Video/KMSDRM] Re-arrange display members setup.
Manuel Alfayate Corchete f60f8d5d 2020-12-18T22:53:51 [Video/KMSDRM]: Add Vulkan support to the KMSDRM backend.
Ozkan Sezer 6ac0b23d 2020-12-18T21:37:20 SDL_DirectFB_video.c: DSPF_ABGR requires directfb >= 1.5.0 -- add guard.
Ozkan Sezer 6c4ab484 2020-12-18T17:50:02 SDL_kmsdrmvideo.c: check atomic modesetting in check_modesetting() .. so that KMSDRM_CreateDevice() can fail and SDL_VideoInit() would move on to next bootstrap member which is kmsdrm_legacy. hopefully fixes bug #5393.
Ozkan Sezer 10625f9d 2020-12-17T23:50:00 SDL_windowsmessagebox.c: go back to hg rev 14458 state. encountering a NULL caption in AddDialogString() is intended, i.e. AddDialogStaticIcon() sends it as NULL on purpose.
Ozkan Sezer 4d6eb305 2020-12-17T23:28:20 SDL_windowsmessagebox.c (AddDialogControl): add back NULL caption check. because AddDialogStaticIcon() sends a NULL caption -- fixes bug #5401.
Ozkan Sezer 90456670 2020-12-17T14:11:00 more "'for' loop initial declarations are only allowed in C99 mode" fixes
Ozkan Sezer ed4fcb2c 2020-12-16T03:24:10 kmsdrm_legacy build fixes: - add missing '_LEGACY' to symbol names - perform missing 2.0.14 portage - fix 'for' loop initial declarations are only allowed in C99 mode errors
Ozkan Sezer 9940e710 2020-12-16T00:10:30 Import two post-2.0.12 fixes to kmsdrm_legacy: Fix build breakage without EGL: https://hg.libsdl.org/SDL/rev/f2606fe53654e305ab9badb821d9d3afb7f92f49 Fix KMSDRM_CreateWindow segfault when starting L?VE2D engine (bug 5199) https://hg.libsdl.org/SDL/rev/d2e69a78939463d9ff9448a5f4efd1e208bb97b0
Sam Lantinga f8839289 2020-12-15T12:22:48 Potential fix for bug 5393 - KMSDRM: using atomic mode setting breaks GPU compatibility Substring I was trying the KMSDRM video backend with some very simple programs that were working ok on 2.0.12. The same code won?t work on the current dev branch and I get: DEBUG: check_modesetting: probing ?/dev/dri/card0? DEBUG: /dev/dri/card0 connector, encoder and CRTC counts are: 4 5 6 DEBUG: check_modesetting: probing ?/dev/dri/card0? DEBUG: /dev/dri/card0 connector, encoder and CRTC counts are: 4 5 6 DEBUG: KMSDRM_VideoInit() DEBUG: Opening device /dev/dri/card0 DEBUG: Opened DRM FD (3) DEBUG: no atomic modesetting support. DEBUG: Video subsystem has not been initialized INFO: Using SDL video driver: (null) DEBUG: Video subsystem has not been initialized After carefully checking, the radeon driver doesn?t support atomic modesetting. That?s not the only problem : the same happens with the amdgpu driver if we disable Display Core (kernel parameter amdgpu.dc=0, which is required to get analogue outputs working). This is a major regression in the KMSDRM driver. Using atomic mode setting is great, but having no fallback to the "standard KMS" is bad.
Sam Lantinga ee85a41a 2020-12-13T02:10:46 Fixed compile warning
Ozkan Sezer 5c212cb0 2020-12-10T12:24:24 remove a few stale NULL message/title checks after commit e2b729b1756a top-level guarantees non-NULL message / title passed in messageboxdata
Ozkan Sezer f1cab8ae 2020-12-10T11:20:56 fix bug #5253: handle NULL title or message fields in SDL_MessageBoxData - SDL_video.c (SDL_ShowMessageBox): replace messageboxdata, set title or message field to "" if either of them is NULL. - SDL_video.c (SDL_ShowSimpleMessageBox): set title or message to "" if either of them is NULL for EMSCRIPTEN builds. - SDL_bmessagebox.cc: add empty string check along with NULL check for title and message fields. - SDL_windowsmessagebox.c (AddDialogString): remove NULL string check - SDL_windowsmessagebox.c (AddDialogControl): add empty string check along with the NULL check. - SDL_x11messagebox.c: revert commit 677c4cd68069 - SDL_os2messagebox.c: revert commit 2c2a489d76e7 - test/testmessage.c: Add NULL title and NULL message tests.
Sam Lantinga d46dd103 2020-12-09T07:49:07 Fixed typo in Vulkan load logic
Sam Lantinga cb361896 2020-12-09T07:16:22 Fixed bug 5235 - All internal sources should include SDL_assert.h Ryan C. Gordon We should really stick this in SDL_internal.h or something so it's always available.
Sam Lantinga 50203d58 2020-12-08T22:00:06 Fixed bug 5329 - SDL_SetWindowGrab(SDL_FALSE) fails to unlock cursor if window is partially offscreen Ivan Mogilko With SDL 2.0.12 under MS Windows, if the window is partially offscreen calling SDL_SetWindowGrab(w, SDL_TRUE) works, but subsequent call to SDL_SetWindowGrab(w, SDL_FALSE) does not work. I tested this in both real program, and a small test app, where unlocking cursor worked perfectly while window is fully in desktop bounds, but did not work if it was at least few pixels outside. For the reference, following code is enough to reproduce the issue: #include <windows.h> #include <SDL.h> int WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { SDL_Init(SDL_INIT_VIDEO); SDL_Window* w = SDL_CreateWindow("", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 400, 0); bool grabbed = false; bool want_quit = false; while (!want_quit) { SDL_Event event; while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: want_quit = true; break; case SDL_KEYDOWN: if (event.key.keysym.scancode == SDL_SCANCODE_SPACE) { SDL_SetWindowGrab(w, static_cast<SDL_bool>(!grabbed)); grabbed = !grabbed; } } } } SDL_DestroyWindow(w); SDL_Quit(); return 0; }
Sylvain Becker 035f8f23 2020-12-02T13:37:59 SDL_RecreateWindow: allow clearing VULKAN when recreating the window
Sylvain Becker 93fbab0f 2020-12-02T11:04:53 SDL_ReCreateWindow: allow to unload METAL window and switch back to OpenGL. On older mac, where METAL Renderer METAL fails to create, it allows to switch back to OpenGL SDL_Renderer by re-creating the window (METAL flags was previously persistent).
Sam Lantinga a0c5bfa3 2020-11-27T13:08:40 Moved raw input event processing from the main thread to the joystick thread This allows fast joystick event delivery regardless of what the main thread is doing.
Sylvain Becker 2c079a2f 2020-11-27T09:42:14 SDL_FillRects: prevent empty SDL_surface from raising an error message It's legitimate to have a surface with 0 width or height (null 'pixels' pointer). But calling SDL_FillRects would wrongly set the error "You must lock the surface".
Sam Lantinga 4121ab62 2020-11-23T21:25:07 Fixed bug 5354 - DirectFB: Add Vulkan support Nicolas Caramelli This patch adds Vulkan support for the DirectFB video driver. A screenshot with SDL tests running on DirectFB is available on the HiGFXback project: https://github.com/caramelli/higfxback/wiki/DirectFB#sdl
Ryan C. Gordon 0ff5d55a 2020-11-23T21:07:28 x11: Don't try to grab the pointer on an unmapped window (thanks, Lee!) Fixes Bugzilla #5352.
Ozkan Sezer 082558db 2020-11-20T12:20:02 SDL_os2messagebox.c (_makeDlg): fix crash if title and/or message is NULL. c.f.: bug #5253.
Ryan C. Gordon 335cfa10 2020-11-18T11:24:08 x11: Don't crash if a messagebox has a NULL title string. Fixes Bugzilla #5253.
Ozkan Sezer 53b16679 2020-11-11T12:33:55 SIZE_MAX need not be defined in limits.h it can be in limits.h (windows) or stdint.h.
Ryan C. Gordon 7b5a0a9f 2020-11-10T13:12:10 uikit: Don't implement main() twice for iOS static libs. I think this was a leftover from before the two Xcode projects were merged.
Sam Lantinga 1ef45c18 2020-11-08T23:40:17 Fixed bug 5339 - Minor memory leak in SDL_x11events.c wcodelyokoyt The atom name that X11_GetAtomName() returns never gets freed, which result in a minor memory leak (14 bytes?) every time the user drops a file on a window. You can see the line in question here: https://github.com/spurious/SDL-mirror/blob/6b6170caf69b4189c9a9d14fca96e97f09bbcc41/src/video/x11/SDL_x11events.c#L1350 Fix: call XFree on name after the while loop.
Sam Lantinga 723d76c8 2020-11-08T23:34:59 Fixed bug 5333 - Replace character of legacy code page with utf-8 one. Joel Linn This patch fixes a MSVC warning, which is dependent on the regional settings of the build system. Although the character is inside a comment and harmless, it is undesirable to disable the warning for this.
Ryan C. Gordon de6d0ac5 2020-11-08T18:11:42 uikit: Patched to compile on older iOS SDKs.
Ryan C. Gordon 010d5fba 2020-10-26T09:49:09 kmsdrm: Make this build with significantly older system libraries. This allows one to build Raspberry Pi versions on an ancient version of Raspbian and get both the KMSDRM and RPI video targets built into SDL, giving maximum binary compatibility from linking against an older glibc, etc, but also making one library that can access video on all RPi models and OS releases.
Ozkan Sezer f0c58417 2020-10-25T10:10:10 SDL_shape_internals.h: forward-declare struct SDL_ShapeTree.
Ozkan Sezer bfc80d83 2020-10-25T03:55:02 minor coding style cleanup
Sam Lantinga 5dc6c3c9 2020-10-24T10:46:18 Updated Vulkan headers to version 1.2.158 https://github.com/KhronosGroup/Vulkan-Headers
Manuel Alfayate Corchete 5682b066 2020-10-22T19:51:57 kmsdrm: Add comment about KMSDRM_VideoQuit() changes.
Manuel Alfayate Corchete 63b78277 2020-10-22T19:44:38 kmsdrm: properly exit with an error when ATOMIC interface is not yet available, instead of just segfaulting.
Manuel Alfayate Corchete a3262205 2020-10-22T17:55:45 kmsdrm: rearrange init function so we try ATOMIC compatibility first.
Manuel Alfayate Corchete b1ea0be8 2020-10-22T17:06:34 kmsdrm: Add missing checks after SDL_calloc() calls.
Manuel Alfayate Corchete ad9ec8b3 2020-10-22T16:15:34 kmsdrm: Small fix, missing bracket.
Manuel Alfayate Corchete 87a86675 2020-10-22T16:01:51 kmsdrm: Always use spaces for indentation. Always use SDL_calloc() for calloc.
Ozkan Sezer cfc13620 2020-10-21T23:28:02 os2 video: updates to my_gradd.h
Sam Lantinga f1b603ac 2020-10-20T11:51:23 Fixed bug 5323 - SDL_SetWindowMaximumSize fails if Width or Height is equal to minimum Height or Width batyastudios Basicly there is problem and somewhat a solution: https://discourse.libsdl.org/t/setwindowmaximumsize-bug/28267 If you SDL_SetWindowMaximumSize() after SDL_SetWindowMinimumSize() with one of axes have the same value, function will have no effect. This: (line 2144@SDL_video.c) if (max_w <= window->min_w || max_h <= window->min_h) { SDL_SetError("SDL_SetWindowMaximumSize(): Tried to set maximum size smaller than minimum size"); return; } May be changed to this: if (max_w < window->min_w || max_h < window->min_h) { SDL_SetError("SDL_SetWindowMaximumSize(): Tried to set maximum size smaller than minimum size"); return; }
Sam Lantinga f311e0a8 2020-10-19T17:29:16 Removed debug log message
Alberts Muktup?vels 73010da4 2020-10-19T17:26:33 x11events: ignore UnmapNotify events from XReparentWindow UnmapNotify event does not mean that window has been iconified. It just reports that window changed state from mapped to unmapped. XReparentWindow can unmap and remap window if it was mapped. This causes unnecessary events - HIDDEN, MINIMIZED, RESTORED and SHOW. These events are problematic with Metacity 3.36+ which started to remove window decorations from fullscreen windows. - SDL makes decorated window fullscreen - Metacity removes decorations - SDL gets UnmapNotify and exits from fullscreen - Metacity re-adds decorations As SDL will also get MapNotify event it will try to restore window state causing above steps to repeat. https://bugzilla.libsdl.org/show_bug.cgi?id=5314
Sylvain Becker ffb307e4 2020-10-18T09:52:56 Fixed bug 5304 - add SDL_HasSurfaceRLE() (Thanks Rene Dudfield and Dan Lawrence)
Sylvain Becker 19a65a46 2020-10-17T21:47:05 Fixed bug 5321 - crash in SDL_ConvertSurface with RLE surfaces keep RLE information in flags when converting the surface
Ozkan Sezer c70191d2 2020-10-17T07:37:00 SDL_os2video.c (OS2_CreateDevice): remove duplicated assignment.
Ozkan Sezer 77d0f043 2020-10-16T23:50:00 os2video.c: add missing FOURCC_R666 define, enable FOURCC_R666 case in _getSDLPixelFormatData().
Sam Lantinga 58976bda 2020-10-15T12:00:15 Allow more than one window on iOS as long as they're on different displays
Ozkan Sezer a90f0400 2020-10-15T21:37:30 os2: a _lot_ of coding style cleanup, sot that they match the SDL style. also renamed the 'debug' macro to debug_os2: the former was dangerously a common name. the binary (dll) output is precisely the same as before.
Sam Lantinga bdc5129f 2020-10-15T10:13:46 Use a high priority dispatch queue for GCKeyboard and GCMouse events for the lowest latency possible This appears to reduce latency between 1-4 ms on an iPad Pro.
Sam Lantinga a3a0ef75 2020-10-15T10:13:44 Added support for low latency mouse and keyboard handling in iOS 14 The mouse support in iOS 14.0 has a bug with accumulating duplicate mouse deltas that won't be fixed until iOS 14.1, so we don't enable it until then.
Manuel Alfayate Corchete cca16c9c 2020-10-15T17:56:19 kmsdrm: merge GetDisplayDPI implementation by bms20 <brett@mynah-software.com>
Ozkan Sezer d2723875 2020-10-14T23:01:06 os2: integrate the port into main tree.
Ozkan Sezer 5807cb3d 2020-10-14T23:01:06 os2: remove dependency to gradd.h from IBM's ddk which is non-free: Add a minimal my_gradd.h containing structures and constants only used by SDL_os2vman.c -- based on public knowledge from around the internet including pages from http://www.osfree.org and http://www.edm2.com .
Ozkan Sezer 1d9cf23e 2020-10-14T23:01:05 os2: updated copyright dates for 2020. header guard fixes.
Ozkan Sezer fe2cc8d8 2020-10-14T23:01:04 OS2_VideoQuit(): avoid double free()ing of displays. Our caller SDL_VideoQuit() already frees display_modes, driverdata, etc. Noticed in bitwiseworks' version at https://github.com/bitwiseworks/SDL2-os2
Ozkan Sezer fba32ee2 2020-10-14T23:01:04 OS2_VideoInit: zero the stSDLDisplay and stSDLDisplayMode variables Fixes testdisplayinfo.exe crashing in SDL2-2.0.13. (How it did work before?..)
Ozkan Sezer 54ced668 2020-10-14T23:01:04 port from 2.0.12 to 2.0.13 / current SDL-hg repository. - video: VideoBootStrap->available() is gone. - thread: all important SDL_CreateThread internal data now put into struct SDL_Thread: changes to SDL_SYS_CreateThread().
Ozkan Sezer 5da796fe 2020-10-14T23:01:03 os/2: port from SDL2-2.0.5 to SDL2-2.0.12 - events / video: SDL_SetDoubleClickTime() removed -- functionality moved to SDL_mouse.c:SDL_MouseDoubleClickTimeChanged(). - video: struct SDL_VideoDevice-> CreateWindow and CreateWindowFrom members renamed to CreateSDLWindow and CreateSDLWindowFrom
Ozkan Sezer 222f0268 2020-10-14T23:01:03 os/2: port from SDL2-2.0.4 to SDL2-2.0.5: changes to SDL_os2audio.c, SDL_os2video.c, os2/SDL_systhread.c in order to accomodate SDL2-2.0.5 changes. - audio: WaitDone() is gone, CloseDevice() interface changes. - events / video: DropFile() changes: SDL_DROPBEGIN and SDL_DROPCOMPLETE events, window IDs for drops. - thread: struct SDL_Thread->stacksize
Ozkan Sezer 1b99d805 2020-10-14T23:01:02 os2: updates from Andrey Vasilkin's 2020-09-07 sources.
Ozkan Sezer aa790837 2020-10-14T23:01:02 os2: several warning fixes. mostly those "W007: '&array' may not produce intended result" warnings from Watcom, visible only in C++ mode. one or two others here & there.
Ozkan Sezer 110a0f7b 2020-10-14T23:01:01 os2: update include paths. add missing libc includes to geniconv.
Ozkan Sezer 74cfb81d 2020-10-14T23:01:00 os2: add port files for SDL2-2.0.4 from Andrey Vasilkin only geniconv/iconv.h (was from LGPL libiconv) is replaced with a generic minimal iconv.h based on public knowledge.
Ozkan Sezer 93e14497 2020-10-14T15:50:04 SDL_waylanddatamanager.c (mime_data_list_add): constify the buffer param Fixes -Wdiscarded-qualifiers warnings from Wayland_data_source_add_data()
Sam Lantinga b9cbea35 2020-10-13T21:08:20 video: Refresh Windows display list on WM_DISPLAYCHANGE - Displays may have been added, removed or changed and all cached monitor handles are invalidated as a result. - Display events are handled in three steps: 1. Mark all currently know displays as invalid 2. Enumerate all displays, adding new ones and marking known displays as valid 3. Remove all displays still invalid after enumeration - Display connect/disconnect events are sent when displays are added or removed after initial setup
Sam Lantinga b546db2f 2020-10-09T12:58:28 Only watch for display connect/disconnect events while the video subsystem is initialized
Ryan C. Gordon b79832ba 2020-10-08T21:11:09 cocoa: Cut and paste from HTML strikes again!
Ozkan Sezer 19aaa294 2020-10-09T04:00:00 Fix https://bugzilla.libsdl.org/show_bug.cgi?id=5306 (Also see: https://bugzilla.libsdl.org/show_bug.cgi?id=4822) Building the current tree against 10.8 SDK, clang emits the following warning: src/video/cocoa/SDL_cocoawindow.m:1846:27: warning: instance method '-isOperatingSystemAtLeastVersion:' not found (return type defaults to 'id') [-Wobjc-method-access] ![processInfo isOperatingSystemAtLeastVersion:version]) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /opt/MacOSX10.8.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSProcessInfo.h:20:12: note: receiver is instance of class declared here @interface NSProcessInfo : NSObject { ^ 1 warning generated. isOperatingSystemAtLeastVersion is an 10.10 thing.
Ozkan Sezer 69fbd60d 2020-10-09T04:00:00 Fix https://bugzilla.libsdl.org/show_bug.cgi?id=4877#c2 loadNibNamed:owner:topLevelObjects is available on 10.8 and newer. There is an issue report here about an app failing to function on 10.7 and earlier: https://discourse.libsdl.org/t/28179
Sam Lantinga bd14f267 2020-10-08T16:58:34 Removed unused variable
Ozkan Sezer d86a7465 2020-10-09T02:55:00 SDL_video.c: fix whitespace
Sam Lantinga 76980e30 2020-10-08T16:42:20 Added events for dynamically connecting and disconnecting displays, with an iOS implementation
Sam Lantinga cd703b56 2020-10-08T16:41:48 Fixed whitespace
Yiding Jia f31ad57f 2020-10-05T19:17:52 Implement keyboard repeat in wayland video driver
Ryan C. Gordon 77c9d73b 2020-10-05T11:30:33 Removed SDL_AndroidOpenURL, added SDL_OpenURL. Still needs to be wired into Xcode and Visual Studio projects.
Sylvain Becker cd6670bf 2020-10-02T10:48:27 SDL_Surface refcount: fix memory leak when blitting between stack'ed surfaces (see bug 5226)
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.