Delete unused stuff in all backends

This commit is contained in:
Henrik Rydgård 2022-08-03 17:12:57 +02:00
parent 126ace770e
commit f8e0c09463
10 changed files with 1 additions and 269 deletions

View file

@ -978,7 +978,6 @@ void FramebufferManagerCommon::DrawPixels(VirtualFramebuffer *vfb, int dstX, int
Draw::Texture *pixelsTex = MakePixelTexture(srcPixels, srcPixelFormat, srcStride, width, height);
if (pixelsTex) {
draw_->BindTextures(0, 1, &pixelsTex);
Bind2DShader();
DrawActiveTexture(dstX, dstY, width, height, vfb->bufferWidth, vfb->bufferHeight, u0, v0, u1, v1, ROTATION_LOCKED_HORIZONTAL, flags);
gpuStats.numUploads++;
pixelsTex->Release();

View file

@ -353,7 +353,6 @@ protected:
void SetViewport2D(int x, int y, int w, int h);
Draw::Texture *MakePixelTexture(const u8 *srcPixels, GEBufferFormat srcPixelFormat, int srcStride, int width, int height);
void DrawActiveTexture(float x, float y, float w, float h, float destW, float destH, float u0, float v0, float u1, float v1, int uvRotation, int flags);
virtual void Bind2DShader() = 0;
void DrawStrip2D(Draw::Texture *tex, Draw2DVertex *verts, int vertexCount, bool linearFilter);

View file

@ -43,65 +43,16 @@
#include <emmintrin.h>
#endif
static const char *vscode =
"struct VS_IN {\n"
" float4 ObjPos : POSITION;\n"
" float2 Uv : TEXCOORD0;\n"
"};\n"
"struct VS_OUT {\n"
" float2 Uv : TEXCOORD0;\n"
" float4 ProjPos : SV_Position;\n"
"};\n"
"VS_OUT main(VS_IN In) {\n"
" VS_OUT Out;\n"
" Out.ProjPos = In.ObjPos;\n"
" Out.Uv = In.Uv;\n"
" return Out;\n"
"}\n";
static const char *pscode =
"SamplerState samp : register(s0);\n"
"Texture2D<float4> tex : register(t0);\n"
"struct PS_IN {\n"
" float2 Uv : TEXCOORD0;\n"
"};\n"
"float4 main( PS_IN In ) : SV_Target {\n"
" float4 c = tex.Sample(samp, In.Uv);\n"
" return c;\n"
"}\n";
const D3D11_INPUT_ELEMENT_DESC FramebufferManagerD3D11::g_QuadVertexElements[2] = {
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, },
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, },
};
FramebufferManagerD3D11::FramebufferManagerD3D11(Draw::DrawContext *draw)
: FramebufferManagerCommon(draw) {
device_ = (ID3D11Device *)draw->GetNativeObject(Draw::NativeObject::DEVICE);
context_ = (ID3D11DeviceContext *)draw->GetNativeObject(Draw::NativeObject::CONTEXT);
featureLevel_ = (D3D_FEATURE_LEVEL)draw->GetNativeObject(Draw::NativeObject::FEATURE_LEVEL);
std::vector<uint8_t> bytecode;
std::string errorMsg;
quadVertexShader_ = CreateVertexShaderD3D11(device_, vscode, strlen(vscode), &bytecode, featureLevel_);
quadPixelShader_ = CreatePixelShaderD3D11(device_, pscode, strlen(pscode), featureLevel_);
ASSERT_SUCCESS(device_->CreateInputLayout(g_QuadVertexElements, ARRAY_SIZE(g_QuadVertexElements), bytecode.data(), bytecode.size(), &quadInputLayout_));
// STRIP geometry
static const float fsCoord[20] = {
-1.0f,-1.0f, 0.0f, 0.0f, 0.0f,
1.0f,-1.0f, 0.0f, 1.0f, 0.0f,
-1.0f, 1.0f, 0.0f, 0.0f, 1.0f,
1.0f, 1.0f, 0.0f, 1.0f, 1.0f,
};
D3D11_BUFFER_DESC vb{};
vb.ByteWidth = 20 * 4;
vb.Usage = D3D11_USAGE_IMMUTABLE;
vb.CPUAccessFlags = 0;
vb.BindFlags = D3D11_BIND_VERTEX_BUFFER;
D3D11_SUBRESOURCE_DATA data{ fsCoord };
ASSERT_SUCCESS(device_->CreateBuffer(&vb, &data, &fsQuadBuffer_));
vb.Usage = D3D11_USAGE_DYNAMIC;
vb.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
ASSERT_SUCCESS(device_->CreateBuffer(&vb, nullptr, &quadBuffer_));
@ -127,13 +78,7 @@ FramebufferManagerD3D11::FramebufferManagerD3D11(Draw::DrawContext *draw)
FramebufferManagerD3D11::~FramebufferManagerD3D11() {
// Drawing cleanup
if (quadVertexShader_)
quadVertexShader_->Release();
if (quadPixelShader_)
quadPixelShader_->Release();
quadInputLayout_->Release();
quadBuffer_->Release();
fsQuadBuffer_->Release();
// Stencil cleanup
for (int i = 0; i < 256; i++) {
@ -167,12 +112,6 @@ void FramebufferManagerD3D11::SetDrawEngine(DrawEngineD3D11 *td) {
drawEngine_ = td;
}
void FramebufferManagerD3D11::Bind2DShader() {
context_->IASetInputLayout(quadInputLayout_);
context_->PSSetShader(quadPixelShader_, 0, 0);
context_->VSSetShader(quadVertexShader_, 0, 0);
}
static void CopyPixelDepthOnly(u32 *dstp, const u32 *srcp, size_t c) {
size_t x = 0;

View file

@ -48,22 +48,14 @@ public:
}
private:
void Bind2DShader() override;
void PackDepthbuffer(VirtualFramebuffer *vfb, int x, int y, int w, int h);
ID3D11Device *device_;
ID3D11DeviceContext *context_;
D3D_FEATURE_LEVEL featureLevel_;
ID3D11VertexShader *quadVertexShader_;
ID3D11PixelShader *quadPixelShader_;
ID3D11InputLayout *quadInputLayout_;
// Dynamic
ID3D11Buffer *quadBuffer_;
ID3D11Buffer *fsQuadBuffer_;
const UINT quadStride_ = 20;
const UINT quadOffset_ = 0;
static const D3D11_INPUT_ELEMENT_DESC g_QuadVertexElements[2];
ID3D11PixelShader *stencilUploadPS_ = nullptr;
ID3D11VertexShader *stencilUploadVS_ = nullptr;

View file

@ -47,59 +47,11 @@
namespace DX9 {
static const char *vscode = R"(
struct VS_IN {
float4 ObjPos : POSITION;
float2 Uv : TEXCOORD0;
};
struct VS_OUT {
float4 ProjPos : POSITION;
float2 Uv : TEXCOORD0;
};
VS_OUT main( VS_IN In ) {
VS_OUT Out;
Out.ProjPos = In.ObjPos;
Out.Uv = In.Uv;
return Out;
}
)";
static const char *pscode = R"(
sampler s: register(s0);
struct PS_IN {
float2 Uv : TEXCOORD0;
};
float4 main( PS_IN In ) : COLOR {
float4 c = tex2D(s, In.Uv);
return c;
}
)";
static const D3DVERTEXELEMENT9 g_FramebufferVertexElements[] = {
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 0, 12, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
D3DDECL_END()
};
FramebufferManagerDX9::FramebufferManagerDX9(Draw::DrawContext *draw)
: FramebufferManagerCommon(draw) {
device_ = (LPDIRECT3DDEVICE9)draw->GetNativeObject(Draw::NativeObject::DEVICE);
deviceEx_ = (LPDIRECT3DDEVICE9)draw->GetNativeObject(Draw::NativeObject::DEVICE_EX);
std::string errorMsg;
if (!CompileVertexShaderD3D9(device_, vscode, &pFramebufferVertexShader, &errorMsg)) {
OutputDebugStringA(errorMsg.c_str());
}
if (!CompilePixelShaderD3D9(device_, pscode, &pFramebufferPixelShader, &errorMsg)) {
OutputDebugStringA(errorMsg.c_str());
if (pFramebufferVertexShader) {
pFramebufferVertexShader->Release();
}
}
device_->CreateVertexDeclaration(g_FramebufferVertexElements, &pFramebufferVertexDecl);
int usage = 0;
D3DPOOL pool = D3DPOOL_MANAGED;
@ -118,24 +70,9 @@ static const D3DVERTEXELEMENT9 g_FramebufferVertexElements[] = {
}
FramebufferManagerDX9::~FramebufferManagerDX9() {
if (pFramebufferVertexShader) {
pFramebufferVertexShader->Release();
pFramebufferVertexShader = nullptr;
}
if (pFramebufferPixelShader) {
pFramebufferPixelShader->Release();
pFramebufferPixelShader = nullptr;
}
pFramebufferVertexDecl->Release();
for (auto &it : offscreenSurfaces_) {
it.second.surface->Release();
}
if (stencilUploadPS_) {
stencilUploadPS_->Release();
}
if (stencilUploadVS_) {
stencilUploadVS_->Release();
}
if (nullTex_)
nullTex_->Release();
}
@ -152,12 +89,6 @@ static const D3DVERTEXELEMENT9 g_FramebufferVertexElements[] = {
drawEngine_ = td;
}
void FramebufferManagerDX9::Bind2DShader() {
device_->SetVertexDeclaration(pFramebufferVertexDecl);
device_->SetPixelShader(pFramebufferPixelShader);
device_->SetVertexShader(pFramebufferVertexShader);
}
LPDIRECT3DSURFACE9 FramebufferManagerDX9::GetOffscreenSurface(LPDIRECT3DSURFACE9 similarSurface, VirtualFramebuffer *vfb) {
D3DSURFACE_DESC desc = {};
HRESULT hr = similarSurface->GetDesc(&desc);

View file

@ -56,7 +56,6 @@ public:
LPDIRECT3DSURFACE9 GetOffscreenSurface(D3DFORMAT fmt, u32 w, u32 h);
protected:
void Bind2DShader() override;
void DecimateFBOs() override;
private:
@ -67,14 +66,6 @@ private:
LPDIRECT3DDEVICE9 device_;
LPDIRECT3DDEVICE9 deviceEx_;
LPDIRECT3DVERTEXSHADER9 pFramebufferVertexShader = nullptr;
LPDIRECT3DPIXELSHADER9 pFramebufferPixelShader = nullptr;
LPDIRECT3DVERTEXDECLARATION9 pFramebufferVertexDecl = nullptr;
LPDIRECT3DPIXELSHADER9 stencilUploadPS_ = nullptr;
LPDIRECT3DVERTEXSHADER9 stencilUploadVS_ = nullptr;
bool stencilUploadFailed_ = false;
LPDIRECT3DTEXTURE9 nullTex_ = nullptr;
struct OffscreenSurface {
@ -85,4 +76,4 @@ private:
std::unordered_map<u64, OffscreenSurface> offscreenSurfaces_;
};
};
}

View file

@ -70,33 +70,6 @@ void main() {
}
)";
void FramebufferManagerGLES::CompileDraw2DProgram() {
if (!draw2dprogram_) {
std::string errorString;
static std::string vs_code, fs_code;
vs_code = ApplyGLSLPrelude(basic_vs, GL_VERTEX_SHADER);
fs_code = ApplyGLSLPrelude(tex_fs, GL_FRAGMENT_SHADER);
std::vector<GLRShader *> shaders;
shaders.push_back(render_->CreateShader(GL_VERTEX_SHADER, vs_code, "draw2d"));
shaders.push_back(render_->CreateShader(GL_FRAGMENT_SHADER, fs_code, "draw2d"));
std::vector<GLRProgram::UniformLocQuery> queries;
queries.push_back({ &u_draw2d_tex, "u_tex" });
std::vector<GLRProgram::Initializer> initializers;
initializers.push_back({ &u_draw2d_tex, 0 });
std::vector<GLRProgram::Semantic> semantics;
semantics.push_back({ 0, "a_position" });
semantics.push_back({ 1, "a_texcoord0" });
draw2dprogram_ = render_->CreateProgram(shaders, semantics, queries, initializers, false, false);
for (auto shader : shaders)
render_->DeleteShader(shader);
}
}
void FramebufferManagerGLES::Bind2DShader() {
render_->BindProgram(draw2dprogram_);
}
FramebufferManagerGLES::FramebufferManagerGLES(Draw::DrawContext *draw, GLRenderManager *render) :
FramebufferManagerCommon(draw),
render_(render)
@ -109,7 +82,6 @@ FramebufferManagerGLES::FramebufferManagerGLES(Draw::DrawContext *draw, GLRender
void FramebufferManagerGLES::Init() {
FramebufferManagerCommon::Init();
CompileDraw2DProgram();
}
void FramebufferManagerGLES::SetTextureCache(TextureCacheGLES *tc) {
@ -126,25 +98,9 @@ void FramebufferManagerGLES::SetDrawEngine(DrawEngineGLES *td) {
}
void FramebufferManagerGLES::CreateDeviceObjects() {
CompileDraw2DProgram();
std::vector<GLRInputLayout::Entry> entries;
entries.push_back({ 0, 3, GL_FLOAT, GL_FALSE, sizeof(Simple2DVertex), offsetof(Simple2DVertex, pos) });
entries.push_back({ 1, 2, GL_FLOAT, GL_FALSE, sizeof(Simple2DVertex), offsetof(Simple2DVertex, uv) });
simple2DInputLayout_ = render_->CreateInputLayout(entries);
}
void FramebufferManagerGLES::DestroyDeviceObjects() {
if (simple2DInputLayout_) {
render_->DeleteInputLayout(simple2DInputLayout_);
simple2DInputLayout_ = nullptr;
}
if (draw2dprogram_) {
render_->DeleteProgram(draw2dprogram_);
draw2dprogram_ = nullptr;
}
if (stencilUploadPipeline_) {
stencilUploadPipeline_->Release();
stencilUploadPipeline_ = nullptr;

View file

@ -56,9 +56,6 @@ private:
void CreateDeviceObjects();
void DestroyDeviceObjects();
void Bind2DShader() override;
void CompileDraw2DProgram();
void PackDepthbuffer(VirtualFramebuffer *vfb, int x, int y, int w, int h);
GLRenderManager *render_;
@ -66,22 +63,12 @@ private:
u8 *convBuf_ = nullptr;
u32 convBufSize_ = 0;
GLRProgram *draw2dprogram_ = nullptr;
GLRProgram *depthDownloadProgram_ = nullptr;
int u_depthDownloadTex = -1;
int u_depthDownloadFactor = -1;
int u_depthDownloadShift = -1;
int u_depthDownloadTo8 = -1;
// Cached uniform locs
int u_draw2d_tex = -1;
DrawEngineGLES *drawEngineGL_ = nullptr;
struct Simple2DVertex {
float pos[3];
float uv[2];
};
GLRInputLayout *simple2DInputLayout_ = nullptr;
};

View file

@ -100,52 +100,10 @@ void FramebufferManagerVulkan::SetDrawEngine(DrawEngineVulkan *td) {
}
void FramebufferManagerVulkan::InitDeviceObjects() {
VulkanContext *vulkan = (VulkanContext *)draw_->GetNativeObject(Draw::NativeObject::CONTEXT);
std::string fs_errors, vs_errors;
fsBasicTex_ = CompileShaderModule(vulkan, VK_SHADER_STAGE_FRAGMENT_BIT, tex_fs, &fs_errors);
vsBasicTex_ = CompileShaderModule(vulkan, VK_SHADER_STAGE_VERTEX_BIT, tex_vs, &vs_errors);
_assert_(fsBasicTex_ != VK_NULL_HANDLE);
_assert_(vsBasicTex_ != VK_NULL_HANDLE);
VkSamplerCreateInfo samp = { VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO };
samp.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
samp.addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
samp.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
samp.magFilter = VK_FILTER_NEAREST;
samp.minFilter = VK_FILTER_NEAREST;
VkResult res = vkCreateSampler(vulkan->GetDevice(), &samp, nullptr, &nearestSampler_);
_assert_(res == VK_SUCCESS);
samp.magFilter = VK_FILTER_LINEAR;
samp.minFilter = VK_FILTER_LINEAR;
res = vkCreateSampler(vulkan->GetDevice(), &samp, nullptr, &linearSampler_);
_assert_(res == VK_SUCCESS);
}
void FramebufferManagerVulkan::DestroyDeviceObjects() {
if (!draw_)
return;
VulkanContext *vulkan = (VulkanContext *)draw_->GetNativeObject(Draw::NativeObject::CONTEXT);
if (fsBasicTex_ != VK_NULL_HANDLE) {
vulkan2D_->PurgeFragmentShader(fsBasicTex_);
vulkan->Delete().QueueDeleteShaderModule(fsBasicTex_);
}
if (vsBasicTex_ != VK_NULL_HANDLE) {
vulkan2D_->PurgeVertexShader(vsBasicTex_);
vulkan->Delete().QueueDeleteShaderModule(vsBasicTex_);
}
if (stencilFs_ != VK_NULL_HANDLE) {
vulkan2D_->PurgeFragmentShader(stencilFs_);
vulkan->Delete().QueueDeleteShaderModule(stencilFs_);
}
if (stencilVs_ != VK_NULL_HANDLE) {
vulkan2D_->PurgeVertexShader(stencilVs_);
vulkan->Delete().QueueDeleteShaderModule(stencilVs_);
}
if (linearSampler_ != VK_NULL_HANDLE)
vulkan->Delete().QueueDeleteSampler(linearSampler_);
if (nearestSampler_ != VK_NULL_HANDLE)
vulkan->Delete().QueueDeleteSampler(nearestSampler_);
}
void FramebufferManagerVulkan::NotifyClear(bool clearColor, bool clearAlpha, bool clearDepth, uint32_t color, float depth) {
@ -170,11 +128,6 @@ void FramebufferManagerVulkan::NotifyClear(bool clearColor, bool clearAlpha, boo
}
}
void FramebufferManagerVulkan::Bind2DShader() {
VkRenderPass rp = (VkRenderPass)draw_->GetNativeObject(Draw::NativeObject::COMPATIBLE_RENDERPASS);
cur2DPipeline_ = vulkan2D_->GetPipeline(rp, vsBasicTex_, fsBasicTex_);
}
void FramebufferManagerVulkan::BeginFrameVulkan() {
BeginFrame();
}

View file

@ -53,9 +53,6 @@ public:
// do that.
void NotifyClear(bool clearColor, bool clearAlpha, bool clearDepth, uint32_t color, float depth);
protected:
void Bind2DShader() override;
private:
void InitDeviceObjects();
void DestroyDeviceObjects();
@ -70,18 +67,6 @@ private:
VkPipelineCache pipelineCache2D_;
// Basic shaders
VkShaderModule fsBasicTex_ = VK_NULL_HANDLE;
VkShaderModule vsBasicTex_ = VK_NULL_HANDLE;
VkShaderModule stencilVs_ = VK_NULL_HANDLE;
VkShaderModule stencilFs_ = VK_NULL_HANDLE;
VkPipeline cur2DPipeline_ = VK_NULL_HANDLE;
VkSampler linearSampler_;
VkSampler nearestSampler_;
// Simple 2D drawing engine.
Vulkan2D *vulkan2D_;
};