Browse Source

dxgi_fmt: add a helper function to detect the Xbox One

Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
pull/53/head
Steve Lhomme 10 years ago
committed by Jean-Baptiste Kempf
parent
commit
8580081fde
  1. 43
      modules/video_chroma/dxgi_fmt.c
  2. 5
      modules/video_chroma/dxgi_fmt.h

43
modules/video_chroma/dxgi_fmt.c

@ -24,9 +24,14 @@
# include "config.h"
#endif
#include "dxgi_fmt.h"
#include <vlc_es.h>
#define COBJMACROS
#include <initguid.h>
#include <d3d11.h>
#include "dxgi_fmt.h"
typedef struct
{
const char *name;
@ -119,3 +124,39 @@ void DxgiFormatMask(DXGI_FORMAT format, video_format_t *fmt)
fmt->i_bmask = 0xff000000;
}
}
IDXGIAdapter *D3D11DeviceAdapter(ID3D11Device *d3ddev)
{
IDXGIDevice *pDXGIDevice = NULL;
HRESULT hr = ID3D11Device_QueryInterface(d3ddev, &IID_IDXGIDevice, (void **)&pDXGIDevice);
if (FAILED(hr)) {
return NULL;
}
IDXGIAdapter *p_adapter;
hr = IDXGIDevice_GetAdapter(pDXGIDevice, &p_adapter);
IDXGIDevice_Release(pDXGIDevice);
if (FAILED(hr)) {
return NULL;
}
return p_adapter;
}
bool isXboxHardware(ID3D11Device *d3ddev)
{
IDXGIAdapter *p_adapter = D3D11DeviceAdapter(d3ddev);
if (!p_adapter)
return NULL;
bool result = false;
DXGI_ADAPTER_DESC adapterDesc;
if (SUCCEEDED(IDXGIAdapter_GetDesc(p_adapter, &adapterDesc))) {
if (adapterDesc.VendorId == 0 &&
adapterDesc.DeviceId == 0 &&
!wcscmp(L"ROOT\\SraKmd\\0000", adapterDesc.Description))
result = true;
}
IDXGIAdapter_Release(p_adapter);
return result;
}

5
modules/video_chroma/dxgi_fmt.h

@ -23,6 +23,7 @@
#ifndef VLC_VIDEOCHROMA_DXGI_FMT_H_
#define VLC_VIDEOCHROMA_DXGI_FMT_H_
#include <dxgi.h>
#include <dxgiformat.h>
#include <vlc_common.h>
@ -45,4 +46,8 @@ extern vlc_fourcc_t DxgiFormatFourcc(DXGI_FORMAT format);
extern const d3d_format_t *GetRenderFormatList(void);
extern void DxgiFormatMask(DXGI_FORMAT format, video_format_t *);
typedef struct ID3D11Device ID3D11Device;
bool isXboxHardware(ID3D11Device *d3ddev);
IDXGIAdapter *D3D11DeviceAdapter(ID3D11Device *d3ddev);
#endif /* include-guard */

Loading…
Cancel
Save