100 Commits

Author SHA1 Message Date
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
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
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
jp9000
b4c35fab75 libobs-d3d11: Perform actual test for NV12 driver bug
Performs a test on a texture to determine if NV12 textures are
functioning correctly.  Older NVIDIA drivers appear to have a bug where
they will output their UV channel data on to the Y channel when copying
from the GPU.  This test on startup determines whether that bug is
occurring, and if so, disables NV12 texture support.
2019-03-04 14:06:10 -08:00
jp9000
3607eb9b25 libobs-d3d11: Remove NV12 blacklist 2019-03-04 14:05:40 -08:00
jp9000
492f50ee87 libobs-d3d11: Set acquired bool when texture acquired
This is used when the device needs to be rebuilt.  Ensures that the
texture doesn't get locked again if the texture is rebuilt.
2019-03-03 08:39:47 -08:00
jp9000
cea0a1e73a libobs-d3d11: Disable NV12 textures if NVENC unavailable
On NVIDIA devices, disable NV12 textures if NVENC unavailable just as a
safety precaution.
2019-02-26 12:09:00 -08:00
jp9000
ccd801b03e libobs-d3d11: Blacklist certain adapters from NV12
Some older adapters apparently can't handle NV12 properly.  Wonderful.
2019-02-26 08:37:55 -08:00
jp9000
28860411dd libobs-d3d11: Improve check for NV12 texture support
Checks to make sure that DXGI_FORMAT_NV12 is actually supported by the
GPU.
2019-02-25 23:02:54 -08:00
jp9000
86f82c952a libobs-d3d11: Actually use paired NV12 member variable 2019-02-17 17:42:48 -08:00
jp9000
93fc61fa82 libobs/graphics: Add NV12 texture support 2019-02-07 17:00:46 -08:00
jp9000
b64d7d71d0 libobs/graphics: Add texture sharing functions 2019-02-07 17:00:46 -08:00
jp9000
8695be6a34 Revert "libobs-d3d11: Initialize variable to zero"
This reverts commit 671b6032e22fd3f714f7875b7b596a516468fb18.

Closes obsproject/obs-studio#1413
2018-08-07 06:16:59 -07:00
SuslikV
671b6032e2
libobs-d3d11: Initialize variable to zero
Initialize variable (that will be used to change the resource) to zero.
2018-07-31 07:37:12 +02:00
SuslikV
dbfcbac3e4 libobs-d3d11: Do not allow Alt+Enter interception
Prevents Alt-Enter from attempting to automatically fullscreen an OBS
graphics display.

Closes obsproject/obs-studio#1248
2018-04-20 22:34:22 -07:00
Wouter
65f81105f5 libobs-d3d11: Allow multiple display captures of same monitor
This commit fixes a bug that occurs on Windows 8+ when two or more
"Display Capture" sources are active that are configured to capture the
same monitor.  Only one display capture would show, while all subsequent
display captures would display nothing.

Closes jp9000/obs-studio#1142
2018-01-09 19:49:54 -08:00
jp9000
0d6204c8af Fix a number of MSVC warnings
Fixes a number of warnings with all modules
2017-12-05 13:53:44 -08:00
jp9000
c111fa68b8 libobs: Add vertex/index buffer "direct" flush functions
(Note: This commit also modifies libobs-d3d11 and libobs-opengl)

Allows the ability to flush data directly without having to use the
buffer's internal data.

Allows the caller to manage his/her own vertex/index buffer data if
desired, working around the design flaw of having to rely on a
vertex/index buffer's internal data.
2017-11-27 03:00:20 -08:00
Micah Elizabeth Scott
b55bb44845 libobs-d3d11: Fix gs_enable_color
It looks like the link between the gs layer rgba enable flags and the
underlying D3D states never got fully implemented.

This change adds the missing piece, fixing an issue I had in a plugin
wherein I couldn't write a blended value to a RGBA render target without
also changing the alpha of the dest pixel.  Debugging that led to the
missing gs_enable_color functionality.

Closes jp9000/obs-studio#1064
2017-11-25 18:12:52 -08:00
Richard Stanway
58e2e69f81
libobs-d3d11: Better error message for missing D3DCompiler 2017-06-25 22:27:59 +02:00
jp9000
e6f9a73235 libobs-d3d11: Fix bug where vertex buffers would be reset
There's no need to reset vertex buffers like this anymore.  This would
unintentionally cause certain things (such as the freetype text source
on windows) to stop rendering properly.
2017-05-20 19:37:28 -07:00
jp9000
ea6efc9514 libobs-d3d11: Only load vertex buffer before drawing
Fixes a bug where loading vertex shaders could cause error messages
about mismatching vertex buffer data to appear because the vertex shader
would try to reload the previously used vertex buffer.
2017-05-15 23:57:53 -07:00
Ryan Foster
be98cee2a0 Fix various typos across multiple modules 2017-04-25 22:39:42 -04:00
jp9000
d2bb7157c2 libobs-d3d11: Add optional macro to log shader disassembly 2016-11-25 12:01:31 -08:00
jp9000
f6fae9b7e9 libobs-d3d11: Remove possible null pointer dereference 2016-11-06 16:49:02 -08:00
jp9000
8e8834f109 libobs-d3d11: Rebuild device and assets if device removed/reset
Due to an NVIDIA driver bug with the Windows 10 Anniversary Update,
there are an increasingly large number of reports of "Device Removed"
errors and TDRs.  When this happens, OBS stops outputting all data
because all graphics functions are failing, and it appears to just
"freeze up" for users.

To temporarily alleviate this issue while waiting for it to be fixed,
the D3D subsystem can be rebuilt when that happens, all assets can be
reloaded to ensure that it can continue functioning (with a minor hiccup
in playback).

To allow rebuilding the entire D3D subsystem, all objects that contain
D3D references must be part of a linked list (with a few exceptions) so
we can quickly traverse them all whenever needed, and all data for those
resources (static resources primarily, such as shaders, textures, index
buffers, vertex buffers) must be stored in RAM so they can be recreated
whenever needed.

Then if D3D reports a "device removed" or "device reset" error, all D3D
references must first be fully released with no stray references; the
linked list must be fully traversed until all references are released.
Then, the linked list must once again be traversed again, and all those
D3D objects must be recreated with the same data and descriptors (which
are now saved in each object).  Finally, all states need to be reset.

After that's complete, the device is able to continue functioning almost
as it was before, although the output to recording/stream may get a few
green frames due to texture data being reset.

This will temporarily alleviate the "Device Removed" issue while waiting
for a fix from NVIDIA.
2016-11-03 09:23:24 -07:00
jp9000
951c6892b0 libobs-d3d11: Use linked list for all objects (for rebuilding) 2016-11-03 09:23:21 -07:00
jp9000
ecd5b4ee81 libobs-d3d11: Save all D3D11 object descriptors (for rebuilding) 2016-11-03 09:23:19 -07:00
jp9000
e4900751c3 libobs-d3d11: Store device adapter index (for rebuilding) 2016-11-03 09:23:16 -07:00
jp9000
6d18ae39c5 libobs-d3d11: Store swap initialization data (for rebuilding) 2016-11-03 09:23:15 -07:00
jp9000
bc0faf9a3c libobs-d3d11: Clear device state before unloading
Unloads all device data and clears all device references.  Probably not
necessary, but it's unknown how D3D11 handles this internally so
probably best to be safe.
2016-11-03 09:23:14 -07:00
jp9000
75cd6b4ab4 libobs-d3d11: Correct error message creating blend states 2016-11-03 09:23:12 -07:00
jp9000
29eea269fc libobs-d3d11: Store dxgi adapter used for device
Keeping a reference is useful, and additionally allows pruning a bit of
duplicated code in the dupicator object.
2016-11-03 09:23:07 -07:00
Ryan Foster
487ef58ee7 libobs-d3d11: Log GetDeviceRemovedReason
When DirectX throws error 0x887A0005 (DXGI_ERROR_DEVICE_REMOVED),
Microsoft recommends calling ID3D11Device::GetDeviceRemovedReason to
retrieve a more precise error code.

Closes jp9000/obs-studio#652
2016-10-07 01:07:00 -07:00
jp9000
2a99e6ff18 libobs-d3d11: Log monitors/VRAM 2015-12-21 14:19:20 -08:00
jp9000
ccfd57d100 libobs/graphics: Rename inconsistent function names
Renames functions:
gs_shader_setmatrix3 -> gs_shader_set_matrix3
gs_voltexture_getdepth -> gs_voltexture_get_depth
2015-10-21 07:46:43 -07:00
jp9000
2b62c33c16 libobs-d3d11: Use windowless context
(Non-compiling commit: windowless-context branch)
2015-08-05 01:07:15 -07:00
jp9000
cedd894fe7 libobs-d3d11: Make sure current swap is valid 2015-07-30 17:16:24 -07:00
jp9000
be52fa26f9 Add gs_blend_function_separate
This allows the ability to separate the blend states of color and alpha.

The default blend state has also changed so that alpha is always added
together to ensure that the destination image always gets an alpha value
that is actually usable after the operation (for render targets).

Old default state:
  color source: GS_BLEND_SRCALPHA, color dest: GS_BLEND_INVSRCALPHA
  alpha source: GS_BLEND_SRCALPHA, alpha dest: GS_BLEND_INVSRCALPHA

New default state:
  color source: GS_BLEND_SRCALPHA, color dest: GS_BLEND_INVSRCALPHA
  alpha source: GS_BLEND_ONE,      alpha dest: GS_BLEND_ONE
2015-03-27 11:18:02 -07:00
jp9000
e7cca4edd1 libobs-d3d11: Fix incorrect format specifier 2015-02-09 03:56:10 -08:00
jp9000
73c6dca1b5 libobs-d3d11: Fix potentially uninitialized vars 2015-02-09 03:56:10 -08:00
jp9000
f4406e71f4 libobs-d3d11: Use member initialization
Instead of using initializer lists, use member initialization to clean
up the default values for member variables
2015-02-09 03:56:08 -08:00