diff --git a/GPU/Common/FramebufferManagerCommon.cpp b/GPU/Common/FramebufferManagerCommon.cpp index 5e88a7ae03..fe23b16825 100644 --- a/GPU/Common/FramebufferManagerCommon.cpp +++ b/GPU/Common/FramebufferManagerCommon.cpp @@ -1459,7 +1459,6 @@ void FramebufferManagerCommon::ResizeFramebufFBO(VirtualFramebuffer *vfb, int w, if (old.fbo) { INFO_LOG(FRAMEBUF, "Resizing FBO for %08x : %dx%dx%s", vfb->fb_address, w, h, GeBufferFormatToString(vfb->format)); if (vfb->fbo) { - // TODO: Swap the order of the below? That way we can avoid the needGLESRebinds_ check below I think. draw_->BindFramebufferAsRenderTarget(vfb->fbo, { Draw::RPAction::CLEAR, Draw::RPAction::CLEAR, Draw::RPAction::CLEAR }, "ResizeFramebufFBO"); if (!skipCopy) { // TODO: In this case, it'll nearly always be better to draw the old framebuffer to the new one than to do an actual blit. diff --git a/GPU/Common/FramebufferManagerCommon.h b/GPU/Common/FramebufferManagerCommon.h index f0b981ec1d..1cfe42c447 100644 --- a/GPU/Common/FramebufferManagerCommon.h +++ b/GPU/Common/FramebufferManagerCommon.h @@ -445,7 +445,6 @@ protected: int pixelHeight_; int bloomHack_ = 0; - bool needGLESRebinds_ = false; Draw::DataFormat preferredPixelsFormat_ = Draw::DataFormat::R8G8B8A8_UNORM; struct TempFBOInfo { diff --git a/GPU/D3D11/FramebufferManagerD3D11.cpp b/GPU/D3D11/FramebufferManagerD3D11.cpp index 982e0f7eeb..9e59a07d8b 100644 --- a/GPU/D3D11/FramebufferManagerD3D11.cpp +++ b/GPU/D3D11/FramebufferManagerD3D11.cpp @@ -57,21 +57,6 @@ FramebufferManagerD3D11::FramebufferManagerD3D11(Draw::DrawContext *draw) vb.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; ASSERT_SUCCESS(device_->CreateBuffer(&vb, nullptr, &quadBuffer_)); - D3D11_TEXTURE2D_DESC desc{}; - desc.CPUAccessFlags = 0; - desc.Usage = D3D11_USAGE_DEFAULT; - desc.ArraySize = 1; - desc.SampleDesc.Count = 1; - desc.Width = 1; - desc.Height = 1; - desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; - desc.MipLevels = 1; - desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; - ASSERT_SUCCESS(device_->CreateTexture2D(&desc, nullptr, &nullTexture_)); - ASSERT_SUCCESS(device_->CreateShaderResourceView(nullTexture_, nullptr, &nullTextureView_)); - uint32_t nullData[1]{}; - context_->UpdateSubresource(nullTexture_, 0, nullptr, nullData, 1, 0); - presentation_->SetLanguage(HLSL_D3D11); preferredPixelsFormat_ = Draw::DataFormat::B8G8R8A8_UNORM; } @@ -93,11 +78,6 @@ FramebufferManagerD3D11::~FramebufferManagerD3D11() { stencilUploadInputLayout_->Release(); if (stencilValueBuffer_) stencilValueBuffer_->Release(); - - if (nullTextureView_) - nullTextureView_->Release(); - if (nullTexture_) - nullTexture_->Release(); } void FramebufferManagerD3D11::SetTextureCache(TextureCacheD3D11 *tc) { diff --git a/GPU/D3D11/FramebufferManagerD3D11.h b/GPU/D3D11/FramebufferManagerD3D11.h index dc46158cc4..6dd9bbb3ea 100644 --- a/GPU/D3D11/FramebufferManagerD3D11.h +++ b/GPU/D3D11/FramebufferManagerD3D11.h @@ -62,7 +62,4 @@ private: ID3D11InputLayout *stencilUploadInputLayout_ = nullptr; ID3D11Buffer *stencilValueBuffer_ = nullptr; ID3D11DepthStencilState *stencilMaskStates_[256]{}; - - ID3D11Texture2D *nullTexture_ = nullptr; - ID3D11ShaderResourceView *nullTextureView_ = nullptr; }; diff --git a/GPU/Directx9/FramebufferManagerDX9.cpp b/GPU/Directx9/FramebufferManagerDX9.cpp index aec99b20c3..0bfe4c0ad1 100644 --- a/GPU/Directx9/FramebufferManagerDX9.cpp +++ b/GPU/Directx9/FramebufferManagerDX9.cpp @@ -53,18 +53,6 @@ namespace DX9 { device_ = (LPDIRECT3DDEVICE9)draw->GetNativeObject(Draw::NativeObject::DEVICE); deviceEx_ = (LPDIRECT3DDEVICE9)draw->GetNativeObject(Draw::NativeObject::DEVICE_EX); - int usage = 0; - D3DPOOL pool = D3DPOOL_MANAGED; - if (deviceEx_) { - pool = D3DPOOL_DEFAULT; - usage = D3DUSAGE_DYNAMIC; - } - HRESULT hr = device_->CreateTexture(1, 1, 1, usage, D3DFMT_A8R8G8B8, pool, &nullTex_, nullptr); - D3DLOCKED_RECT rect; - nullTex_->LockRect(0, &rect, nullptr, D3DLOCK_DISCARD); - memset(rect.pBits, 0, 4); - nullTex_->UnlockRect(0); - presentation_->SetLanguage(HLSL_D3D9); preferredPixelsFormat_ = Draw::DataFormat::B8G8R8A8_UNORM; } @@ -73,8 +61,6 @@ namespace DX9 { for (auto &it : offscreenSurfaces_) { it.second.surface->Release(); } - if (nullTex_) - nullTex_->Release(); } void FramebufferManagerDX9::SetTextureCache(TextureCacheDX9 *tc) { diff --git a/GPU/Directx9/FramebufferManagerDX9.h b/GPU/Directx9/FramebufferManagerDX9.h index c39b032fcd..fdb5cf1787 100644 --- a/GPU/Directx9/FramebufferManagerDX9.h +++ b/GPU/Directx9/FramebufferManagerDX9.h @@ -66,8 +66,6 @@ private: LPDIRECT3DDEVICE9 device_; LPDIRECT3DDEVICE9 deviceEx_; - LPDIRECT3DTEXTURE9 nullTex_ = nullptr; - struct OffscreenSurface { LPDIRECT3DSURFACE9 surface; int last_frame_used; diff --git a/GPU/GLES/FramebufferManagerGLES.cpp b/GPU/GLES/FramebufferManagerGLES.cpp index d4ad9dadd4..74ce72e506 100644 --- a/GPU/GLES/FramebufferManagerGLES.cpp +++ b/GPU/GLES/FramebufferManagerGLES.cpp @@ -39,45 +39,16 @@ #include "GPU/GLES/DrawEngineGLES.h" #include "GPU/GLES/ShaderManagerGLES.h" -static const char tex_fs[] = R"( -#if __VERSION__ >= 130 -#define varying in -#define texture2D texture -#define gl_FragColor fragColor0 -out vec4 fragColor0; -#endif -#ifdef GL_ES -precision mediump float; -#endif -uniform sampler2D sampler0; -varying vec2 v_texcoord0; -void main() { - gl_FragColor = texture2D(sampler0, v_texcoord0); -} -)"; - -static const char basic_vs[] = R"( -#if __VERSION__ >= 130 -#define attribute in -#define varying out -#endif -attribute vec4 a_position; -attribute vec2 a_texcoord0; -varying vec2 v_texcoord0; -void main() { - v_texcoord0 = a_texcoord0; - gl_Position = a_position; -} -)"; - FramebufferManagerGLES::FramebufferManagerGLES(Draw::DrawContext *draw, GLRenderManager *render) : FramebufferManagerCommon(draw), render_(render) { needBackBufferYSwap_ = true; - needGLESRebinds_ = true; presentation_->SetLanguage(draw_->GetShaderLanguageDesc().shaderLanguage); - CreateDeviceObjects(); +} + +FramebufferManagerGLES::~FramebufferManagerGLES() { + delete[] convBuf_; } void FramebufferManagerGLES::Init() { @@ -97,27 +68,6 @@ void FramebufferManagerGLES::SetDrawEngine(DrawEngineGLES *td) { drawEngine_ = td; } -void FramebufferManagerGLES::CreateDeviceObjects() { -} - -void FramebufferManagerGLES::DestroyDeviceObjects() { - if (stencilUploadPipeline_) { - stencilUploadPipeline_->Release(); - stencilUploadPipeline_ = nullptr; - } - - if (depthDownloadProgram_) { - render_->DeleteProgram(depthDownloadProgram_); - depthDownloadProgram_ = nullptr; - } -} - -FramebufferManagerGLES::~FramebufferManagerGLES() { - DestroyDeviceObjects(); - - delete [] convBuf_; -} - void FramebufferManagerGLES::UpdateDownloadTempBuffer(VirtualFramebuffer *nvfb) { _assert_msg_(nvfb->fbo, "Expecting a valid nvfb in UpdateDownloadTempBuffer"); @@ -135,13 +85,15 @@ void FramebufferManagerGLES::EndFrame() { void FramebufferManagerGLES::DeviceLost() { FramebufferManagerCommon::DeviceLost(); - DestroyDeviceObjects(); + if (depthDownloadProgram_) { + render_->DeleteProgram(depthDownloadProgram_); + depthDownloadProgram_ = nullptr; + } } void FramebufferManagerGLES::DeviceRestore(Draw::DrawContext *draw) { FramebufferManagerCommon::DeviceRestore(draw); render_ = (GLRenderManager *)draw_->GetNativeObject(Draw::NativeObject::RENDER_MANAGER); - CreateDeviceObjects(); } void FramebufferManagerGLES::Resized() { diff --git a/GPU/GLES/FramebufferManagerGLES.h b/GPU/GLES/FramebufferManagerGLES.h index adbd1b8ddf..20ddd1eab8 100644 --- a/GPU/GLES/FramebufferManagerGLES.h +++ b/GPU/GLES/FramebufferManagerGLES.h @@ -53,9 +53,6 @@ protected: void UpdateDownloadTempBuffer(VirtualFramebuffer *nvfb) override; private: - void CreateDeviceObjects(); - void DestroyDeviceObjects(); - void PackDepthbuffer(VirtualFramebuffer *vfb, int x, int y, int w, int h); GLRenderManager *render_; @@ -70,5 +67,4 @@ private: int u_depthDownloadTo8 = -1; DrawEngineGLES *drawEngineGL_ = nullptr; - }; diff --git a/GPU/Vulkan/FramebufferManagerVulkan.cpp b/GPU/Vulkan/FramebufferManagerVulkan.cpp index 25107040c2..b3a63848e3 100644 --- a/GPU/Vulkan/FramebufferManagerVulkan.cpp +++ b/GPU/Vulkan/FramebufferManagerVulkan.cpp @@ -49,38 +49,9 @@ using namespace PPSSPP_VK; -static const char tex_fs[] = R"(#version 450 -#extension GL_ARB_separate_shader_objects : enable -#extension GL_ARB_shading_language_420pack : enable -layout (binding = 0) uniform sampler2D sampler0; -layout (location = 0) in vec2 v_texcoord0; -layout (location = 0) out vec4 fragColor; -void main() { - fragColor = texture(sampler0, v_texcoord0); -} -)"; - -static const char tex_vs[] = R"(#version 450 -#extension GL_ARB_separate_shader_objects : enable -#extension GL_ARB_shading_language_420pack : enable -layout (location = 0) in vec3 a_position; -layout (location = 1) in vec2 a_texcoord0; -layout (location = 0) out vec2 v_texcoord0; -out gl_PerVertex { vec4 gl_Position; }; -void main() { - v_texcoord0 = a_texcoord0; - gl_Position = vec4(a_position, 1.0); -} -)"; - FramebufferManagerVulkan::FramebufferManagerVulkan(Draw::DrawContext *draw) : FramebufferManagerCommon(draw) { presentation_->SetLanguage(GLSL_VULKAN); - - InitDeviceObjects(); - - // After a blit we do need to rebind for the VulkanRenderManager to know what to do. - needGLESRebinds_ = true; } FramebufferManagerVulkan::~FramebufferManagerVulkan() { @@ -99,13 +70,6 @@ void FramebufferManagerVulkan::SetDrawEngine(DrawEngineVulkan *td) { drawEngine_ = td; } -void FramebufferManagerVulkan::InitDeviceObjects() { -} - -void FramebufferManagerVulkan::DestroyDeviceObjects() { - -} - void FramebufferManagerVulkan::NotifyClear(bool clearColor, bool clearAlpha, bool clearDepth, uint32_t color, float depth) { int mask = 0; // The Clear detection takes care of doing a regular draw instead if separate masking @@ -136,11 +100,9 @@ void FramebufferManagerVulkan::EndFrame() { } void FramebufferManagerVulkan::DeviceLost() { - DestroyDeviceObjects(); FramebufferManagerCommon::DeviceLost(); } void FramebufferManagerVulkan::DeviceRestore(Draw::DrawContext *draw) { FramebufferManagerCommon::DeviceRestore(draw); - InitDeviceObjects(); } diff --git a/GPU/Vulkan/FramebufferManagerVulkan.h b/GPU/Vulkan/FramebufferManagerVulkan.h index af3d9f2ef7..7974aa6f5b 100644 --- a/GPU/Vulkan/FramebufferManagerVulkan.h +++ b/GPU/Vulkan/FramebufferManagerVulkan.h @@ -41,7 +41,6 @@ public: void SetShaderManager(ShaderManagerVulkan *sm); void SetDrawEngine(DrawEngineVulkan *td); void SetVulkan2D(Vulkan2D *vk2d) { vulkan2D_ = vk2d; } - void SetPushBuffer(VulkanPushBuffer *push) { push_ = push; } void BeginFrameVulkan(); // there's a BeginFrame in the base class, which this calls void EndFrame(); @@ -54,19 +53,6 @@ public: void NotifyClear(bool clearColor, bool clearAlpha, bool clearDepth, uint32_t color, float depth); private: - void InitDeviceObjects(); - void DestroyDeviceObjects(); - - // Used to keep track of command buffers here but have moved all that into Thin3D. - - VulkanPushBuffer *push_; - - enum { - MAX_COMMAND_BUFFERS = 32, - }; - - VkPipelineCache pipelineCache2D_; - // Simple 2D drawing engine. Vulkan2D *vulkan2D_; }; diff --git a/GPU/Vulkan/GPU_Vulkan.cpp b/GPU/Vulkan/GPU_Vulkan.cpp index 8b6b980f5e..2c5a50aebc 100644 --- a/GPU/Vulkan/GPU_Vulkan.cpp +++ b/GPU/Vulkan/GPU_Vulkan.cpp @@ -327,7 +327,6 @@ void GPU_Vulkan::BeginHostFrame() { frame.push_->Begin(vulkan); framebufferManagerVulkan_->BeginFrameVulkan(); - framebufferManagerVulkan_->SetPushBuffer(frameData_[curFrame].push_); depalShaderCache_.SetPushBuffer(frameData_[curFrame].push_); textureCacheVulkan_->SetPushBuffer(frameData_[curFrame].push_);