// Copyright 2013 Dolphin Emulator Project // Licensed under GPLv2 // Refer to the license.txt file included. #pragma once #include #include #include #include #include "Common/Common.h" namespace DX11 { #define SAFE_RELEASE(x) { if (x) (x)->Release(); (x) = NULL; } #define SAFE_DELETE(x) { delete (x); (x) = NULL; } #define SAFE_DELETE_ARRAY(x) { delete[] (x); (x) = NULL; } #define CHECK(cond, Message, ...) if (!(cond)) { PanicAlert(__FUNCTION__ "Failed in %s at line %d: " Message, __FILE__, __LINE__, __VA_ARGS__); } class D3DTexture2D; namespace D3D { HRESULT LoadDXGI(); HRESULT LoadD3D(); HRESULT LoadD3DCompiler(); void UnloadDXGI(); void UnloadD3D(); void UnloadD3DCompiler(); D3D_FEATURE_LEVEL GetFeatureLevel(IDXGIAdapter* adapter); std::vector EnumAAModes(IDXGIAdapter* adapter); DXGI_SAMPLE_DESC GetAAMode(int index); HRESULT Create(HWND wnd); void Close(); extern ID3D11Device* device; extern ID3D11DeviceContext* context; extern IDXGISwapChain* swapchain; extern bool bFrameInProgress; void Reset(); bool BeginFrame(); void EndFrame(); void Present(); unsigned int GetBackBufferWidth(); unsigned int GetBackBufferHeight(); D3DTexture2D* &GetBackBuffer(); const char* PixelShaderVersionString(); const char* GeometryShaderVersionString(); const char* VertexShaderVersionString(); bool BGRATexturesSupported(); unsigned int GetMaxTextureSize(); // Ihis function will assign a name to the given resource. // The DirectX debug layer will make it easier to identify resources that way, // e.g. when listing up all resources who have unreleased references. template void SetDebugObjectName(T resource, const char* name) { static_assert(std::is_convertible::value, "resource must be convertible to ID3D11DeviceChild*"); #if defined(_DEBUG) || defined(DEBUGFAST) resource->SetPrivateData(WKPDID_D3DDebugObjectName, (UINT)strlen(name), name); #endif } } // namespace D3D typedef HRESULT (WINAPI *CREATEDXGIFACTORY)(REFIID, void**); extern CREATEDXGIFACTORY PCreateDXGIFactory; typedef HRESULT (WINAPI *D3D11CREATEDEVICE)(IDXGIAdapter*, D3D_DRIVER_TYPE, HMODULE, UINT, CONST D3D_FEATURE_LEVEL*, UINT, UINT, ID3D11Device**, D3D_FEATURE_LEVEL*, ID3D11DeviceContext**); extern D3D11CREATEDEVICE PD3D11CreateDevice; typedef HRESULT (WINAPI *D3DREFLECT)(LPCVOID, SIZE_T, REFIID, void**); extern D3DREFLECT PD3DReflect; extern pD3DCompile PD3DCompile; } // namespace DX11