obsproject / obs-studio

OBS Studio - Free and open source software for live streaming and screen recording
https://obsproject.com
GNU General Public License v2.0
60.18k stars 7.97k forks source link

A770 QSV AV1 encoder doesn't work when RTX4090 installed at the same PC #9982

Closed DP-Huanhuan closed 4 months ago

DP-Huanhuan commented 11 months ago

Operating System Info

Windows 11

Other OS

No response

OBS Studio Version

30.0.0

OBS Studio Version (Other)

No response

OBS Studio Log URL

https://obsproject.com/logs/VxNFhER0pOkkr7d8

OBS Studio Crash Log URL

No response

Expected Behavior

The setup: GPU 0: UHD 770 in 13900K GPU 1: RTX 4090 GPU 2: Intel A770

Expected Behavior: When QSV encoders selected, tasks runs on GPU 2. Access to Intel Hyper Encoding which allows to share task between iGPU and dGPU and the option to choose which GPU to use would be even better.

Current Behavior

QSV H264&H265 runs on GPU 0. Zero activity on GPU 2. QSV AV1 fails because it is only supported by GPU 2. If all QSV encoder runs on GPU 0, it will certainly fail when it comes to AV1.

Steps to Reproduce

  1. Select QSV AV1 encoder in recording tab
  2. Hit record button.
  3. Error window pops up. It says "Starting the output failed"

Anything else we should know?

Driver/OS/OBS everything is the latest. There are two GPU from different vendors installed, which might be the cause. Tried to disable the hardware accelerated GPU scheduling. Nothing changed.

jadenquinn commented 10 months ago

I can't even get the QSV AV1 option to show up at all. Consider yourself lucky. I have an A310 and a 13900k+UHD 770.

tphakala commented 10 months ago

According to logs OBS selects RTX4090 as GPU to use

Adapter 0: NVIDIA GeForce RTX 4090
....
>>> app not on intel GPU, fall back to old qsv encoder

Have you followed these steps to select ARC 770 as GPU to use with OBS? https://obsproject.com/kb/gpu-selection-guide

What comes to hyper encoding, is does not work with OBS. I have 12th gen CPU id HD730 iGPU and ARC 750 and AV1 runs on ARC adapter but it does not share load with iGPU.

RytoEX commented 9 months ago

I can confirm this behavior occurs even on an Intel+Intel (iGPU+dGPU; Iris Xe + Arc A770M) system if OBS is running on the iGPU. The key factor here is that the GPU OBS is running on does not have QSV AV1 capabilities, and the non-texture sharing fallback is failing. This has been reported to Intel.

Selexo commented 7 months ago

This doesn't actually fix anything, but some things I noticed..

I have a MultiGPU setup in a AMD based Single PC setup 6700xt and a Arc 380 for the hardware encoder and OBS doesn't know how to deal with MultiGPU systems on a SinglePC MultiGPU Windows PC.

One thing that got me concerned and what ultimately brought this bug to my attention was the fact that when I was trying to use "FULL SCREEN PROJECTOR (Preview)" kept selecting the wrong display even when I clearly selected my other display connected to the other GPU. Then reviewing the log I found it wasn't even using the GPU encoder to its full potential, the the intel QSV encoder does use the GPU but obviously a lesser quality because it's not as up to date. I noticed this in other ffmpeg based apps.

21:34:20.708: Adapter 0: AMD Radeon RX 6700 XT 21:34:20.708: Dedicated VRAM: 12836904960 (12.0 GiB) . . 21:34:20.708: Adapter 1: Intel(R) Arc(TM) A380 Graphics 21:34:20.708: Dedicated VRAM: 6350176256 (5.9 GiB) . . 21:38:22.276: >>> app not on intel GPU, fall back to old qsv encoder

This solved a few OBS bugs or how it interacts with windows, but doesn't actually fix anything

First thing you will notice it the app will actually OPEN on the other display, A know bug reported on another thread where the app doesn't remember what display to open up on even if your drag it there. Mainly Multi GPU version of this bug, as it still doesn't fix single GPU issue when it happens.

Second thing this fixed is that I can "Fullscreen Projector Preview" on the any correct Display. if I have OBS open on the intel arc GPU it can still "Fullscreen Projector Preview" to my Main display or the second display. Selecting the different displays actually works.

In the LOG you will now see....

18:52:50.931: >>> new qsv encoder when recording but..... this doesn't fix anything because now it can't capture outside of this GPU. as reported by RytuEX

20:09:53.445: gs_texture_open_shared (D3D11): Failed to open shared 2D texture (80070057) 20:09:53.445: [game-capture: 'Game Capture'] init_shtex_capture: failed to open shared handle

EDIT UPDATE: 2D texture copying across two different GPU doesn't work in OBS and this is not a limitation in OBS itself, but a perhaps a restriction on the hardware or OS level.

So once you have this setup the only way to capture from the other GPU is DISPLAY capture. "Window Capture" & "Game Capture" does not work once you pair the app with GPU you want to hardware encode

You have to use Display Capture Windows -> Properties -> Capture Method -> "Windows 10 (1903 and Up)"

The default is DXGI and this will not work.

Because everything is capture this less then ideal if your have personal stuff all over the desktop. so hotkey this capture mode to toggle it on and off if your stream live with this setup.

RytoEX commented 4 months ago

This should be resolved as of OBS Studio 30.2.0 Beta 1 with #10170 and #10740.