Commit Graph

198 Commits (baa559813c46df666f0208668ea63aa597f516e5)

Author SHA1 Message Date
jpark37 ed91c4e3bc libobs-d3d11: Don't allow volume render targets
Unlikely to be necessary. Disable for simplicity.
2020-01-01 12:40:03 -08:00
Jim 4df9ce0cdf
Merge pull request #2251 from jpark37/lut-volume-texture
Use volume textures for LUT filter
2019-12-29 11:04:20 -08:00
jpark37 b5b6f24d5b libobs-d3d11: Increase the frame queue capacity
Sometimes Present stalls are seen when multiple swap chains are active.
This seems to fix that.
2019-12-19 10:08:21 -08:00
jpark37 8f6984e345 libobs: Add support for volume textures
Also fix some mip calculations along the way.
2019-12-15 14:38:26 -08:00
Jim fa5454d1b8
Merge pull request #2124 from notr1ch/pci-device-ids
Use PCI database IDs instead of string matching for devices
2019-11-22 23:15:55 -08:00
jpark37 1e2542ad6f libobs-d3d11: Fix null input layout rebuild
Don't build input layout without VS inputs. Matches creation logic.
2019-10-17 09:24:13 -07:00
Jim 3e01fdf3e5
Merge pull request #2116 from jpark37/begin-frame
libobs: Add gs_begin_frame for duplicators
2019-10-15 22:23:34 -07:00
Jim 3ccc63c14b
Merge pull request #2090 from jpark37/dxgi-refresh-rate
Log display refresh rates, and monitor names on D3D11
2019-10-15 10:04:49 -07:00
Jim 65e0fee6d0
Merge pull request #2089 from jpark37/dxgi-driver-version
libobs-d3d11: Add GPU driver version to log
2019-10-15 10:03:44 -07:00
Richard Stanway 323638e704 libobs-d3d11: Use vendor ID instead of string match 2019-10-14 23:06:33 +02:00
Jim 6b08c064f6
Merge pull request #2066 from jpark37/feature-level-baseline
Use D3D_FEATURE_LEVEL_10_0 as baseline
2019-10-12 20:55:33 -07:00
Jim 09c7ec487b
Merge pull request #2064 from jpark37/bgra-swap-chain
D3D swap chain enhancements
2019-10-12 20:54:33 -07:00
jp9000 dd48a99f03 libobs-d3d11: Fix code styling 2019-10-11 17:40:50 -07:00
jp9000 0f75f963ad libobs-d3d11: Fix calling convention of loaded func
Because this did not have WINAPI (stdcall) specified as the calling
convention on the gdi32 export, caused a crash due to stack corruption
on the 32bit version of OBS.
2019-10-11 17:21:11 -07:00
jpark37 ade65df2aa libobs: Add gs_begin_frame for duplicators
We really shouldn't be resetting duplicator state as part of gs_flush.
gs_begin_scene is not ideal because it is called twice per frame, and
only after duplicators have been ticked. Even though it makes no
user-facing difference, it makes more logical sense to reset at the top
of the frame than the bottom.
2019-10-10 21:06:01 -07:00
Jim 29ca28418f
Merge pull request #2115 from jpark37/duplicator-ref-count
Fix duplicator ref count
2019-10-10 21:01:16 -07:00
jpark37 471d752d75 libobs-d3d11: Use unordered_map for duplicator collection
Not in love with STL, but lets at least use the semantically-correct
collection. It's also a shame this is a global variable with gross
pre-main allocations, but attaching it to the device instance would
break the interface.
2019-10-10 19:29:15 -07:00
jp9000 b7d094a532 libobs-d3d11: Don't set GPU priority on Intel adapters 2019-10-10 03:03:38 -07:00
jp9000 ec769ef008 libobs-d3d11: Set maximum GPU priority
(This commit also modifies the UI)

This solves the issue where OBS would be deprioritized by Windows over
fullscreen games, causing OBS to lag out whereas the games would still
run fine.
2019-10-10 00:51:47 -07:00
jpark37 84d0fdc576 libobs-d3d11: Disable NV12 format support for WARP
Speculative fix. Don't have easy ability to reproduce this locally.
2019-10-06 20:30:49 -07:00
jpark37 8d36685599 libobs-d3d11: Add GPU driver version to log
DX version string is not the nicest, but no need for IHV library.
2019-10-05 15:03:23 -07:00
jpark37 4b0826cf5d libobs-d3d11: Log monitor names 2019-10-01 20:00:43 -07:00
jpark37 7fd831e705 libobs-d3d11: Log display refresh rates 2019-09-29 16:24:03 -07:00
jpark37 49b32e5e17 libobs-d3d11: Remove "support" for feature level 9.3
Feature Level 9.3 appears to never have actually worked because shaders
are compiled as straight 4_0 instead of 4_0_level_9_3. That being the
case, baseline against 10_0 instead.
2019-09-08 22:41:17 -07:00
jpark37 4da73445c3 graphics: libobs-d3d11: Use DXGI_SWAP_EFFECT_FLIP_DISCARD on Windows 10
This is supposed to eliminate a copy by DWM with extra benefits for
borderless fullsceen, which should help the fullscreen projector.
2019-09-06 19:39:42 -07:00
Jim 997698750e
Merge pull request #2051 from jpark37/d3d11-const-ref
Minor D3D11 cleanup
2019-08-31 21:15:25 -07:00
jp9000 bf41fd5a6b libobs: Add graphics API to get graphics object pointer 2019-08-29 12:43:10 -07:00
jpark37 f8572813b1 libobs-d3d11: Print feature level as %x for readability 2019-08-28 21:11:48 -07:00
jpark37 fe02a8286e libobs-d3d11: Consistent exception catch parameters
Fixed missing references, and stray usages of const references instead
of reference to const types. Apply const correctly where applicable.
2019-08-28 21:10:51 -07:00
Jim ce51fa092c
Merge pull request #1992 from Xaymar/patch-tidy-up-1
Fix various clang-tidy and CppCheck warnings.
2019-08-17 08:16:46 -07:00
jpark37 06e01a00ab libobs-d3d11: Disable NV12 usage for Intel
NV12 GPU copies to staging textures for CPU read take a ridiculously
long time on my integrated Intel GPU. Using R8/R8G8 instead seems to be
a huge speed-up.

Intel HD Graphics 530, D3D11 query timings, SetStablePowerState

NV12: ~3268 us (minimum of wild timings)
R8/R8G8: ~781 us (most frequently occurring timing)
2019-08-15 23:02:21 -07:00
jpark37 0e12d8189c libobs: Add GPU timestamp query support
This change only wraps the functionality. I have rough code to exercise
the the query functionality, but that part is not really clean enough to
submit.
2019-07-27 13:31:07 -07:00
Michael Fabian 'Xaymar' Dirks 1154c01266 libobs-d3d11: Catch be reference 2019-07-24 18:26:43 +02:00
Jim 84369f60e4
Merge pull request #1946 from jpark37/ternary-type-conversion
libobs-d3d11: Unnecessary type conversions
2019-07-01 02:37:51 -07:00
Richard Stanway 7f1f97a61f libobs-d3d11: Set texture using initializer list 2019-06-29 01:28:16 +02:00
jpark37 8c4d98195f libobs-d3d11: Unnecessary type conversions
Use raw pointer on both sides of ternary test result to remove
conversions.
2019-06-27 08:55:26 -05:00
Jim c938ea712b
Merge pull request #1935 from obsproject/clang-format
Apply clang-format to the project
2019-06-24 19:41:51 -07:00
Richard Stanway 80e9bb4ec7
libobs-d3d11: Fix missing vertex buffer clear in NV12 check 2019-06-25 00:51:01 +02:00
jp9000 f53df7da64 clang-format: Apply formatting
Code submissions have continually suffered from formatting
inconsistencies that constantly have to be addressed.  Using
clang-format simplifies this by making code formatting more consistent,
and allows automation of the code formatting so that maintainers can
focus more on the code itself instead of code formatting.
2019-06-23 23:49:10 -07:00
James Park aa22b61e3e libobs: Full-screen triangle format conversions
The cache coherency of rasterization for full-screen passes is better
using an oversized triangle that is clipped rather than two triangles.
Traversal order of rasterization is GPU-specific, but will almost
certainly be better using an undivided primitive.

A smaller benefit is that quads along the diagonal are not evaluated
multiple times, but that's minor in comparison.

Redo format shaders to bypass vertex buffer, and input layout. Add
global shader bool "obs_glsl_compile" to make API-specific decisions,
i.e. handle upside-down UVs. gl_ortho is not needed for format
conversion because the vertex shader does not use ViewProj anymore.

This can be applied to more situations, but start small first.

Testbed full screen passes, Intel HD Graphics 530:
RGBA -> UYVX: 467 -> 439 us, ~6% savings
UYVX -> uv: 295 -> 239 us, ~19% savings
2019-06-18 22:29:07 -07:00
James Park bbef13166b libobs-d3d11: Clean up device_projection_pop
Simplify STL usage as requested by function comment.
2019-06-08 09:52:20 -07:00
James Park 6ac21c4bc5 libobs-d3d11: Bad indices in log output
Fix bad logging for LogAdapterMonitors and LogD3DAdapters. Update
EnumD3DAdapters for consistency.
2019-05-22 23:06:00 -07:00
James Park ba21fb947e libobs: Fix various alpha issues
There are cases where alpha is multiplied unnecessarily. This change
attempts to use premultiplied alpha blending for composition.

To keep this change simple, The filter chain will continue to use
straight alpha. Otherwise, every source would need to modified to output
premultiplied, and every filter modified for premultiplied input.

"DrawAlphaDivide" shader techniques have been added to convert from
premultiplied alpha to straight alpha for final output. "DrawMatrix"
techniques ignore alpha, so they do not appear to need changing.

One remaining issue is that scale effects are set up here to use the
same shader logic for both scale filters (straight alpha - incorrectly),
and output composition (premultiplied alpha - correctly). A fix could be
made to add additional shaders for straight alpha, but the "real" fix
may be to eliminate the straight alpha path at some point.

For graphics, SrcBlendAlpha and DestBlendAlpha were both ONE, and could
combine together to form alpha values greater than one. This is not as
noticeable of a problem for UNORM targets because the channels are
clamped, but it will likely become a problem in more situations if FLOAT
targets are used.

This change switches DestBlendAlpha to INVSRCALPHA. The blending
behavior of stacked transparents is preserved without overflowing the
alpha channel.

obs-transitions: Use premultiplied alpha blend, and simplify shaders
because both inputs and outputs use premultiplied alpha now.

Fixes https://obsproject.com/mantis/view.php?id=1108
2019-05-08 20:26:52 -07:00
jp9000 f109d1c2bf Revert "libobs: libobs-d3d11: obs-filters: No excess alpha"
This reverts commit d91bd327d7, which
broke alpha with sources, scenes, and filter, causing them all to become
opaque unintentionally.
2019-04-25 08:36:41 -07:00
Jim f1399b6d18
Merge pull request #1765 from jpark37/blend-alpha
libobs: libobs-d3d11: Fix blend alpha overflow
2019-04-14 00:22:20 -07:00
James Park 2996a6c06b libobs/graphics: Support debug markers
Add support for debug markers via D3DPERF API and KHR_debug. This makes
it easier to understand RenderDoc captures.

D3DPERF is preferred to ID3DUserDefinedAnnotation because it supports
colors. d3d9.lib is now linked in to support this.

This feature is disabled by default, and is controlled by
GS_USE_DEBUG_MARKERS.

From: obsproject/obs-studio#1799
2019-04-08 02:05:37 -07:00
James Park d91bd327d7 libobs: libobs-d3d11: obs-filters: No excess alpha
Currently SrcBlendAlpha and DestBlendAlpha are both ONE, and can
combine together to form two. This is not a noticeable problem for
UNORM targets because the channels are clamped, but it will likely
become a problem if FLOAT targets are more widely used.

This change switches DestBlendAlpha to INVSRCALPHA, and starts
backgrounds as opaque black instead of transparent black. The blending
behavior of stacked transparents is preserved without overflowing the
alpha channel.
2019-04-07 18:16:56 -07:00
jp9000 bb034308d4 libobs-d3d11: Log errors from HasBadNV12Output just in case 2019-03-11 13:42:47 -07:00
jp9000 4aed743a93 libobs-d3d11: Improve NV12 validity check for AMD
On some AMD systems, the test for bad NV12 output would come up negative
(output was good), but when recording/streaming, it would have bad
output.  While the test worked correctly with NVIDIA systems, it did not
work in these cases.  This was because we did not correctly reproduce
the exact conditions of green output because the textures used for the
test were not also keyed mutex shared textures.  This fixes that issue
and ensures the test works correctly in those other niche cases.
2019-03-11 13:42:47 -07:00
jp9000 52eb536b04 libobs-d3d11: Check for bad NV12 output on all devices
Just to be safe, check for bad output on all devices.
2019-03-04 15:40:53 -08:00