mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-05-19 08:30:22 -07:00
opengl: don't attempt to compile cm on gles3.0
also disable the error for the cm shader fixes #9738
This commit is contained in:
parent
3eb859bb4e
commit
189e18394e
@ -158,6 +158,7 @@ void CHyprOpenGLImpl::initEGL(bool gbm) {
|
|||||||
#else
|
#else
|
||||||
attrs.push_back(EGL_CONTEXT_CLIENT_VERSION);
|
attrs.push_back(EGL_CONTEXT_CLIENT_VERSION);
|
||||||
attrs.push_back(2);
|
attrs.push_back(2);
|
||||||
|
m_eglContextVersion = EGL_CONTEXT_GLES_2_0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
attrs.push_back(EGL_NONE);
|
attrs.push_back(EGL_NONE);
|
||||||
@ -176,7 +177,8 @@ void CHyprOpenGLImpl::initEGL(bool gbm) {
|
|||||||
attrs.push_back(0);
|
attrs.push_back(0);
|
||||||
attrs.push_back(EGL_NONE);
|
attrs.push_back(EGL_NONE);
|
||||||
|
|
||||||
m_pEglContext = eglCreateContext(m_pEglDisplay, EGL_NO_CONFIG_KHR, EGL_NO_CONTEXT, attrs.data());
|
m_pEglContext = eglCreateContext(m_pEglDisplay, EGL_NO_CONFIG_KHR, EGL_NO_CONTEXT, attrs.data());
|
||||||
|
m_eglContextVersion = EGL_CONTEXT_GLES_3_0;
|
||||||
|
|
||||||
if (m_pEglContext == EGL_NO_CONTEXT)
|
if (m_pEglContext == EGL_NO_CONTEXT)
|
||||||
RASSERT(false, "EGL: failed to create a context with either GLES3.2 or 3.0");
|
RASSERT(false, "EGL: failed to create a context with either GLES3.2 or 3.0");
|
||||||
@ -564,7 +566,7 @@ EGLImageKHR CHyprOpenGLImpl::createEGLImage(const Aquamarine::SDMABUFAttrs& attr
|
|||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHyprOpenGLImpl::logShaderError(const GLuint& shader, bool program) {
|
void CHyprOpenGLImpl::logShaderError(const GLuint& shader, bool program, bool silent) {
|
||||||
GLint maxLength = 0;
|
GLint maxLength = 0;
|
||||||
if (program)
|
if (program)
|
||||||
glGetProgramiv(shader, GL_INFO_LOG_LENGTH, &maxLength);
|
glGetProgramiv(shader, GL_INFO_LOG_LENGTH, &maxLength);
|
||||||
@ -582,18 +584,19 @@ void CHyprOpenGLImpl::logShaderError(const GLuint& shader, bool program) {
|
|||||||
|
|
||||||
Debug::log(ERR, "Failed to link shader: {}", FULLERROR);
|
Debug::log(ERR, "Failed to link shader: {}", FULLERROR);
|
||||||
|
|
||||||
g_pConfigManager->addParseError(FULLERROR);
|
if (!silent)
|
||||||
|
g_pConfigManager->addParseError(FULLERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
GLuint CHyprOpenGLImpl::createProgram(const std::string& vert, const std::string& frag, bool dynamic) {
|
GLuint CHyprOpenGLImpl::createProgram(const std::string& vert, const std::string& frag, bool dynamic, bool silent) {
|
||||||
auto vertCompiled = compileShader(GL_VERTEX_SHADER, vert, dynamic);
|
auto vertCompiled = compileShader(GL_VERTEX_SHADER, vert, dynamic, silent);
|
||||||
if (dynamic) {
|
if (dynamic) {
|
||||||
if (vertCompiled == 0)
|
if (vertCompiled == 0)
|
||||||
return 0;
|
return 0;
|
||||||
} else
|
} else
|
||||||
RASSERT(vertCompiled, "Compiling shader failed. VERTEX nullptr! Shader source:\n\n{}", vert);
|
RASSERT(vertCompiled, "Compiling shader failed. VERTEX nullptr! Shader source:\n\n{}", vert);
|
||||||
|
|
||||||
auto fragCompiled = compileShader(GL_FRAGMENT_SHADER, frag, dynamic);
|
auto fragCompiled = compileShader(GL_FRAGMENT_SHADER, frag, dynamic, silent);
|
||||||
if (dynamic) {
|
if (dynamic) {
|
||||||
if (fragCompiled == 0)
|
if (fragCompiled == 0)
|
||||||
return 0;
|
return 0;
|
||||||
@ -614,7 +617,7 @@ GLuint CHyprOpenGLImpl::createProgram(const std::string& vert, const std::string
|
|||||||
glGetProgramiv(prog, GL_LINK_STATUS, &ok);
|
glGetProgramiv(prog, GL_LINK_STATUS, &ok);
|
||||||
if (dynamic) {
|
if (dynamic) {
|
||||||
if (ok == GL_FALSE) {
|
if (ok == GL_FALSE) {
|
||||||
logShaderError(prog, true);
|
logShaderError(prog, true, silent);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -626,7 +629,7 @@ GLuint CHyprOpenGLImpl::createProgram(const std::string& vert, const std::string
|
|||||||
return prog;
|
return prog;
|
||||||
}
|
}
|
||||||
|
|
||||||
GLuint CHyprOpenGLImpl::compileShader(const GLuint& type, std::string src, bool dynamic) {
|
GLuint CHyprOpenGLImpl::compileShader(const GLuint& type, std::string src, bool dynamic, bool silent) {
|
||||||
auto shader = glCreateShader(type);
|
auto shader = glCreateShader(type);
|
||||||
|
|
||||||
auto shaderSource = src.c_str();
|
auto shaderSource = src.c_str();
|
||||||
@ -639,7 +642,7 @@ GLuint CHyprOpenGLImpl::compileShader(const GLuint& type, std::string src, bool
|
|||||||
|
|
||||||
if (dynamic) {
|
if (dynamic) {
|
||||||
if (ok == GL_FALSE) {
|
if (ok == GL_FALSE) {
|
||||||
logShaderError(shader, false);
|
logShaderError(shader, false, silent);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -868,41 +871,43 @@ void CHyprOpenGLImpl::initShaders() {
|
|||||||
m_RenderData.pCurrentMonData->m_shQUAD.roundingPower = glGetUniformLocation(prog, "roundingPower");
|
m_RenderData.pCurrentMonData->m_shQUAD.roundingPower = glGetUniformLocation(prog, "roundingPower");
|
||||||
|
|
||||||
#ifndef GLES2
|
#ifndef GLES2
|
||||||
prog = createProgram(TEXVERTSRC320, TEXFRAGSRCCM, true);
|
if (m_eglContextVersion == EGL_CONTEXT_GLES_3_2 /* GLES2 and GLES3.0 can't compile the CM shader */) {
|
||||||
m_bCMSupported = prog > 0;
|
prog = createProgram(TEXVERTSRC320, TEXFRAGSRCCM, true, true);
|
||||||
if (m_bCMSupported) {
|
m_bCMSupported = prog > 0;
|
||||||
m_RenderData.pCurrentMonData->m_shCM.program = prog;
|
if (m_bCMSupported) {
|
||||||
m_RenderData.pCurrentMonData->m_shCM.proj = glGetUniformLocation(prog, "proj");
|
m_RenderData.pCurrentMonData->m_shCM.program = prog;
|
||||||
m_RenderData.pCurrentMonData->m_shCM.tex = glGetUniformLocation(prog, "tex");
|
m_RenderData.pCurrentMonData->m_shCM.proj = glGetUniformLocation(prog, "proj");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.texType = glGetUniformLocation(prog, "texType");
|
m_RenderData.pCurrentMonData->m_shCM.tex = glGetUniformLocation(prog, "tex");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.sourceTF = glGetUniformLocation(prog, "sourceTF");
|
m_RenderData.pCurrentMonData->m_shCM.texType = glGetUniformLocation(prog, "texType");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.targetTF = glGetUniformLocation(prog, "targetTF");
|
m_RenderData.pCurrentMonData->m_shCM.sourceTF = glGetUniformLocation(prog, "sourceTF");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.sourcePrimaries = glGetUniformLocation(prog, "sourcePrimaries");
|
m_RenderData.pCurrentMonData->m_shCM.targetTF = glGetUniformLocation(prog, "targetTF");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.targetPrimaries = glGetUniformLocation(prog, "targetPrimaries");
|
m_RenderData.pCurrentMonData->m_shCM.sourcePrimaries = glGetUniformLocation(prog, "sourcePrimaries");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.maxLuminance = glGetUniformLocation(prog, "maxLuminance");
|
m_RenderData.pCurrentMonData->m_shCM.targetPrimaries = glGetUniformLocation(prog, "targetPrimaries");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.dstMaxLuminance = glGetUniformLocation(prog, "dstMaxLuminance");
|
m_RenderData.pCurrentMonData->m_shCM.maxLuminance = glGetUniformLocation(prog, "maxLuminance");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.dstRefLuminance = glGetUniformLocation(prog, "dstRefLuminance");
|
m_RenderData.pCurrentMonData->m_shCM.dstMaxLuminance = glGetUniformLocation(prog, "dstMaxLuminance");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.sdrSaturation = glGetUniformLocation(prog, "sdrSaturation");
|
m_RenderData.pCurrentMonData->m_shCM.dstRefLuminance = glGetUniformLocation(prog, "dstRefLuminance");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.sdrBrightness = glGetUniformLocation(prog, "sdrBrightnessMultiplier");
|
m_RenderData.pCurrentMonData->m_shCM.sdrSaturation = glGetUniformLocation(prog, "sdrSaturation");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.alphaMatte = glGetUniformLocation(prog, "texMatte");
|
m_RenderData.pCurrentMonData->m_shCM.sdrBrightness = glGetUniformLocation(prog, "sdrBrightnessMultiplier");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.alpha = glGetUniformLocation(prog, "alpha");
|
m_RenderData.pCurrentMonData->m_shCM.alphaMatte = glGetUniformLocation(prog, "texMatte");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.texAttrib = glGetAttribLocation(prog, "texcoord");
|
m_RenderData.pCurrentMonData->m_shCM.alpha = glGetUniformLocation(prog, "alpha");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.matteTexAttrib = glGetAttribLocation(prog, "texcoordMatte");
|
m_RenderData.pCurrentMonData->m_shCM.texAttrib = glGetAttribLocation(prog, "texcoord");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.posAttrib = glGetAttribLocation(prog, "pos");
|
m_RenderData.pCurrentMonData->m_shCM.matteTexAttrib = glGetAttribLocation(prog, "texcoordMatte");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.discardOpaque = glGetUniformLocation(prog, "discardOpaque");
|
m_RenderData.pCurrentMonData->m_shCM.posAttrib = glGetAttribLocation(prog, "pos");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.discardAlpha = glGetUniformLocation(prog, "discardAlpha");
|
m_RenderData.pCurrentMonData->m_shCM.discardOpaque = glGetUniformLocation(prog, "discardOpaque");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.discardAlphaValue = glGetUniformLocation(prog, "discardAlphaValue");
|
m_RenderData.pCurrentMonData->m_shCM.discardAlpha = glGetUniformLocation(prog, "discardAlpha");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.topLeft = glGetUniformLocation(prog, "topLeft");
|
m_RenderData.pCurrentMonData->m_shCM.discardAlphaValue = glGetUniformLocation(prog, "discardAlphaValue");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.fullSize = glGetUniformLocation(prog, "fullSize");
|
m_RenderData.pCurrentMonData->m_shCM.topLeft = glGetUniformLocation(prog, "topLeft");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.radius = glGetUniformLocation(prog, "radius");
|
m_RenderData.pCurrentMonData->m_shCM.fullSize = glGetUniformLocation(prog, "fullSize");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.roundingPower = glGetUniformLocation(prog, "roundingPower");
|
m_RenderData.pCurrentMonData->m_shCM.radius = glGetUniformLocation(prog, "radius");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.applyTint = glGetUniformLocation(prog, "applyTint");
|
m_RenderData.pCurrentMonData->m_shCM.roundingPower = glGetUniformLocation(prog, "roundingPower");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.tint = glGetUniformLocation(prog, "tint");
|
m_RenderData.pCurrentMonData->m_shCM.applyTint = glGetUniformLocation(prog, "applyTint");
|
||||||
m_RenderData.pCurrentMonData->m_shCM.useAlphaMatte = glGetUniformLocation(prog, "useAlphaMatte");
|
m_RenderData.pCurrentMonData->m_shCM.tint = glGetUniformLocation(prog, "tint");
|
||||||
} else {
|
m_RenderData.pCurrentMonData->m_shCM.useAlphaMatte = glGetUniformLocation(prog, "useAlphaMatte");
|
||||||
Debug::log(
|
} else {
|
||||||
ERR,
|
Debug::log(
|
||||||
"WARNING: CM Shader failed compiling, color management will not work. It's likely because your GPU is an old piece of garbage, don't file bug reports about this!");
|
ERR,
|
||||||
|
"WARNING: CM Shader failed compiling, color management will not work. It's likely because your GPU is an old piece of garbage, don't file bug reports about this!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -276,6 +276,14 @@ class CHyprOpenGLImpl {
|
|||||||
} m_sExts;
|
} m_sExts;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
enum eEGLContextVersion : uint8_t {
|
||||||
|
EGL_CONTEXT_GLES_2_0 = 0,
|
||||||
|
EGL_CONTEXT_GLES_3_0,
|
||||||
|
EGL_CONTEXT_GLES_3_2,
|
||||||
|
};
|
||||||
|
|
||||||
|
eEGLContextVersion m_eglContextVersion = EGL_CONTEXT_GLES_3_2;
|
||||||
|
|
||||||
std::list<GLuint> m_lBuffers;
|
std::list<GLuint> m_lBuffers;
|
||||||
std::list<GLuint> m_lTextures;
|
std::list<GLuint> m_lTextures;
|
||||||
|
|
||||||
@ -297,9 +305,9 @@ class CHyprOpenGLImpl {
|
|||||||
|
|
||||||
SP<CTexture> m_pMissingAssetTexture, m_pBackgroundTexture, m_pLockDeadTexture, m_pLockDead2Texture, m_pLockTtyTextTexture; // TODO: don't always load lock
|
SP<CTexture> m_pMissingAssetTexture, m_pBackgroundTexture, m_pLockDeadTexture, m_pLockDead2Texture, m_pLockTtyTextTexture; // TODO: don't always load lock
|
||||||
|
|
||||||
void logShaderError(const GLuint&, bool program = false);
|
void logShaderError(const GLuint&, bool program = false, bool silent = false);
|
||||||
GLuint createProgram(const std::string&, const std::string&, bool dynamic = false);
|
GLuint createProgram(const std::string&, const std::string&, bool dynamic = false, bool silent = false);
|
||||||
GLuint compileShader(const GLuint&, std::string, bool dynamic = false);
|
GLuint compileShader(const GLuint&, std::string, bool dynamic = false, bool silent = false);
|
||||||
void createBGTextureForMonitor(PHLMONITOR);
|
void createBGTextureForMonitor(PHLMONITOR);
|
||||||
void initShaders();
|
void initShaders();
|
||||||
void initDRMFormats();
|
void initDRMFormats();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user