pvr: recover from renderer init failure
issue MINIDUMP-V fix some warnings
This commit is contained in:
parent
5acfa7d3d6
commit
802f70fedd
|
@ -1117,7 +1117,8 @@ target_sources(${PROJECT_NAME} PRIVATE
|
|||
core/rend/sorter.h
|
||||
core/rend/tileclip.h
|
||||
core/rend/TexCache.cpp
|
||||
core/rend/TexCache.h)
|
||||
core/rend/TexCache.h
|
||||
core/rend/norend/norend.cpp)
|
||||
if(NOT LIBRETRO)
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/rend/game_scanner.h
|
||||
|
|
|
@ -302,12 +302,17 @@ static void rend_create_renderer()
|
|||
#endif
|
||||
}
|
||||
|
||||
void rend_init_renderer()
|
||||
bool rend_init_renderer()
|
||||
{
|
||||
if (renderer == nullptr)
|
||||
rend_create_renderer();
|
||||
if (!renderer->Init())
|
||||
die("Renderer initialization failed\n");
|
||||
bool success = renderer->Init();
|
||||
if (!success) {
|
||||
delete renderer;
|
||||
renderer = rend_norend();
|
||||
renderer->Init();
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
void rend_term_renderer()
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
extern u32 FrameCount;
|
||||
|
||||
void rend_init_renderer();
|
||||
bool rend_init_renderer();
|
||||
void rend_term_renderer();
|
||||
void rend_vblank();
|
||||
void rend_start_render();
|
||||
|
|
|
@ -176,8 +176,11 @@ void DXContext::resize()
|
|||
|
||||
void DXContext::resetDevice()
|
||||
{
|
||||
D3DRenderer *dxrenderer{};
|
||||
if (renderer != nullptr)
|
||||
((D3DRenderer *)renderer)->preReset();
|
||||
dxrenderer = dynamic_cast<D3DRenderer*>(renderer);
|
||||
if (dxrenderer != nullptr)
|
||||
dxrenderer->preReset();
|
||||
overlay.term();
|
||||
ImGui_ImplDX9_InvalidateDeviceObjects();
|
||||
HRESULT hr = pDevice->Reset(&d3dpp);
|
||||
|
@ -188,6 +191,6 @@ void DXContext::resetDevice()
|
|||
}
|
||||
ImGui_ImplDX9_CreateDeviceObjects();
|
||||
overlay.init(pDevice);
|
||||
if (renderer != nullptr)
|
||||
((D3DRenderer *)renderer)->postReset();
|
||||
if (dxrenderer != nullptr)
|
||||
dxrenderer->postReset();
|
||||
}
|
||||
|
|
|
@ -292,8 +292,6 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
GLuint _array_buffer;
|
||||
GLuint _element_array_buffer;
|
||||
GLuint _texture;
|
||||
GLenum _src_blend_factor;
|
||||
GLenum _dst_blend_factor;
|
||||
|
|
|
@ -46,7 +46,7 @@ bool mainui_rend_frame()
|
|||
{
|
||||
gui_display_ui();
|
||||
// TODO refactor android vjoy out of renderer
|
||||
if (gui_state == GuiState::VJoyEdit && renderer != NULL)
|
||||
if (gui_state == GuiState::VJoyEdit && renderer != nullptr)
|
||||
renderer->DrawOSD(true);
|
||||
#ifndef TARGET_IPHONE
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(16));
|
||||
|
@ -72,7 +72,10 @@ bool mainui_rend_frame()
|
|||
|
||||
void mainui_init()
|
||||
{
|
||||
rend_init_renderer();
|
||||
if (!rend_init_renderer()) {
|
||||
ERROR_LOG(RENDERER, "Renderer initialization failed");
|
||||
gui_error("Renderer initialization failed.\nPlease select a different graphics API");
|
||||
}
|
||||
}
|
||||
|
||||
void mainui_term()
|
||||
|
|
|
@ -1,29 +1,23 @@
|
|||
#include "hw/pvr/ta_ctx.h"
|
||||
#include "hw/pvr/ta_structs.h"
|
||||
#include "hw/pvr/ta.h"
|
||||
#include "hw/pvr/Renderer_if.h"
|
||||
|
||||
struct norend : Renderer
|
||||
{
|
||||
bool Init()
|
||||
{
|
||||
bool Init() override {
|
||||
return true;
|
||||
}
|
||||
void Term() override { }
|
||||
|
||||
void Resize(int w, int h) { }
|
||||
void Term() { }
|
||||
bool Process(TA_context* ctx) override {
|
||||
return ta_parse(ctx, true);
|
||||
}
|
||||
|
||||
|
||||
bool Process(TA_context* ctx) { return true; }
|
||||
|
||||
void DrawOSD() { }
|
||||
|
||||
bool Render()
|
||||
{
|
||||
bool Render() override {
|
||||
return !pvrrc.isRTT;
|
||||
}
|
||||
void RenderFramebuffer(const FramebufferInfo& info) override { }
|
||||
};
|
||||
|
||||
|
||||
Renderer* rend_norend() { return new norend(); }
|
||||
|
||||
u32 GetTexture(TSP tsp,TCW tcw) { return 0; }
|
||||
Renderer *rend_norend() {
|
||||
return new norend();
|
||||
}
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
#pragma once
|
||||
#include <cinttypes>
|
||||
#include "vulkan.h"
|
||||
#define VMA_NOT_NULL
|
||||
#define VMA_NULLABLE
|
||||
#include "vk_mem_alloc.h"
|
||||
|
||||
#if !defined(PRIu64) && defined(_WIN32)
|
||||
|
|
|
@ -210,7 +210,7 @@ bool VulkanContext::InitInstance(const char** extensions, uint32_t extensions_co
|
|||
}
|
||||
}
|
||||
if (!physicalDevice)
|
||||
physicalDevice = instance->enumeratePhysicalDevices().front();
|
||||
physicalDevice = devices.front();
|
||||
|
||||
const vk::PhysicalDeviceProperties *properties;
|
||||
if (vulkan11)
|
||||
|
|
|
@ -121,6 +121,9 @@ Renderer* rend_Vulkan()
|
|||
|
||||
void ReInitOSD()
|
||||
{
|
||||
if (renderer != nullptr)
|
||||
((BaseVulkanRenderer *)renderer)->ReInitOSD();
|
||||
if (renderer != nullptr) {
|
||||
BaseVulkanRenderer *vkrenderer = dynamic_cast<BaseVulkanRenderer*>(renderer);
|
||||
if (vkrenderer != nullptr)
|
||||
vkrenderer->ReInitOSD();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue