obsproject / obsproject/obs-studio

OBS does not properly hook applications (PCSX2 2.7.57 or newer) that load the Agility SDK via Independent devices

Open
#13,740 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C
Stars
76.4k
Forks
10.2k
Avg merge
4d 23h
Merged PRs (30d)
12

Description

Operating System Info

Windows 11

Other OS

No response

OBS Studio Version

32.2.1

OBS Studio Version (Other)

No response

OBS Studio Log URL

https://obsproject.com/logs/ZV7GtXwxKBUMQBpL

OBS Studio Crash Log URL

No response

Expected Behavior

OBS is able to capture PCSX2 with DX12

Current Behavior

OBS, if launched before PCSX2 starts emulation, is unable to capture PCSX2 with DX12

Steps to Reproduce
  1. Launch OBS, set to Game capture PCSX2.
  2. Launch PCSX2, configured to use DX12 (Auto should use that on recent builds).
  3. Start emulation in PCSX2.
  4. Observe that OBS isn't able to capture.
Anything else we should know?

PCSX2 uses the D3D12 independent devices API to load the Agility SDK and then assign that as the global D3D12.
This is performed on emulation start, if OBS hooks before that (as would be the case with the repo steps) then OBS would hook the system D3D12 dlls instead of the loaded Agility SDK that PCSX2 is using to render.

Documentation on independent devices here https://microsoft.github.io/DirectX-Specs/d3d/IndependentDevices.html
Relevant loader code here https://github.com/PCSX2/pcsx2/blob/93f10864c1a5e202ee3b9c584d6bbd39463f84f3/pcsx2/GS/Renderers/DX12/GSDevice12.cpp#L194-L255

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the failure with OBS 32.2.1 and PCSX2 2.7.57 or newer using the listed steps, then inspect the OBS log and the DirectX Independent Devices documentation. Read PCSX2's GSDevice12.cpp loader code at the linked lines to understand when the Agility SDK becomes the global D3D12. Done means OBS can capture PCSX2 with DX12 when OBS starts first.

Written by the indexing model from the issue text.

Assessment

Domain
computer-graphics, desktop
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.