mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-11-01 03:57:17 +01:00
The system info screen's "Copy summary" kept the draw context it was created with, and the GPU driver test screen kept its pipelines and sampler, using and finally releasing them into a deleted context after Android lost the surface. Look up the draw context when clicked, and release the test objects on device loss (they're recreated on draw). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
66 lines
2.0 KiB
C++
66 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include "Common/System/Display.h"
|
|
#include "Common/UI/Context.h"
|
|
#include "Common/UI/View.h"
|
|
#include "Common/UI/ViewGroup.h"
|
|
#include "Common/UI/TabHolder.h"
|
|
|
|
#include "Common/Log.h"
|
|
#include "UI/BaseScreens.h"
|
|
#include "Common/GPU/thin3d.h"
|
|
|
|
class GPUDriverTestScreen : public UIBaseDialogScreen {
|
|
public:
|
|
bool LimitContentArea() const override { return false; }
|
|
GPUDriverTestScreen();
|
|
~GPUDriverTestScreen();
|
|
|
|
void CreateViews() override;
|
|
void DrawForeground(UIContext &dc) override;
|
|
void deviceLost() override;
|
|
|
|
const char *tag() const override { return "GPUDriverTest"; }
|
|
|
|
private:
|
|
void DiscardTest(UIContext &dc);
|
|
void ShaderTest(UIContext &dc);
|
|
void DestroyDeviceObjects();
|
|
|
|
// Common objects
|
|
Draw::SamplerState *samplerNearest_ = nullptr;
|
|
|
|
// Discard/depth/stencil stuff
|
|
// ===========================
|
|
|
|
Draw::ShaderModule *discardFragShader_ = nullptr;
|
|
Draw::Pipeline *discardWriteDepthStencil_ = nullptr;
|
|
Draw::Pipeline *discardWriteDepth_ = nullptr;
|
|
Draw::Pipeline *discardWriteStencil_ = nullptr;
|
|
|
|
// Stencil test, with and without DepthAlways
|
|
Draw::Pipeline *drawTestStencilEqual_ = nullptr;
|
|
Draw::Pipeline *drawTestStencilNotEqual_ = nullptr;
|
|
Draw::Pipeline *drawTestStencilEqualDepthAlways_ = nullptr;
|
|
Draw::Pipeline *drawTestStencilNotEqualDepthAlways_ = nullptr;
|
|
|
|
// Depth tests with and without StencilAlways
|
|
Draw::Pipeline *drawTestStencilAlwaysDepthLessEqual_ = nullptr;
|
|
Draw::Pipeline *drawTestStencilAlwaysDepthGreater_ = nullptr;
|
|
Draw::Pipeline *drawTestDepthLessEqual_ = nullptr;
|
|
Draw::Pipeline *drawTestDepthGreater_ = nullptr;
|
|
|
|
|
|
// Shader tests
|
|
// ============
|
|
|
|
Draw::Pipeline *adrenoLogicDiscardPipeline_ = nullptr;
|
|
Draw::ShaderModule *adrenoLogicDiscardFragShader_ = nullptr;
|
|
Draw::ShaderModule *adrenoLogicDiscardVertShader_ = nullptr;
|
|
Draw::Pipeline *flatShadingPipeline_ = nullptr;
|
|
Draw::ShaderModule *flatFragShader_ = nullptr;
|
|
Draw::ShaderModule *flatVertShader_ = nullptr;
|
|
|
|
UI::TabHolder *tabHolder_ = nullptr;
|
|
};
|