diff options
| author | Mat M <mathew1800@gmail.com> | 2016-06-25 20:14:28 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-06-25 20:14:28 -0400 |
| commit | e31a4d1f0731603d0396e592e23cf7acd0457397 (patch) | |
| tree | 6469f9addd2b45e2623597575ad7fc88c51bc994 /Source/Core/VideoBackends/Null/NullBackend.cpp | |
| parent | 5ba3e641ea6212a3e7d7e9f443b1dba985e5d8ca (diff) | |
| parent | fdbda7b7dd47fc78edb865e0cc38028cd2e157be (diff) | |
Merge pull request #3813 from degasus/null_video
Null: Initial release of null video backend
Diffstat (limited to 'Source/Core/VideoBackends/Null/NullBackend.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Null/NullBackend.cpp | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/Source/Core/VideoBackends/Null/NullBackend.cpp b/Source/Core/VideoBackends/Null/NullBackend.cpp new file mode 100644 index 0000000000..7a1691b9d5 --- /dev/null +++ b/Source/Core/VideoBackends/Null/NullBackend.cpp @@ -0,0 +1,127 @@ +// Copyright 2015 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +// Null Backend Documentation + +// This backend tries not to do anything in the backend, +// but everything in VideoCommon. + +#include "Core/Host.h" + +#include "VideoBackends/Null/FramebufferManager.h" +#include "VideoBackends/Null/PerfQuery.h" +#include "VideoBackends/Null/Render.h" +#include "VideoBackends/Null/ShaderCache.h" +#include "VideoBackends/Null/TextureCache.h" +#include "VideoBackends/Null/VertexManager.h" +#include "VideoBackends/Null/VideoBackend.h" + +#include "VideoCommon/BPStructs.h" +#include "VideoCommon/CommandProcessor.h" +#include "VideoCommon/Fifo.h" +#include "VideoCommon/IndexGenerator.h" +#include "VideoCommon/OnScreenDisplay.h" +#include "VideoCommon/OpcodeDecoding.h" +#include "VideoCommon/PixelEngine.h" +#include "VideoCommon/PixelShaderManager.h" +#include "VideoCommon/VertexLoaderManager.h" +#include "VideoCommon/VertexShaderManager.h" +#include "VideoCommon/VideoBackendBase.h" +#include "VideoCommon/VideoConfig.h" + +namespace Null +{ +static void InitBackendInfo() +{ + g_Config.backend_info.APIType = API_NONE; + g_Config.backend_info.bSupportsExclusiveFullscreen = true; + g_Config.backend_info.bSupportsDualSourceBlend = true; + g_Config.backend_info.bSupportsEarlyZ = true; + g_Config.backend_info.bSupportsPrimitiveRestart = true; + g_Config.backend_info.bSupportsOversizedViewports = true; + g_Config.backend_info.bSupportsGeometryShaders = true; + g_Config.backend_info.bSupports3DVision = false; + g_Config.backend_info.bSupportsPostProcessing = false; + g_Config.backend_info.bSupportsPaletteConversion = true; + g_Config.backend_info.bSupportsClipControl = true; + + // aamodes: We only support 1 sample, so no MSAA + g_Config.backend_info.AAModes = {1}; +} + +void VideoBackend::ShowConfig(void* parent) +{ + InitBackendInfo(); + Host_ShowVideoConfig(parent, GetDisplayName(), "gfx_null"); +} + +bool VideoBackend::Initialize(void* window_handle) +{ + InitializeShared(); + InitBackendInfo(); + + // Load Configs + g_Config.Load(File::GetUserPath(D_CONFIG_IDX) + "GFX.ini"); + g_Config.GameIniLoad(); + g_Config.UpdateProjectionHack(); + g_Config.VerifyValidity(); + UpdateActiveConfig(); + + // Do our OSD callbacks + OSD::DoCallbacks(OSD::CallbackType::Initialization); + + // Initialize VideoCommon + CommandProcessor::Init(); + PixelEngine::Init(); + BPInit(); + Fifo::Init(); + OpcodeDecoder::Init(); + IndexGenerator::Init(); + VertexShaderManager::Init(); + PixelShaderManager::Init(); + VertexLoaderManager::Init(); + Host_Message(WM_USER_CREATE); + + return true; +} + +// This is called after Initialize() from the Core +// Run from the graphics thread +void VideoBackend::Video_Prepare() +{ + g_renderer = std::make_unique<Renderer>(); + g_vertex_manager = std::make_unique<VertexManager>(); + g_perf_query = std::make_unique<PerfQuery>(); + g_framebuffer_manager = std::make_unique<FramebufferManager>(); + g_texture_cache = std::make_unique<TextureCache>(); + VertexShaderCache::s_instance = std::make_unique<VertexShaderCache>(); + GeometryShaderCache::s_instance = std::make_unique<GeometryShaderCache>(); + PixelShaderCache::s_instance = std::make_unique<PixelShaderCache>(); +} + +void VideoBackend::Shutdown() +{ + // Shutdown VideoCommon + Fifo::Shutdown(); + VertexLoaderManager::Shutdown(); + VertexShaderManager::Shutdown(); + PixelShaderManager::Shutdown(); + OpcodeDecoder::Shutdown(); + + // Do our OSD callbacks + OSD::DoCallbacks(OSD::CallbackType::Shutdown); +} + +void VideoBackend::Video_Cleanup() +{ + PixelShaderCache::s_instance.reset(); + VertexShaderCache::s_instance.reset(); + GeometryShaderCache::s_instance.reset(); + g_texture_cache.reset(); + g_perf_query.reset(); + g_vertex_manager.reset(); + g_framebuffer_manager.reset(); + g_renderer.reset(); +} +} |
