feat(win): new capture method, Windows.Graphics.Capture - #2580

Merged
ReenigneArcher merged 12 commits into
LizardByte:masterfrom
tez011:winrt-capture
May 27, 2024
Merged

feat(win): new capture method, Windows.Graphics.Capture #2580
ReenigneArcher merged 12 commits into
LizardByte:masterfrom
tez011:winrt-capture

Conversation

@tez011

Copy link
Copy Markdown
Contributor

Description

This adds a capture backend on Windows that uses the Windows.Graphics.Capture API. This is a more recent API that's capable of capturing the Xbox Game Bar, which the DXGI Desktop Duplication API seemingly cannot do.

This pull request depends on C++20 compiler support (for the Microsoft WinRT headers, which define this API) as well as Universal CRT runtime support. These have already been integrated into Sunshine in #2322 and #2323.

See also #2149.

Issues Fixed or Closed

Fixes#832 (manually verified)

Screenshot

Issues Fixed or Closed

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Dependency update (updates to dependencies)
  • Documentation update (changes to documentation)
  • Repository update (changes to repository files, e.g. .github/...)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated the in code docstring/documentation-blocks for new or existing methods/components

Branch Updates

LizardByte requires that branches be up-to-date before merging. This means that after any PR is merged, this branch
must be updated before it can be merged. You must also
Allow edits from maintainers.

  • I want maintainers to keep my branch updated

@tez011

Copy link
Copy Markdown
ContributorAuthor

Right now, this pull request does not contain changes to support Sunshine's service model.
Linking #2149 (comment) for context.

Comment thread.github/workflows/CI.yml
Comment threadsrc_assets/common/assets/web/configs/tabs/Advanced.vue Outdated
Comment threadsrc_assets/common/assets/web/configs/tabs/Advanced.vue
Comment thread.codeql-prebuild-cpp-Windows.sh
@codecov

codecovBot commented May 26, 2024

Copy link
Copy Markdown

Codecov Report

Attention: Patch coverage is 7.39300% with 238 lines in your changes missing coverage. Please review.

Project coverage is 6.86%. Comparing base (2d706d3) to head (f77eb15).
Report is 153 commits behind head on master.

FilesPatch %Lines
src/platform/windows/display_wgc.cpp4.63%138 Missing and 6 partials ⚠️
src/platform/windows/display_base.cpp12.69%47 Missing and 8 partials ⚠️
src/platform/windows/display_vram.cpp7.89%33 Missing and 2 partials ⚠️
src/platform/windows/display_ram.cpp20.00%3 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## master #2580 +/- ##
=========================================
- Coverage 7.03% 6.86% -0.17% 
=========================================
Files 87 88 +1 Lines 17698 17899 +201 Branches 8407 8514 +107 =========================================
- Hits 1245 1229 -16 - Misses 13717 14012 +295 + Partials 2736 2658 -78 
FlagCoverage Δ
Linux5.35% <ø> (ø)
Windows2.62% <7.39%> (+0.06%)⬆️
macOS-128.05% <ø> (ø)
macOS-137.98% <ø> (+0.01%)⬆️
macOS-14?

Flags with carried forward coverage won't be shown. Click here to find out more.

FilesCoverage Δ
src/platform/windows/display.h7.14% <ø> (-2.58%)⬇️
src/platform/windows/display_ram.cpp0.99% <20.00%> (-0.02%)⬇️
src/platform/windows/display_vram.cpp1.87% <7.89%> (+0.28%)⬆️
src/platform/windows/display_base.cpp12.50% <12.69%> (+0.62%)⬆️
src/platform/windows/display_wgc.cpp4.63% <4.63%> (ø)

... and 29 files with indirect coverage changes

@ReenigneArcher

Copy link
Copy Markdown
Member

I've quickly tested this locally.

  • CPU usage is < 4% while streaming with either capture method.
  • RAM usage is < 5mb while streaming with either capture method.
  • Can't use the new capture method when running it as a service, which I suppose is expected for now.
  • Can start Sunshine from start menu shortcut.

#2320

Was there anything else broken when we tried to merge this before?

@tez011

Copy link
Copy Markdown
ContributorAuthor

I seem to remember a couple other things:

  • Configuration UI comes up no slower than usual (was previously broken due to regex)
  • HDR may still not work (I don't have hardware capable of testing that)

@ReenigneArcher

Copy link
Copy Markdown
Member

@tez011

UI seems to be coming up quickly for me.

HDR may still not work (I don't have hardware capable of testing that)

This was just with the new capture method, correct? The old one is unaffected?

@tez011

Copy link
Copy Markdown
ContributorAuthor

HDR may still not work (I don't have hardware capable of testing that)

This was just with the new capture method, correct? The old one is unaffected?

Yes. I could never reproduce it, but I recall this discussion from the old pull request. #2149 (comment)

@ReenigneArcher

Copy link
Copy Markdown
Member

Alright, this will be merged soon. Thank you.

@ReenigneArcher
ReenigneArcher enabled auto-merge (squash) May 27, 2024 17:10
@ReenigneArcher
ReenigneArcher merged commit 287ac4c into LizardByte:masterMay 27, 2024
@HazerHazer mentioned this pull request May 30, 2024
11 tasks
KuleRucket pushed a commit to KuleRucket/Sunshine that referenced this pull request Jun 6, 2024
@Kobain-Seo

Kobain-Seo commented Jun 20, 2024

Copy link
Copy Markdown

When i enabled this option, sunshine fails to start.

Logs:

[2024-06-20 14:24:29.019908] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.021147] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.022127] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.023114] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[capture] -- [wgc]
[encoder] -- [nvenc]
[qp] -- [0]
[nvenc_twopass] -- [full_res]
[fec_percentage] -- [0]
[controller] -- [disabled]
[native_pen_touch] -- [disabled]
[nvenc_vbv_increase] -- [40]
[2024-06-20 14:24:29.024813] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.025803] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Info: Sunshine version: v2024.620.13611
[2024:06:20:14:24:29]: Info: nvprefs: Opened undo file from previous improper termination
[2024:06:20:14:24:29]: Info: nvprefs: Restored OGL_CPL_PREFER_DXPRESENT for base profile
[2024:06:20:14:24:29]: Info: nvprefs: Restored global profile settings from undo file - deleting the file
[2024:06:20:14:24:29]: Info: nvprefs: No need to modify application profile settings
[2024:06:20:14:24:29]: Info: nvprefs: Changed OGL_CPL_PREFER_DXPRESENT to OGL_CPL_PREFER_DXPRESENT_PREFER_ENABLED for base profile
[2024:06:20:14:24:29]: Info: Compiling shaders...
[2024:06:20:14:24:29]: Info: System tray created
[2024:06:20:14:24:29]: Info: Compiled shaders
[2024:06:20:14:24:29]: Warning: Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Warning: Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Warning: No gamepad input is available
[2024:06:20:14:24:29]: Info: Trying encoder [nvenc]
[2024:06:20:14:24:29]: Info: ddprobe.exe [1] [] returned: 0x00000000
[2024:06:20:14:24:29]: Info: Set GPU preference: 1
[2024:06:20:14:24:29]: Info:
Device Description : NVIDIA GeForce RTX 3060
Device Vendor ID : 0x000010DE
Device Device ID : 0x00002504
Device Video Mem : 12115 MiB
Device Sys Mem : 0 MiB
Share Sys Mem : 8113 MiB
Feature Level : 0x0000B100
Capture size : 1920x1080
Offset : 0x0
Virtual Desktop : 1920x1080
[2024:06:20:14:24:29]: Info: Active GPU has HAGS enabled
[2024:06:20:14:24:29]: Info: Using realtime GPU priority
[2024:06:20:14:24:29]: Info:
Colorspace : DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709
Bits Per Color : 8
Red Primary : [0.639648,0.330078]
Green Primary : [0.299805,0.599609]
Blue Primary : [0.149414,0.0595703]
White Point : [0.3125,0.329102]
Min Luminance : 0.5 nits
Max Luminance : 270 nits
Max Full Luminance : 270 nits

@ReenigneArcher

Copy link
Copy Markdown
Member

You have to disable the service and start Sunshine manually.

Black-Seraph added a commit to DuoStream/Sunshine that referenced this pull request Jun 27, 2024
@Kobain-Seo

Copy link
Copy Markdown

You have to disable the service and start Sunshine manually.

I think it is not relevant to running manually. I tested it on Windows 10 22H2 and sunshine failed to run, and It worked on Windows 11 22H2. Is it normal it does not work on Windows 10 ?

@tez011

Copy link
Copy Markdown
ContributorAuthor

Yes, that’s expected. This API is quite new.

@Kobain-Seo

Copy link
Copy Markdown

after patched #2825, It works on Windows 10, but have to be run manually, not by service.

@ReenigneArcher

Copy link
Copy Markdown
Member

after patched #2825, It works on Windows 10, but have to be run manually, not by service.

For now, that's expected.

@PieroPontra

Copy link
Copy Markdown

Latest version of Win11 but the new beta WinGraphicsCapture that I switched to manually in configs says it can't find any encoder or display attached. I already tried to manually enter names from dxci command but same results, any hints?

@WXZhao7

Copy link
Copy Markdown

I noticed from #2149 (comment) that WGC should be able to capture the UAC secure desktop. I have tested several pre-release versions, including v2024.714.230159. Unfortunately, Moonlight lose control when the UAC window pops up.
Is the capture of UAC prompts by WGC still incomplete, or is it not planned for implementation?

@roob0

Copy link
Copy Markdown

@PieroPontra You have to close the service and launch Sunshine from the exe, but so you can't stream the lockscreen. However, I created a simple solution for switching automatically from service to exe and from ddx wo wgc (and viceversa) here:
#2149

@karasuhebi

Copy link
Copy Markdown
Contributor

Is there any other benefits to this capture method?

c2vi pushed a commit to c2vi/Sunshine that referenced this pull request Mar 27, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Xbox Game Bar doesn't show up in the stream

7 participants

@tez011@ReenigneArcher@Kobain-Seo@PieroPontra@WXZhao7@roob0@karasuhebi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(win): new capture method, Windows.Graphics.Capture - #2580

Merged
ReenigneArcher merged 12 commits into
LizardByte:masterfrom
tez011:winrt-capture
May 27, 2024
Merged

feat(win): new capture method, Windows.Graphics.Capture #2580
ReenigneArcher merged 12 commits into
LizardByte:masterfrom
tez011:winrt-capture

Conversation

@tez011

Copy link
Copy Markdown
Contributor

Description

This adds a capture backend on Windows that uses the Windows.Graphics.Capture API. This is a more recent API that's capable of capturing the Xbox Game Bar, which the DXGI Desktop Duplication API seemingly cannot do.

This pull request depends on C++20 compiler support (for the Microsoft WinRT headers, which define this API) as well as Universal CRT runtime support. These have already been integrated into Sunshine in #2322 and #2323.

See also #2149.

Issues Fixed or Closed

Fixes#832 (manually verified)

Screenshot

Issues Fixed or Closed

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Dependency update (updates to dependencies)
  • Documentation update (changes to documentation)
  • Repository update (changes to repository files, e.g. .github/...)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated the in code docstring/documentation-blocks for new or existing methods/components

Branch Updates

LizardByte requires that branches be up-to-date before merging. This means that after any PR is merged, this branch
must be updated before it can be merged. You must also
Allow edits from maintainers.

  • I want maintainers to keep my branch updated

@tez011

Copy link
Copy Markdown
ContributorAuthor

Right now, this pull request does not contain changes to support Sunshine's service model.
Linking #2149 (comment) for context.

Comment thread.github/workflows/CI.yml
Comment threadsrc_assets/common/assets/web/configs/tabs/Advanced.vue Outdated
Comment threadsrc_assets/common/assets/web/configs/tabs/Advanced.vue
Comment thread.codeql-prebuild-cpp-Windows.sh
@codecov

codecovBot commented May 26, 2024

Copy link
Copy Markdown

Codecov Report

Attention: Patch coverage is 7.39300% with 238 lines in your changes missing coverage. Please review.

Project coverage is 6.86%. Comparing base (2d706d3) to head (f77eb15).
Report is 153 commits behind head on master.

FilesPatch %Lines
src/platform/windows/display_wgc.cpp4.63%138 Missing and 6 partials ⚠️
src/platform/windows/display_base.cpp12.69%47 Missing and 8 partials ⚠️
src/platform/windows/display_vram.cpp7.89%33 Missing and 2 partials ⚠️
src/platform/windows/display_ram.cpp20.00%3 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## master #2580 +/- ##
=========================================
- Coverage 7.03% 6.86% -0.17% 
=========================================
Files 87 88 +1 Lines 17698 17899 +201 Branches 8407 8514 +107 =========================================
- Hits 1245 1229 -16 - Misses 13717 14012 +295 + Partials 2736 2658 -78 
FlagCoverage Δ
Linux5.35% <ø> (ø)
Windows2.62% <7.39%> (+0.06%)⬆️
macOS-128.05% <ø> (ø)
macOS-137.98% <ø> (+0.01%)⬆️
macOS-14?

Flags with carried forward coverage won't be shown. Click here to find out more.

FilesCoverage Δ
src/platform/windows/display.h7.14% <ø> (-2.58%)⬇️
src/platform/windows/display_ram.cpp0.99% <20.00%> (-0.02%)⬇️
src/platform/windows/display_vram.cpp1.87% <7.89%> (+0.28%)⬆️
src/platform/windows/display_base.cpp12.50% <12.69%> (+0.62%)⬆️
src/platform/windows/display_wgc.cpp4.63% <4.63%> (ø)

... and 29 files with indirect coverage changes

@ReenigneArcher

Copy link
Copy Markdown
Member

I've quickly tested this locally.

  • CPU usage is < 4% while streaming with either capture method.
  • RAM usage is < 5mb while streaming with either capture method.
  • Can't use the new capture method when running it as a service, which I suppose is expected for now.
  • Can start Sunshine from start menu shortcut.

#2320

Was there anything else broken when we tried to merge this before?

@tez011

Copy link
Copy Markdown
ContributorAuthor

I seem to remember a couple other things:

  • Configuration UI comes up no slower than usual (was previously broken due to regex)
  • HDR may still not work (I don't have hardware capable of testing that)

@ReenigneArcher

Copy link
Copy Markdown
Member

@tez011

UI seems to be coming up quickly for me.

HDR may still not work (I don't have hardware capable of testing that)

This was just with the new capture method, correct? The old one is unaffected?

@tez011

Copy link
Copy Markdown
ContributorAuthor

HDR may still not work (I don't have hardware capable of testing that)

This was just with the new capture method, correct? The old one is unaffected?

Yes. I could never reproduce it, but I recall this discussion from the old pull request. #2149 (comment)

@ReenigneArcher

Copy link
Copy Markdown
Member

Alright, this will be merged soon. Thank you.

@ReenigneArcher
ReenigneArcher enabled auto-merge (squash) May 27, 2024 17:10
@ReenigneArcher
ReenigneArcher merged commit 287ac4c into LizardByte:masterMay 27, 2024
@HazerHazer mentioned this pull request May 30, 2024
11 tasks
KuleRucket pushed a commit to KuleRucket/Sunshine that referenced this pull request Jun 6, 2024
@Kobain-Seo

Kobain-Seo commented Jun 20, 2024

Copy link
Copy Markdown

When i enabled this option, sunshine fails to start.

Logs:

[2024-06-20 14:24:29.019908] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.021147] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.022127] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.023114] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[capture] -- [wgc]
[encoder] -- [nvenc]
[qp] -- [0]
[nvenc_twopass] -- [full_res]
[fec_percentage] -- [0]
[controller] -- [disabled]
[native_pen_touch] -- [disabled]
[nvenc_vbv_increase] -- [40]
[2024-06-20 14:24:29.024813] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.025803] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Info: Sunshine version: v2024.620.13611
[2024:06:20:14:24:29]: Info: nvprefs: Opened undo file from previous improper termination
[2024:06:20:14:24:29]: Info: nvprefs: Restored OGL_CPL_PREFER_DXPRESENT for base profile
[2024:06:20:14:24:29]: Info: nvprefs: Restored global profile settings from undo file - deleting the file
[2024:06:20:14:24:29]: Info: nvprefs: No need to modify application profile settings
[2024:06:20:14:24:29]: Info: nvprefs: Changed OGL_CPL_PREFER_DXPRESENT to OGL_CPL_PREFER_DXPRESENT_PREFER_ENABLED for base profile
[2024:06:20:14:24:29]: Info: Compiling shaders...
[2024:06:20:14:24:29]: Info: System tray created
[2024:06:20:14:24:29]: Info: Compiled shaders
[2024:06:20:14:24:29]: Warning: Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Warning: Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Warning: No gamepad input is available
[2024:06:20:14:24:29]: Info: Trying encoder [nvenc]
[2024:06:20:14:24:29]: Info: ddprobe.exe [1] [] returned: 0x00000000
[2024:06:20:14:24:29]: Info: Set GPU preference: 1
[2024:06:20:14:24:29]: Info:
Device Description : NVIDIA GeForce RTX 3060
Device Vendor ID : 0x000010DE
Device Device ID : 0x00002504
Device Video Mem : 12115 MiB
Device Sys Mem : 0 MiB
Share Sys Mem : 8113 MiB
Feature Level : 0x0000B100
Capture size : 1920x1080
Offset : 0x0
Virtual Desktop : 1920x1080
[2024:06:20:14:24:29]: Info: Active GPU has HAGS enabled
[2024:06:20:14:24:29]: Info: Using realtime GPU priority
[2024:06:20:14:24:29]: Info:
Colorspace : DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709
Bits Per Color : 8
Red Primary : [0.639648,0.330078]
Green Primary : [0.299805,0.599609]
Blue Primary : [0.149414,0.0595703]
White Point : [0.3125,0.329102]
Min Luminance : 0.5 nits
Max Luminance : 270 nits
Max Full Luminance : 270 nits

@ReenigneArcher

Copy link
Copy Markdown
Member

You have to disable the service and start Sunshine manually.

Black-Seraph added a commit to DuoStream/Sunshine that referenced this pull request Jun 27, 2024
@Kobain-Seo

Copy link
Copy Markdown

You have to disable the service and start Sunshine manually.

I think it is not relevant to running manually. I tested it on Windows 10 22H2 and sunshine failed to run, and It worked on Windows 11 22H2. Is it normal it does not work on Windows 10 ?

@tez011

Copy link
Copy Markdown
ContributorAuthor

Yes, that’s expected. This API is quite new.

@Kobain-Seo

Copy link
Copy Markdown

after patched #2825, It works on Windows 10, but have to be run manually, not by service.

@ReenigneArcher

Copy link
Copy Markdown
Member

after patched #2825, It works on Windows 10, but have to be run manually, not by service.

For now, that's expected.

@PieroPontra

Copy link
Copy Markdown

Latest version of Win11 but the new beta WinGraphicsCapture that I switched to manually in configs says it can't find any encoder or display attached. I already tried to manually enter names from dxci command but same results, any hints?

@WXZhao7

Copy link
Copy Markdown

I noticed from #2149 (comment) that WGC should be able to capture the UAC secure desktop. I have tested several pre-release versions, including v2024.714.230159. Unfortunately, Moonlight lose control when the UAC window pops up.
Is the capture of UAC prompts by WGC still incomplete, or is it not planned for implementation?

@roob0

Copy link
Copy Markdown

@PieroPontra You have to close the service and launch Sunshine from the exe, but so you can't stream the lockscreen. However, I created a simple solution for switching automatically from service to exe and from ddx wo wgc (and viceversa) here:
#2149

@karasuhebi

Copy link
Copy Markdown
Contributor

Is there any other benefits to this capture method?

c2vi pushed a commit to c2vi/Sunshine that referenced this pull request Mar 27, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Xbox Game Bar doesn't show up in the stream

7 participants

@tez011@ReenigneArcher@Kobain-Seo@PieroPontra@WXZhao7@roob0@karasuhebi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(win): new capture method, Windows.Graphics.Capture - #2580

Merged
ReenigneArcher merged 12 commits into
LizardByte:masterfrom
tez011:winrt-capture
May 27, 2024
Merged

feat(win): new capture method, Windows.Graphics.Capture #2580
ReenigneArcher merged 12 commits into
LizardByte:masterfrom
tez011:winrt-capture

Conversation

@tez011

Copy link
Copy Markdown
Contributor

Description

This adds a capture backend on Windows that uses the Windows.Graphics.Capture API. This is a more recent API that's capable of capturing the Xbox Game Bar, which the DXGI Desktop Duplication API seemingly cannot do.

This pull request depends on C++20 compiler support (for the Microsoft WinRT headers, which define this API) as well as Universal CRT runtime support. These have already been integrated into Sunshine in #2322 and #2323.

See also #2149.

Issues Fixed or Closed

Fixes#832 (manually verified)

Screenshot

Issues Fixed or Closed

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Dependency update (updates to dependencies)
  • Documentation update (changes to documentation)
  • Repository update (changes to repository files, e.g. .github/...)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated the in code docstring/documentation-blocks for new or existing methods/components

Branch Updates

LizardByte requires that branches be up-to-date before merging. This means that after any PR is merged, this branch
must be updated before it can be merged. You must also
Allow edits from maintainers.

  • I want maintainers to keep my branch updated

@tez011

Copy link
Copy Markdown
ContributorAuthor

Right now, this pull request does not contain changes to support Sunshine's service model.
Linking #2149 (comment) for context.

Comment thread.github/workflows/CI.yml
Comment threadsrc_assets/common/assets/web/configs/tabs/Advanced.vue Outdated
Comment threadsrc_assets/common/assets/web/configs/tabs/Advanced.vue
Comment thread.codeql-prebuild-cpp-Windows.sh
@codecov

codecovBot commented May 26, 2024

Copy link
Copy Markdown

Codecov Report

Attention: Patch coverage is 7.39300% with 238 lines in your changes missing coverage. Please review.

Project coverage is 6.86%. Comparing base (2d706d3) to head (f77eb15).
Report is 153 commits behind head on master.

FilesPatch %Lines
src/platform/windows/display_wgc.cpp4.63%138 Missing and 6 partials ⚠️
src/platform/windows/display_base.cpp12.69%47 Missing and 8 partials ⚠️
src/platform/windows/display_vram.cpp7.89%33 Missing and 2 partials ⚠️
src/platform/windows/display_ram.cpp20.00%3 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## master #2580 +/- ##
=========================================
- Coverage 7.03% 6.86% -0.17% 
=========================================
Files 87 88 +1 Lines 17698 17899 +201 Branches 8407 8514 +107 =========================================
- Hits 1245 1229 -16 - Misses 13717 14012 +295 + Partials 2736 2658 -78 
FlagCoverage Δ
Linux5.35% <ø> (ø)
Windows2.62% <7.39%> (+0.06%)⬆️
macOS-128.05% <ø> (ø)
macOS-137.98% <ø> (+0.01%)⬆️
macOS-14?

Flags with carried forward coverage won't be shown. Click here to find out more.

FilesCoverage Δ
src/platform/windows/display.h7.14% <ø> (-2.58%)⬇️
src/platform/windows/display_ram.cpp0.99% <20.00%> (-0.02%)⬇️
src/platform/windows/display_vram.cpp1.87% <7.89%> (+0.28%)⬆️
src/platform/windows/display_base.cpp12.50% <12.69%> (+0.62%)⬆️
src/platform/windows/display_wgc.cpp4.63% <4.63%> (ø)

... and 29 files with indirect coverage changes

@ReenigneArcher

Copy link
Copy Markdown
Member

I've quickly tested this locally.

  • CPU usage is < 4% while streaming with either capture method.
  • RAM usage is < 5mb while streaming with either capture method.
  • Can't use the new capture method when running it as a service, which I suppose is expected for now.
  • Can start Sunshine from start menu shortcut.

#2320

Was there anything else broken when we tried to merge this before?

@tez011

Copy link
Copy Markdown
ContributorAuthor

I seem to remember a couple other things:

  • Configuration UI comes up no slower than usual (was previously broken due to regex)
  • HDR may still not work (I don't have hardware capable of testing that)

@ReenigneArcher

Copy link
Copy Markdown
Member

@tez011

UI seems to be coming up quickly for me.

HDR may still not work (I don't have hardware capable of testing that)

This was just with the new capture method, correct? The old one is unaffected?

@tez011

Copy link
Copy Markdown
ContributorAuthor

HDR may still not work (I don't have hardware capable of testing that)

This was just with the new capture method, correct? The old one is unaffected?

Yes. I could never reproduce it, but I recall this discussion from the old pull request. #2149 (comment)

@ReenigneArcher

Copy link
Copy Markdown
Member

Alright, this will be merged soon. Thank you.

@ReenigneArcher
ReenigneArcher enabled auto-merge (squash) May 27, 2024 17:10
@ReenigneArcher
ReenigneArcher merged commit 287ac4c into LizardByte:masterMay 27, 2024
@HazerHazer mentioned this pull request May 30, 2024
11 tasks
KuleRucket pushed a commit to KuleRucket/Sunshine that referenced this pull request Jun 6, 2024
@Kobain-Seo

Kobain-Seo commented Jun 20, 2024

Copy link
Copy Markdown

When i enabled this option, sunshine fails to start.

Logs:

[2024-06-20 14:24:29.019908] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.021147] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.022127] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.023114] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[capture] -- [wgc]
[encoder] -- [nvenc]
[qp] -- [0]
[nvenc_twopass] -- [full_res]
[fec_percentage] -- [0]
[controller] -- [disabled]
[native_pen_touch] -- [disabled]
[nvenc_vbv_increase] -- [40]
[2024-06-20 14:24:29.024813] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.025803] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Info: Sunshine version: v2024.620.13611
[2024:06:20:14:24:29]: Info: nvprefs: Opened undo file from previous improper termination
[2024:06:20:14:24:29]: Info: nvprefs: Restored OGL_CPL_PREFER_DXPRESENT for base profile
[2024:06:20:14:24:29]: Info: nvprefs: Restored global profile settings from undo file - deleting the file
[2024:06:20:14:24:29]: Info: nvprefs: No need to modify application profile settings
[2024:06:20:14:24:29]: Info: nvprefs: Changed OGL_CPL_PREFER_DXPRESENT to OGL_CPL_PREFER_DXPRESENT_PREFER_ENABLED for base profile
[2024:06:20:14:24:29]: Info: Compiling shaders...
[2024:06:20:14:24:29]: Info: System tray created
[2024:06:20:14:24:29]: Info: Compiled shaders
[2024:06:20:14:24:29]: Warning: Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Warning: Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Warning: No gamepad input is available
[2024:06:20:14:24:29]: Info: Trying encoder [nvenc]
[2024:06:20:14:24:29]: Info: ddprobe.exe [1] [] returned: 0x00000000
[2024:06:20:14:24:29]: Info: Set GPU preference: 1
[2024:06:20:14:24:29]: Info:
Device Description : NVIDIA GeForce RTX 3060
Device Vendor ID : 0x000010DE
Device Device ID : 0x00002504
Device Video Mem : 12115 MiB
Device Sys Mem : 0 MiB
Share Sys Mem : 8113 MiB
Feature Level : 0x0000B100
Capture size : 1920x1080
Offset : 0x0
Virtual Desktop : 1920x1080
[2024:06:20:14:24:29]: Info: Active GPU has HAGS enabled
[2024:06:20:14:24:29]: Info: Using realtime GPU priority
[2024:06:20:14:24:29]: Info:
Colorspace : DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709
Bits Per Color : 8
Red Primary : [0.639648,0.330078]
Green Primary : [0.299805,0.599609]
Blue Primary : [0.149414,0.0595703]
White Point : [0.3125,0.329102]
Min Luminance : 0.5 nits
Max Luminance : 270 nits
Max Full Luminance : 270 nits

@ReenigneArcher

Copy link
Copy Markdown
Member

You have to disable the service and start Sunshine manually.

Black-Seraph added a commit to DuoStream/Sunshine that referenced this pull request Jun 27, 2024
@Kobain-Seo

Copy link
Copy Markdown

You have to disable the service and start Sunshine manually.

I think it is not relevant to running manually. I tested it on Windows 10 22H2 and sunshine failed to run, and It worked on Windows 11 22H2. Is it normal it does not work on Windows 10 ?

@tez011

Copy link
Copy Markdown
ContributorAuthor

Yes, that’s expected. This API is quite new.

@Kobain-Seo

Copy link
Copy Markdown

after patched #2825, It works on Windows 10, but have to be run manually, not by service.

@ReenigneArcher

Copy link
Copy Markdown
Member

after patched #2825, It works on Windows 10, but have to be run manually, not by service.

For now, that's expected.

@PieroPontra

Copy link
Copy Markdown

Latest version of Win11 but the new beta WinGraphicsCapture that I switched to manually in configs says it can't find any encoder or display attached. I already tried to manually enter names from dxci command but same results, any hints?

@WXZhao7

Copy link
Copy Markdown

I noticed from #2149 (comment) that WGC should be able to capture the UAC secure desktop. I have tested several pre-release versions, including v2024.714.230159. Unfortunately, Moonlight lose control when the UAC window pops up.
Is the capture of UAC prompts by WGC still incomplete, or is it not planned for implementation?

@roob0

Copy link
Copy Markdown

@PieroPontra You have to close the service and launch Sunshine from the exe, but so you can't stream the lockscreen. However, I created a simple solution for switching automatically from service to exe and from ddx wo wgc (and viceversa) here:
#2149

@karasuhebi

Copy link
Copy Markdown
Contributor

Is there any other benefits to this capture method?

c2vi pushed a commit to c2vi/Sunshine that referenced this pull request Mar 27, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Xbox Game Bar doesn't show up in the stream

7 participants

@tez011@ReenigneArcher@Kobain-Seo@PieroPontra@WXZhao7@roob0@karasuhebi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(win): new capture method, Windows.Graphics.Capture - #2580

Merged
ReenigneArcher merged 12 commits into
LizardByte:masterfrom
tez011:winrt-capture
May 27, 2024
Merged

feat(win): new capture method, Windows.Graphics.Capture #2580
ReenigneArcher merged 12 commits into
LizardByte:masterfrom
tez011:winrt-capture

Conversation

@tez011

Copy link
Copy Markdown
Contributor

Description

This adds a capture backend on Windows that uses the Windows.Graphics.Capture API. This is a more recent API that's capable of capturing the Xbox Game Bar, which the DXGI Desktop Duplication API seemingly cannot do.

This pull request depends on C++20 compiler support (for the Microsoft WinRT headers, which define this API) as well as Universal CRT runtime support. These have already been integrated into Sunshine in #2322 and #2323.

See also #2149.

Issues Fixed or Closed

Fixes#832 (manually verified)

Screenshot

Issues Fixed or Closed

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Dependency update (updates to dependencies)
  • Documentation update (changes to documentation)
  • Repository update (changes to repository files, e.g. .github/...)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated the in code docstring/documentation-blocks for new or existing methods/components

Branch Updates

LizardByte requires that branches be up-to-date before merging. This means that after any PR is merged, this branch
must be updated before it can be merged. You must also
Allow edits from maintainers.

  • I want maintainers to keep my branch updated

@tez011

Copy link
Copy Markdown
ContributorAuthor

Right now, this pull request does not contain changes to support Sunshine's service model.
Linking #2149 (comment) for context.

Comment thread.github/workflows/CI.yml
Comment threadsrc_assets/common/assets/web/configs/tabs/Advanced.vue Outdated
Comment threadsrc_assets/common/assets/web/configs/tabs/Advanced.vue
Comment thread.codeql-prebuild-cpp-Windows.sh
@codecov

codecovBot commented May 26, 2024

Copy link
Copy Markdown

Codecov Report

Attention: Patch coverage is 7.39300% with 238 lines in your changes missing coverage. Please review.

Project coverage is 6.86%. Comparing base (2d706d3) to head (f77eb15).
Report is 153 commits behind head on master.

FilesPatch %Lines
src/platform/windows/display_wgc.cpp4.63%138 Missing and 6 partials ⚠️
src/platform/windows/display_base.cpp12.69%47 Missing and 8 partials ⚠️
src/platform/windows/display_vram.cpp7.89%33 Missing and 2 partials ⚠️
src/platform/windows/display_ram.cpp20.00%3 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## master #2580 +/- ##
=========================================
- Coverage 7.03% 6.86% -0.17% 
=========================================
Files 87 88 +1 Lines 17698 17899 +201 Branches 8407 8514 +107 =========================================
- Hits 1245 1229 -16 - Misses 13717 14012 +295 + Partials 2736 2658 -78 
FlagCoverage Δ
Linux5.35% <ø> (ø)
Windows2.62% <7.39%> (+0.06%)⬆️
macOS-128.05% <ø> (ø)
macOS-137.98% <ø> (+0.01%)⬆️
macOS-14?

Flags with carried forward coverage won't be shown. Click here to find out more.

FilesCoverage Δ
src/platform/windows/display.h7.14% <ø> (-2.58%)⬇️
src/platform/windows/display_ram.cpp0.99% <20.00%> (-0.02%)⬇️
src/platform/windows/display_vram.cpp1.87% <7.89%> (+0.28%)⬆️
src/platform/windows/display_base.cpp12.50% <12.69%> (+0.62%)⬆️
src/platform/windows/display_wgc.cpp4.63% <4.63%> (ø)

... and 29 files with indirect coverage changes

@ReenigneArcher

Copy link
Copy Markdown
Member

I've quickly tested this locally.

  • CPU usage is < 4% while streaming with either capture method.
  • RAM usage is < 5mb while streaming with either capture method.
  • Can't use the new capture method when running it as a service, which I suppose is expected for now.
  • Can start Sunshine from start menu shortcut.

#2320

Was there anything else broken when we tried to merge this before?

@tez011

Copy link
Copy Markdown
ContributorAuthor

I seem to remember a couple other things:

  • Configuration UI comes up no slower than usual (was previously broken due to regex)
  • HDR may still not work (I don't have hardware capable of testing that)

@ReenigneArcher

Copy link
Copy Markdown
Member

@tez011

UI seems to be coming up quickly for me.

HDR may still not work (I don't have hardware capable of testing that)

This was just with the new capture method, correct? The old one is unaffected?

@tez011

Copy link
Copy Markdown
ContributorAuthor

HDR may still not work (I don't have hardware capable of testing that)

This was just with the new capture method, correct? The old one is unaffected?

Yes. I could never reproduce it, but I recall this discussion from the old pull request. #2149 (comment)

@ReenigneArcher

Copy link
Copy Markdown
Member

Alright, this will be merged soon. Thank you.

@ReenigneArcher
ReenigneArcher enabled auto-merge (squash) May 27, 2024 17:10
@ReenigneArcher
ReenigneArcher merged commit 287ac4c into LizardByte:masterMay 27, 2024
@HazerHazer mentioned this pull request May 30, 2024
11 tasks
KuleRucket pushed a commit to KuleRucket/Sunshine that referenced this pull request Jun 6, 2024
@Kobain-Seo

Kobain-Seo commented Jun 20, 2024

Copy link
Copy Markdown

When i enabled this option, sunshine fails to start.

Logs:

[2024-06-20 14:24:29.019908] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.021147] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.022127] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.023114] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[capture] -- [wgc]
[encoder] -- [nvenc]
[qp] -- [0]
[nvenc_twopass] -- [full_res]
[fec_percentage] -- [0]
[controller] -- [disabled]
[native_pen_touch] -- [disabled]
[nvenc_vbv_increase] -- [40]
[2024-06-20 14:24:29.024813] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.025803] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Info: Sunshine version: v2024.620.13611
[2024:06:20:14:24:29]: Info: nvprefs: Opened undo file from previous improper termination
[2024:06:20:14:24:29]: Info: nvprefs: Restored OGL_CPL_PREFER_DXPRESENT for base profile
[2024:06:20:14:24:29]: Info: nvprefs: Restored global profile settings from undo file - deleting the file
[2024:06:20:14:24:29]: Info: nvprefs: No need to modify application profile settings
[2024:06:20:14:24:29]: Info: nvprefs: Changed OGL_CPL_PREFER_DXPRESENT to OGL_CPL_PREFER_DXPRESENT_PREFER_ENABLED for base profile
[2024:06:20:14:24:29]: Info: Compiling shaders...
[2024:06:20:14:24:29]: Info: System tray created
[2024:06:20:14:24:29]: Info: Compiled shaders
[2024:06:20:14:24:29]: Warning: Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Warning: Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Warning: No gamepad input is available
[2024:06:20:14:24:29]: Info: Trying encoder [nvenc]
[2024:06:20:14:24:29]: Info: ddprobe.exe [1] [] returned: 0x00000000
[2024:06:20:14:24:29]: Info: Set GPU preference: 1
[2024:06:20:14:24:29]: Info:
Device Description : NVIDIA GeForce RTX 3060
Device Vendor ID : 0x000010DE
Device Device ID : 0x00002504
Device Video Mem : 12115 MiB
Device Sys Mem : 0 MiB
Share Sys Mem : 8113 MiB
Feature Level : 0x0000B100
Capture size : 1920x1080
Offset : 0x0
Virtual Desktop : 1920x1080
[2024:06:20:14:24:29]: Info: Active GPU has HAGS enabled
[2024:06:20:14:24:29]: Info: Using realtime GPU priority
[2024:06:20:14:24:29]: Info:
Colorspace : DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709
Bits Per Color : 8
Red Primary : [0.639648,0.330078]
Green Primary : [0.299805,0.599609]
Blue Primary : [0.149414,0.0595703]
White Point : [0.3125,0.329102]
Min Luminance : 0.5 nits
Max Luminance : 270 nits
Max Full Luminance : 270 nits

@ReenigneArcher

Copy link
Copy Markdown
Member

You have to disable the service and start Sunshine manually.

Black-Seraph added a commit to DuoStream/Sunshine that referenced this pull request Jun 27, 2024
@Kobain-Seo

Copy link
Copy Markdown

You have to disable the service and start Sunshine manually.

I think it is not relevant to running manually. I tested it on Windows 10 22H2 and sunshine failed to run, and It worked on Windows 11 22H2. Is it normal it does not work on Windows 10 ?

@tez011

Copy link
Copy Markdown
ContributorAuthor

Yes, that’s expected. This API is quite new.

@Kobain-Seo

Copy link
Copy Markdown

after patched #2825, It works on Windows 10, but have to be run manually, not by service.

@ReenigneArcher

Copy link
Copy Markdown
Member

after patched #2825, It works on Windows 10, but have to be run manually, not by service.

For now, that's expected.

@PieroPontra

Copy link
Copy Markdown

Latest version of Win11 but the new beta WinGraphicsCapture that I switched to manually in configs says it can't find any encoder or display attached. I already tried to manually enter names from dxci command but same results, any hints?

@WXZhao7

Copy link
Copy Markdown

I noticed from #2149 (comment) that WGC should be able to capture the UAC secure desktop. I have tested several pre-release versions, including v2024.714.230159. Unfortunately, Moonlight lose control when the UAC window pops up.
Is the capture of UAC prompts by WGC still incomplete, or is it not planned for implementation?

@roob0

Copy link
Copy Markdown

@PieroPontra You have to close the service and launch Sunshine from the exe, but so you can't stream the lockscreen. However, I created a simple solution for switching automatically from service to exe and from ddx wo wgc (and viceversa) here:
#2149

@karasuhebi

Copy link
Copy Markdown
Contributor

Is there any other benefits to this capture method?

c2vi pushed a commit to c2vi/Sunshine that referenced this pull request Mar 27, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Xbox Game Bar doesn't show up in the stream

7 participants

@tez011@ReenigneArcher@Kobain-Seo@PieroPontra@WXZhao7@roob0@karasuhebi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(win): new capture method, Windows.Graphics.Capture - #2580

Merged
ReenigneArcher merged 12 commits into
LizardByte:masterfrom
tez011:winrt-capture
May 27, 2024
Merged

feat(win): new capture method, Windows.Graphics.Capture #2580
ReenigneArcher merged 12 commits into
LizardByte:masterfrom
tez011:winrt-capture

Conversation

@tez011

Copy link
Copy Markdown
Contributor

Description

This adds a capture backend on Windows that uses the Windows.Graphics.Capture API. This is a more recent API that's capable of capturing the Xbox Game Bar, which the DXGI Desktop Duplication API seemingly cannot do.

This pull request depends on C++20 compiler support (for the Microsoft WinRT headers, which define this API) as well as Universal CRT runtime support. These have already been integrated into Sunshine in #2322 and #2323.

See also #2149.

Issues Fixed or Closed

Fixes#832 (manually verified)

Screenshot

Issues Fixed or Closed

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Dependency update (updates to dependencies)
  • Documentation update (changes to documentation)
  • Repository update (changes to repository files, e.g. .github/...)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated the in code docstring/documentation-blocks for new or existing methods/components

Branch Updates

LizardByte requires that branches be up-to-date before merging. This means that after any PR is merged, this branch
must be updated before it can be merged. You must also
Allow edits from maintainers.

  • I want maintainers to keep my branch updated

@tez011

Copy link
Copy Markdown
ContributorAuthor

Right now, this pull request does not contain changes to support Sunshine's service model.
Linking #2149 (comment) for context.

Comment thread.github/workflows/CI.yml
Comment threadsrc_assets/common/assets/web/configs/tabs/Advanced.vue Outdated
Comment threadsrc_assets/common/assets/web/configs/tabs/Advanced.vue
Comment thread.codeql-prebuild-cpp-Windows.sh
@codecov

codecovBot commented May 26, 2024

Copy link
Copy Markdown

Codecov Report

Attention: Patch coverage is 7.39300% with 238 lines in your changes missing coverage. Please review.

Project coverage is 6.86%. Comparing base (2d706d3) to head (f77eb15).
Report is 153 commits behind head on master.

FilesPatch %Lines
src/platform/windows/display_wgc.cpp4.63%138 Missing and 6 partials ⚠️
src/platform/windows/display_base.cpp12.69%47 Missing and 8 partials ⚠️
src/platform/windows/display_vram.cpp7.89%33 Missing and 2 partials ⚠️
src/platform/windows/display_ram.cpp20.00%3 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## master #2580 +/- ##
=========================================
- Coverage 7.03% 6.86% -0.17% 
=========================================
Files 87 88 +1 Lines 17698 17899 +201 Branches 8407 8514 +107 =========================================
- Hits 1245 1229 -16 - Misses 13717 14012 +295 + Partials 2736 2658 -78 
FlagCoverage Δ
Linux5.35% <ø> (ø)
Windows2.62% <7.39%> (+0.06%)⬆️
macOS-128.05% <ø> (ø)
macOS-137.98% <ø> (+0.01%)⬆️
macOS-14?

Flags with carried forward coverage won't be shown. Click here to find out more.

FilesCoverage Δ
src/platform/windows/display.h7.14% <ø> (-2.58%)⬇️
src/platform/windows/display_ram.cpp0.99% <20.00%> (-0.02%)⬇️
src/platform/windows/display_vram.cpp1.87% <7.89%> (+0.28%)⬆️
src/platform/windows/display_base.cpp12.50% <12.69%> (+0.62%)⬆️
src/platform/windows/display_wgc.cpp4.63% <4.63%> (ø)

... and 29 files with indirect coverage changes

@ReenigneArcher

Copy link
Copy Markdown
Member

I've quickly tested this locally.

  • CPU usage is < 4% while streaming with either capture method.
  • RAM usage is < 5mb while streaming with either capture method.
  • Can't use the new capture method when running it as a service, which I suppose is expected for now.
  • Can start Sunshine from start menu shortcut.

#2320

Was there anything else broken when we tried to merge this before?

@tez011

Copy link
Copy Markdown
ContributorAuthor

I seem to remember a couple other things:

  • Configuration UI comes up no slower than usual (was previously broken due to regex)
  • HDR may still not work (I don't have hardware capable of testing that)

@ReenigneArcher

Copy link
Copy Markdown
Member

@tez011

UI seems to be coming up quickly for me.

HDR may still not work (I don't have hardware capable of testing that)

This was just with the new capture method, correct? The old one is unaffected?

@tez011

Copy link
Copy Markdown
ContributorAuthor

HDR may still not work (I don't have hardware capable of testing that)

This was just with the new capture method, correct? The old one is unaffected?

Yes. I could never reproduce it, but I recall this discussion from the old pull request. #2149 (comment)

@ReenigneArcher

Copy link
Copy Markdown
Member

Alright, this will be merged soon. Thank you.

@ReenigneArcher
ReenigneArcher enabled auto-merge (squash) May 27, 2024 17:10
@ReenigneArcher
ReenigneArcher merged commit 287ac4c into LizardByte:masterMay 27, 2024
@HazerHazer mentioned this pull request May 30, 2024
11 tasks
KuleRucket pushed a commit to KuleRucket/Sunshine that referenced this pull request Jun 6, 2024
@Kobain-Seo

Kobain-Seo commented Jun 20, 2024

Copy link
Copy Markdown

When i enabled this option, sunshine fails to start.

Logs:

[2024-06-20 14:24:29.019908] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.021147] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.022127] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.023114] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[capture] -- [wgc]
[encoder] -- [nvenc]
[qp] -- [0]
[nvenc_twopass] -- [full_res]
[fec_percentage] -- [0]
[controller] -- [disabled]
[native_pen_touch] -- [disabled]
[nvenc_vbv_increase] -- [40]
[2024-06-20 14:24:29.024813] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.025803] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Info: Sunshine version: v2024.620.13611
[2024:06:20:14:24:29]: Info: nvprefs: Opened undo file from previous improper termination
[2024:06:20:14:24:29]: Info: nvprefs: Restored OGL_CPL_PREFER_DXPRESENT for base profile
[2024:06:20:14:24:29]: Info: nvprefs: Restored global profile settings from undo file - deleting the file
[2024:06:20:14:24:29]: Info: nvprefs: No need to modify application profile settings
[2024:06:20:14:24:29]: Info: nvprefs: Changed OGL_CPL_PREFER_DXPRESENT to OGL_CPL_PREFER_DXPRESENT_PREFER_ENABLED for base profile
[2024:06:20:14:24:29]: Info: Compiling shaders...
[2024:06:20:14:24:29]: Info: System tray created
[2024:06:20:14:24:29]: Info: Compiled shaders
[2024:06:20:14:24:29]: Warning: Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Warning: Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Warning: No gamepad input is available
[2024:06:20:14:24:29]: Info: Trying encoder [nvenc]
[2024:06:20:14:24:29]: Info: ddprobe.exe [1] [] returned: 0x00000000
[2024:06:20:14:24:29]: Info: Set GPU preference: 1
[2024:06:20:14:24:29]: Info:
Device Description : NVIDIA GeForce RTX 3060
Device Vendor ID : 0x000010DE
Device Device ID : 0x00002504
Device Video Mem : 12115 MiB
Device Sys Mem : 0 MiB
Share Sys Mem : 8113 MiB
Feature Level : 0x0000B100
Capture size : 1920x1080
Offset : 0x0
Virtual Desktop : 1920x1080
[2024:06:20:14:24:29]: Info: Active GPU has HAGS enabled
[2024:06:20:14:24:29]: Info: Using realtime GPU priority
[2024:06:20:14:24:29]: Info:
Colorspace : DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709
Bits Per Color : 8
Red Primary : [0.639648,0.330078]
Green Primary : [0.299805,0.599609]
Blue Primary : [0.149414,0.0595703]
White Point : [0.3125,0.329102]
Min Luminance : 0.5 nits
Max Luminance : 270 nits
Max Full Luminance : 270 nits

@ReenigneArcher

Copy link
Copy Markdown
Member

You have to disable the service and start Sunshine manually.

Black-Seraph added a commit to DuoStream/Sunshine that referenced this pull request Jun 27, 2024
@Kobain-Seo

Copy link
Copy Markdown

You have to disable the service and start Sunshine manually.

I think it is not relevant to running manually. I tested it on Windows 10 22H2 and sunshine failed to run, and It worked on Windows 11 22H2. Is it normal it does not work on Windows 10 ?

@tez011

Copy link
Copy Markdown
ContributorAuthor

Yes, that’s expected. This API is quite new.

@Kobain-Seo

Copy link
Copy Markdown

after patched #2825, It works on Windows 10, but have to be run manually, not by service.

@ReenigneArcher

Copy link
Copy Markdown
Member

after patched #2825, It works on Windows 10, but have to be run manually, not by service.

For now, that's expected.

@PieroPontra

Copy link
Copy Markdown

Latest version of Win11 but the new beta WinGraphicsCapture that I switched to manually in configs says it can't find any encoder or display attached. I already tried to manually enter names from dxci command but same results, any hints?

@WXZhao7

Copy link
Copy Markdown

I noticed from #2149 (comment) that WGC should be able to capture the UAC secure desktop. I have tested several pre-release versions, including v2024.714.230159. Unfortunately, Moonlight lose control when the UAC window pops up.
Is the capture of UAC prompts by WGC still incomplete, or is it not planned for implementation?

@roob0

Copy link
Copy Markdown

@PieroPontra You have to close the service and launch Sunshine from the exe, but so you can't stream the lockscreen. However, I created a simple solution for switching automatically from service to exe and from ddx wo wgc (and viceversa) here:
#2149

@karasuhebi

Copy link
Copy Markdown
Contributor

Is there any other benefits to this capture method?

c2vi pushed a commit to c2vi/Sunshine that referenced this pull request Mar 27, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Xbox Game Bar doesn't show up in the stream

7 participants

@tez011@ReenigneArcher@Kobain-Seo@PieroPontra@WXZhao7@roob0@karasuhebi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(win): new capture method, Windows.Graphics.Capture - #2580

Merged
ReenigneArcher merged 12 commits into
LizardByte:masterfrom
tez011:winrt-capture
May 27, 2024
Merged

feat(win): new capture method, Windows.Graphics.Capture #2580
ReenigneArcher merged 12 commits into
LizardByte:masterfrom
tez011:winrt-capture

Conversation

@tez011

Copy link
Copy Markdown
Contributor

Description

This adds a capture backend on Windows that uses the Windows.Graphics.Capture API. This is a more recent API that's capable of capturing the Xbox Game Bar, which the DXGI Desktop Duplication API seemingly cannot do.

This pull request depends on C++20 compiler support (for the Microsoft WinRT headers, which define this API) as well as Universal CRT runtime support. These have already been integrated into Sunshine in #2322 and #2323.

See also #2149.

Issues Fixed or Closed

Fixes#832 (manually verified)

Screenshot

Issues Fixed or Closed

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Dependency update (updates to dependencies)
  • Documentation update (changes to documentation)
  • Repository update (changes to repository files, e.g. .github/...)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated the in code docstring/documentation-blocks for new or existing methods/components

Branch Updates

LizardByte requires that branches be up-to-date before merging. This means that after any PR is merged, this branch
must be updated before it can be merged. You must also
Allow edits from maintainers.

  • I want maintainers to keep my branch updated

@tez011

Copy link
Copy Markdown
ContributorAuthor

Right now, this pull request does not contain changes to support Sunshine's service model.
Linking #2149 (comment) for context.

Comment thread.github/workflows/CI.yml
Comment threadsrc_assets/common/assets/web/configs/tabs/Advanced.vue Outdated
Comment threadsrc_assets/common/assets/web/configs/tabs/Advanced.vue
Comment thread.codeql-prebuild-cpp-Windows.sh
@codecov

codecovBot commented May 26, 2024

Copy link
Copy Markdown

Codecov Report

Attention: Patch coverage is 7.39300% with 238 lines in your changes missing coverage. Please review.

Project coverage is 6.86%. Comparing base (2d706d3) to head (f77eb15).
Report is 153 commits behind head on master.

FilesPatch %Lines
src/platform/windows/display_wgc.cpp4.63%138 Missing and 6 partials ⚠️
src/platform/windows/display_base.cpp12.69%47 Missing and 8 partials ⚠️
src/platform/windows/display_vram.cpp7.89%33 Missing and 2 partials ⚠️
src/platform/windows/display_ram.cpp20.00%3 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## master #2580 +/- ##
=========================================
- Coverage 7.03% 6.86% -0.17% 
=========================================
Files 87 88 +1 Lines 17698 17899 +201 Branches 8407 8514 +107 =========================================
- Hits 1245 1229 -16 - Misses 13717 14012 +295 + Partials 2736 2658 -78 
FlagCoverage Δ
Linux5.35% <ø> (ø)
Windows2.62% <7.39%> (+0.06%)⬆️
macOS-128.05% <ø> (ø)
macOS-137.98% <ø> (+0.01%)⬆️
macOS-14?

Flags with carried forward coverage won't be shown. Click here to find out more.

FilesCoverage Δ
src/platform/windows/display.h7.14% <ø> (-2.58%)⬇️
src/platform/windows/display_ram.cpp0.99% <20.00%> (-0.02%)⬇️
src/platform/windows/display_vram.cpp1.87% <7.89%> (+0.28%)⬆️
src/platform/windows/display_base.cpp12.50% <12.69%> (+0.62%)⬆️
src/platform/windows/display_wgc.cpp4.63% <4.63%> (ø)

... and 29 files with indirect coverage changes

@ReenigneArcher

Copy link
Copy Markdown
Member

I've quickly tested this locally.

  • CPU usage is < 4% while streaming with either capture method.
  • RAM usage is < 5mb while streaming with either capture method.
  • Can't use the new capture method when running it as a service, which I suppose is expected for now.
  • Can start Sunshine from start menu shortcut.

#2320

Was there anything else broken when we tried to merge this before?

@tez011

Copy link
Copy Markdown
ContributorAuthor

I seem to remember a couple other things:

  • Configuration UI comes up no slower than usual (was previously broken due to regex)
  • HDR may still not work (I don't have hardware capable of testing that)

@ReenigneArcher

Copy link
Copy Markdown
Member

@tez011

UI seems to be coming up quickly for me.

HDR may still not work (I don't have hardware capable of testing that)

This was just with the new capture method, correct? The old one is unaffected?

@tez011

Copy link
Copy Markdown
ContributorAuthor

HDR may still not work (I don't have hardware capable of testing that)

This was just with the new capture method, correct? The old one is unaffected?

Yes. I could never reproduce it, but I recall this discussion from the old pull request. #2149 (comment)

@ReenigneArcher

Copy link
Copy Markdown
Member

Alright, this will be merged soon. Thank you.

@ReenigneArcher
ReenigneArcher enabled auto-merge (squash) May 27, 2024 17:10
@ReenigneArcher
ReenigneArcher merged commit 287ac4c into LizardByte:masterMay 27, 2024
@HazerHazer mentioned this pull request May 30, 2024
11 tasks
KuleRucket pushed a commit to KuleRucket/Sunshine that referenced this pull request Jun 6, 2024
@Kobain-Seo

Kobain-Seo commented Jun 20, 2024

Copy link
Copy Markdown

When i enabled this option, sunshine fails to start.

Logs:

[2024-06-20 14:24:29.019908] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.021147] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.022127] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.023114] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[capture] -- [wgc]
[encoder] -- [nvenc]
[qp] -- [0]
[nvenc_twopass] -- [full_res]
[fec_percentage] -- [0]
[controller] -- [disabled]
[native_pen_touch] -- [disabled]
[nvenc_vbv_increase] -- [40]
[2024-06-20 14:24:29.024813] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.025803] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Info: Sunshine version: v2024.620.13611
[2024:06:20:14:24:29]: Info: nvprefs: Opened undo file from previous improper termination
[2024:06:20:14:24:29]: Info: nvprefs: Restored OGL_CPL_PREFER_DXPRESENT for base profile
[2024:06:20:14:24:29]: Info: nvprefs: Restored global profile settings from undo file - deleting the file
[2024:06:20:14:24:29]: Info: nvprefs: No need to modify application profile settings
[2024:06:20:14:24:29]: Info: nvprefs: Changed OGL_CPL_PREFER_DXPRESENT to OGL_CPL_PREFER_DXPRESENT_PREFER_ENABLED for base profile
[2024:06:20:14:24:29]: Info: Compiling shaders...
[2024:06:20:14:24:29]: Info: System tray created
[2024:06:20:14:24:29]: Info: Compiled shaders
[2024:06:20:14:24:29]: Warning: Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Warning: Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Warning: No gamepad input is available
[2024:06:20:14:24:29]: Info: Trying encoder [nvenc]
[2024:06:20:14:24:29]: Info: ddprobe.exe [1] [] returned: 0x00000000
[2024:06:20:14:24:29]: Info: Set GPU preference: 1
[2024:06:20:14:24:29]: Info:
Device Description : NVIDIA GeForce RTX 3060
Device Vendor ID : 0x000010DE
Device Device ID : 0x00002504
Device Video Mem : 12115 MiB
Device Sys Mem : 0 MiB
Share Sys Mem : 8113 MiB
Feature Level : 0x0000B100
Capture size : 1920x1080
Offset : 0x0
Virtual Desktop : 1920x1080
[2024:06:20:14:24:29]: Info: Active GPU has HAGS enabled
[2024:06:20:14:24:29]: Info: Using realtime GPU priority
[2024:06:20:14:24:29]: Info:
Colorspace : DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709
Bits Per Color : 8
Red Primary : [0.639648,0.330078]
Green Primary : [0.299805,0.599609]
Blue Primary : [0.149414,0.0595703]
White Point : [0.3125,0.329102]
Min Luminance : 0.5 nits
Max Luminance : 270 nits
Max Full Luminance : 270 nits

@ReenigneArcher

Copy link
Copy Markdown
Member

You have to disable the service and start Sunshine manually.

Black-Seraph added a commit to DuoStream/Sunshine that referenced this pull request Jun 27, 2024
@Kobain-Seo

Copy link
Copy Markdown

You have to disable the service and start Sunshine manually.

I think it is not relevant to running manually. I tested it on Windows 10 22H2 and sunshine failed to run, and It worked on Windows 11 22H2. Is it normal it does not work on Windows 10 ?

@tez011

Copy link
Copy Markdown
ContributorAuthor

Yes, that’s expected. This API is quite new.

@Kobain-Seo

Copy link
Copy Markdown

after patched #2825, It works on Windows 10, but have to be run manually, not by service.

@ReenigneArcher

Copy link
Copy Markdown
Member

after patched #2825, It works on Windows 10, but have to be run manually, not by service.

For now, that's expected.

@PieroPontra

Copy link
Copy Markdown

Latest version of Win11 but the new beta WinGraphicsCapture that I switched to manually in configs says it can't find any encoder or display attached. I already tried to manually enter names from dxci command but same results, any hints?

@WXZhao7

Copy link
Copy Markdown

I noticed from #2149 (comment) that WGC should be able to capture the UAC secure desktop. I have tested several pre-release versions, including v2024.714.230159. Unfortunately, Moonlight lose control when the UAC window pops up.
Is the capture of UAC prompts by WGC still incomplete, or is it not planned for implementation?

@roob0

Copy link
Copy Markdown

@PieroPontra You have to close the service and launch Sunshine from the exe, but so you can't stream the lockscreen. However, I created a simple solution for switching automatically from service to exe and from ddx wo wgc (and viceversa) here:
#2149

@karasuhebi

Copy link
Copy Markdown
Contributor

Is there any other benefits to this capture method?

c2vi pushed a commit to c2vi/Sunshine that referenced this pull request Mar 27, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Xbox Game Bar doesn't show up in the stream

7 participants

@tez011@ReenigneArcher@Kobain-Seo@PieroPontra@WXZhao7@roob0@karasuhebi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(win): new capture method, Windows.Graphics.Capture - #2580

Merged
ReenigneArcher merged 12 commits into
LizardByte:masterfrom
tez011:winrt-capture
May 27, 2024
Merged

feat(win): new capture method, Windows.Graphics.Capture #2580
ReenigneArcher merged 12 commits into
LizardByte:masterfrom
tez011:winrt-capture

Conversation

@tez011

Copy link
Copy Markdown
Contributor

Description

This adds a capture backend on Windows that uses the Windows.Graphics.Capture API. This is a more recent API that's capable of capturing the Xbox Game Bar, which the DXGI Desktop Duplication API seemingly cannot do.

This pull request depends on C++20 compiler support (for the Microsoft WinRT headers, which define this API) as well as Universal CRT runtime support. These have already been integrated into Sunshine in #2322 and #2323.

See also #2149.

Issues Fixed or Closed

Fixes#832 (manually verified)

Screenshot

Issues Fixed or Closed

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Dependency update (updates to dependencies)
  • Documentation update (changes to documentation)
  • Repository update (changes to repository files, e.g. .github/...)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated the in code docstring/documentation-blocks for new or existing methods/components

Branch Updates

LizardByte requires that branches be up-to-date before merging. This means that after any PR is merged, this branch
must be updated before it can be merged. You must also
Allow edits from maintainers.

  • I want maintainers to keep my branch updated

@tez011

Copy link
Copy Markdown
ContributorAuthor

Right now, this pull request does not contain changes to support Sunshine's service model.
Linking #2149 (comment) for context.

Comment thread.github/workflows/CI.yml
Comment threadsrc_assets/common/assets/web/configs/tabs/Advanced.vue Outdated
Comment threadsrc_assets/common/assets/web/configs/tabs/Advanced.vue
Comment thread.codeql-prebuild-cpp-Windows.sh
@codecov

codecovBot commented May 26, 2024

Copy link
Copy Markdown

Codecov Report

Attention: Patch coverage is 7.39300% with 238 lines in your changes missing coverage. Please review.

Project coverage is 6.86%. Comparing base (2d706d3) to head (f77eb15).
Report is 153 commits behind head on master.

FilesPatch %Lines
src/platform/windows/display_wgc.cpp4.63%138 Missing and 6 partials ⚠️
src/platform/windows/display_base.cpp12.69%47 Missing and 8 partials ⚠️
src/platform/windows/display_vram.cpp7.89%33 Missing and 2 partials ⚠️
src/platform/windows/display_ram.cpp20.00%3 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## master #2580 +/- ##
=========================================
- Coverage 7.03% 6.86% -0.17% 
=========================================
Files 87 88 +1 Lines 17698 17899 +201 Branches 8407 8514 +107 =========================================
- Hits 1245 1229 -16 - Misses 13717 14012 +295 + Partials 2736 2658 -78 
FlagCoverage Δ
Linux5.35% <ø> (ø)
Windows2.62% <7.39%> (+0.06%)⬆️
macOS-128.05% <ø> (ø)
macOS-137.98% <ø> (+0.01%)⬆️
macOS-14?

Flags with carried forward coverage won't be shown. Click here to find out more.

FilesCoverage Δ
src/platform/windows/display.h7.14% <ø> (-2.58%)⬇️
src/platform/windows/display_ram.cpp0.99% <20.00%> (-0.02%)⬇️
src/platform/windows/display_vram.cpp1.87% <7.89%> (+0.28%)⬆️
src/platform/windows/display_base.cpp12.50% <12.69%> (+0.62%)⬆️
src/platform/windows/display_wgc.cpp4.63% <4.63%> (ø)

... and 29 files with indirect coverage changes

@ReenigneArcher

Copy link
Copy Markdown
Member

I've quickly tested this locally.

  • CPU usage is < 4% while streaming with either capture method.
  • RAM usage is < 5mb while streaming with either capture method.
  • Can't use the new capture method when running it as a service, which I suppose is expected for now.
  • Can start Sunshine from start menu shortcut.

#2320

Was there anything else broken when we tried to merge this before?

@tez011

Copy link
Copy Markdown
ContributorAuthor

I seem to remember a couple other things:

  • Configuration UI comes up no slower than usual (was previously broken due to regex)
  • HDR may still not work (I don't have hardware capable of testing that)

@ReenigneArcher

Copy link
Copy Markdown
Member

@tez011

UI seems to be coming up quickly for me.

HDR may still not work (I don't have hardware capable of testing that)

This was just with the new capture method, correct? The old one is unaffected?

@tez011

Copy link
Copy Markdown
ContributorAuthor

HDR may still not work (I don't have hardware capable of testing that)

This was just with the new capture method, correct? The old one is unaffected?

Yes. I could never reproduce it, but I recall this discussion from the old pull request. #2149 (comment)

@ReenigneArcher

Copy link
Copy Markdown
Member

Alright, this will be merged soon. Thank you.

@ReenigneArcher
ReenigneArcher enabled auto-merge (squash) May 27, 2024 17:10
@ReenigneArcher
ReenigneArcher merged commit 287ac4c into LizardByte:masterMay 27, 2024
@HazerHazer mentioned this pull request May 30, 2024
11 tasks
KuleRucket pushed a commit to KuleRucket/Sunshine that referenced this pull request Jun 6, 2024
@Kobain-Seo

Kobain-Seo commented Jun 20, 2024

Copy link
Copy Markdown

When i enabled this option, sunshine fails to start.

Logs:

[2024-06-20 14:24:29.019908] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.021147] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.022127] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.023114] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[capture] -- [wgc]
[encoder] -- [nvenc]
[qp] -- [0]
[nvenc_twopass] -- [full_res]
[fec_percentage] -- [0]
[controller] -- [disabled]
[native_pen_touch] -- [disabled]
[nvenc_vbv_increase] -- [40]
[2024-06-20 14:24:29.024813] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.025803] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Info: Sunshine version: v2024.620.13611
[2024:06:20:14:24:29]: Info: nvprefs: Opened undo file from previous improper termination
[2024:06:20:14:24:29]: Info: nvprefs: Restored OGL_CPL_PREFER_DXPRESENT for base profile
[2024:06:20:14:24:29]: Info: nvprefs: Restored global profile settings from undo file - deleting the file
[2024:06:20:14:24:29]: Info: nvprefs: No need to modify application profile settings
[2024:06:20:14:24:29]: Info: nvprefs: Changed OGL_CPL_PREFER_DXPRESENT to OGL_CPL_PREFER_DXPRESENT_PREFER_ENABLED for base profile
[2024:06:20:14:24:29]: Info: Compiling shaders...
[2024:06:20:14:24:29]: Info: System tray created
[2024:06:20:14:24:29]: Info: Compiled shaders
[2024:06:20:14:24:29]: Warning: Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Warning: Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Warning: No gamepad input is available
[2024:06:20:14:24:29]: Info: Trying encoder [nvenc]
[2024:06:20:14:24:29]: Info: ddprobe.exe [1] [] returned: 0x00000000
[2024:06:20:14:24:29]: Info: Set GPU preference: 1
[2024:06:20:14:24:29]: Info:
Device Description : NVIDIA GeForce RTX 3060
Device Vendor ID : 0x000010DE
Device Device ID : 0x00002504
Device Video Mem : 12115 MiB
Device Sys Mem : 0 MiB
Share Sys Mem : 8113 MiB
Feature Level : 0x0000B100
Capture size : 1920x1080
Offset : 0x0
Virtual Desktop : 1920x1080
[2024:06:20:14:24:29]: Info: Active GPU has HAGS enabled
[2024:06:20:14:24:29]: Info: Using realtime GPU priority
[2024:06:20:14:24:29]: Info:
Colorspace : DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709
Bits Per Color : 8
Red Primary : [0.639648,0.330078]
Green Primary : [0.299805,0.599609]
Blue Primary : [0.149414,0.0595703]
White Point : [0.3125,0.329102]
Min Luminance : 0.5 nits
Max Luminance : 270 nits
Max Full Luminance : 270 nits

@ReenigneArcher

Copy link
Copy Markdown
Member

You have to disable the service and start Sunshine manually.

Black-Seraph added a commit to DuoStream/Sunshine that referenced this pull request Jun 27, 2024
@Kobain-Seo

Copy link
Copy Markdown

You have to disable the service and start Sunshine manually.

I think it is not relevant to running manually. I tested it on Windows 10 22H2 and sunshine failed to run, and It worked on Windows 11 22H2. Is it normal it does not work on Windows 10 ?

@tez011

Copy link
Copy Markdown
ContributorAuthor

Yes, that’s expected. This API is quite new.

@Kobain-Seo

Copy link
Copy Markdown

after patched #2825, It works on Windows 10, but have to be run manually, not by service.

@ReenigneArcher

Copy link
Copy Markdown
Member

after patched #2825, It works on Windows 10, but have to be run manually, not by service.

For now, that's expected.

@PieroPontra

Copy link
Copy Markdown

Latest version of Win11 but the new beta WinGraphicsCapture that I switched to manually in configs says it can't find any encoder or display attached. I already tried to manually enter names from dxci command but same results, any hints?

@WXZhao7

Copy link
Copy Markdown

I noticed from #2149 (comment) that WGC should be able to capture the UAC secure desktop. I have tested several pre-release versions, including v2024.714.230159. Unfortunately, Moonlight lose control when the UAC window pops up.
Is the capture of UAC prompts by WGC still incomplete, or is it not planned for implementation?

@roob0

Copy link
Copy Markdown

@PieroPontra You have to close the service and launch Sunshine from the exe, but so you can't stream the lockscreen. However, I created a simple solution for switching automatically from service to exe and from ddx wo wgc (and viceversa) here:
#2149

@karasuhebi

Copy link
Copy Markdown
Contributor

Is there any other benefits to this capture method?

c2vi pushed a commit to c2vi/Sunshine that referenced this pull request Mar 27, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Xbox Game Bar doesn't show up in the stream

7 participants

@tez011@ReenigneArcher@Kobain-Seo@PieroPontra@WXZhao7@roob0@karasuhebi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(win): new capture method, Windows.Graphics.Capture - #2580

Merged
ReenigneArcher merged 12 commits into
LizardByte:masterfrom
tez011:winrt-capture
May 27, 2024
Merged

feat(win): new capture method, Windows.Graphics.Capture #2580
ReenigneArcher merged 12 commits into
LizardByte:masterfrom
tez011:winrt-capture

Conversation

@tez011

Copy link
Copy Markdown
Contributor

Description

This adds a capture backend on Windows that uses the Windows.Graphics.Capture API. This is a more recent API that's capable of capturing the Xbox Game Bar, which the DXGI Desktop Duplication API seemingly cannot do.

This pull request depends on C++20 compiler support (for the Microsoft WinRT headers, which define this API) as well as Universal CRT runtime support. These have already been integrated into Sunshine in #2322 and #2323.

See also #2149.

Issues Fixed or Closed

Fixes#832 (manually verified)

Screenshot

Issues Fixed or Closed

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Dependency update (updates to dependencies)
  • Documentation update (changes to documentation)
  • Repository update (changes to repository files, e.g. .github/...)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated the in code docstring/documentation-blocks for new or existing methods/components

Branch Updates

LizardByte requires that branches be up-to-date before merging. This means that after any PR is merged, this branch
must be updated before it can be merged. You must also
Allow edits from maintainers.

  • I want maintainers to keep my branch updated

@tez011

Copy link
Copy Markdown
ContributorAuthor

Right now, this pull request does not contain changes to support Sunshine's service model.
Linking #2149 (comment) for context.

Comment thread.github/workflows/CI.yml
Comment threadsrc_assets/common/assets/web/configs/tabs/Advanced.vue Outdated
Comment threadsrc_assets/common/assets/web/configs/tabs/Advanced.vue
Comment thread.codeql-prebuild-cpp-Windows.sh
@codecov

codecovBot commented May 26, 2024

Copy link
Copy Markdown

Codecov Report

Attention: Patch coverage is 7.39300% with 238 lines in your changes missing coverage. Please review.

Project coverage is 6.86%. Comparing base (2d706d3) to head (f77eb15).
Report is 153 commits behind head on master.

FilesPatch %Lines
src/platform/windows/display_wgc.cpp4.63%138 Missing and 6 partials ⚠️
src/platform/windows/display_base.cpp12.69%47 Missing and 8 partials ⚠️
src/platform/windows/display_vram.cpp7.89%33 Missing and 2 partials ⚠️
src/platform/windows/display_ram.cpp20.00%3 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## master #2580 +/- ##
=========================================
- Coverage 7.03% 6.86% -0.17% 
=========================================
Files 87 88 +1 Lines 17698 17899 +201 Branches 8407 8514 +107 =========================================
- Hits 1245 1229 -16 - Misses 13717 14012 +295 + Partials 2736 2658 -78 
FlagCoverage Δ
Linux5.35% <ø> (ø)
Windows2.62% <7.39%> (+0.06%)⬆️
macOS-128.05% <ø> (ø)
macOS-137.98% <ø> (+0.01%)⬆️
macOS-14?

Flags with carried forward coverage won't be shown. Click here to find out more.

FilesCoverage Δ
src/platform/windows/display.h7.14% <ø> (-2.58%)⬇️
src/platform/windows/display_ram.cpp0.99% <20.00%> (-0.02%)⬇️
src/platform/windows/display_vram.cpp1.87% <7.89%> (+0.28%)⬆️
src/platform/windows/display_base.cpp12.50% <12.69%> (+0.62%)⬆️
src/platform/windows/display_wgc.cpp4.63% <4.63%> (ø)

... and 29 files with indirect coverage changes

@ReenigneArcher

Copy link
Copy Markdown
Member

I've quickly tested this locally.

  • CPU usage is < 4% while streaming with either capture method.
  • RAM usage is < 5mb while streaming with either capture method.
  • Can't use the new capture method when running it as a service, which I suppose is expected for now.
  • Can start Sunshine from start menu shortcut.

#2320

Was there anything else broken when we tried to merge this before?

@tez011

Copy link
Copy Markdown
ContributorAuthor

I seem to remember a couple other things:

  • Configuration UI comes up no slower than usual (was previously broken due to regex)
  • HDR may still not work (I don't have hardware capable of testing that)

@ReenigneArcher

Copy link
Copy Markdown
Member

@tez011

UI seems to be coming up quickly for me.

HDR may still not work (I don't have hardware capable of testing that)

This was just with the new capture method, correct? The old one is unaffected?

@tez011

Copy link
Copy Markdown
ContributorAuthor

HDR may still not work (I don't have hardware capable of testing that)

This was just with the new capture method, correct? The old one is unaffected?

Yes. I could never reproduce it, but I recall this discussion from the old pull request. #2149 (comment)

@ReenigneArcher

Copy link
Copy Markdown
Member

Alright, this will be merged soon. Thank you.

@ReenigneArcher
ReenigneArcher enabled auto-merge (squash) May 27, 2024 17:10
@ReenigneArcher
ReenigneArcher merged commit 287ac4c into LizardByte:masterMay 27, 2024
@HazerHazer mentioned this pull request May 30, 2024
11 tasks
KuleRucket pushed a commit to KuleRucket/Sunshine that referenced this pull request Jun 6, 2024
@Kobain-Seo

Kobain-Seo commented Jun 20, 2024

Copy link
Copy Markdown

When i enabled this option, sunshine fails to start.

Logs:

[2024-06-20 14:24:29.019908] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.021147] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.022127] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.023114] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[capture] -- [wgc]
[encoder] -- [nvenc]
[qp] -- [0]
[nvenc_twopass] -- [full_res]
[fec_percentage] -- [0]
[controller] -- [disabled]
[native_pen_touch] -- [disabled]
[nvenc_vbv_increase] -- [40]
[2024-06-20 14:24:29.024813] [0x00002e0c] [info] Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024-06-20 14:24:29.025803] [0x00002e0c] [info] Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Info: Sunshine version: v2024.620.13611
[2024:06:20:14:24:29]: Info: nvprefs: Opened undo file from previous improper termination
[2024:06:20:14:24:29]: Info: nvprefs: Restored OGL_CPL_PREFER_DXPRESENT for base profile
[2024:06:20:14:24:29]: Info: nvprefs: Restored global profile settings from undo file - deleting the file
[2024:06:20:14:24:29]: Info: nvprefs: No need to modify application profile settings
[2024:06:20:14:24:29]: Info: nvprefs: Changed OGL_CPL_PREFER_DXPRESENT to OGL_CPL_PREFER_DXPRESENT_PREFER_ENABLED for base profile
[2024:06:20:14:24:29]: Info: Compiling shaders...
[2024:06:20:14:24:29]: Info: System tray created
[2024:06:20:14:24:29]: Info: Compiled shaders
[2024:06:20:14:24:29]: Warning: Gamepad x360 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Warning: Gamepad ds4 is disabled due to gamepads.vigem-not-available
[2024:06:20:14:24:29]: Warning: No gamepad input is available
[2024:06:20:14:24:29]: Info: Trying encoder [nvenc]
[2024:06:20:14:24:29]: Info: ddprobe.exe [1] [] returned: 0x00000000
[2024:06:20:14:24:29]: Info: Set GPU preference: 1
[2024:06:20:14:24:29]: Info:
Device Description : NVIDIA GeForce RTX 3060
Device Vendor ID : 0x000010DE
Device Device ID : 0x00002504
Device Video Mem : 12115 MiB
Device Sys Mem : 0 MiB
Share Sys Mem : 8113 MiB
Feature Level : 0x0000B100
Capture size : 1920x1080
Offset : 0x0
Virtual Desktop : 1920x1080
[2024:06:20:14:24:29]: Info: Active GPU has HAGS enabled
[2024:06:20:14:24:29]: Info: Using realtime GPU priority
[2024:06:20:14:24:29]: Info:
Colorspace : DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709
Bits Per Color : 8
Red Primary : [0.639648,0.330078]
Green Primary : [0.299805,0.599609]
Blue Primary : [0.149414,0.0595703]
White Point : [0.3125,0.329102]
Min Luminance : 0.5 nits
Max Luminance : 270 nits
Max Full Luminance : 270 nits

@ReenigneArcher

Copy link
Copy Markdown
Member

You have to disable the service and start Sunshine manually.

Black-Seraph added a commit to DuoStream/Sunshine that referenced this pull request Jun 27, 2024
@Kobain-Seo

Copy link
Copy Markdown

You have to disable the service and start Sunshine manually.

I think it is not relevant to running manually. I tested it on Windows 10 22H2 and sunshine failed to run, and It worked on Windows 11 22H2. Is it normal it does not work on Windows 10 ?

@tez011

Copy link
Copy Markdown
ContributorAuthor

Yes, that’s expected. This API is quite new.

@Kobain-Seo

Copy link
Copy Markdown

after patched #2825, It works on Windows 10, but have to be run manually, not by service.

@ReenigneArcher

Copy link
Copy Markdown
Member

after patched #2825, It works on Windows 10, but have to be run manually, not by service.

For now, that's expected.

@PieroPontra

Copy link
Copy Markdown

Latest version of Win11 but the new beta WinGraphicsCapture that I switched to manually in configs says it can't find any encoder or display attached. I already tried to manually enter names from dxci command but same results, any hints?

@WXZhao7

Copy link
Copy Markdown

I noticed from #2149 (comment) that WGC should be able to capture the UAC secure desktop. I have tested several pre-release versions, including v2024.714.230159. Unfortunately, Moonlight lose control when the UAC window pops up.
Is the capture of UAC prompts by WGC still incomplete, or is it not planned for implementation?

@roob0

Copy link
Copy Markdown

@PieroPontra You have to close the service and launch Sunshine from the exe, but so you can't stream the lockscreen. However, I created a simple solution for switching automatically from service to exe and from ddx wo wgc (and viceversa) here:
#2149

@karasuhebi

Copy link
Copy Markdown
Contributor

Is there any other benefits to this capture method?

c2vi pushed a commit to c2vi/Sunshine that referenced this pull request Mar 27, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Xbox Game Bar doesn't show up in the stream

7 participants

@tez011@ReenigneArcher@Kobain-Seo@PieroPontra@WXZhao7@roob0@karasuhebi