diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index edb31e063..b35bbc78b 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -54,8 +54,8 @@ RasterizerOpenGL::RasterizerOpenGL() index_buffer(GL_ELEMENT_ARRAY_BUFFER, INDEX_BUFFER_SIZE, false), texture_buffer(GL_TEXTURE_BUFFER, TEXTURE_BUFFER_SIZE, false) { - allow_shadow = GLAD_GL_ARB_shader_image_load_store && GLAD_GL_ARB_shader_image_size && - GLAD_GL_ARB_framebuffer_no_attachments; + allow_shadow = GLES || (GLAD_GL_ARB_shader_image_load_store && GLAD_GL_ARB_shader_image_size && + GLAD_GL_ARB_framebuffer_no_attachments); if (!allow_shadow) { LOG_WARNING(Render_OpenGL, "Shadow might not be able to render because of unsupported OpenGL extensions."); diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp index 9ed5b2098..af38ff877 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.cpp +++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp @@ -1227,14 +1227,21 @@ float ProcTexNoiseCoef(vec2 x) { ShaderDecompiler::ProgramResult GenerateFragmentShader(const PicaFSConfig& config, bool separable_shader) { const auto& state = config.state; + std::string out; - std::string out = R"( + if (GLES) { + out += R"( +#define ALLOW_SHADOW (defined(CITRA_GLES)) +)"; + } else { + out += R"( #extension GL_ARB_shader_image_load_store : enable #extension GL_ARB_shader_image_size : enable #define ALLOW_SHADOW (defined(GL_ARB_shader_image_load_store) && defined(GL_ARB_shader_image_size)) )"; + } - if (separable_shader) { + if (separable_shader && !GLES) { out += "#extension GL_ARB_separate_shader_objects : enable\n"; } @@ -1611,7 +1618,7 @@ do { ShaderDecompiler::ProgramResult GenerateTrivialVertexShader(bool separable_shader) { std::string out; - if (separable_shader) { + if (separable_shader && !GLES) { out += "#extension GL_ARB_separate_shader_objects : enable\n"; } @@ -1654,8 +1661,8 @@ void main() { std::optional GenerateVertexShader( const Pica::Shader::ShaderSetup& setup, const PicaVSConfig& config, bool separable_shader) { - std::string out = ""; - if (separable_shader) { + std::string out; + if (separable_shader && !GLES) { out += "#extension GL_ARB_separate_shader_objects : enable\n"; } @@ -1804,8 +1811,8 @@ void EmitPrim(Vertex vtx0, Vertex vtx1, Vertex vtx2) { ShaderDecompiler::ProgramResult GenerateFixedGeometryShader(const PicaFixedGSConfig& config, bool separable_shader) { - std::string out = ""; - if (separable_shader) { + std::string out; + if (separable_shader && !GLES) { out += "#extension GL_ARB_separate_shader_objects : enable\n\n"; }