mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-09-21 04:37:09 +08:00
libobs-d3d11: Log HAGS status
This commit is contained in:
@@ -26,6 +26,7 @@
|
||||
#include <d3d9.h>
|
||||
#include "d3d11-subsystem.hpp"
|
||||
#include <shellscalingapi.h>
|
||||
#include <d3dkmthk.h>
|
||||
|
||||
struct UnsupportedHWError : HRError {
|
||||
inline UnsupportedHWError(const char *str, HRESULT hr)
|
||||
@@ -524,6 +525,44 @@ static bool set_priority(ID3D11Device *device)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
static bool adapter_hags_enabled(DXGI_ADAPTER_DESC *desc)
|
||||
{
|
||||
D3DKMT_OPENADAPTERFROMLUID d3dkmt_openluid{};
|
||||
bool hags_enabled = false;
|
||||
NTSTATUS res;
|
||||
|
||||
d3dkmt_openluid.AdapterLuid = desc->AdapterLuid;
|
||||
|
||||
res = D3DKMTOpenAdapterFromLuid(&d3dkmt_openluid);
|
||||
if (FAILED(res)) {
|
||||
blog(LOG_DEBUG, "Failed opening D3DKMT adapter: %x", res);
|
||||
return hags_enabled;
|
||||
}
|
||||
|
||||
D3DKMT_WDDM_2_7_CAPS caps = {};
|
||||
D3DKMT_QUERYADAPTERINFO args = {};
|
||||
args.hAdapter = d3dkmt_openluid.hAdapter;
|
||||
args.Type = KMTQAITYPE_WDDM_2_7_CAPS;
|
||||
args.pPrivateDriverData = ∩︀
|
||||
args.PrivateDriverDataSize = sizeof(caps);
|
||||
res = D3DKMTQueryAdapterInfo(&args);
|
||||
|
||||
/* On Windows 10 pre-2004 this will fail, but HAGS isn't supported
|
||||
* there anyway. */
|
||||
if (SUCCEEDED(res))
|
||||
hags_enabled = caps.HwSchEnabled;
|
||||
|
||||
D3DKMT_CLOSEADAPTER d3dkmt_close = {d3dkmt_openluid.hAdapter};
|
||||
res = D3DKMTCloseAdapter(&d3dkmt_close);
|
||||
if (FAILED(res)) {
|
||||
blog(LOG_DEBUG, "Failed closing D3DKMT adapter %x: %x",
|
||||
d3dkmt_openluid.hAdapter, res);
|
||||
}
|
||||
|
||||
return hags_enabled;
|
||||
}
|
||||
|
||||
static bool CheckFormat(ID3D11Device *device, DXGI_FORMAT format)
|
||||
{
|
||||
constexpr UINT required = D3D11_FORMAT_SUPPORT_TEXTURE2D |
|
||||
@@ -573,6 +612,13 @@ void gs_device::InitDevice(uint32_t adapterIdx)
|
||||
blog(LOG_INFO, "DXGI increase maximum frame latency failed");
|
||||
}
|
||||
|
||||
/* Log HAGS status */
|
||||
bool hags_enabled = adapter_hags_enabled(&desc);
|
||||
if (hags_enabled) {
|
||||
blog(LOG_WARNING,
|
||||
"Hardware-Accelerated GPU Scheduling enabled on adapter!");
|
||||
}
|
||||
|
||||
/* adjust gpu thread priority on non-intel GPUs */
|
||||
#if USE_GPU_PRIORITY
|
||||
if (desc.VendorId != 0x8086 && !set_priority(device)) {
|
||||
|
||||
Reference in New Issue
Block a user