mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
OpenGL: Some paranoia checks around failed shader generation
This commit is contained in:
parent
c1ede07a14
commit
7c420381d5
2 changed files with 14 additions and 2 deletions
|
@ -414,7 +414,11 @@ void DrawEngineGLES::DoFlush() {
|
||||||
|
|
||||||
ApplyDrawStateLate(result.setStencil, result.stencilValue);
|
ApplyDrawStateLate(result.setStencil, result.stencilValue);
|
||||||
|
|
||||||
shaderManager_->ApplyFragmentShader(vsid, vshader, pipelineState_, framebufferManager_->UseBufferedRendering());
|
LinkedShader *linked = shaderManager_->ApplyFragmentShader(vsid, vshader, pipelineState_, framebufferManager_->UseBufferedRendering());
|
||||||
|
if (!linked) {
|
||||||
|
// Not much we can do here. Let's skip drawing.
|
||||||
|
goto bail;
|
||||||
|
}
|
||||||
|
|
||||||
if (result.action == SW_DRAW_PRIMITIVES) {
|
if (result.action == SW_DRAW_PRIMITIVES) {
|
||||||
if (result.drawIndexed) {
|
if (result.drawIndexed) {
|
||||||
|
@ -458,6 +462,7 @@ void DrawEngineGLES::DoFlush() {
|
||||||
decOptions_.applySkinInDecode = g_Config.bSoftwareSkinning;
|
decOptions_.applySkinInDecode = g_Config.bSoftwareSkinning;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bail:
|
||||||
gpuStats.numFlushes++;
|
gpuStats.numFlushes++;
|
||||||
gpuStats.numDrawCalls += numDrawCalls;
|
gpuStats.numDrawCalls += numDrawCalls;
|
||||||
gpuStats.numVertsSubmitted += vertexCountInDrawCalls_;
|
gpuStats.numVertsSubmitted += vertexCountInDrawCalls_;
|
||||||
|
|
|
@ -76,13 +76,15 @@ LinkedShader::LinkedShader(GLRenderManager *render, VShaderID VSID, Shader *vs,
|
||||||
: render_(render), useHWTransform_(useHWTransform) {
|
: render_(render), useHWTransform_(useHWTransform) {
|
||||||
PROFILE_THIS_SCOPE("shaderlink");
|
PROFILE_THIS_SCOPE("shaderlink");
|
||||||
|
|
||||||
|
_assert_(vs);
|
||||||
|
_assert_(fs);
|
||||||
|
|
||||||
vs_ = vs;
|
vs_ = vs;
|
||||||
|
|
||||||
std::vector<GLRShader *> shaders;
|
std::vector<GLRShader *> shaders;
|
||||||
shaders.push_back(vs->shader);
|
shaders.push_back(vs->shader);
|
||||||
shaders.push_back(fs->shader);
|
shaders.push_back(fs->shader);
|
||||||
|
|
||||||
|
|
||||||
std::vector<GLRProgram::Semantic> semantics;
|
std::vector<GLRProgram::Semantic> semantics;
|
||||||
semantics.reserve(7);
|
semantics.reserve(7);
|
||||||
semantics.push_back({ ATTR_POSITION, "position" });
|
semantics.push_back({ ATTR_POSITION, "position" });
|
||||||
|
@ -874,6 +876,11 @@ LinkedShader *ShaderManagerGLES::ApplyFragmentShader(VShaderID VSID, Shader *vs,
|
||||||
if (ls == nullptr) {
|
if (ls == nullptr) {
|
||||||
_dbg_assert_(FSID.Bit(FS_BIT_FLATSHADE) == VSID.Bit(VS_BIT_FLATSHADE));
|
_dbg_assert_(FSID.Bit(FS_BIT_FLATSHADE) == VSID.Bit(VS_BIT_FLATSHADE));
|
||||||
|
|
||||||
|
if (vs == nullptr || fs == nullptr) {
|
||||||
|
// Can't draw. This shouldn't really happen.
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
// Check if we can link these.
|
// Check if we can link these.
|
||||||
ls = new LinkedShader(render_, VSID, vs, FSID, fs, vs->UseHWTransform());
|
ls = new LinkedShader(render_, VSID, vs, FSID, fs, vs->UseHWTransform());
|
||||||
ls->use(VSID);
|
ls->use(VSID);
|
||||||
|
|
Loading…
Add table
Reference in a new issue