diff --git a/Source/Dolphin.sln b/Source/Dolphin.sln
index fcf40735fe..baad316a02 100644
--- a/Source/Dolphin.sln
+++ b/Source/Dolphin.sln
@@ -251,15 +251,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CLRun", "..\Externals\CLRun
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SVNRevGen", "Core\Common\SVNRevGen.vcproj", "{B807E8DB-4241-4754-BC2A-2F435BCA881A}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_VideoMerge", "Plugins\Plugin_VideoMerge\Plugin_VideoMerge.vcproj", "{CA7F67A1-7DD9-4C49-94B8-F62AF3D4C72E}"
- ProjectSection(ProjectDependencies) = postProject
- {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED}
- {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}
- {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}
- {B807E8DB-4241-4754-BC2A-2F435BCA881A} = {B807E8DB-4241-4754-BC2A-2F435BCA881A}
- {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}
- EndProjectSection
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wiiuse", "Core\wiiuse\wiiuse.vcproj", "{52F70249-373A-4401-A70A-FF22760EC1B8}"
ProjectSection(ProjectDependencies) = postProject
{C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}
@@ -647,12 +638,6 @@ Global
{B807E8DB-4241-4754-BC2A-2F435BCA881A}.Release|Win32.Build.0 = Release|Win32
{B807E8DB-4241-4754-BC2A-2F435BCA881A}.Release|x64.ActiveCfg = Release|Win32
{B807E8DB-4241-4754-BC2A-2F435BCA881A}.Release|x64.Build.0 = Release|Win32
- {CA7F67A1-7DD9-4C49-94B8-F62AF3D4C72E}.Debug|Win32.ActiveCfg = Debug|Win32
- {CA7F67A1-7DD9-4C49-94B8-F62AF3D4C72E}.Debug|x64.ActiveCfg = Debug|x64
- {CA7F67A1-7DD9-4C49-94B8-F62AF3D4C72E}.DebugFast|Win32.ActiveCfg = Debug|x64
- {CA7F67A1-7DD9-4C49-94B8-F62AF3D4C72E}.DebugFast|x64.ActiveCfg = Debug|x64
- {CA7F67A1-7DD9-4C49-94B8-F62AF3D4C72E}.Release|Win32.ActiveCfg = Release|Win32
- {CA7F67A1-7DD9-4C49-94B8-F62AF3D4C72E}.Release|x64.ActiveCfg = Release|x64
{52F70249-373A-4401-A70A-FF22760EC1B8}.Debug|Win32.ActiveCfg = Debug|Win32
{52F70249-373A-4401-A70A-FF22760EC1B8}.Debug|Win32.Build.0 = Debug|Win32
{52F70249-373A-4401-A70A-FF22760EC1B8}.Debug|x64.ActiveCfg = Debug|x64
diff --git a/Source/Plugins/Plugin_VideoMerge/Plugin_VideoMerge.vcproj b/Source/Plugins/Plugin_VideoMerge/Plugin_VideoMerge.vcproj
deleted file mode 100644
index 96b9d3dd6f..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Plugin_VideoMerge.vcproj
+++ /dev/null
@@ -1,808 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/BPFunctions.cpp b/Source/Plugins/Plugin_VideoMerge/Src/BPFunctions.cpp
deleted file mode 100644
index 9092ccfba8..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/BPFunctions.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-// Common
-#include "Common.h"
-
-// VideoCommon
-#include "VideoConfig.h"
-#include "BPFunctions.h"
-#include "Renderer.h"
-#include "VertexShaderManager.h"
-#include "VertexManager.h"
-
-#include "Main.h"
-
-namespace BPFunctions
-{
-
-void FlushPipeline()
-{
- g_vertex_manager->Flush();
-}
-
-void SetGenerationMode(const BPCmd &bp)
-{
- g_renderer->SetGenerationMode();
-}
-
-void SetScissor(const BPCmd &bp)
-{
- g_renderer->SetScissorRect();
-}
-
-void SetLineWidth(const BPCmd &bp)
-{
- g_renderer->SetLineWidth();
-}
-
-void SetDepthMode(const BPCmd &bp)
-{
- g_renderer->SetDepthMode();
-}
-
-void SetBlendMode(const BPCmd &bp)
-{
- g_renderer->SetBlendMode(false);
-}
-
-void SetDitherMode(const BPCmd &bp)
-{
- g_renderer->SetDitherMode();
-}
-
-void SetLogicOpMode(const BPCmd &bp)
-{
- g_renderer->SetLogicOpMode();
-}
-
-void SetColorMask(const BPCmd &bp)
-{
- g_renderer->SetColorMask();
-}
-
-void CopyEFB(const BPCmd &bp, const EFBRectangle &rc, const u32 &address, const bool &fromZBuffer, const bool &isIntensityFmt, const u32 ©fmt, const int &scaleByHalf)
-{
- if (!g_ActiveConfig.bEFBCopyDisable)
- {
-// if (g_ActiveConfig.bCopyEFBToTexture)
-// {
- g_texture_cache->CopyRenderTargetToTexture(address, fromZBuffer, isIntensityFmt, copyfmt, !!scaleByHalf, rc);
-// }
-// else
-// {
-// PanicAlert("TODO: Implement EFB copying to RAM %s %d\n", __FILE__, __LINE__);
-// }
- }
-}
-
-void ClearScreen(const BPCmd &bp, const EFBRectangle &rc)
-{
- bool colorEnable = bpmem.blendmode.colorupdate;
- bool alphaEnable = (bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24 && bpmem.blendmode.alphaupdate);
- bool zEnable = bpmem.zmode.updateenable;
-
- if (colorEnable || alphaEnable || zEnable)
- {
- u32 color = (bpmem.clearcolorAR << 16) | bpmem.clearcolorGB;
- u32 z = bpmem.clearZValue;
-
- g_renderer->ClearScreen(rc, colorEnable, alphaEnable, zEnable, color, z);
- }
-}
-
-void RestoreRenderState(const BPCmd &bp)
-{
- g_renderer->RestoreAPIState();
-}
-
-bool GetConfig(const int &type)
-{
- switch (type)
- {
- case CONFIG_ISWII:
- return g_VideoInitialize.bWii;
- case CONFIG_DISABLEFOG:
- return g_ActiveConfig.bDisableFog;
- case CONFIG_SHOWEFBREGIONS:
- return false;
- default:
- PanicAlert("GetConfig Error: Unknown Config Type!");
- return false;
- }
-}
-
-u8 *GetPointer(const u32 &address)
-{
- return g_VideoInitialize.pGetMemoryPointer(address);
-}
-
-void SetTextureMode(const BPCmd &bp)
-{
- g_renderer->SetSamplerState(bp.address & 3, (bp.address & 0xE0) == 0xA0);
-}
-
-void SetInterlacingMode(const BPCmd &bp)
-{
- // TODO
-}
-
-}
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DBase.cpp b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DBase.cpp
deleted file mode 100644
index 6d56534a0b..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DBase.cpp
+++ /dev/null
@@ -1,338 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-// Common
-#include "StringUtil.h"
-
-// VideoCommon
-#include "VideoConfig.h"
-#include "XFStructs.h"
-
-// DX11
-#include "DX11_D3DBase.h"
-#include "DX11_D3DTexture.h"
-#include "DX11_D3DShader.h"
-#include "DX11_Render.h"
-
-#include
-
-#pragma comment(lib, "dxguid.lib")
-#pragma comment(lib, "d3d11.lib")
-#pragma comment(lib, "dxgi.lib")
-
-namespace DX11
-{
-
-HINSTANCE hD3DXDll = NULL;
-D3DX11COMPILEFROMMEMORYTYPE PD3DX11CompileFromMemory = NULL;
-D3DX11FILTERTEXTURETYPE PD3DX11FilterTexture = NULL;
-D3DX11SAVETEXTURETOFILEATYPE PD3DX11SaveTextureToFileA = NULL;
-D3DX11SAVETEXTURETOFILEWTYPE PD3DX11SaveTextureToFileW = NULL;
-
-namespace D3D
-{
-
-ID3D11Device* device = NULL;
-ID3D11DeviceContext* context = NULL;
-IDXGISwapChain* swapchain = NULL;
-D3D_FEATURE_LEVEL featlevel;
-D3DTexture2D* backbuf = NULL;
-HWND hWnd;
-
-bool bgra_textures_supported;
-
-#define NUM_SUPPORTED_FEATURE_LEVELS 3
-const D3D_FEATURE_LEVEL supported_feature_levels[NUM_SUPPORTED_FEATURE_LEVELS] = {
- D3D_FEATURE_LEVEL_11_0,
- D3D_FEATURE_LEVEL_10_1,
- D3D_FEATURE_LEVEL_10_0
-};
-
-unsigned int xres, yres;
-
-bool bFrameInProgress = false;
-
-HRESULT Create(HWND wnd)
-{
- hWnd = wnd;
- HRESULT hr;
-
- RECT client;
- GetClientRect(hWnd, &client);
- xres = client.right - client.left;
- yres = client.bottom - client.top;
-
- // try to load D3DX11 first to check whether we have proper runtime support
- // try to use the dll the plugin was compiled against first - don't bother about debug runtimes
- hD3DXDll = LoadLibraryA(StringFromFormat("d3dx11_%d.dll", D3DX11_SDK_VERSION).c_str());
- if (!hD3DXDll)
- {
- // if that fails, use the dll which should be available in every SDK which officially supports DX11.
- hD3DXDll = LoadLibraryA("d3dx11_42.dll");
- if (!hD3DXDll)
- {
- MessageBoxA(NULL, "Failed to load d3dx11_42.dll, update your DX11 runtime, please", "Critical error", MB_OK | MB_ICONERROR);
- return E_FAIL;
- }
- else
- {
- NOTICE_LOG(VIDEO, "Successfully loaded d3dx11_42.dll. If you're having trouble, try updating your DX runtime first.");
- }
- }
- else
- {
- NOTICE_LOG(VIDEO, "Successfully loaded %s.", StringFromFormat("d3dx11_%d.dll", D3DX11_SDK_VERSION).c_str());
- }
-
- PD3DX11CompileFromMemory = (D3DX11COMPILEFROMMEMORYTYPE)GetProcAddress(hD3DXDll, "D3DX11CompileFromMemory");
- if (PD3DX11CompileFromMemory == NULL) MessageBoxA(NULL, "GetProcAddress failed for D3DX11CompileFromMemory!", "Critical error", MB_OK | MB_ICONERROR);
-
- PD3DX11FilterTexture = (D3DX11FILTERTEXTURETYPE)GetProcAddress(hD3DXDll, "D3DX11FilterTexture");
- if (PD3DX11FilterTexture == NULL) MessageBoxA(NULL, "GetProcAddress failed for D3DX11FilterTexture!", "Critical error", MB_OK | MB_ICONERROR);
-
- PD3DX11SaveTextureToFileA = (D3DX11SAVETEXTURETOFILEATYPE)GetProcAddress(hD3DXDll, "D3DX11SaveTextureToFileA");
- if (PD3DX11SaveTextureToFileA == NULL) MessageBoxA(NULL, "GetProcAddress failed for D3DX11SaveTextureToFileA!", "Critical error", MB_OK | MB_ICONERROR);
-
- PD3DX11SaveTextureToFileW = (D3DX11SAVETEXTURETOFILEWTYPE)GetProcAddress(hD3DXDll, "D3DX11SaveTextureToFileW");
- if (PD3DX11SaveTextureToFileW == NULL) MessageBoxA(NULL, "GetProcAddress failed for D3DX11SaveTextureToFileW!", "Critical error", MB_OK | MB_ICONERROR);
-
- // D3DX11 is fine, initialize D3D11
- IDXGIFactory* factory;
- IDXGIAdapter* adapter;
- IDXGIOutput* output;
- hr = CreateDXGIFactory(__uuidof(IDXGIFactory), (void**)&factory);
- if (FAILED(hr)) MessageBox(wnd, _T("Failed to create IDXGIFactory object"), _T("Dolphin Direct3D 11 plugin"), MB_OK | MB_ICONERROR);
-
- hr = factory->EnumAdapters(g_ActiveConfig.iAdapter, &adapter);
- if (FAILED(hr))
- {
- // try using the first one
- hr = factory->EnumAdapters(0, &adapter);
- if (FAILED(hr)) MessageBox(wnd, _T("Failed to enumerate adapters"), _T("Dolphin Direct3D 11 plugin"), MB_OK | MB_ICONERROR);
- }
-
- // TODO: Make this configurable
- hr = adapter->EnumOutputs(0, &output);
- if (FAILED(hr))
- {
- // try using the first one
- hr = adapter->EnumOutputs(0, &output);
- if (FAILED(hr)) MessageBox(wnd, _T("Failed to enumerate outputs"), _T("Dolphin Direct3D 11 plugin"), MB_OK | MB_ICONERROR);
- }
-
- // this will need to be changed once multisampling gets implemented
- DXGI_SWAP_CHAIN_DESC swap_chain_desc;
- memset(&swap_chain_desc, 0, sizeof(swap_chain_desc));
- swap_chain_desc.BufferCount = 1;
- swap_chain_desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
- swap_chain_desc.OutputWindow = wnd;
- swap_chain_desc.SampleDesc.Count = 1;
- swap_chain_desc.SampleDesc.Quality = 0;
- swap_chain_desc.Windowed = TRUE;
-
- DXGI_MODE_DESC mode_desc;
- memset(&mode_desc, 0, sizeof(mode_desc));
- mode_desc.Width = xres;
- mode_desc.Height = yres;
- mode_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
- mode_desc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
- hr = output->FindClosestMatchingMode(&mode_desc, &swap_chain_desc.BufferDesc, NULL);
- if (FAILED(hr))
- MessageBox(wnd, _T("Failed to find a supported video mode"), _T("Dolphin Direct3D 11 plugin"), MB_OK | MB_ICONERROR);
-
- // forcing buffer resolution to xres and yres.. TODO: The new video mode might not actually be supported!
- swap_chain_desc.BufferDesc.Width = xres;
- swap_chain_desc.BufferDesc.Height = yres;
-
-#if defined(_DEBUG) || defined(DEBUGFAST)
- D3D11_CREATE_DEVICE_FLAG device_flags = (D3D11_CREATE_DEVICE_FLAG)(D3D11_CREATE_DEVICE_DEBUG|D3D11_CREATE_DEVICE_SINGLETHREADED);
-#else
- D3D11_CREATE_DEVICE_FLAG device_flags = D3D11_CREATE_DEVICE_SINGLETHREADED;
-#endif
- hr = D3D11CreateDeviceAndSwapChain(adapter, D3D_DRIVER_TYPE_UNKNOWN, NULL, device_flags,
- supported_feature_levels, NUM_SUPPORTED_FEATURE_LEVELS,
- D3D11_SDK_VERSION, &swap_chain_desc, &swapchain, &device,
- &featlevel, &context);
- if (FAILED(hr) || !device || !context || !swapchain)
- {
- MessageBox(wnd, _T("Failed to initialize Direct3D.\nMake sure your video card supports at least D3D 10.0"), _T("Dolphin Direct3D 11 plugin"), MB_OK | MB_ICONERROR);
- SAFE_RELEASE(device);
- SAFE_RELEASE(context);
- SAFE_RELEASE(swapchain);
- return E_FAIL;
- }
- SetDebugObjectName((ID3D11DeviceChild*)context, "device context");
- SAFE_RELEASE(factory);
- SAFE_RELEASE(output);
- SAFE_RELEASE(adapter);
-
- ID3D11Texture2D* buf;
- hr = swapchain->GetBuffer(0, IID_ID3D11Texture2D, (void**)&buf);
- if (FAILED(hr))
- {
- MessageBox(wnd, _T("Failed to get swapchain buffer"), _T("Dolphin Direct3D 11 plugin"), MB_OK | MB_ICONERROR);
- SAFE_RELEASE(device);
- SAFE_RELEASE(context);
- SAFE_RELEASE(swapchain);
- return E_FAIL;
- }
- backbuf = new D3DTexture2D(buf, D3D11_BIND_RENDER_TARGET);
- SAFE_RELEASE(buf);
- CHECK(backbuf!=NULL, "Create back buffer texture");
- SetDebugObjectName((ID3D11DeviceChild*)backbuf->GetTex(), "backbuffer texture");
- SetDebugObjectName((ID3D11DeviceChild*)backbuf->GetRTV(), "backbuffer render target view");
-
- context->OMSetRenderTargets(1, &backbuf->GetRTV(), NULL);
-
- // BGRA textures are easier to deal with in TextureCache, but might not be supported by the hardware
- UINT format_support;
- device->CheckFormatSupport(DXGI_FORMAT_B8G8R8A8_UNORM, &format_support);
- bgra_textures_supported = (format_support & D3D11_FORMAT_SUPPORT_TEXTURE2D) != 0;
-
- gfxstate = new EmuGfxState;
- stateman = new StateManager;
- return S_OK;
-}
-
-void Close()
-{
- // unload D3DX11
- FreeLibrary(hD3DXDll);
- PD3DX11FilterTexture = NULL;
- PD3DX11SaveTextureToFileA = NULL;
- PD3DX11SaveTextureToFileW = NULL;
-
- // release all bound resources
- context->ClearState();
- SAFE_RELEASE(backbuf);
- SAFE_RELEASE(swapchain);
- SAFE_DELETE(gfxstate);
- SAFE_DELETE(stateman);
- context->Flush(); // immediately destroy device objects
-
- SAFE_RELEASE(context);
- ULONG references = device->Release();
- if (references)
- {
- ERROR_LOG(VIDEO, "Unreleased references: %i.", references);
- }
- else
- {
- NOTICE_LOG(VIDEO, "Successfully released all device references!");
- }
- device = NULL;
-}
-
-/* just returning the 4_0 ones here */
-const char* VertexShaderVersionString() { return "vs_4_0"; }
-const char* PixelShaderVersionString() { return "ps_4_0"; }
-
-D3DTexture2D* &GetBackBuffer() { return backbuf; }
-unsigned int GetBackBufferWidth() { return xres; }
-unsigned int GetBackBufferHeight() { return yres; }
-
-bool BGRATexturesSupported() { return bgra_textures_supported; }
-
-// Returns the maximum width/height of a texture. This value only depends upon the feature level in DX11
-unsigned int GetMaxTextureSize()
-{
- switch (featlevel)
- {
- case D3D_FEATURE_LEVEL_11_0:
- return 16384;
- break;
-
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return 8192;
- break;
-
- case D3D_FEATURE_LEVEL_9_3:
- return 4096;
- break;
-
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 2048;
- break;
-
- default:
- return 0;
- break;
- }
-}
-
-void Reset()
-{
- // release all back buffer references
- SAFE_RELEASE(backbuf);
-
- // resize swapchain buffers
- RECT client;
- GetClientRect(hWnd, &client);
- xres = client.right - client.left;
- yres = client.bottom - client.top;
- D3D::swapchain->ResizeBuffers(1, xres, yres, DXGI_FORMAT_R8G8B8A8_UNORM, 0);
-
- // recreate back buffer texture
- ID3D11Texture2D* buf;
- HRESULT hr = swapchain->GetBuffer(0, IID_ID3D11Texture2D, (void**)&buf);
- if (FAILED(hr))
- {
- MessageBox(hWnd, _T("Failed to get swapchain buffer"), _T("Dolphin Direct3D 11 plugin"), MB_OK | MB_ICONERROR);
- SAFE_RELEASE(device);
- SAFE_RELEASE(context);
- SAFE_RELEASE(swapchain);
- return;
- }
- backbuf = new D3DTexture2D(buf, D3D11_BIND_RENDER_TARGET);
- SAFE_RELEASE(buf);
- CHECK(backbuf!=NULL, "Create back buffer texture");
- SetDebugObjectName((ID3D11DeviceChild*)backbuf->GetTex(), "backbuffer texture");
- SetDebugObjectName((ID3D11DeviceChild*)backbuf->GetRTV(), "backbuffer render target view");
-}
-
-bool BeginFrame()
-{
- if (bFrameInProgress)
- {
- PanicAlert("BeginFrame called although a frame is already in progress");
- return false;
- }
- bFrameInProgress = true;
- return (device != NULL);
-}
-
-void EndFrame()
-{
- if (!bFrameInProgress)
- {
- PanicAlert("EndFrame called although no frame is in progress");
- return;
- }
- bFrameInProgress = false;
-}
-
-void Present()
-{
- // TODO: Is 1 the correct value for vsyncing?
- swapchain->Present((UINT)g_ActiveConfig.bVSync, 0);
-}
-
-} // namespace
-
-}
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DBase.h b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DBase.h
deleted file mode 100644
index 63587f89ac..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DBase.h
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#pragma once
-
-// Common
-#include "Common.h"
-
-// DX11
-#include
-#include "DX11_GfxState.h"
-#include "DX11_D3DBlob.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 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* 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.
-inline void SetDebugObjectName(ID3D11DeviceChild* resource, const char* name)
-{
-#if defined(_DEBUG) || defined(DEBUGFAST)
- resource->SetPrivateData( WKPDID_D3DDebugObjectName, (UINT)strlen(name), name);
-#endif
-}
-
-} // namespace
-
-
-// Used to not require the SDK and runtime versions to match:
-// Linking with d3dx11.lib makes the most recent d3dx11_xx.dll of the
-// compiler's SDK a requirement, but this plugin works with DX11 runtimes
-// back to August 2009 even if the plugin was built with June 2010.
-// Add any d3dx11 functions which you want to use here and load them in Create()
-typedef HRESULT (WINAPI* D3DX11COMPILEFROMMEMORYTYPE)(LPCSTR, SIZE_T, LPCSTR, const D3D10_SHADER_MACRO*, LPD3D10INCLUDE, LPCSTR, LPCSTR, UINT, UINT, ID3DX11ThreadPump*, ID3D10Blob**, ID3D10Blob**, HRESULT*);
-typedef HRESULT (WINAPI* D3DX11FILTERTEXTURETYPE)(ID3D11DeviceContext*, ID3D11Resource*, UINT, UINT);
-typedef HRESULT (WINAPI* D3DX11SAVETEXTURETOFILEATYPE)(ID3D11DeviceContext*, ID3D11Resource*, D3DX11_IMAGE_FILE_FORMAT, LPCSTR);
-typedef HRESULT (WINAPI* D3DX11SAVETEXTURETOFILEWTYPE)(ID3D11DeviceContext*, ID3D11Resource*, D3DX11_IMAGE_FILE_FORMAT, LPCWSTR);
-
-extern D3DX11COMPILEFROMMEMORYTYPE PD3DX11CompileFromMemory;
-extern D3DX11FILTERTEXTURETYPE PD3DX11FilterTexture;
-extern D3DX11SAVETEXTURETOFILEATYPE PD3DX11SaveTextureToFileA;
-extern D3DX11SAVETEXTURETOFILEWTYPE PD3DX11SaveTextureToFileW;
-
-#ifdef UNICODE
-#define PD3DX11SaveTextureToFile PD3DX11SaveTextureToFileW
-#else
-#define PD3DX11SaveTextureToFile PD3DX11SaveTextureToFileA
-#endif
-
-}
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DBlob.cpp b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DBlob.cpp
deleted file mode 100644
index 2709248063..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DBlob.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#include "DX11_D3DBlob.h"
-
-namespace DX11
-{
-
-D3DBlob::D3DBlob(unsigned int blob_size, const u8* init_data) : ref(1), size(blob_size), blob(NULL)
-{
- data = new u8[blob_size];
- if (init_data) memcpy(data, init_data, size);
-}
-
-D3DBlob::D3DBlob(ID3D10Blob* d3dblob) : ref(1)
-{
- blob = d3dblob;
- data = (u8*)blob->GetBufferPointer();
- size = blob->GetBufferSize();
- d3dblob->AddRef();
-}
-
-D3DBlob::~D3DBlob()
-{
- if (blob) blob->Release();
- else delete[] data;
-}
-
-void D3DBlob::AddRef()
-{
- ++ref;
-}
-
-unsigned int D3DBlob::Release()
-{
- if (--ref == 0)
- {
- delete this;
- return 0;
- }
- return ref;
-}
-
-unsigned int D3DBlob::Size()
-{
- return size;
-}
-
-u8* D3DBlob::Data()
-{
- return data;
-}
-
-}
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DBlob.h b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DBlob.h
deleted file mode 100644
index 1a559db83e..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DBlob.h
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#pragma once
-
-#include "Common.h"
-#include
-
-namespace DX11
-{
-
-// use this class instead ID3D10Blob or ID3D11Blob whenever possible
-class D3DBlob
-{
-public:
- // memory will be copied into an own buffer
- D3DBlob(unsigned int blob_size, const u8* init_data = NULL);
-
- // d3dblob will be AddRef'd
- D3DBlob(ID3D10Blob* d3dblob);
-
- void AddRef();
- unsigned int Release();
-
- unsigned int Size();
- u8* Data();
-
-private:
- ~D3DBlob();
-
- unsigned int ref;
- unsigned int size;
-
- u8* data;
- ID3D10Blob* blob;
-};
-
-}
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DShader.cpp b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DShader.cpp
deleted file mode 100644
index c8ecf99d11..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DShader.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#include
-#include
-#include
-
-#include "VideoConfig.h"
-#include "DX11_D3DShader.h"
-
-namespace DX11
-{
-
-namespace D3D
-{
-
-// bytecode->shader
-ID3D11VertexShader* CreateVertexShaderFromByteCode(void* bytecode, unsigned int len)
-{
- ID3D11VertexShader* v_shader;
- HRESULT hr = D3D::device->CreateVertexShader(bytecode, len, NULL, &v_shader);
- if (FAILED(hr))
- {
- PanicAlert("CreateVertexShaderFromByteCode failed from %p (size %d) at %s %d\n", bytecode, len, __FILE__, __LINE__);
- v_shader = NULL;
- }
- return v_shader;
-}
-
-// code->bytecode
-bool CompileVertexShader(const char* code, unsigned int len, D3DBlob** blob)
-{
- ID3D10Blob* shaderBuffer = NULL;
- ID3D10Blob* errorBuffer = NULL;
-
-#if defined(_DEBUG) || defined(DEBUGFAST)
- UINT flags = D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY|D3D10_SHADER_DEBUG|D3D10_SHADER_WARNINGS_ARE_ERRORS;
-#else
- UINT flags = D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY|D3D10_SHADER_OPTIMIZATION_LEVEL3|D3D10_SHADER_SKIP_VALIDATION;
-#endif
- HRESULT hr = PD3DX11CompileFromMemory(code, len, NULL, NULL, NULL, "main", D3D::VertexShaderVersionString(),
- flags, 0, NULL, &shaderBuffer, &errorBuffer, NULL);
-
- if (FAILED(hr) || errorBuffer)
- {
- std::string msg = (char*)errorBuffer->GetBufferPointer();
- msg += "\n\n";
- msg += code;
- MessageBoxA(0, msg.c_str(), "Error compiling pixel shader", MB_ICONERROR);
-
- *blob = NULL;
- errorBuffer->Release();
- }
- else
- {
- *blob = new D3DBlob(shaderBuffer);
- shaderBuffer->Release();
- }
- return SUCCEEDED(hr);
-}
-
-// bytecode->shader
-ID3D11PixelShader* CreatePixelShaderFromByteCode(void* bytecode, unsigned int len)
-{
- ID3D11PixelShader* p_shader;
- HRESULT hr = D3D::device->CreatePixelShader(bytecode, len, NULL, &p_shader);
- if (FAILED(hr))
- {
- PanicAlert("CreatePixelShaderFromByteCode failed at %s %d\n", __FILE__, __LINE__);
- p_shader = NULL;
- }
- return p_shader;
-}
-
-// code->bytecode
-bool CompilePixelShader(const char* code, unsigned int len, D3DBlob** blob)
-{
- ID3D10Blob* shaderBuffer = NULL;
- ID3D10Blob* errorBuffer = NULL;
-
-#if defined(_DEBUG) || defined(DEBUGFAST)
- UINT flags = D3D10_SHADER_DEBUG|D3D10_SHADER_WARNINGS_ARE_ERRORS;
-#else
- UINT flags = D3D10_SHADER_OPTIMIZATION_LEVEL3;
-#endif
- HRESULT hr = PD3DX11CompileFromMemory(code, len, NULL, NULL, NULL, "main", D3D::PixelShaderVersionString(),
- flags, 0, NULL, &shaderBuffer, &errorBuffer, NULL);
-
- if (FAILED(hr) || errorBuffer)
- {
- std::string msg = (char*)errorBuffer->GetBufferPointer();
- msg += "\n\n";
- msg += code;
- MessageBoxA(0, msg.c_str(), "Error compiling pixel shader", MB_ICONERROR);
-
- *blob = NULL;
- errorBuffer->Release();
- }
- else
- {
- *blob = new D3DBlob(shaderBuffer);
- shaderBuffer->Release();
- }
- return SUCCEEDED(hr);
-}
-
-ID3D11VertexShader* CompileAndCreateVertexShader(const char* code, unsigned int len)
-{
- D3DBlob* blob = NULL;
- if (CompileVertexShader(code, len, &blob))
- {
- ID3D11VertexShader* v_shader = CreateVertexShaderFromByteCode(blob);
- blob->Release();
- return v_shader;
- }
- PanicAlert("Failed to compile and create vertex shader from %p (size %d) at %s %d\n", code, len, __FILE__, __LINE__);
- return NULL;
-}
-
-ID3D11PixelShader* CompileAndCreatePixelShader(const char* code, unsigned int len)
-{
- D3DBlob* blob = NULL;
- CompilePixelShader(code, len, &blob);
- if (blob)
- {
- ID3D11PixelShader* p_shader = CreatePixelShaderFromByteCode(blob);
- blob->Release();
- return p_shader;
- }
- PanicAlert("Failed to compile and create pixel shader, %s %d\n", __FILE__, __LINE__);
- return NULL;
-}
-
-} // namespace
-
-}
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DShader.h b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DShader.h
deleted file mode 100644
index 50b10126fd..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DShader.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#pragma once
-
-#include "DX11_D3DBase.h"
-
-namespace DX11
-{
-
-namespace D3D
-{
- ID3D11VertexShader* CreateVertexShaderFromByteCode(void* bytecode, unsigned int len);
- ID3D11PixelShader* CreatePixelShaderFromByteCode(void* bytecode, unsigned int len);
-
- // The returned bytecode buffers should be Release()d.
- bool CompileVertexShader(const char* code, unsigned int len, D3DBlob** blob);
- bool CompilePixelShader(const char* code, unsigned int len, D3DBlob** blob);
-
- // Utility functions
- ID3D11VertexShader* CompileAndCreateVertexShader(const char* code, unsigned int len);
- ID3D11PixelShader* CompileAndCreatePixelShader(const char* code, unsigned int len);
-
- inline ID3D11VertexShader* CreateVertexShaderFromByteCode(D3DBlob* bytecode) { return CreateVertexShaderFromByteCode(bytecode->Data(), bytecode->Size()); }
- inline ID3D11PixelShader* CreatePixelShaderFromByteCode(D3DBlob* bytecode) { return CreatePixelShaderFromByteCode(bytecode->Data(), bytecode->Size()); }
- inline ID3D11VertexShader* CompileAndCreateVertexShader(D3DBlob* code) { return CompileAndCreateVertexShader((const char*)code->Data(), code->Size()); }
- inline ID3D11PixelShader* CompileAndCreatePixelShader(D3DBlob* code) { return CompileAndCreatePixelShader((const char*)code->Data(), code->Size()); }
-}
-
-}
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DTexture.cpp b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DTexture.cpp
deleted file mode 100644
index 408cf4ed2b..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DTexture.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#include
-#include "DX11_D3DBase.h"
-#include "DX11_D3DTexture.h"
-
-namespace DX11
-{
-
-namespace D3D
-{
-
-void ReplaceRGBATexture2D(ID3D11Texture2D* pTexture, const u8* buffer, unsigned int width, unsigned int height, unsigned int pitch, unsigned int level, D3D11_USAGE usage)
-{
- if (usage == D3D11_USAGE_DYNAMIC)
- {
- D3D11_MAPPED_SUBRESOURCE map;
- HRESULT hr = D3D::context->Map(pTexture, level, D3D11_MAP_WRITE_DISCARD, 0, &map);
- CHECK(SUCCEEDED(hr), "ID3D11DeviceContext::Map failed! (%x)", hr);
- if (4 * pitch == map.RowPitch)
- {
- memcpy(map.pData, buffer, map.RowPitch * height);
- }
- else
- {
- for (unsigned int y = 0; y < height; ++y)
- memcpy((u8*)map.pData + y * map.RowPitch, (u32*)buffer + y * pitch, map.RowPitch);
- }
- D3D::context->Unmap(pTexture, level);
- }
- else
- {
- D3D11_BOX dest_region = CD3D11_BOX(0, 0, 0, width, height, 1);
- D3D::context->UpdateSubresource(pTexture, level, &dest_region, buffer, 4*pitch, 4*pitch*height);
- }
-}
-
-} // namespace
-
-D3DTexture2D* D3DTexture2D::Create(unsigned int width, unsigned int height, D3D11_BIND_FLAG bind, D3D11_USAGE usage, DXGI_FORMAT fmt, unsigned int levels)
-{
- ID3D11Texture2D* pTexture = NULL;
- HRESULT hr;
-
- D3D11_CPU_ACCESS_FLAG cpuflags;
- if (usage == D3D11_USAGE_STAGING)
- cpuflags = (D3D11_CPU_ACCESS_FLAG)((int)D3D11_CPU_ACCESS_WRITE|(int)D3D11_CPU_ACCESS_READ);
- else if (usage == D3D11_USAGE_DYNAMIC)
- cpuflags = D3D11_CPU_ACCESS_WRITE;
- else
- cpuflags = (D3D11_CPU_ACCESS_FLAG)0;
-
- D3D11_TEXTURE2D_DESC texdesc = CD3D11_TEXTURE2D_DESC(fmt, width, height, 1, levels, bind, usage, cpuflags);
- hr = D3D::device->CreateTexture2D(&texdesc, NULL, &pTexture);
- if (FAILED(hr))
- {
- PanicAlert("Failed to create texture at %s, line %d: hr=%#x\n", __FILE__, __LINE__, hr);
- return NULL;
- }
-
- D3DTexture2D* ret = new D3DTexture2D(pTexture, bind);
- SAFE_RELEASE(pTexture);
- return ret;
-}
-
-void D3DTexture2D::AddRef()
-{
- ++ref;
-}
-
-UINT D3DTexture2D::Release()
-{
- --ref;
- if (ref == 0)
- {
- delete this;
- return 0;
- }
- return ref;
-}
-
-D3DTexture2D::D3DTexture2D(ID3D11Texture2D* texptr, D3D11_BIND_FLAG bind,
- DXGI_FORMAT srv_format, DXGI_FORMAT dsv_format, DXGI_FORMAT rtv_format)
- : ref(1), tex(texptr), srv(NULL), rtv(NULL), dsv(NULL)
-{
- D3D11_SHADER_RESOURCE_VIEW_DESC srv_desc = CD3D11_SHADER_RESOURCE_VIEW_DESC(D3D11_SRV_DIMENSION_TEXTURE2D, srv_format);
- D3D11_DEPTH_STENCIL_VIEW_DESC dsv_desc = CD3D11_DEPTH_STENCIL_VIEW_DESC(D3D11_DSV_DIMENSION_TEXTURE2D, dsv_format);
- D3D11_RENDER_TARGET_VIEW_DESC rtv_desc = CD3D11_RENDER_TARGET_VIEW_DESC(D3D11_RTV_DIMENSION_TEXTURE2D, rtv_format);
-
- if (bind & D3D11_BIND_SHADER_RESOURCE)
- D3D::device->CreateShaderResourceView(tex, &srv_desc, &srv);
-
- if (bind & D3D11_BIND_RENDER_TARGET)
- D3D::device->CreateRenderTargetView(tex, &rtv_desc, &rtv);
-
- if (bind & D3D11_BIND_DEPTH_STENCIL)
- D3D::device->CreateDepthStencilView(tex, &dsv_desc, &dsv);
-
- tex->AddRef();
-}
-
-D3DTexture2D::~D3DTexture2D()
-{
- SAFE_RELEASE(srv);
- SAFE_RELEASE(rtv);
- SAFE_RELEASE(dsv);
- SAFE_RELEASE(tex);
-}
-
-}
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DTexture.h b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DTexture.h
deleted file mode 100644
index 1b6166d2fb..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DTexture.h
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#pragma once
-
-#include "DX11_D3DBase.h"
-
-namespace DX11
-{
-
-namespace D3D
-{
- void ReplaceRGBATexture2D(ID3D11Texture2D* pTexture, const u8* buffer, unsigned int width, unsigned int height, unsigned int pitch, unsigned int level, D3D11_USAGE usage);
-}
-
-class D3DTexture2D
-{
-public:
- // there are two ways to create a D3DTexture2D object:
- // either create an ID3D11Texture2D object, pass it to the constructor and specify what views to create
- // or let the texture automatically be created by D3DTexture2D::Create
-
- D3DTexture2D(ID3D11Texture2D* texptr, D3D11_BIND_FLAG bind, DXGI_FORMAT srv_format = DXGI_FORMAT_UNKNOWN, DXGI_FORMAT dsv_format = DXGI_FORMAT_UNKNOWN, DXGI_FORMAT rtv_format = DXGI_FORMAT_UNKNOWN);
- static D3DTexture2D* Create(unsigned int width, unsigned int height, D3D11_BIND_FLAG bind, D3D11_USAGE usage, DXGI_FORMAT, unsigned int levels = 1);
-
- // reference counting, use AddRef() when creating a new reference and Release() it when you don't need it anymore
- void AddRef();
- UINT Release();
-
- ID3D11Texture2D* &GetTex() { return tex; }
- ID3D11ShaderResourceView* &GetSRV() { return srv; }
- ID3D11RenderTargetView* &GetRTV() { return rtv; }
- ID3D11DepthStencilView* &GetDSV() { return dsv; }
-
-private:
- ~D3DTexture2D();
-
- ID3D11Texture2D* tex;
- ID3D11ShaderResourceView* srv;
- ID3D11RenderTargetView* rtv;
- ID3D11DepthStencilView* dsv;
- D3D11_BIND_FLAG bindflags;
- UINT ref;
-};
-
-}
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DUtil.cpp b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DUtil.cpp
deleted file mode 100644
index 4a7afd6313..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DUtil.cpp
+++ /dev/null
@@ -1,651 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-// Common
-#include "Common.h"
-
-// DX11
-#include "DX11_Render.h"
-#include "DX11_D3DBase.h"
-#include "DX11_D3DUtil.h"
-#include "DX11_D3DTexture.h"
-#include "DX11_PixelShaderCache.h"
-#include "DX11_VertexShaderCache.h"
-#include "DX11_D3DShader.h"
-
-namespace DX11
-{
-
-namespace D3D
-{
-
-CD3DFont font;
-
-#define MAX_NUM_VERTICES 300
-struct FONT2DVERTEX {
- float x,y,z;
- float col[4];
- float tu, tv;
-};
-
-inline FONT2DVERTEX InitFont2DVertex(float x, float y, u32 color, float tu, float tv)
-{
- FONT2DVERTEX v; v.x=x; v.y=y; v.z=0; v.tu = tu; v.tv = tv;
- v.col[0] = ((float)((color >> 16) & 0xFF)) / 255.f;
- v.col[1] = ((float)((color >> 8) & 0xFF)) / 255.f;
- v.col[2] = ((float)((color >> 0) & 0xFF)) / 255.f;
- v.col[3] = ((float)((color >> 24) & 0xFF)) / 255.f;
- return v;
-}
-
-CD3DFont::CD3DFont() : m_dwTexWidth(512), m_dwTexHeight(512)
-{
- m_pTexture = NULL;
- m_pVB = NULL;
- m_InputLayout = NULL;
- m_pshader = NULL;
- m_vshader = NULL;
-}
-
-const char fontpixshader[] = {
- "Texture2D tex2D;\n"
- "SamplerState linearSampler\n"
- "{\n"
- " Filter = MIN_MAG_MIP_LINEAR;\n"
- " AddressU = D3D11_TEXTURE_ADDRESS_BORDER;\n"
- " AddressV = D3D11_TEXTURE_ADDRESS_BORDER;\n"
- " BorderColor = float4(0.f, 0.f, 0.f, 0.f);\n"
- "};\n"
- "struct PS_INPUT\n"
- "{\n"
- " float4 pos : SV_POSITION;\n"
- " float4 col : COLOR;\n"
- " float2 tex : TEXCOORD;\n"
- "};\n"
- "float4 main( PS_INPUT input ) : SV_Target\n"
- "{\n"
- " return tex2D.Sample( linearSampler, input.tex ) * input.col;\n"
- "};\n"
-};
-
-const char fontvertshader[] = {
- "struct VS_INPUT\n"
- "{\n"
- " float4 pos : POSITION;\n"
- " float4 col : COLOR;\n"
- " float2 tex : TEXCOORD;\n"
- "};\n"
- "struct PS_INPUT\n"
- "{\n"
- " float4 pos : SV_POSITION;\n"
- " float4 col : COLOR;\n"
- " float2 tex : TEXCOORD;\n"
- "};\n"
- "PS_INPUT main( VS_INPUT input )\n"
- "{\n"
- " PS_INPUT output;\n"
- " output.pos = input.pos;\n"
- " output.col = input.col;\n"
- " output.tex = input.tex;\n"
- " return output;\n"
- "};\n"
-};
-
-int CD3DFont::Init()
-{
- HRESULT hr;
-
- // prepare to create a bitmap
- unsigned int* pBitmapBits;
- BITMAPINFO bmi;
- ZeroMemory(&bmi.bmiHeader, sizeof(BITMAPINFOHEADER));
- bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- bmi.bmiHeader.biWidth = (int)m_dwTexWidth;
- bmi.bmiHeader.biHeight = -(int)m_dwTexHeight;
- bmi.bmiHeader.biPlanes = 1;
- bmi.bmiHeader.biCompression = BI_RGB;
- bmi.bmiHeader.biBitCount = 32;
-
- // create a DC and a bitmap for the font
- HDC hDC = CreateCompatibleDC(NULL);
- HBITMAP hbmBitmap = CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS, (void**)&pBitmapBits, NULL, 0);
- SetMapMode(hDC, MM_TEXT);
-
- // create a GDI font
- HFONT hFont = CreateFont(24, 0, 0, 0, FW_NORMAL, FALSE,
- FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
- CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
- VARIABLE_PITCH, _T("Tahoma"));
- if (NULL == hFont) return E_FAIL;
-
- HGDIOBJ hOldbmBitmap = SelectObject(hDC, hbmBitmap);
- HGDIOBJ hOldFont = SelectObject(hDC, hFont);
-
- // set text properties
- SetTextColor(hDC, 0xFFFFFF);
- SetBkColor (hDC, 0);
- SetTextAlign(hDC, TA_TOP);
-
- TEXTMETRICW tm;
- GetTextMetricsW(hDC, &tm);
- m_LineHeight = tm.tmHeight;
-
- // loop through all printable characters and output them to the bitmap
- // meanwhile, keep track of the corresponding tex coords for each character.
- int x = 0, y = 0;
- char str[2] = "\0";
- for (int c = 0; c < 127 - 32; c++)
- {
- str[0] = c + 32;
- SIZE size;
- GetTextExtentPoint32A(hDC, str, 1, &size);
- if ((int)(x+size.cx+1) > m_dwTexWidth)
- {
- x = 0;
- y += m_LineHeight;
- }
-
- ExtTextOutA(hDC, x+1, y+0, ETO_OPAQUE | ETO_CLIPPED, NULL, str, 1, NULL);
- m_fTexCoords[c][0] = (float) x /m_dwTexWidth;
- m_fTexCoords[c][1] = (float) y /m_dwTexHeight;
- m_fTexCoords[c][2] = (float)(x+size.cx)/m_dwTexWidth;
- m_fTexCoords[c][3] = (float)(y+size.cy)/m_dwTexHeight;
-
- x += size.cx + 3; // 3 to work around annoying ij conflict (part of the j ends up with the i)
- }
-
- // create a new texture for the font
- // possible optimization: store the converted data in a buffer and fill the texture on creation.
- // That way, we can use a static texture
- ID3D11Texture2D* buftex;
- D3D11_TEXTURE2D_DESC texdesc = CD3D11_TEXTURE2D_DESC(DXGI_FORMAT_R8G8B8A8_UNORM, m_dwTexWidth, m_dwTexHeight,
- 1, 1, D3D11_BIND_SHADER_RESOURCE, D3D11_USAGE_DYNAMIC,
- D3D11_CPU_ACCESS_WRITE);
- hr = device->CreateTexture2D(&texdesc, NULL, &buftex);
- if (FAILED(hr))
- {
- PanicAlert("Failed to create font texture");
- return hr;
- }
- D3D::SetDebugObjectName((ID3D11DeviceChild*)buftex, "texture of a CD3DFont object");
-
- // lock the surface and write the alpha values for the set pixels
- D3D11_MAPPED_SUBRESOURCE texmap;
- hr = context->Map(buftex, 0, D3D11_MAP_WRITE_DISCARD, 0, &texmap);
- if (FAILED(hr)) PanicAlert("Failed to map a texture at %s %d\n", __FILE__, __LINE__);
-
- for (y = 0; y < m_dwTexHeight; y++)
- {
- u32* pDst32 = (u32*)((u8*)texmap.pData + y * texmap.RowPitch);
- for (x = 0; x < m_dwTexWidth; x++)
- {
- const u8 bAlpha = (pBitmapBits[m_dwTexWidth * y + x] & 0xff);
- *pDst32++ = (((bAlpha << 4) | bAlpha) << 24) | 0xFFFFFF;
- }
- }
-
- // clean up
- context->Unmap(buftex, 0);
- hr = D3D::device->CreateShaderResourceView(buftex, NULL, &m_pTexture);
- if (FAILED(hr)) PanicAlert("Failed to create shader resource view at %s %d\n", __FILE__, __LINE__);
- SAFE_RELEASE(buftex);
-
- SelectObject(hDC, hOldbmBitmap);
- DeleteObject(hbmBitmap);
-
- SelectObject(hDC, hOldFont);
- DeleteObject(hFont);
-
- // setup device objects for drawing
- m_pshader = D3D::CompileAndCreatePixelShader(fontpixshader, sizeof(fontpixshader));
- if (m_pshader == NULL) PanicAlert("Failed to create pixel shader, %s %d\n", __FILE__, __LINE__);
- D3D::SetDebugObjectName((ID3D11DeviceChild*)m_pshader, "pixel shader of a CD3DFont object");
-
- D3DBlob* vsbytecode;
- D3D::CompileVertexShader(fontvertshader, sizeof(fontvertshader), &vsbytecode);
- if (vsbytecode == NULL) PanicAlert("Failed to compile vertex shader, %s %d\n", __FILE__, __LINE__);
- m_vshader = D3D::CreateVertexShaderFromByteCode(vsbytecode);
- if (m_vshader == NULL) PanicAlert("Failed to create vertex shader, %s %d\n", __FILE__, __LINE__);
- D3D::SetDebugObjectName((ID3D11DeviceChild*)m_vshader, "vertex shader of a CD3DFont object");
-
- const D3D11_INPUT_ELEMENT_DESC desc[] =
- {
- { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
- { "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
- { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 28, D3D11_INPUT_PER_VERTEX_DATA, 0 },
- };
- hr = D3D::device->CreateInputLayout(desc, 3, vsbytecode->Data(), vsbytecode->Size(), &m_InputLayout);
- if (FAILED(hr)) PanicAlert("Failed to create input layout, %s %d\n", __FILE__, __LINE__);
- SAFE_RELEASE(vsbytecode);
-
- D3D11_BLEND_DESC blenddesc;
- blenddesc.AlphaToCoverageEnable = FALSE;
- blenddesc.IndependentBlendEnable = FALSE;
- blenddesc.RenderTarget[0].BlendEnable = TRUE;
- blenddesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
- blenddesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;
- blenddesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA;
- blenddesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
- blenddesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_SRC_ALPHA;
- blenddesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_INV_SRC_ALPHA;
- blenddesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
- hr = D3D::device->CreateBlendState(&blenddesc, &m_blendstate);
- CHECK(hr==S_OK, "Create font blend state");
- D3D::SetDebugObjectName((ID3D11DeviceChild*)m_blendstate, "blend state of a CD3DFont object");
-
- // this might need to be changed when adding multisampling support
- D3D11_RASTERIZER_DESC rastdesc = CD3D11_RASTERIZER_DESC(D3D11_FILL_SOLID, D3D11_CULL_NONE, false, 0, 0.f, 0.f, false, false, false, false);
- hr = D3D::device->CreateRasterizerState(&rastdesc, &m_raststate);
- CHECK(hr==S_OK, "Create font rasterizer state");
- D3D::SetDebugObjectName((ID3D11DeviceChild*)m_raststate, "rasterizer state of a CD3DFont object");
-
- D3D11_BUFFER_DESC vbdesc = CD3D11_BUFFER_DESC(MAX_NUM_VERTICES*sizeof(FONT2DVERTEX), D3D11_BIND_VERTEX_BUFFER, D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE);
- if (FAILED(hr = device->CreateBuffer(&vbdesc, NULL, &m_pVB)))
- {
- PanicAlert("Failed to create font vertex buffer at %s, line %d\n", __FILE__, __LINE__);
- return hr;
- }
- D3D::SetDebugObjectName((ID3D11DeviceChild*)m_pVB, "vertex buffer of a CD3DFont object");
- return S_OK;
-}
-
-int CD3DFont::Shutdown()
-{
- SAFE_RELEASE(m_pVB);
- SAFE_RELEASE(m_pTexture);
- SAFE_RELEASE(m_InputLayout);
- SAFE_RELEASE(m_pshader);
- SAFE_RELEASE(m_vshader);
-
- SAFE_RELEASE(m_blendstate);
- SAFE_RELEASE(m_raststate);
-
- return S_OK;
-}
-
-int CD3DFont::DrawTextScaled(float x, float y, float size, float spacing, u32 dwColor, const char* strText, bool center)
-{
- if (!m_pVB) return 0;
-
- UINT stride = sizeof(FONT2DVERTEX);
- UINT bufoffset = 0;
-
- float scalex = 1 / (float)D3D::GetBackBufferWidth() * 2.f;
- float scaley = 1 / (float)D3D::GetBackBufferHeight() * 2.f;
- float sizeratio = size / (float)m_LineHeight;
-
- // translate starting positions
- float sx = x * scalex - 1.f;
- float sy = 1.f - y * scaley;
- char c;
-
- // fill vertex buffer
- FONT2DVERTEX* pVertices;
- int dwNumTriangles = 0L;
-
- D3D11_MAPPED_SUBRESOURCE vbmap;
- HRESULT hr = context->Map(m_pVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &vbmap);
- if (FAILED(hr)) PanicAlert("Mapping vertex buffer failed, %s %d\n", __FILE__, __LINE__);
- pVertices = (D3D::FONT2DVERTEX*)vbmap.pData;
-
- // if center was requested, set current position as centre
- // this is currently never used
- if (center)
- {
- const char *oldText = strText;
- float mx=0;
- float maxx=0;
-
- while (c = *strText++)
- {
- if (c == ('\n')) mx = 0;
- if (c < (' ') ) continue;
- c -= 32;
- mx += (m_fTexCoords[c][2]-m_fTexCoords[c][0])/(m_fTexCoords[0][3] - m_fTexCoords[0][1]) + spacing;
- if (mx > maxx) maxx = mx;
- }
- sx -= scalex*maxx*size;
- strText = oldText;
- }
- // set general pipeline state
- D3D::stateman->PushBlendState(m_blendstate);
- D3D::stateman->PushRasterizerState(m_raststate);
- D3D::stateman->Apply();
-
- D3D::context->PSSetShader(m_pshader, NULL, 0);
- D3D::context->VSSetShader(m_vshader, NULL, 0);
-
- D3D::context->IASetInputLayout(m_InputLayout);
- D3D::context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
- D3D::context->PSSetShaderResources(0, 1, &m_pTexture);
-
- float fStartX = sx;
- while (c = *strText++)
- {
- if (c == ('\n'))
- {
- sx = fStartX;
- sy -= scaley * size;
- }
- if (c < (' ')) continue;
-
- c -= 32;
- float tx1 = m_fTexCoords[c][0];
- float ty1 = m_fTexCoords[c][1];
- float tx2 = m_fTexCoords[c][2];
- float ty2 = m_fTexCoords[c][3];
-
- float w = (float)(tx2-tx1) * m_dwTexWidth * scalex * sizeratio;
- float h = (float)(ty1-ty2) * m_dwTexHeight * scaley * sizeratio;
-
- FONT2DVERTEX v[6];
- v[0] = InitFont2DVertex( sx, h+sy, dwColor, tx1, ty2);
- v[1] = InitFont2DVertex( sx, sy, dwColor, tx1, ty1);
- v[2] = InitFont2DVertex(w+sx, h+sy, dwColor, tx2, ty2);
- v[3] = InitFont2DVertex(w+sx, sy, dwColor, tx2, ty1);
- v[4] = v[2];
- v[5] = v[1];
-
- memcpy(pVertices, v, 6*sizeof(FONT2DVERTEX));
-
- pVertices+=6;
- dwNumTriangles += 2;
-
- if (dwNumTriangles * 3 > (MAX_NUM_VERTICES - 6))
- {
- context->Unmap(m_pVB, 0);
-
- D3D::context->IASetVertexBuffers(0, 1, &m_pVB, &stride, &bufoffset);
- D3D::context->Draw(3 * dwNumTriangles, 0);
-
- dwNumTriangles = 0;
- D3D11_MAPPED_SUBRESOURCE vbmap;
- hr = context->Map(m_pVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &vbmap);
- if (FAILED(hr)) PanicAlert("Mapping vertex buffer failed, %s %d\n", __FILE__, __LINE__);
- pVertices = (D3D::FONT2DVERTEX*)vbmap.pData;
- }
- sx += w + spacing * scalex * size;
- }
-
- // Unlock and render the vertex buffer
- context->Unmap(m_pVB, 0);
- if (dwNumTriangles > 0)
- {
- D3D::context->IASetVertexBuffers(0, 1, &m_pVB, &stride, &bufoffset);
- D3D::context->Draw(3 * dwNumTriangles, 0);
- }
- D3D::stateman->PopBlendState();
- D3D::stateman->PopRasterizerState();
- return S_OK;
-}
-
-ID3D11Buffer* CreateQuadVertexBuffer(unsigned int size, void* data)
-{
- ID3D11Buffer* vb;
- D3D11_BUFFER_DESC vbdesc;
- vbdesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
- vbdesc.ByteWidth = size;
- vbdesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
- vbdesc.MiscFlags = 0;
- vbdesc.Usage = D3D11_USAGE_DYNAMIC;
- if (data)
- {
- D3D11_SUBRESOURCE_DATA bufdata;
- bufdata.pSysMem = data;
- if (FAILED(device->CreateBuffer(&vbdesc, &bufdata, &vb))) return NULL;
- }
- else if (FAILED(device->CreateBuffer(&vbdesc, NULL, &vb))) return NULL;
-
- return vb;
-}
-
-ID3D11SamplerState* linear_copy_sampler = NULL;
-ID3D11SamplerState* point_copy_sampler = NULL;
-ID3D11Buffer* stqvb = NULL;
-ID3D11Buffer* stsqvb = NULL;
-ID3D11Buffer* clearvb = NULL;
-
-typedef struct { float x,y,z,u,v; } STQVertex;
-typedef struct { float x,y,z,u,v; } STSQVertex;
-typedef struct { float x,y,z; u32 col; } ClearVertex;
-
-struct
-{
- float u1, v1, u2, v2;
-} tex_quad_data;
-
-struct
-{
- MathUtil::Rectangle rdest;
- float u1, v1, u2, v2;
-} tex_sub_quad_data;
-
-struct
-{
- u32 col;
- float z;
-} clear_quad_data;
-
-void InitUtils()
-{
- float border[4] = { 0.f, 0.f, 0.f, 0.f };
- D3D11_SAMPLER_DESC samDesc = CD3D11_SAMPLER_DESC(D3D11_FILTER_MIN_MAG_MIP_POINT, D3D11_TEXTURE_ADDRESS_BORDER, D3D11_TEXTURE_ADDRESS_BORDER, D3D11_TEXTURE_ADDRESS_BORDER, 0.f, 1, D3D11_COMPARISON_ALWAYS, border, -D3D11_FLOAT32_MAX, D3D11_FLOAT32_MAX);
- HRESULT hr = D3D::device->CreateSamplerState(&samDesc, &point_copy_sampler);
- if (FAILED(hr)) PanicAlert("Failed to create sampler state at %s %d\n", __FILE__, __LINE__);
- else SetDebugObjectName((ID3D11DeviceChild*)point_copy_sampler, "point copy sampler state");
-
- samDesc = CD3D11_SAMPLER_DESC(D3D11_FILTER_MIN_MAG_MIP_LINEAR, D3D11_TEXTURE_ADDRESS_BORDER, D3D11_TEXTURE_ADDRESS_BORDER, D3D11_TEXTURE_ADDRESS_BORDER, 0.f, 1, D3D11_COMPARISON_ALWAYS, border, -D3D11_FLOAT32_MAX, D3D11_FLOAT32_MAX);
- hr = D3D::device->CreateSamplerState(&samDesc, &linear_copy_sampler);
- if (FAILED(hr)) PanicAlert("Failed to create sampler state at %s %d\n", __FILE__, __LINE__);
- else SetDebugObjectName((ID3D11DeviceChild*)linear_copy_sampler, "linear copy sampler state");
-
- // cached data used to avoid unnecessarily reloading the vertex buffers
- memset(&tex_quad_data, 0, sizeof(tex_quad_data));
- memset(&tex_sub_quad_data, 0, sizeof(tex_sub_quad_data));
- memset(&clear_quad_data, 0, sizeof(clear_quad_data));
-
- STQVertex stqcoords[4] = {
- {-1.0f, 1.0f, 0.0f, 0, 0},
- { 1.0f, 1.0f, 0.0f, 0, 0},
- {-1.0f,-1.0f, 0.0f, 0, 0},
- { 1.0f,-1.0f, 0.0f, 0, 0},
- };
-
- STSQVertex stsqcoords[4];
- memset(stsqcoords, 0, sizeof(stsqcoords));
-
- ClearVertex cqcoords[4] = {
- {-1.0f, 1.0f, 0, 0},
- { 1.0f, 1.0f, 0, 0},
- {-1.0f, -1.0f, 0, 0},
- { 1.0f, -1.0f, 0, 0},
- };
-
- stqvb = CreateQuadVertexBuffer(4*sizeof(STQVertex), stqcoords);
- CHECK(stqvb!=NULL, "Create vertex buffer of drawShadedTexQuad");
- SetDebugObjectName((ID3D11DeviceChild*)stqvb, "vertex buffer of drawShadedTexQuad");
-
- stsqvb = CreateQuadVertexBuffer(4*sizeof(STSQVertex), stsqcoords);
- CHECK(stsqvb!=NULL, "Create vertex buffer of drawShadedTexSubQuad");
- SetDebugObjectName((ID3D11DeviceChild*)stsqvb, "vertex buffer of drawShadedTexSubQuad");
-
- clearvb = CreateQuadVertexBuffer(4*sizeof(ClearVertex), cqcoords);
- CHECK(clearvb!=NULL, "Create vertex buffer of drawClearQuad");
- SetDebugObjectName((ID3D11DeviceChild*)clearvb, "vertex buffer of drawClearQuad");
-
- font.Init();
-}
-
-void ShutdownUtils()
-{
- font.Shutdown();
- SAFE_RELEASE(point_copy_sampler);
- SAFE_RELEASE(linear_copy_sampler);
- SAFE_RELEASE(stqvb);
- SAFE_RELEASE(stsqvb);
- SAFE_RELEASE(clearvb);
-}
-
-void SetPointCopySampler()
-{
- D3D::context->PSSetSamplers(0, 1, &point_copy_sampler);
-}
-
-void SetLinearCopySampler()
-{
- D3D::context->PSSetSamplers(0, 1, &linear_copy_sampler);
-}
-
-void drawShadedTexQuad(ID3D11ShaderResourceView* texture,
- const D3D11_RECT* rSource,
- int SourceWidth,
- int SourceHeight,
- ID3D11PixelShader* PShader,
- ID3D11VertexShader* Vshader,
- ID3D11InputLayout* layout)
-{
- float sw = 1.0f /(float) SourceWidth;
- float sh = 1.0f /(float) SourceHeight;
- float u1 = ((float)rSource->left) * sw;
- float u2 = ((float)rSource->right) * sw;
- float v1 = ((float)rSource->top) * sh;
- float v2 = ((float)rSource->bottom) * sh;
-
- STQVertex coords[4] = {
- {-1.0f, 1.0f, 0.0f, u1, v1},
- { 1.0f, 1.0f, 0.0f, u2, v1},
- {-1.0f,-1.0f, 0.0f, u1, v2},
- { 1.0f,-1.0f, 0.0f, u2, v2},
- };
-
- // only upload the data to VRAM if it changed
- if (tex_quad_data.u1 != u1 || tex_quad_data.v1 != v1 ||
- tex_quad_data.u2 != u2 || tex_quad_data.v2 != v2)
- {
- D3D11_MAPPED_SUBRESOURCE map;
- D3D::context->Map(stqvb, 0, D3D11_MAP_WRITE_DISCARD, 0, &map);
- memcpy(map.pData, coords, sizeof(coords));
- D3D::context->Unmap(stqvb, 0);
- tex_quad_data.u1 = u1;
- tex_quad_data.v1 = v1;
- tex_quad_data.u2 = u2;
- tex_quad_data.v2 = v2;
- }
- UINT stride = sizeof(STQVertex);
- UINT offset = 0;
-
- D3D::context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
- D3D::context->IASetInputLayout(layout);
- D3D::context->IASetVertexBuffers(0, 1, &stqvb, &stride, &offset);
- D3D::context->PSSetShader(PShader, NULL, 0);
- D3D::context->PSSetShaderResources(0, 1, &texture);
- D3D::context->VSSetShader(Vshader, NULL, 0);
- D3D::stateman->Apply();
- D3D::context->Draw(4, 0);
-
- ID3D11ShaderResourceView* texres = NULL;
- context->PSSetShaderResources(0, 1, &texres); // immediately unbind the texture
-}
-
-void drawShadedTexSubQuad(ID3D11ShaderResourceView* texture,
- const MathUtil::Rectangle* rSource,
- int SourceWidth,
- int SourceHeight,
- const MathUtil::Rectangle* rDest,
- ID3D11PixelShader* PShader,
- ID3D11VertexShader* Vshader,
- ID3D11InputLayout* layout)
-{
- float sw = 1.0f /(float) SourceWidth;
- float sh = 1.0f /(float) SourceHeight;
- float u1 = (rSource->left ) * sw;
- float u2 = (rSource->right ) * sw;
- float v1 = (rSource->top ) * sh;
- float v2 = (rSource->bottom) * sh;
-
- STSQVertex coords[4] = {
- { rDest->left , rDest->bottom, 0.0f, u1, v1},
- { rDest->right, rDest->bottom, 0.0f, u2, v1},
- { rDest->left , rDest->top , 0.0f, u1, v2},
- { rDest->right, rDest->top , 0.0f, u2, v2},
- };
-
- // only upload the data to VRAM if it changed
- if (memcmp(rDest, &tex_sub_quad_data.rdest, sizeof(rDest)) != 0 ||
- tex_sub_quad_data.u1 != u1 || tex_sub_quad_data.v1 != v1 ||
- tex_sub_quad_data.u2 != u2 || tex_sub_quad_data.v2 != v2)
- {
- D3D11_MAPPED_SUBRESOURCE map;
- D3D::context->Map(stsqvb, 0, D3D11_MAP_WRITE_DISCARD, 0, &map);
- memcpy(map.pData, coords, sizeof(coords));
- D3D::context->Unmap(stsqvb, 0);
- tex_sub_quad_data.u1 = u1;
- tex_sub_quad_data.v1 = v1;
- tex_sub_quad_data.u2 = u2;
- tex_sub_quad_data.v2 = v2;
- memcpy(&tex_sub_quad_data.rdest, &rDest, sizeof(rDest));
- }
- UINT stride = sizeof(STSQVertex);
- UINT offset = 0;
-
- context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
- context->IASetVertexBuffers(0, 1, &stsqvb, &stride, &offset);
- context->IASetInputLayout(layout);
- context->PSSetShaderResources(0, 1, &texture);
- context->PSSetShader(PShader, NULL, 0);
- context->VSSetShader(Vshader, NULL, 0);
- stateman->Apply();
- context->Draw(4, 0);
-
- ID3D11ShaderResourceView* texres = NULL;
- context->PSSetShaderResources(0, 1, &texres); // immediately unbind the texture
-}
-
-void drawClearQuad(u32 Color, float z, ID3D11PixelShader* PShader, ID3D11VertexShader* Vshader, ID3D11InputLayout* layout)
-{
- if (clear_quad_data.col != Color || clear_quad_data.z != z)
- {
- const ClearVertex coords[4] = {
- {-1.0f, 1.0f, z, Color},
- { 1.0f, 1.0f, z, Color},
- {-1.0f, -1.0f, z, Color},
- { 1.0f, -1.0f, z, Color},
- };
-
- D3D11_MAPPED_SUBRESOURCE map;
- context->Map(clearvb, 0, D3D11_MAP_WRITE_DISCARD, 0, &map);
- memcpy(map.pData, coords, sizeof(coords));
- context->Unmap(clearvb, 0);
- clear_quad_data.col = Color;
- clear_quad_data.z = z;
- }
- context->VSSetShader(Vshader, NULL, 0);
- context->PSSetShader(PShader, NULL, 0);
- context->IASetInputLayout(layout);
-
- UINT stride = sizeof(ClearVertex);
- UINT offset = 0;
- context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
- context->IASetVertexBuffers(0, 1, &clearvb, &stride, &offset);
- stateman->Apply();
- context->Draw(4, 0);
-}
-
-
-} // namespace
-
-}
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DUtil.h b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DUtil.h
deleted file mode 100644
index 487a84724f..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_D3DUtil.h
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#pragma once
-
-#include
-#include
-
-#include "DX11_D3DBase.h"
-
-namespace DX11
-{
-
-namespace D3D
-{
- // Font creation flags
- #define D3DFONT_BOLD 0x0001
- #define D3DFONT_ITALIC 0x0002
-
- // Font rendering flags
- #define D3DFONT_CENTERED 0x0001
-
- class CD3DFont
- {
- ID3D11ShaderResourceView* m_pTexture;
- ID3D11Buffer* m_pVB;
- ID3D11InputLayout* m_InputLayout;
- ID3D11PixelShader* m_pshader;
- ID3D11VertexShader* m_vshader;
- ID3D11BlendState* m_blendstate;
- ID3D11RasterizerState* m_raststate;
- const int m_dwTexWidth;
- const int m_dwTexHeight;
- unsigned int m_LineHeight;
- float m_fTexCoords[128-32][4];
-
- public:
- CD3DFont();
- // 2D text drawing function
- // Initializing and destroying device-dependent objects
- int Init();
- int Shutdown();
- int DrawTextScaled(float x, float y,
- float size,
- float spacing, u32 dwColor,
- const char* strText, bool center=true);
- };
-
- extern CD3DFont font;
-
- void InitUtils();
- void ShutdownUtils();
-
- void SetPointCopySampler();
- void SetLinearCopySampler();
-
- void drawShadedTexQuad(ID3D11ShaderResourceView* texture,
- const D3D11_RECT* rSource,
- int SourceWidth,
- int SourceHeight,
- ID3D11PixelShader* PShader,
- ID3D11VertexShader* VShader,
- ID3D11InputLayout* layout);
- void drawShadedTexSubQuad(ID3D11ShaderResourceView* texture,
- const MathUtil::Rectangle* rSource,
- int SourceWidth,
- int SourceHeight,
- const MathUtil::Rectangle* rDest,
- ID3D11PixelShader* PShader,
- ID3D11VertexShader* Vshader,
- ID3D11InputLayout* layout);
- void drawClearQuad(u32 Color, float z, ID3D11PixelShader* PShader, ID3D11VertexShader* Vshader, ID3D11InputLayout* layout);
- void SaveRenderStates();
- void RestoreRenderStates();
-}
-
-}
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_FramebufferManager.cpp b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_FramebufferManager.cpp
deleted file mode 100644
index b345cee502..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_FramebufferManager.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-// VideoCommon
-#include "VideoConfig.h"
-
-// DX11
-#include "DX11_Render.h"
-#include "DX11_D3DBase.h"
-#include "DX11_D3DTexture.h"
-#include "DX11_D3DUtil.h"
-#include "DX11_FramebufferManager.h"
-#include "DX11_PixelShaderCache.h"
-#include "DX11_VertexShaderCache.h"
-
-#include "../Main.h"
-
-namespace DX11
-{
-
-XFBSource FramebufferManager::m_realXFBSource; // used in real XFB mode
-
-FramebufferManager::EFB FramebufferManager::m_efb;
-
-D3DTexture2D* &FramebufferManager::GetEFBColorTexture() { return m_efb.color_tex; }
-ID3D11Texture2D* &FramebufferManager::GetEFBColorStagingBuffer() { return m_efb.color_staging_buf; }
-
-D3DTexture2D* &FramebufferManager::GetEFBDepthTexture() { return m_efb.depth_tex; }
-D3DTexture2D* &FramebufferManager::GetEFBDepthReadTexture() { return m_efb.depth_read_texture; }
-ID3D11Texture2D* &FramebufferManager::GetEFBDepthStagingBuffer() { return m_efb.depth_staging_buf; }
-
-FramebufferManager::FramebufferManager()
-{
- m_efb.color_tex = NULL;
- m_efb.color_staging_buf = NULL;
- m_efb.depth_tex = NULL;
- m_efb.depth_staging_buf = NULL;
- m_efb.depth_read_texture = NULL;
-
- m_realXFBSource.tex = NULL;
-
- unsigned int target_width = Renderer::GetFullTargetWidth();
- unsigned int target_height = Renderer::GetFullTargetHeight();
- ID3D11Texture2D* buf;
- D3D11_TEXTURE2D_DESC texdesc;
- HRESULT hr;
-
- // create framebuffer color texture
- m_efb.color_tex = D3DTexture2D::Create(target_width, target_height,
- (D3D11_BIND_FLAG)(D3D11_BIND_RENDER_TARGET|D3D11_BIND_SHADER_RESOURCE),
- D3D11_USAGE_DEFAULT, DXGI_FORMAT_R8G8B8A8_UNORM);
- CHECK(m_efb.color_tex, "create EFB color texture (size: %dx%d)", target_width, target_height);
- D3D::SetDebugObjectName((ID3D11DeviceChild*)m_efb.color_tex->GetTex(), "EFB color texture");
- D3D::SetDebugObjectName((ID3D11DeviceChild*)m_efb.color_tex->GetRTV(), "EFB color texture render target view");
- D3D::SetDebugObjectName((ID3D11DeviceChild*)m_efb.color_tex->GetSRV(), "EFB color texture shader resource view");
-
- // create a staging texture for Renderer::AccessEFB
- texdesc = CD3D11_TEXTURE2D_DESC(DXGI_FORMAT_R8G8B8A8_UNORM, 1, 1, 1, 1, 0,
- D3D11_USAGE_STAGING, D3D11_CPU_ACCESS_WRITE|D3D11_CPU_ACCESS_READ);
- hr = D3D::device->CreateTexture2D(&texdesc, NULL, &m_efb.color_staging_buf);
- CHECK(SUCCEEDED(hr), "create EFB color staging buffer (hr=%#x)", hr);
- D3D::SetDebugObjectName((ID3D11DeviceChild*)m_efb.color_staging_buf, "EFB color staging texture (used for Renderer::AccessEFB)");
-
- // EFB depth buffer
- texdesc = CD3D11_TEXTURE2D_DESC(DXGI_FORMAT_R24G8_TYPELESS, target_width,
- target_height, 1, 1, D3D11_BIND_DEPTH_STENCIL|D3D11_BIND_SHADER_RESOURCE);
- hr = D3D::device->CreateTexture2D(&texdesc, NULL, &buf);
- CHECK(hr==S_OK, "create EFB depth texture (size: %dx%d; hr=%#x)", target_width, target_height, hr);
- m_efb.depth_tex = new D3DTexture2D(buf, (D3D11_BIND_FLAG)(D3D11_BIND_DEPTH_STENCIL|D3D11_BIND_SHADER_RESOURCE),
- DXGI_FORMAT_R24_UNORM_X8_TYPELESS, DXGI_FORMAT_D24_UNORM_S8_UINT);
- SAFE_RELEASE(buf);
- D3D::SetDebugObjectName((ID3D11DeviceChild*)m_efb.depth_tex->GetTex(), "EFB depth texture");
- D3D::SetDebugObjectName((ID3D11DeviceChild*)m_efb.depth_tex->GetDSV(), "EFB depth texture depth stencil view");
- D3D::SetDebugObjectName((ID3D11DeviceChild*)m_efb.depth_tex->GetSRV(), "EFB depth texture shader resource view");
-
- // render target for depth buffer access in Renderer::AccessEFB
- texdesc = CD3D11_TEXTURE2D_DESC(DXGI_FORMAT_R32_FLOAT, 4, 4, 1, 1, D3D11_BIND_RENDER_TARGET);
- hr = D3D::device->CreateTexture2D(&texdesc, NULL, &buf);
- CHECK(hr==S_OK, "create EFB depth read texture (hr=%#x)", hr);
- m_efb.depth_read_texture = new D3DTexture2D(buf, D3D11_BIND_RENDER_TARGET);
- SAFE_RELEASE(buf);
- D3D::SetDebugObjectName((ID3D11DeviceChild*)m_efb.depth_read_texture->GetTex(), "EFB depth read texture (used in Renderer::AccessEFB)");
- D3D::SetDebugObjectName((ID3D11DeviceChild*)m_efb.depth_read_texture->GetRTV(), "EFB depth read texture render target view (used in Renderer::AccessEFB)");
-
- // staging texture to which we copy the data from m_efb.depth_read_texture
- texdesc = CD3D11_TEXTURE2D_DESC(DXGI_FORMAT_R32_FLOAT, 4, 4, 1, 1, 0, D3D11_USAGE_STAGING, D3D11_CPU_ACCESS_READ|D3D11_CPU_ACCESS_WRITE);
- hr = D3D::device->CreateTexture2D(&texdesc, NULL, &m_efb.depth_staging_buf);
- CHECK(hr==S_OK, "create EFB depth staging buffer (hr=%#x)", hr);
- D3D::SetDebugObjectName((ID3D11DeviceChild*)m_efb.depth_staging_buf, "EFB depth staging texture (used for Renderer::AccessEFB)");
-}
-
-FramebufferManager::~FramebufferManager()
-{
- SAFE_RELEASE(m_efb.color_tex);
- SAFE_RELEASE(m_efb.color_staging_buf);
- SAFE_RELEASE(m_efb.depth_tex);
- SAFE_RELEASE(m_efb.depth_staging_buf);
- SAFE_RELEASE(m_efb.depth_read_texture);
-
- SAFE_RELEASE(m_realXFBSource.tex);
-}
-
-void XFBSource::CopyEFB(const TargetRectangle& efbSource)
-{
- // copy EFB data to XFB and restore render target again
- D3D11_VIEWPORT vp = CD3D11_VIEWPORT(0.f, 0.f, (float)texWidth, (float)texHeight);
- D3D::context->RSSetViewports(1, &vp);
- D3D::context->OMSetRenderTargets(1, &tex->GetRTV(), NULL);
- D3D::SetLinearCopySampler();
-
- D3DTexture2D* const ctex = FramebufferManager::GetEFBColorTexture();
-
- D3D::drawShadedTexQuad(ctex->GetSRV(), efbSource.AsRECT(),
- Renderer::GetFullTargetWidth(), Renderer::GetFullTargetHeight(),
- PixelShaderCache::GetColorCopyProgram(), VertexShaderCache::GetSimpleVertexShader(),
- VertexShaderCache::GetSimpleInputLayout());
-
- D3D::context->OMSetRenderTargets(1, &ctex->GetRTV(), FramebufferManager::GetEFBDepthTexture()->GetDSV());
-}
-
-XFBSource::~XFBSource()
-{
- tex->Release();
-}
-
-XFBSourceBase* FramebufferManager::CreateXFBSource(unsigned int target_width, unsigned int target_height)
-{
- XFBSource* const xfbs = new XFBSource;
- xfbs->tex = D3DTexture2D::Create(target_width, target_height,
- (D3D11_BIND_FLAG)(D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE),
- D3D11_USAGE_DEFAULT, DXGI_FORMAT_R8G8B8A8_UNORM);
-
- return xfbs;
-}
-
-void FramebufferManager::copyToRealXFB(u32 xfbAddr, u32 fbWidth, u32 fbHeight, const EFBRectangle& sourceRc)
-{
- // TODO
- PanicAlert("copyToRealXFB not implemented, yet\n");
-}
-
-const XFBSource** FramebufferManager::getRealXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32 &xfbCount)
-{
- PanicAlert("getRealXFBSource not implemented, yet\n");
- return NULL;
-}
-
-}
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_FramebufferManager.h b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_FramebufferManager.h
deleted file mode 100644
index 8ff14891e3..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_FramebufferManager.h
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef _DX11_FBMANAGER_D3D_H_
-#define _DX11_FBMANAGER_D3D_H_
-
-#include
-
-#include "DX11_D3DBase.h"
-
-#include "../FramebufferManager.h"
-
-namespace DX11
-{
-
-// On the GameCube, the game sends a request for the graphics processor to
-// transfer its internal EFB (Embedded Framebuffer) to an area in GameCube RAM
-// called the XFB (External Framebuffer). The size and location of the XFB is
-// decided at the time of the copy, and the format is always YUYV. The video
-// interface is given a pointer to the XFB, which will be decoded and
-// displayed on the TV.
-//
-// There are two ways for Dolphin to emulate this:
-//
-// Real XFB mode:
-//
-// Dolphin will behave like the GameCube and encode the EFB to
-// a portion of GameCube RAM. The emulated video interface will decode the data
-// for output to the screen.
-//
-// Advantages: Behaves exactly like the GameCube.
-// Disadvantages: Resolution will be limited.
-//
-// Virtual XFB mode:
-//
-// When a request is made to copy the EFB to an XFB, Dolphin
-// will remember the RAM location and size of the XFB in a Virtual XFB list.
-// The video interface will look up the XFB in the list and use the enhanced
-// data stored there, if available.
-//
-// Advantages: Enables high resolution graphics, better than real hardware.
-// Disadvantages: If the GameCube CPU writes directly to the XFB (which is
-// possible but uncommon), the Virtual XFB will not capture this information.
-
-// There may be multiple XFBs in GameCube RAM. This is the maximum number to
-// virtualize.
-
-struct XFBSource : public XFBSourceBase
-{
- XFBSource() : tex(NULL) {}
- ~XFBSource();
-
- void CopyEFB(const TargetRectangle& efbSource);
-
- D3DTexture2D* tex;
-};
-
-class FramebufferManager : public ::FramebufferManagerBase
-{
- friend struct XFBSource;
-
-public:
- FramebufferManager();
- ~FramebufferManager();
-
- static D3DTexture2D* &GetEFBColorTexture();
- static ID3D11Texture2D* &GetEFBColorStagingBuffer();
-
- static D3DTexture2D* &GetEFBDepthTexture();
- static D3DTexture2D* &GetEFBDepthReadTexture();
- static ID3D11Texture2D* &GetEFBDepthStagingBuffer();
-
- XFBSourceBase* CreateXFBSource(unsigned int target_width, unsigned int target_height);
-
-private:
- static void copyToRealXFB(u32 xfbAddr, u32 fbWidth, u32 fbHeight, const EFBRectangle& sourceRc);
- static const XFBSource** getRealXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32 &xfbCount);
-
- static XFBSource m_realXFBSource; // used in real XFB mode
-
- static struct EFB
- {
- D3DTexture2D* color_tex;
- ID3D11Texture2D* color_staging_buf;
-
- D3DTexture2D* depth_tex;
- ID3D11Texture2D* depth_staging_buf;
- D3DTexture2D* depth_read_texture;
- } m_efb;
-};
-
-}
-
-#endif
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_GfxState.cpp b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_GfxState.cpp
deleted file mode 100644
index c9b32e8455..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_GfxState.cpp
+++ /dev/null
@@ -1,372 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#include "VideoConfig.h"
-#include "DX11_GfxState.h"
-
-namespace DX11
-{
-
-namespace D3D
-{
-
-EmuGfxState* gfxstate;
-StateManager* stateman;
-
-EmuGfxState::EmuGfxState() : vertexshader(NULL), vsbytecode(NULL), pixelshader(NULL), psbytecode(NULL), apply_called(false)
-{
- for (unsigned int k = 0;k < 8;k++)
- {
- float border[4] = {0.f, 0.f, 0.f, 0.f};
- shader_resources[k] = NULL;
- samplerdesc[k] = CD3D11_SAMPLER_DESC(D3D11_FILTER_MIN_MAG_MIP_LINEAR, D3D11_TEXTURE_ADDRESS_CLAMP, D3D11_TEXTURE_ADDRESS_CLAMP, D3D11_TEXTURE_ADDRESS_CLAMP, 0.f, 16, D3D11_COMPARISON_ALWAYS, border, -D3D11_FLOAT32_MAX, D3D11_FLOAT32_MAX);
- if(g_ActiveConfig.iMaxAnisotropy > 1) samplerdesc[k].Filter = D3D11_FILTER_ANISOTROPIC;
- }
-
- memset(&blenddesc, 0, sizeof(blenddesc));
- blenddesc.AlphaToCoverageEnable = FALSE;
- blenddesc.IndependentBlendEnable = FALSE;
- blenddesc.RenderTarget[0].BlendEnable = FALSE;
- blenddesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
- blenddesc.RenderTarget[0].SrcBlend = D3D11_BLEND_ONE;
- blenddesc.RenderTarget[0].DestBlend = D3D11_BLEND_ZERO;
- blenddesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
- blenddesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE;
- blenddesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO;
- blenddesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
-
- memset(&depthdesc, 0, sizeof(depthdesc));
- depthdesc.DepthEnable = TRUE;
- depthdesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;
- depthdesc.DepthFunc = D3D11_COMPARISON_LESS;
- depthdesc.StencilEnable = FALSE;
- depthdesc.StencilReadMask = D3D11_DEFAULT_STENCIL_READ_MASK;
- depthdesc.StencilWriteMask = D3D11_DEFAULT_STENCIL_WRITE_MASK;
-
- // this probably must be changed once multisampling support gets added
- rastdesc = CD3D11_RASTERIZER_DESC(D3D11_FILL_SOLID, D3D11_CULL_NONE, false, 0, 0.f, 0, false, true, false, false);
-
- pscbuf = NULL;
- vscbuf = NULL;
- vshaderchanged = false;
- inp_layout = NULL;
- num_inp_elems = 0;
-
- pscbufchanged = false;
- vscbufchanged = false;
-}
-
-EmuGfxState::~EmuGfxState()
-{
- for (unsigned int k = 0;k < 8;k++)
- SAFE_RELEASE(shader_resources[k])
-
- SAFE_RELEASE(vsbytecode);
- SAFE_RELEASE(psbytecode);
- SAFE_RELEASE(vertexshader);
- SAFE_RELEASE(pixelshader);
-
- SAFE_RELEASE(pscbuf);
- SAFE_RELEASE(vscbuf);
-
- SAFE_RELEASE(inp_layout);
-}
-
-// TODO: No need to store the whole bytecode, signature might be enough (?)
-void EmuGfxState::SetVShader(ID3D11VertexShader* shader, D3DBlob* bcode)
-{
- // TODO: vshaderchanged actually just needs to be true if the signature changed
- if (bcode && vsbytecode != bcode) vshaderchanged = true;
- SAFE_RELEASE(vsbytecode);
- SAFE_RELEASE(vertexshader);
-
- if (shader && bcode)
- {
- vertexshader = shader;
- shader->AddRef();
- vsbytecode = bcode;
- bcode->AddRef();
- }
- else if (shader || bcode)
- {
- PanicAlert("Invalid parameters!\n");
- }
-}
-
-void EmuGfxState::SetPShader(ID3D11PixelShader* shader)
-{
- if (pixelshader) pixelshader->Release();
- pixelshader = shader;
- if (shader) shader->AddRef();
-}
-
-void EmuGfxState::SetInputElements(const D3D11_INPUT_ELEMENT_DESC* elems, UINT num)
-{
- num_inp_elems = num;
- memcpy(inp_elems, elems, num*sizeof(D3D11_INPUT_ELEMENT_DESC));
-}
-
-void EmuGfxState::SetShaderResource(unsigned int stage, ID3D11ShaderResourceView* srv)
-{
- if (shader_resources[stage])
- shader_resources[stage]->Release();
- shader_resources[stage] = srv;
- if (srv)
- srv->AddRef();
-}
-
-void EmuGfxState::ApplyState()
-{
- HRESULT hr;
-
- // input layout (only needs to be updated if the vertex shader signature changed)
- if (vshaderchanged)
- {
- SAFE_RELEASE(inp_layout);
- hr = D3D::device->CreateInputLayout(inp_elems, num_inp_elems, vsbytecode->Data(), vsbytecode->Size(), &inp_layout);
- if (FAILED(hr)) PanicAlert("Failed to create input layout, %s %d\n", __FILE__, __LINE__);
- SetDebugObjectName((ID3D11DeviceChild*)inp_layout, "an input layout of EmuGfxState");
- vshaderchanged = false;
- }
- D3D::context->IASetInputLayout(inp_layout);
-
- // vertex shader
- // TODO: divide the global variables of the generated shaders into about 5 constant buffers
- // TODO: improve interaction between EmuGfxState and global state management, so that we don't need to set the constant buffers every time
- if (!vscbuf)
- {
- unsigned int size = ((sizeof(vsconstants))&(~0xf))+0x10; // must be a multiple of 16
- D3D11_BUFFER_DESC cbdesc = CD3D11_BUFFER_DESC(size, D3D11_BIND_CONSTANT_BUFFER, D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE);
- hr = device->CreateBuffer(&cbdesc, NULL, &vscbuf);
- CHECK(hr==S_OK, "Create vertex shader constant buffer (size=%u)", size);
- SetDebugObjectName((ID3D11DeviceChild*)vscbuf, "a vertex shader constant buffer of EmuGfxState");
- }
- if (vscbufchanged)
- {
- D3D11_MAPPED_SUBRESOURCE map;
- context->Map(vscbuf, 0, D3D11_MAP_WRITE_DISCARD, 0, &map);
- memcpy(map.pData, vsconstants, sizeof(vsconstants));
- context->Unmap(vscbuf, 0);
- }
- D3D::context->VSSetConstantBuffers(0, 1, &vscbuf);
-
- // pixel shader
- if (!pscbuf)
- {
- unsigned int size = ((sizeof(psconstants))&(~0xf))+0x10; // must be a multiple of 16
- D3D11_BUFFER_DESC cbdesc = CD3D11_BUFFER_DESC(size, D3D11_BIND_CONSTANT_BUFFER, D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE);
- device->CreateBuffer(&cbdesc, NULL, &pscbuf);
- CHECK(hr==S_OK, "Create pixel shader constant buffer (size=%u)", size);
- SetDebugObjectName((ID3D11DeviceChild*)pscbuf, "a pixel shader constant buffer of EmuGfxState");
- }
- if (pscbufchanged)
- {
- D3D11_MAPPED_SUBRESOURCE map;
- context->Map(pscbuf, 0, D3D11_MAP_WRITE_DISCARD, 0, &map);
- memcpy(map.pData, psconstants, sizeof(psconstants));
- context->Unmap(pscbuf, 0);
- pscbufchanged = false;
- }
- D3D::context->PSSetConstantBuffers(0, 1, &pscbuf);
-
- ID3D11SamplerState* samplerstate[8];
- for (unsigned int stage = 0; stage < 8; stage++)
- {
- if (shader_resources[stage])
- {
- if(g_ActiveConfig.iMaxAnisotropy > 1) samplerdesc[stage].Filter = D3D11_FILTER_ANISOTROPIC;
- hr = D3D::device->CreateSamplerState(&samplerdesc[stage], &samplerstate[stage]);
- if (FAILED(hr)) PanicAlert("Fail %s %d, stage=%d\n", __FILE__, __LINE__, stage);
- else SetDebugObjectName((ID3D11DeviceChild*)samplerstate[stage], "a sampler state of EmuGfxState");
- }
- else samplerstate[stage] = NULL;
- }
- D3D::context->PSSetSamplers(0, 8, samplerstate);
- for (unsigned int stage = 0; stage < 8; stage++)
- SAFE_RELEASE(samplerstate[stage]);
-
- ID3D11BlendState* blstate;
- hr = device->CreateBlendState(&blenddesc, &blstate);
- if (FAILED(hr)) PanicAlert("Failed to create blend state at %s %d\n", __FILE__, __LINE__);
- stateman->PushBlendState(blstate);
- SetDebugObjectName((ID3D11DeviceChild*)blstate, "a blend state of EmuGfxState");
- SAFE_RELEASE(blstate);
-
- rastdesc.FillMode = (g_ActiveConfig.bWireFrame) ? D3D11_FILL_WIREFRAME : D3D11_FILL_SOLID;
- ID3D11RasterizerState* raststate;
- hr = device->CreateRasterizerState(&rastdesc, &raststate);
- if (FAILED(hr)) PanicAlert("Failed to create rasterizer state at %s %d\n", __FILE__, __LINE__);
- SetDebugObjectName((ID3D11DeviceChild*)raststate, "a rasterizer state of EmuGfxState");
- stateman->PushRasterizerState(raststate);
- SAFE_RELEASE(raststate);
-
- ID3D11DepthStencilState* depth_state;
- hr = device->CreateDepthStencilState(&depthdesc, &depth_state);
- if (SUCCEEDED(hr)) SetDebugObjectName((ID3D11DeviceChild*)depth_state, "a depth-stencil state of EmuGfxState");
- else PanicAlert("Failed to create depth state at %s %d\n", __FILE__, __LINE__);
- D3D::stateman->PushDepthState(depth_state);
- SAFE_RELEASE(depth_state);
-
- context->PSSetShader(pixelshader, NULL, 0);
- context->VSSetShader(vertexshader, NULL, 0);
- context->PSSetShaderResources(0, 8, shader_resources);
-
- stateman->Apply();
- apply_called = true;
-}
-
-void EmuGfxState::AlphaPass()
-{
- if (!apply_called) ERROR_LOG(VIDEO, "EmuGfxState::AlphaPass called without having called ApplyState before!")
- else stateman->PopBlendState();
-
- // pixel shader for alpha pass is different, so update it
- context->PSSetShader(pixelshader, NULL, 0);
-
- ID3D11BlendState* blstate;
- D3D11_BLEND_DESC desc = blenddesc;
- desc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALPHA;
- desc.RenderTarget[0].BlendEnable = FALSE;
- HRESULT hr = device->CreateBlendState(&desc, &blstate);
- if (FAILED(hr)) PanicAlert("Failed to create blend state at %s %d\n", __FILE__, __LINE__);
- SetDebugObjectName((ID3D11DeviceChild*)blstate, "a blend state of EmuGfxState (created during alpha pass)");
- stateman->PushBlendState(blstate);
- blstate->Release();
-
- stateman->Apply();
-}
-
-void EmuGfxState::Reset()
-{
- for (unsigned int k = 0;k < 8;k++)
- SAFE_RELEASE(shader_resources[k]);
-
- context->PSSetShaderResources(0, 8, shader_resources); // unbind all textures
- if (apply_called)
- {
- stateman->PopBlendState();
- stateman->PopDepthState();
- stateman->PopRasterizerState();
- apply_called = false;
- }
-}
-
-void EmuGfxState::SetAlphaBlendEnable(bool enable)
-{
- blenddesc.RenderTarget[0].BlendEnable = enable;
-}
-
-void EmuGfxState::SetRenderTargetWriteMask(UINT8 mask)
-{
- blenddesc.RenderTarget[0].RenderTargetWriteMask = mask;
-}
-
-void EmuGfxState::SetSrcBlend(D3D11_BLEND val)
-{
- // TODO: Check whether e.g. the dest color check is needed here
- blenddesc.RenderTarget[0].SrcBlend = val;
- if (val == D3D11_BLEND_SRC_COLOR) blenddesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_SRC_ALPHA;
- else if (val == D3D11_BLEND_INV_SRC_COLOR) blenddesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_INV_SRC_ALPHA;
- else if (val == D3D11_BLEND_DEST_COLOR) blenddesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_DEST_ALPHA;
- else if (val == D3D11_BLEND_INV_DEST_COLOR) blenddesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_INV_DEST_ALPHA;
- else blenddesc.RenderTarget[0].SrcBlendAlpha = val;
-}
-
-void EmuGfxState::SetDestBlend(D3D11_BLEND val)
-{
- // TODO: Check whether e.g. the source color check is needed here
- blenddesc.RenderTarget[0].DestBlend = val;
- if (val == D3D11_BLEND_SRC_COLOR) blenddesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_SRC_ALPHA;
- else if (val == D3D11_BLEND_INV_SRC_COLOR) blenddesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_INV_SRC_ALPHA;
- else if (val == D3D11_BLEND_DEST_COLOR) blenddesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_DEST_ALPHA;
- else if (val == D3D11_BLEND_INV_DEST_COLOR) blenddesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_INV_DEST_ALPHA;
- else blenddesc.RenderTarget[0].DestBlendAlpha = val;
-}
-
-void EmuGfxState::SetBlendOp(D3D11_BLEND_OP val)
-{
- blenddesc.RenderTarget[0].BlendOp = val;
- blenddesc.RenderTarget[0].BlendOpAlpha = val;
-}
-
-void EmuGfxState::SetSamplerFilter(DWORD stage, D3D11_FILTER filter)
-{
- samplerdesc[stage].Filter = filter;
-}
-
-template AutoState::AutoState(const T* object) : state(object)
-{
- ((IUnknown*)state)->AddRef();
-}
-
-template AutoState::AutoState(const AutoState &source)
-{
- state = source.GetPtr();
- ((T*)state)->AddRef();
-}
-
-template AutoState::~AutoState()
-{
- if(state) ((T*)state)->Release();
- state = NULL;
-}
-
-StateManager::StateManager() : cur_blendstate(NULL), cur_depthstate(NULL), cur_raststate(NULL) {}
-
-void StateManager::PushBlendState(const ID3D11BlendState* state) { blendstates.push(AutoBlendState(state)); }
-void StateManager::PushDepthState(const ID3D11DepthStencilState* state) { depthstates.push(AutoDepthStencilState(state)); }
-void StateManager::PushRasterizerState(const ID3D11RasterizerState* state) { raststates.push(AutoRasterizerState(state)); }
-void StateManager::PopBlendState() { blendstates.pop(); }
-void StateManager::PopDepthState() { depthstates.pop(); }
-void StateManager::PopRasterizerState() { raststates.pop(); }
-
-void StateManager::Apply()
-{
- if (!blendstates.empty())
- {
- if (cur_blendstate != blendstates.top().GetPtr())
- {
- cur_blendstate = (ID3D11BlendState*)blendstates.top().GetPtr();
- D3D::context->OMSetBlendState(cur_blendstate, NULL, 0xFFFFFFFF);
- }
- }
- else ERROR_LOG(VIDEO, "Tried to apply without blend state!");
-
- if (!depthstates.empty())
- {
- if (cur_depthstate != depthstates.top().GetPtr())
- {
- cur_depthstate = (ID3D11DepthStencilState*)depthstates.top().GetPtr();
- D3D::context->OMSetDepthStencilState(cur_depthstate, 0);
- }
- }
- else ERROR_LOG(VIDEO, "Tried to apply without depth state!");
-
- if (!raststates.empty())
- {
- if (cur_raststate != raststates.top().GetPtr())
- {
- cur_raststate = (ID3D11RasterizerState*)raststates.top().GetPtr();
- D3D::context->RSSetState(cur_raststate);
- }
- }
- else ERROR_LOG(VIDEO, "Tried to apply without rasterizer state!");
-}
-
-} // namespace
-
-}
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_GfxState.h b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_GfxState.h
deleted file mode 100644
index f9c13a6583..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_GfxState.h
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#pragma once
-
-#include
-
-// VideoCommon
-#include "VertexShaderGen.h"
-#include "PixelShaderGen.h"
-
-// DX11
-#include "DX11_D3DBase.h"
-#include "DX11_D3DBlob.h"
-
-namespace DX11
-{
-
-namespace D3D
-{
-
-// stores the pipeline state to use when calling VertexManager::Flush()
-class EmuGfxState
-{
-public:
- EmuGfxState();
- ~EmuGfxState();
-
- void SetVShader(ID3D11VertexShader* shader, D3DBlob* bcode);
- void SetPShader(ID3D11PixelShader* shader);
- void SetInputElements(const D3D11_INPUT_ELEMENT_DESC* elems, UINT num);
- void SetShaderResource(unsigned int stage, ID3D11ShaderResourceView* srv);
-
- void ApplyState(); // apply current state
- void AlphaPass(); // only modify the current state to enable the alpha pass
- void Reset();
-
- // blend state
- void SetAlphaBlendEnable(bool enable);
- void SetRenderTargetWriteMask(UINT8 mask);
- void SetSrcBlend(D3D11_BLEND val);
- void SetDestBlend(D3D11_BLEND val);
- void SetBlendOp(D3D11_BLEND_OP val);
-
- // sampler states
- void SetSamplerFilter(DWORD stage, D3D11_FILTER filter);
-
- // TODO: add methods for changing the other states instead of modifying them directly
-
- D3D11_SAMPLER_DESC samplerdesc[8];
- D3D11_RASTERIZER_DESC rastdesc;
- D3D11_DEPTH_STENCIL_DESC depthdesc;
-
- float psconstants[C_PENVCONST_END*4];
- float vsconstants[C_VENVCONST_END*4];
- bool vscbufchanged;
- bool pscbufchanged;
-
-private:
- ID3D11VertexShader* vertexshader;
- D3DBlob* vsbytecode;
- ID3D11PixelShader* pixelshader;
- D3DBlob* psbytecode;
- bool vshaderchanged;
-
- ID3D11Buffer* vscbuf;
- ID3D11Buffer* pscbuf;
-
- ID3D11InputLayout* inp_layout;
- D3D11_INPUT_ELEMENT_DESC inp_elems[32];
- int num_inp_elems;
-
- ID3D11ShaderResourceView* shader_resources[8];
- D3D11_BLEND_DESC blenddesc;
-
- bool apply_called;
-};
-
-template class AutoState
-{
-public:
- AutoState(const T* object);
- AutoState(const AutoState &source);
- ~AutoState();
-
- const inline T* GetPtr() const { return state; }
-
-private:
- const T* state;
-};
-
-typedef AutoState AutoBlendState;
-typedef AutoState AutoDepthStencilState;
-typedef AutoState AutoRasterizerState;
-
-class StateManager
-{
-public:
- StateManager();
-
- // call any of these to change the affected states
- void PushBlendState(const ID3D11BlendState* state);
- void PushDepthState(const ID3D11DepthStencilState* state);
- void PushRasterizerState(const ID3D11RasterizerState* state);
-
- // call these after drawing
- void PopBlendState();
- void PopDepthState();
- void PopRasterizerState();
-
- // call this before any drawing operation if states could have changed meanwhile
- void Apply();
-
-private:
- std::stack blendstates;
- std::stack depthstates;
- std::stack raststates;
- ID3D11BlendState* cur_blendstate;
- ID3D11DepthStencilState* cur_depthstate;
- ID3D11RasterizerState* cur_raststate;
-};
-
-extern EmuGfxState* gfxstate;
-extern StateManager* stateman;
-
-} // namespace
-
-}
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_NativeVertexFormat.cpp b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_NativeVertexFormat.cpp
deleted file mode 100644
index dd7753e252..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_NativeVertexFormat.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-// Common
-#include "MemoryUtil.h"
-#include "x64Emitter.h"
-#include "ABI.h"
-
-// VideoCommon
-#include "Profiler.h"
-#include "CPMemory.h"
-#include "VertexShaderGen.h"
-#include "NativeVertexFormat.h"
-
-// DX11
-#include "DX11_D3DBase.h"
-#include "DX11_VertexShaderCache.h"
-#include "DX11_VertexManager.h"
-
-namespace DX11
-{
-
-class D3DVertexFormat : public NativeVertexFormat
-{
- D3D11_INPUT_ELEMENT_DESC m_elems[32];
- UINT m_num_elems;
-
-public:
- D3DVertexFormat() : m_num_elems(0) {}
- void Initialize(const PortableVertexDeclaration &_vtx_decl);
- void SetupVertexPointers() const;
-};
-
-NativeVertexFormat* VertexManager::CreateNativeVertexFormat()
-{
- return new D3DVertexFormat;
-}
-
-DXGI_FORMAT VarToD3D(VarType t, int size)
-{
- DXGI_FORMAT retval = DXGI_FORMAT_UNKNOWN;
- static const DXGI_FORMAT lookup1[5] = {
- DXGI_FORMAT_R8_SNORM, DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R16_SNORM, DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_R32_FLOAT
- };
- static const DXGI_FORMAT lookup2[5] = {
- DXGI_FORMAT_R8G8_SNORM, DXGI_FORMAT_R8G8_UNORM, DXGI_FORMAT_R16G16_SNORM, DXGI_FORMAT_R16G16_UNORM, DXGI_FORMAT_R32G32_FLOAT
- };
- static const DXGI_FORMAT lookup3[5] = {
- DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_R32G32B32_FLOAT
- };
- static const DXGI_FORMAT lookup4[5] = {
- DXGI_FORMAT_R8G8B8A8_SNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R16G16B16A16_SNORM, DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_R32G32B32A32_FLOAT
- };
-
- switch (size)
- {
- case 1: retval = lookup1[t]; break;
- case 2: retval = lookup2[t]; break;
- case 3: retval = lookup3[t]; break;
- case 4: retval = lookup4[t]; break;
- default: break;
- }
- if (retval == DXGI_FORMAT_UNKNOWN)
- {
- PanicAlert("VarToD3D: Invalid type/size combo %i , %i", (int)t, size);
- }
- return retval;
-}
-
-void D3DVertexFormat::Initialize(const PortableVertexDeclaration &_vtx_decl)
-{
- vertex_stride = _vtx_decl.stride;
- memset(m_elems, 0, sizeof(m_elems));
-
- m_elems[m_num_elems].SemanticName = "POSITION";
- m_elems[m_num_elems].AlignedByteOffset = 0;
- m_elems[m_num_elems].Format = DXGI_FORMAT_R32G32B32_FLOAT;
- m_elems[m_num_elems].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
- ++m_num_elems;
-
- for (int i = 0; i < 3; i++)
- {
- if (_vtx_decl.normal_offset[i] > 0)
- {
- m_elems[m_num_elems].SemanticName = "NORMAL";
- m_elems[m_num_elems].SemanticIndex = i;
- m_elems[m_num_elems].AlignedByteOffset = _vtx_decl.normal_offset[i];
- m_elems[m_num_elems].Format = VarToD3D(_vtx_decl.normal_gl_type, _vtx_decl.normal_gl_size);
- m_elems[m_num_elems].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
- ++m_num_elems;
- }
- }
-
- for (int i = 0; i < 2; i++)
- {
- if (_vtx_decl.color_offset[i] > 0)
- {
- m_elems[m_num_elems].SemanticName = "COLOR";
- m_elems[m_num_elems].SemanticIndex = i;
- m_elems[m_num_elems].AlignedByteOffset = _vtx_decl.color_offset[i];
- m_elems[m_num_elems].Format = VarToD3D(_vtx_decl.color_gl_type, 4);
- m_elems[m_num_elems].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
- ++m_num_elems;
- }
- }
-
- for (int i = 0; i < 8; i++)
- {
- if (_vtx_decl.texcoord_offset[i] > 0)
- {
- m_elems[m_num_elems].SemanticName = "TEXCOORD";
- m_elems[m_num_elems].SemanticIndex = i;
- m_elems[m_num_elems].AlignedByteOffset = _vtx_decl.texcoord_offset[i];
- m_elems[m_num_elems].Format = VarToD3D(_vtx_decl.texcoord_gl_type[i], _vtx_decl.texcoord_size[i]);
- m_elems[m_num_elems].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
- ++m_num_elems;
- }
- }
-
- if (_vtx_decl.posmtx_offset != -1)
- {
- m_elems[m_num_elems].SemanticName = "BLENDINDICES";
- m_elems[m_num_elems].AlignedByteOffset = _vtx_decl.posmtx_offset;
- m_elems[m_num_elems].Format = DXGI_FORMAT_R8G8B8A8_UNORM;
- m_elems[m_num_elems].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
- ++m_num_elems;
- }
-}
-
-void D3DVertexFormat::SetupVertexPointers() const
-{
- D3D::gfxstate->SetInputElements(m_elems, m_num_elems);
-}
-
-}
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_PixelShaderCache.cpp b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_PixelShaderCache.cpp
deleted file mode 100644
index 64a710dbf7..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_PixelShaderCache.cpp
+++ /dev/null
@@ -1,306 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-// Common
-#include "Common.h"
-#include "FileUtil.h"
-#include "LinearDiskCache.h"
-
-// VideoCommon
-#include "Statistics.h"
-#include "VideoConfig.h"
-#include "VertexLoader.h"
-#include "BPMemory.h"
-#include "XFMemory.h"
-#include "ImageWrite.h"
-#include "PixelShaderGen.h"
-#include "PixelShaderManager.h"
-
-// DX11
-#include "DX11_D3DBase.h"
-#include "DX11_D3DShader.h"
-#include "DX11_PixelShaderCache.h"
-
-#include
-
-#include "../Main.h"
-
-namespace DX11
-{
-
-PixelShaderCache::PSCache PixelShaderCache::PixelShaders;
-const PixelShaderCache::PSCacheEntry* PixelShaderCache::last_entry;
-
-LinearDiskCache g_ps_disk_cache;
-
-ID3D11PixelShader* s_ColorMatrixProgram = NULL;
-ID3D11PixelShader* s_ColorCopyProgram = NULL;
-ID3D11PixelShader* s_DepthMatrixProgram = NULL;
-ID3D11PixelShader* s_ClearProgram = NULL;
-
-const char clear_program_code[] = {
- "void main(\n"
- "out float4 ocol0 : SV_Target,\n"
- "in float4 pos : SV_Position,\n"
- "in float4 incol0 : COLOR0){\n"
- "ocol0 = incol0;\n"
- "}\n"
-};
-
-const char color_copy_program_code[] = {
- "sampler samp0 : register(s0);\n"
- "Texture2D Tex0 : register(t0);\n"
- "void main(\n"
- "out float4 ocol0 : SV_Target,\n"
- "in float4 pos : SV_Position,\n"
- "in float2 uv0 : TEXCOORD0){\n"
- "ocol0 = Tex0.Sample(samp0,uv0);\n"
- "}\n"
-};
-
-const char color_matrix_program_code[] = {
- "sampler samp0 : register(s0);\n"
- "Texture2D Tex0 : register(t0);\n"
- "uniform float4 cColMatrix[5] : register(c0);\n"
- "void main(\n"
- "out float4 ocol0 : SV_Target,\n"
- "in float4 pos : SV_Position,\n"
- " in float2 uv0 : TEXCOORD0){\n"
- "float4 texcol = Tex0.Sample(samp0,uv0);\n"
- "ocol0 = float4(dot(texcol,cColMatrix[0]),dot(texcol,cColMatrix[1]),dot(texcol,cColMatrix[2]),dot(texcol,cColMatrix[3])) + cColMatrix[4];\n"
- "}\n"
-};
-
-const char depth_matrix_program[] = {
- "sampler samp0 : register(s0);\n"
- "Texture2D Tex0 : register(t0);\n"
- "uniform float4 cColMatrix[5] : register(c0);\n"
- "void main(\n"
- "out float4 ocol0 : SV_Target,\n"
- " in float4 pos : SV_Position,\n"
- " in float2 uv0 : TEXCOORD0){\n"
- "float4 texcol = Tex0.Sample(samp0,uv0);\n"
- "float4 EncodedDepth = frac((texcol.r * (16777215.0f/16777216.0f)) * float4(1.0f,255.0f,255.0f*255.0f,255.0f*255.0f*255.0f));\n"
- "texcol = float4((EncodedDepth.rgb * (16777216.0f/16777215.0f)),1.0f);\n"
- "ocol0 = float4(dot(texcol,cColMatrix[0]),dot(texcol,cColMatrix[1]),dot(texcol,cColMatrix[2]),dot(texcol,cColMatrix[3])) + cColMatrix[4];\n"
- "}\n"
-};
-
-ID3D11PixelShader* PixelShaderCache::GetColorMatrixProgram()
-{
- return s_ColorMatrixProgram;
-}
-
-ID3D11PixelShader* PixelShaderCache::GetDepthMatrixProgram()
-{
- return s_DepthMatrixProgram;
-}
-
-ID3D11PixelShader* PixelShaderCache::GetColorCopyProgram()
-{
- return s_ColorCopyProgram;
-}
-
-ID3D11PixelShader* PixelShaderCache::GetClearProgram()
-{
- return s_ClearProgram;
-}
-
-// HACK to avoid some invasive VideoCommon changes
-// these values are hardcoded, they depend on internal D3DCompile behavior; TODO: Solve this with D3DReflect or something
-// offset given in floats, table index is float4
-unsigned int ps_constant_offset_table[] = {
- 0, 4, 8, 12, // C_COLORS, 16
- 16, 20, 24, 28, // C_KCOLORS, 16
- 32, // C_ALPHA, 4
- 36, 40, 44, 48, 52, 56, 60, 64, // C_TEXDIMS, 32
- 68, 72, // C_ZBIAS, 8
- 76, 80, // C_INDTEXSCALE, 8
- 84, 88, 92, 96, 100, 104, // C_INDTEXMTX, 24
- 108, 112, // C_FOG, 8
- 116, 120, 124 ,128, // C_COLORMATRIX, 16
- 132, 136, 140, 144, 148, // C_PLIGHTS0, 20
- 152, 156, 160, 164, 168, // C_PLIGHTS1, 20
- 172, 176, 180, 184, 188, // C_PLIGHTS2, 20
- 192, 196, 200, 204, 208, // C_PLIGHTS3, 20
- 212, 216, 220, 224, 228, // C_PLIGHTS4, 20
- 232, 236, 240, 244, 248, // C_PLIGHTS5, 20
- 252, 256, 260, 264, 268, // C_PLIGHTS6, 20
- 272, 276, 280, 284, 288, // C_PLIGHTS7, 20
- 292, 296, 300, 304, // C_PMATERIALS, 16
-};
-void PixelShaderCache::SetPSConstant4f(unsigned int const_number, float f1, float f2, float f3, float f4)
-{
- D3D::gfxstate->psconstants[ps_constant_offset_table[const_number] ] = f1;
- D3D::gfxstate->psconstants[ps_constant_offset_table[const_number]+1] = f2;
- D3D::gfxstate->psconstants[ps_constant_offset_table[const_number]+2] = f3;
- D3D::gfxstate->psconstants[ps_constant_offset_table[const_number]+3] = f4;
- D3D::gfxstate->pscbufchanged = true;
-}
-
-void PixelShaderCache::SetPSConstant4fv(unsigned int const_number, const float* f)
-{
- memcpy(&D3D::gfxstate->psconstants[ps_constant_offset_table[const_number]], f, sizeof(float)*4);
- D3D::gfxstate->pscbufchanged = true;
-}
-
-void PixelShaderCache::SetMultiPSConstant4fv(unsigned int const_number, unsigned int count, const float* f)
-{
- memcpy(&D3D::gfxstate->psconstants[ps_constant_offset_table[const_number]], f, sizeof(float)*4*count);
- D3D::gfxstate->pscbufchanged = true;
-}
-
-// this class will load the precompiled shaders into our cache
-class PixelShaderCacheInserter : public LinearDiskCacheReader
-{
-public:
- void Read(const u8* key, int key_size, const u8* value, int value_size)
- {
- PIXELSHADERUID uid;
- if (key_size != sizeof(uid)) {
- ERROR_LOG(VIDEO, "Wrong key size in pixel shader cache");
- return;
- }
- memcpy(&uid, key, key_size);
- PixelShaderCache::InsertByteCode(uid, (void*)value, value_size);
- }
-};
-
-PixelShaderCache::PixelShaderCache()
-{
- // used when drawing clear quads
- s_ClearProgram = D3D::CompileAndCreatePixelShader(clear_program_code, sizeof(clear_program_code));
- CHECK(s_ClearProgram!=NULL, "Create clear pixel shader");
- D3D::SetDebugObjectName((ID3D11DeviceChild*)s_ClearProgram, "clear pixel shader");
-
- // used when copying/resolving the color buffer
- s_ColorCopyProgram = D3D::CompileAndCreatePixelShader(color_copy_program_code, sizeof(color_copy_program_code));
- CHECK(s_ColorCopyProgram!=NULL, "Create color copy pixel shader");
- D3D::SetDebugObjectName((ID3D11DeviceChild*)s_ClearProgram, "color copy pixel shader");
-
- // used for color conversion
- s_ColorMatrixProgram = D3D::CompileAndCreatePixelShader(color_matrix_program_code, sizeof(color_matrix_program_code));
- CHECK(s_ColorMatrixProgram!=NULL, "Create color matrix pixel shader");
- D3D::SetDebugObjectName((ID3D11DeviceChild*)s_ClearProgram, "color matrix pixel shader");
-
- // used for depth copy
- s_DepthMatrixProgram = D3D::CompileAndCreatePixelShader(depth_matrix_program, sizeof(depth_matrix_program));
- CHECK(s_DepthMatrixProgram!=NULL, "Create depth matrix pixel shader");
- D3D::SetDebugObjectName((ID3D11DeviceChild*)s_ClearProgram, "depth matrix pixel shader");
-
- Clear();
-
- if (!File::Exists(File::GetUserPath(D_SHADERCACHE_IDX)))
- File::CreateDir(File::GetUserPath(D_SHADERCACHE_IDX));
-
- char cache_filename[MAX_PATH];
- sprintf(cache_filename, "%sdx11-%s-ps.cache", File::GetUserPath(D_SHADERCACHE_IDX), g_globals->unique_id);
- PixelShaderCacheInserter inserter;
- g_ps_disk_cache.OpenAndRead(cache_filename, &inserter);
-}
-
-// ONLY to be used during shutdown.
-void PixelShaderCache::Clear()
-{
- for (PSCache::iterator iter = PixelShaders.begin(); iter != PixelShaders.end(); iter++)
- iter->second.Destroy();
- PixelShaders.clear();
-}
-
-PixelShaderCache::~PixelShaderCache()
-{
- SAFE_RELEASE(s_ColorMatrixProgram);
- SAFE_RELEASE(s_ColorCopyProgram);
- SAFE_RELEASE(s_DepthMatrixProgram);
- SAFE_RELEASE(s_ClearProgram);
-
- Clear();
- g_ps_disk_cache.Sync();
- g_ps_disk_cache.Close();
-}
-
-bool PixelShaderCache::SetShader(bool dstAlpha)
-{
- PIXELSHADERUID uid;
- GetPixelShaderId(&uid, dstAlpha);
-
- // check if the shader is already set
- if (uid == last_pixel_shader_uid && PixelShaders[uid].frameCount == frameCount)
- {
- PSCache::const_iterator iter = PixelShaders.find(uid);
- return (iter != PixelShaders.end() && iter->second.shader);
- }
-
- memcpy(&last_pixel_shader_uid, &uid, sizeof(PIXELSHADERUID));
-
- // check if the shader is already in the cache
- PSCache::iterator iter = PixelShaders.find(uid);
- if (iter != PixelShaders.end())
- {
- iter->second.frameCount = frameCount;
- const PSCacheEntry &entry = iter->second;
- last_entry = &entry;
-
- D3D::gfxstate->SetPShader(entry.shader);
- return (entry.shader != NULL);
- }
-
- // need to compile a new shader
- const char* code = GeneratePixelShaderCode(dstAlpha, API_D3D11);
-
- D3DBlob* pbytecode;
- if (!D3D::CompilePixelShader(code, (unsigned int)strlen(code), &pbytecode))
- {
- PanicAlert("Failed to compile Pixel Shader:\n\n%s", code);
- return false;
- }
-
- // insert the bytecode into the caches
- g_ps_disk_cache.Append((u8*)&uid, sizeof(uid), (const u8*)pbytecode->Data(), pbytecode->Size());
- g_ps_disk_cache.Sync();
-
- bool result = InsertByteCode(uid, pbytecode->Data(), pbytecode->Size());
- D3D::gfxstate->SetPShader(last_entry->shader);
- pbytecode->Release();
- return result;
-}
-
-bool PixelShaderCache::InsertByteCode(const PIXELSHADERUID &uid, void* bytecode, unsigned int bytecodelen)
-{
- ID3D11PixelShader* shader = D3D::CreatePixelShaderFromByteCode(bytecode, bytecodelen);
- if (shader == NULL)
- {
- PanicAlert("Failed to create pixel shader at %s %d\n", __FILE__, __LINE__);
- return false;
- }
- // TODO: Somehow make the debug name a bit more specific
- D3D::SetDebugObjectName((ID3D11DeviceChild*)shader, "a pixel shader of PixelShaderCache");
-
- // make an entry in the table
- PSCacheEntry newentry;
- newentry.shader = shader;
- newentry.frameCount = frameCount;
- PixelShaders[uid] = newentry;
- last_entry = &PixelShaders[uid];
-
- INCSTAT(stats.numPixelShadersCreated);
- SETSTAT(stats.numPixelShadersAlive, PixelShaders.size());
-
- return true;
-}
-
-}
diff --git a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_PixelShaderCache.h b/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_PixelShaderCache.h
deleted file mode 100644
index 6735d4d30a..0000000000
--- a/Source/Plugins/Plugin_VideoMerge/Src/DX11/DX11_PixelShaderCache.h
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#pragma once
-
-#include