danvd / wlroots-eglstreams

A modular Wayland compositor library with EGLStreams support
MIT License
106 stars 11 forks source link

Does this fork support Nvidia Optimus #37

Closed gi-yt closed 2 years ago

gi-yt commented 2 years ago

I have a laptop which has both a nvidia dGPU that is wired to the HDMI port and an Intel iGPU that powers the internal display. Does this fork work with that kind of configuration

danvd commented 2 years ago

Hi, @gi-yt I can't say for sure because never had such configuration.

gi-yt commented 2 years ago

I will Install it soon. I will update you if i have any issues

gi-yt commented 2 years ago

finally got my hands on wlroots-eglstreams. Will update you if I have any issues

gi-yt commented 2 years ago

I was out for a while… so couldn't test it out. With wlroots-eglstreams when the external GPU is disabled with optimus-manager… It does not work when only my external GPU (driver 495 on arch) is enabled. Sway exits with the following output when I do sway --unsupported-gpu

00:00:00.002 [ERROR] [sway/main.c:62] !!! Proprietary Nvidia drivers are in use !!!

sway: render/eglstreams_allocator.c:103: wlr_eglstreams_allocator_create: Assertion 'wlr_backend_is_multi(backend)' failed.

Is this a known issue @danvd?

gi-yt commented 2 years ago

Oops, forgot to send the debug output

Log output from sway -d --unsupported-gpu ``` 00:00:00.000 [INFO] [sway/main.c:340] Sway version 1.6-5f4162f4 (Dec 23 2021, branch 'master') 00:00:00.000 [INFO] [sway/main.c:341] wlroots version 0.16.0 00:00:00.002 [INFO] [sway/main.c:120] Linux aspire 5.15.12-xanmod1-tt-1 #1 SMP Thu, 30 Dec 2021 19:40:05 +0000 x86_64 GNU/Linux 00:00:00.002 [INFO] [sway/main.c:136] Contents of /etc/lsb-release: 00:00:00.002 [INFO] [sway/main.c:120] LSB_VERSION=1.4 00:00:00.002 [INFO] [sway/main.c:120] DISTRIB_ID=EndeavourOS 00:00:00.002 [INFO] [sway/main.c:120] DISTRIB_RELEASE=rolling 00:00:00.002 [INFO] [sway/main.c:120] DISTRIB_DESCRIPTION="EndeavourOS Linux" 00:00:00.002 [INFO] [sway/main.c:120] DISTRIB_CODENAME=rolling 00:00:00.002 [INFO] [sway/main.c:136] Contents of /etc/os-release: 00:00:00.002 [INFO] [sway/main.c:120] NAME=EndeavourOS 00:00:00.002 [INFO] [sway/main.c:120] PRETTY_NAME=EndeavourOS 00:00:00.002 [INFO] [sway/main.c:120] ID=endeavouros 00:00:00.002 [INFO] [sway/main.c:120] ID_LIKE=arch 00:00:00.002 [INFO] [sway/main.c:120] BUILD_ID=2021.12.17 00:00:00.002 [INFO] [sway/main.c:120] ANSI_COLOR="38;2;23;147;209" 00:00:00.002 [INFO] [sway/main.c:120] HOME_URL='https://endeavouros.com' 00:00:00.002 [INFO] [sway/main.c:120] DOCUMENTATION_URL='https://discovery.endeavouros.com' 00:00:00.002 [INFO] [sway/main.c:120] SUPPORT_URL='https://forum.endeavouros.com' 00:00:00.002 [INFO] [sway/main.c:120] BUG_REPORT_URL='https://forum.endeavouros.com/c/arch-based-related-questions/bug-reports' 00:00:00.002 [INFO] [sway/main.c:120] LOGO=endeavouros 00:00:00.002 [INFO] [sway/main.c:108] LD_LIBRARY_PATH= 00:00:00.002 [INFO] [sway/main.c:108] LD_PRELOAD= 00:00:00.002 [INFO] [sway/main.c:108] PATH=/home/ak/.npm-packages/bin:/home/ak/.local/bin:/home/ak/.local/share/go/bin:/home/ak/.local/share/cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/flutter/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl 00:00:00.002 [INFO] [sway/main.c:108] SWAYSOCK= 00:00:00.002 [ERROR] [sway/main.c:62] !!! Proprietary Nvidia drivers are in use !!! 00:00:00.002 [DEBUG] [sway/server.c:50] Preparing Wayland server initialization 00:00:00.002 [INFO] [wlr] [libseat] [libseat/backend/seatd.c:80] Could not connect to socket /run/seatd.sock: No such file or directory 00:00:00.002 [INFO] [wlr] [libseat] [libseat/libseat.c:76] Backend 'seatd' failed to open seat, skipping 00:00:00.009 [INFO] [wlr] [libseat] [libseat/libseat.c:73] Seat opened with backend 'logind' 00:00:00.010 [INFO] [wlr] [backend/session/session.c:110] Successfully loaded libseat session 00:00:00.011 [INFO] [wlr] [backend/backend.c:220] Found 2 GPUs 00:00:00.011 [INFO] [wlr] [backend/drm/backend.c:183] Initializing DRM backend for /dev/dri/card0 (i915) 00:00:00.011 [DEBUG] [wlr] [backend/drm/drm.c:89] Using atomic DRM interface 00:00:00.011 [DEBUG] [wlr] [backend/drm/drm.c:102] ADDFB2 modifiers supported 00:00:00.011 [INFO] [wlr] [backend/drm/drm.c:261] Found 3 DRM CRTCs 00:00:00.012 [INFO] [wlr] [backend/drm/drm.c:182] Found 9 DRM planes 00:00:00.012 [INFO] [wlr] [backend/drm/backend.c:183] Initializing DRM backend for /dev/dri/card1 (nvidia-drm) 00:00:00.012 [DEBUG] [wlr] [backend/drm/drm.c:89] Using atomic DRM interface 00:00:00.012 [DEBUG] [wlr] [backend/drm/drm.c:102] ADDFB2 modifiers supported 00:00:00.012 [INFO] [wlr] [backend/drm/drm.c:261] Found 4 DRM CRTCs 00:00:00.012 [INFO] [wlr] [backend/drm/drm.c:182] Found 12 DRM planes 00:00:00.016 [INFO] [wlr] [render/egl.c:203] Supported EGL client extensions: EGL_EXT_platform_base EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_KHR_platform_x11 EGL_EXT_platform_x11 EGL_EXT_platform_device EGL_KHR_platform_wayland EGL_EXT_platform_wayland EGL_KHR_platform_gbm EGL_MESA_platform_gbm EGL_MESA_platform_xcb EGL_MESA_platform_surfaceless 00:00:00.018 [DEBUG] [wlr] [render/egl.c:528] Using EGL device /dev/dri/card1 00:00:00.019 [INFO] [wlr] [render/egl.c:409] Using EGL 1.5 00:00:00.019 [INFO] [wlr] [render/egl.c:410] Supported EGL display extensions: EGL_EXT_buffer_age EGL_EXT_client_sync EGL_EXT_create_context_robustness EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_MESA_image_dma_buf_export EGL_EXT_output_base EGL_EXT_output_drm EGL_EXT_protected_content EGL_EXT_stream_consumer_egloutput EGL_EXT_stream_acquire_mode EGL_EXT_sync_reuse EGL_IMG_context_priority EGL_KHR_config_attribs EGL_KHR_create_context_no_error EGL_KHR_context_flush_control EGL_KHR_create_context EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_partial_update EGL_KHR_swap_buffers_with_damage EGL_KHR_no_config_context EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_reusable_sync EGL_KHR_stream EGL_KHR_stream_attrib EGL_KHR_stream_consumer_gltexture EGL_KHR_stream_cross_process_fd EGL_KHR_stream_fifo EGL_KHR_stream_producer_eglsurface EGL_KHR_surfaceless_context EGL_KHR_wait_sync EGL_NV_nvrm_fence_sync EGL_NV_quadruple_buffer EGL_NV_stream_consumer_eglimage EGL_NV_stream_cross_display EGL_NV_stream_cross_object EGL_NV_stream_cross_process EGL_NV_stream_cross_system EGL_NV_stream_dma EGL_NV_stream_flush EGL_NV_stream_metadata EGL_NV_stream_remote EGL_NV_stream_reset EGL_NV_stream_socket EGL_NV_stream_socket_inet EGL_NV_stream_socket_unix EGL_NV_stream_sync EGL_NV_stream_fifo_next EGL_NV_stream_fifo_synchronous EGL_NV_stream_consumer_gltexture_yuv EGL_NV_stream_attrib EGL_NV_stream_origin EGL_NV_system_time EGL_NV_output_drm_flip_event EGL_NV_triple_buffer EGL_NV_robustness_video_memory_purge EGL_WL_bind_wayland_display EGL_WL_wayland_eglstream 00:00:00.019 [INFO] [wlr] [render/egl.c:412] Supported EGL device extensions: EGL_NV_device_cuda EGL_EXT_device_drm EGL_EXT_device_drm_render_node EGL_EXT_device_persistent_id 00:00:00.019 [INFO] [wlr] [render/egl.c:414] EGL vendor: NVIDIA 00:00:00.019 [INFO] [wlr] [render/egl.c:416] EGL driver name: nvidia 00:00:00.020 [DEBUG] [wlr] [render/egl.c:181] Supported DMA-BUF formats: AB24 XB24 R8 RG88 UYVY AB4H AR24 AS24 XS24 XR24 RG16 AR30 R101 R100 AB30 B101 B100 YU12 NV12 NV21 NV16 NV24 P010 P210 P012 HD01 UHD0 00:00:00.020 [DEBUG] [wlr] [render/egl.c:182] EGL DMA-BUF format modifiers supported 00:00:00.023 [DEBUG] [wlr] [render/egl.c:479] Obtained high priority context 00:00:00.023 [DEBUG] [wlr] [render/egl.c:579] Using EGL_PLATFORM_DEVICE_EXT 00:00:00.046 [INFO] [wlr] [render/gles2/renderer.c:825] Creating GLES2 renderer 00:00:00.046 [INFO] [wlr] [render/gles2/renderer.c:826] Using OpenGL ES 3.2 NVIDIA 495.46 00:00:00.046 [INFO] [wlr] [render/gles2/renderer.c:827] GL vendor: NVIDIA Corporation 00:00:00.046 [INFO] [wlr] [render/gles2/renderer.c:828] GL renderer: NVIDIA GeForce GTX 1650/PCIe/SSE2 00:00:00.046 [INFO] [wlr] [render/gles2/renderer.c:829] Supported GLES2 extensions: GL_EXT_base_instance GL_EXT_blend_func_extended GL_EXT_blend_minmax GL_EXT_buffer_storage GL_EXT_clear_texture GL_EXT_clip_control GL_EXT_clip_cull_distance GL_EXT_color_buffer_float GL_EXT_color_buffer_half_float GL_EXT_conservative_depth GL_EXT_copy_image GL_EXT_depth_clamp GL_EXT_debug_label GL_EXT_discard_framebuffer GL_EXT_disjoint_timer_query GL_EXT_draw_buffers_indexed GL_EXT_draw_elements_base_vertex GL_EXT_EGL_image_array GL_EXT_EGL_image_storage GL_EXT_EGL_image_external_wrap_modes GL_EXT_float_blend GL_EXT_frag_depth GL_EXT_geometry_point_size GL_EXT_geometry_shader GL_EXT_gpu_shader5 GL_EXT_map_buffer_range GL_EXT_multi_draw_indirect GL_EXT_multisample_compatibility GL_EXT_multisampled_render_to_texture GL_EXT_multisampled_render_to_texture2 GL_EXT_multiview_texture_multisample GL_EXT_multiview_timer_query GL_EXT_occlusion_query_boolean GL_EXT_polygon_offset_clamp GL_EXT_post_depth_coverage GL_EXT_primitive_bounding_box GL_EXT_raster_multisample GL_EXT_render_snorm GL_EXT_robustness GL_EXT_separate_shader_objects GL_EXT_shader_group_vote GL_EXT_shader_implicit_conversions GL_EXT_shader_integer_mix GL_EXT_shader_io_blocks GL_EXT_shader_non_constant_global_initializers GL_EXT_shader_texture_lod GL_EXT_shadow_samplers GL_EXT_sparse_texture GL_EXT_sparse_texture2 GL_EXT_sRGB GL_EXT_sRGB_write_control GL_EXT_tessellation_point_size GL_EXT_tessellation_shader GL_EXT_texture_border_clamp GL_EXT_texture_buffer GL_EXT_texture_compression_bptc GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_rgtc GL_EXT_texture_compression_s3tc GL_EXT_texture_cube_map_array GL_EXT_texture_filter_anisotropic GL_EXT_texture_filter_minmax GL_EXT_texture_format_BGRA8888 GL_EXT_texture_mirror_clamp_to_edge GL_EXT_texture_norm16 GL_EXT_texture_query_lod GL_EXT_texture_rg GL_EXT_texture_shadow_lod GL_EXT_texture_sRGB_R8 GL_EXT_texture_sRGB_decode GL_EXT_texture_storage GL_EXT_texture_view GL_EXT_draw_transform_feedback GL_EXT_unpack_subimage GL_EXT_window_rectangles GL_KHR_context_flush_control GL_KHR_debug GL_EXT_memory_object GL_EXT_memory_object_fd GL_NV_memory_object_sparse GL_KHR_parallel_shader_compile GL_KHR_no_error GL_KHR_robust_buffer_access_behavior GL_KHR_robustness GL_EXT_semaphore GL_EXT_semaphore_fd GL_NV_timeline_semaphore GL_KHR_shader_subgroup GL_KHR_texture_compression_astc_ldr GL_KHR_texture_compression_astc_sliced_3d GL_KHR_texture_compression_astc_hdr GL_NV_bgr GL_NV_bindless_texture GL_NV_blend_equation_advanced GL_NV_blend_equation_advanced_coherent GL_NVX_blend_equation_advanced_multi_draw_buffers GL_NV_blend_minmax_factor GL_NV_clip_space_w_scaling GL_NV_compute_shader_derivatives GL_NV_conditional_render GL_NV_conservative_raster GL_NV_conservative_raster_pre_snap_triangles GL_NV_copy_buffer GL_NV_copy_image GL_NV_draw_buffers GL_NV_draw_instanced GL_NV_draw_texture GL_NV_draw_vulkan_image GL_NV_EGL_stream_consumer_external GL_NV_explicit_attrib_location GL_NV_fbo_color_attachments GL_NV_fill_rectangle GL_NV_fragment_coverage_to_color GL_NV_fragment_shader_barycentric GL_NV_fragment_shader_interlock GL_NV_framebuffer_blit GL_NV_framebuffer_mixed_samples GL_NV_framebuffer_multisample GL_NV_generate_mipmap_sRGB GL_NV_geometry_shader_passthrough GL_NV_instanced_arrays GL_NV_internalformat_sample_query GL_NV_gpu_shader5 GL_NV_image_formats GL_NV_memory_attachment GL_NV_mesh_shader GL_NV_occlusion_query_samples GL_NV_non_square_matrices GL_NV_pack_subimage GL_NV_packed_float GL_NV_packed_float_linear GL_NV_path_rendering GL_NV_path_rendering_shared_edge GL_NV_pixel_buffer_object GL_NV_polygon_mode GL_NV_read_buffer GL_NV_read_depth GL_NV_read_depth_stencil GL_NV_read_stencil GL_NV_representative_fragment_test GL_NV_sample_locations GL_NV_sample_mask_override_coverage GL_NV_scissor_exclusive GL_NV_shader_atomic_fp16_vector GL_NV_shader_noperspective_interpolation GL_NV_shader_subgroup_partitioned GL_NV_shader_texture_footprint GL_NV_shading_rate_image GL_NV_shadow_samplers_array GL_NV_shadow_samplers_cube GL_NV_sRGB_formats GL_NV_stereo_view_rendering GL_NV_texture_array GL_NV_texture_barrier GL_NV_texture_border_clamp GL_NV_texture_compression_latc GL_NV_texture_compression_s3tc GL_NV_texture_compression_s3tc_update GL_NV_timer_query GL_NV_viewport_array GL_NV_viewport_array2 GL_NV_viewport_swizzle GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_OES_compressed_ETC1_RGB8_texture GL_EXT_compressed_ETC1_RGB8_sub_texture GL_OES_depth24 GL_OES_depth32 GL_OES_depth_texture GL_OES_depth_texture_cube_map GL_OES_copy_image GL_OES_draw_buffers_indexed GL_OES_draw_elements_base_vertex GL_OES_texture_border_clamp GL_OES_tessellation_point_size GL_OES_tessellation_shader GL_OES_texture_buffer GL_OES_geometry_point_size GL_OES_geometry_shader GL_OES_gpu_shader5 GL_OES_shader_io_blocks GL_OES_texture_view GL_OES_primitive_bounding_box GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_image_external_essl3 GL_OES_EGL_sync GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_get_program_binary GL_OES_mapbuffer GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_OES_sample_shading GL_OES_sample_variables GL_OES_shader_image_atomic GL_OES_shader_multisample_interpolation GL_OES_standard_derivatives GL_OES_surfaceless_context GL_OES_texture_cube_map_array GL_OES_texture_npot GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_stencil8 GL_OES_texture_storage_multisample_2d_array GL_OES_vertex_array_object GL_OES_vertex_half_float GL_OES_viewport_array GL_OVR_multiview GL_OVR_multiview2 GL_OVR_multiview_multisampled_render_to_texture GL_ANDROID_extension_pack_es31a sway: render/eglstreams_allocator.c:103: wlr_eglstreams_allocator_create: Assertion `wlr_backend_is_multi(backend)' failed. ```

Also I forgot to mention that i am using sway-borders-git (from aur) and wlroots-eglstreams-git (from the chaotic aur which builds things automagically every 2-3 days or so iirc).

gi-yt commented 2 years ago

Its fixed now. I followed what was suggested by this redditor on r/voidlinux (https://www.reddit.com/r/voidlinux/comments/mor7n5/comment/h3bd6wh/?utm_source=share&utm_medium=web2x&context=3) I just had to change WLR_DRM_DEVICES=/dev/dri/card0 to WLR_DRM_DEVICES=/dev/dri/card1 This seems to have fixed the issue. I will update you if I have any issues.

DrunkenToast commented 1 year ago

Its fixed now. I followed what was suggested by this redditor on r/voidlinux (https://www.reddit.com/r/voidlinux/comments/mor7n5/comment/h3bd6wh/?utm_source=share&utm_medium=web2x&context=3) I just had to change WLR_DRM_DEVICES=/dev/dri/card0 to WLR_DRM_DEVICES=/dev/dri/card1 This seems to have fixed the issue. I will update you if I have any issues.

Did you confirm if this supports external monitors on optimus laptops? Or did you simply only use the external monitor by only powering the dgpu?