More kms vaapi allow to work without xwayland

This commit is contained in:
dec05eba 2023-07-18 07:06:12 +02:00
parent a3beaeb0cc
commit 585382cf18
2 changed files with 11 additions and 6 deletions

3
TODO
View File

@ -83,4 +83,5 @@ Support screen rotation in amd/intel/nvidia wayland.
Support wlroots dmabuf screen recording, because it doesn't require root access unlike kms grab. Support wlroots dmabuf screen recording, because it doesn't require root access unlike kms grab.
Capture cursor on amd/intel wayland without xwayland. Capture cursor on amd/intel wayland without xwayland.
When nvidia supports hardware cursor then capture the cursor. Right now the cursor is captured because it's a software cursor so it's composed on the dma buf. When nvidia supports hardware cursor then capture the cursor. Right now the cursor is captured because it's a software cursor so it's composed on the dma buf.
CPU usage is pretty high on AMD/Intel/(Nvidia(wayland)), why? opening and closing fds, creating egl, cuda association, is slow when done every frame. CPU usage is pretty high on AMD/Intel/(Nvidia(wayland)), why? opening and closing fds, creating egl, cuda association, is slow when done every frame. Test if desktop portal screencast has better performance.
Cursor on amd/intel wayland only shows up when the cursor is above xwayland applications.

View File

@ -576,7 +576,9 @@ static int gsr_capture_kms_vaapi_capture(gsr_capture *cap, AVFrame *frame) {
} }
} }
gsr_cursor_tick(&cap_kms->cursor); if(cap_kms->dpy) {
gsr_cursor_tick(&cap_kms->cursor);
}
vec2i capture_pos = cap_kms->capture_pos; vec2i capture_pos = cap_kms->capture_pos;
vec2i capture_size = cap_kms->capture_size; vec2i capture_size = cap_kms->capture_size;
@ -591,10 +593,12 @@ static int gsr_capture_kms_vaapi_capture(gsr_capture *cap, AVFrame *frame) {
capture_pos, capture_size, capture_pos, capture_size,
texture_rotation); texture_rotation);
gsr_color_conversion_draw(&cap_kms->color_conversion, cap_kms->cursor.texture_id, if(cap_kms->dpy) {
cursor_capture_pos, (vec2i){cap_kms->cursor.size.x, cap_kms->cursor.size.y}, gsr_color_conversion_draw(&cap_kms->color_conversion, cap_kms->cursor.texture_id,
(vec2i){0, 0}, (vec2i){cap_kms->cursor.size.x, cap_kms->cursor.size.y}, cursor_capture_pos, (vec2i){cap_kms->cursor.size.x, cap_kms->cursor.size.y},
0.0f); (vec2i){0, 0}, (vec2i){cap_kms->cursor.size.x, cap_kms->cursor.size.y},
0.0f);
}
cap_kms->egl.eglSwapBuffers(cap_kms->egl.egl_display, cap_kms->egl.egl_surface); cap_kms->egl.eglSwapBuffers(cap_kms->egl.egl_display, cap_kms->egl.egl_surface);