|
@@ -89,7 +89,12 @@ static const char render_uniforms[] = R"(
|
|
// According to the GLSL ES 1.0 spec, uniform precision must match between stages,
|
|
// According to the GLSL ES 1.0 spec, uniform precision must match between stages,
|
|
// but we can't guarantee that highp is always supported in fragment shaders...
|
|
// but we can't guarantee that highp is always supported in fragment shaders...
|
|
// We *really* don't want to use mediump for these in vertex shaders though.
|
|
// We *really* don't want to use mediump for these in vertex shaders though.
|
|
|
|
+#ifdef LOVE_SPLIT_UNIFORMS_PER_DRAW
|
|
|
|
+uniform LOVE_HIGHP_OR_MEDIUMP vec4 love_UniformsPerDraw[12];
|
|
|
|
+uniform LOVE_HIGHP_OR_MEDIUMP vec4 love_UniformsPerDraw2[1];
|
|
|
|
+#else
|
|
uniform LOVE_HIGHP_OR_MEDIUMP vec4 love_UniformsPerDraw[13];
|
|
uniform LOVE_HIGHP_OR_MEDIUMP vec4 love_UniformsPerDraw[13];
|
|
|
|
+#endif
|
|
|
|
|
|
// Older GLSL doesn't support preprocessor line continuations...
|
|
// Older GLSL doesn't support preprocessor line continuations...
|
|
#define TransformMatrix mat4(love_UniformsPerDraw[0], love_UniformsPerDraw[1], love_UniformsPerDraw[2], love_UniformsPerDraw[3])
|
|
#define TransformMatrix mat4(love_UniformsPerDraw[0], love_UniformsPerDraw[1], love_UniformsPerDraw[2], love_UniformsPerDraw[3])
|
|
@@ -100,8 +105,13 @@ uniform LOVE_HIGHP_OR_MEDIUMP vec4 love_UniformsPerDraw[13];
|
|
|
|
|
|
#define CurrentDPIScale (love_UniformsPerDraw[8].w)
|
|
#define CurrentDPIScale (love_UniformsPerDraw[8].w)
|
|
#define ConstantPointSize (love_UniformsPerDraw[9].w)
|
|
#define ConstantPointSize (love_UniformsPerDraw[9].w)
|
|
-#define ConstantColor (love_UniformsPerDraw[12])
|
|
|
|
-#define love_ScreenSize (love_UniformsPerDraw[11])
|
|
|
|
|
|
+#define ConstantColor (love_UniformsPerDraw[11])
|
|
|
|
+
|
|
|
|
+#ifdef LOVE_SPLIT_UNIFORMS_PER_DRAW
|
|
|
|
+#define love_ScreenSize (love_UniformsPerDraw2[0])
|
|
|
|
+#else
|
|
|
|
+#define love_ScreenSize (love_UniformsPerDraw[12])
|
|
|
|
+#endif
|
|
|
|
|
|
// Alternate names
|
|
// Alternate names
|
|
#define ViewSpaceFromLocal TransformMatrix
|
|
#define ViewSpaceFromLocal TransformMatrix
|
|
@@ -538,6 +548,11 @@ std::string Shader::createShaderStageCode(Graphics *gfx, ShaderStageType stage,
|
|
if (info.usesMRT)
|
|
if (info.usesMRT)
|
|
ss << "#define LOVE_MULTI_RENDER_TARGETS 1\n";
|
|
ss << "#define LOVE_MULTI_RENDER_TARGETS 1\n";
|
|
|
|
|
|
|
|
+ // Note: backends are expected to handle this situation if highp is ever
|
|
|
|
+ // conditional in that backend.
|
|
|
|
+ if (!gfx->getCapabilities().features[Graphics::FEATURE_PIXEL_SHADER_HIGHP])
|
|
|
|
+ ss << "#define LOVE_SPLIT_UNIFORMS_PER_DRAW 1";
|
|
|
|
+
|
|
for (const auto &def : options.defines)
|
|
for (const auto &def : options.defines)
|
|
ss << "#define " + def.first + " " + def.second + "\n";
|
|
ss << "#define " + def.first + " " + def.second + "\n";
|
|
|
|
|
|
@@ -1164,11 +1179,12 @@ static StringMap<Shader::Language, Shader::LANGUAGE_MAX_ENUM> languages(language
|
|
|
|
|
|
static StringMap<Shader::BuiltinUniform, Shader::BUILTIN_MAX_ENUM>::Entry builtinNameEntries[] =
|
|
static StringMap<Shader::BuiltinUniform, Shader::BUILTIN_MAX_ENUM>::Entry builtinNameEntries[] =
|
|
{
|
|
{
|
|
- { "MainTex", Shader::BUILTIN_TEXTURE_MAIN },
|
|
|
|
- { "love_VideoYChannel", Shader::BUILTIN_TEXTURE_VIDEO_Y },
|
|
|
|
- { "love_VideoCbChannel", Shader::BUILTIN_TEXTURE_VIDEO_CB },
|
|
|
|
- { "love_VideoCrChannel", Shader::BUILTIN_TEXTURE_VIDEO_CR },
|
|
|
|
- { "love_UniformsPerDraw", Shader::BUILTIN_UNIFORMS_PER_DRAW },
|
|
|
|
|
|
+ { "MainTex", Shader::BUILTIN_TEXTURE_MAIN },
|
|
|
|
+ { "love_VideoYChannel", Shader::BUILTIN_TEXTURE_VIDEO_Y },
|
|
|
|
+ { "love_VideoCbChannel", Shader::BUILTIN_TEXTURE_VIDEO_CB },
|
|
|
|
+ { "love_VideoCrChannel", Shader::BUILTIN_TEXTURE_VIDEO_CR },
|
|
|
|
+ { "love_UniformsPerDraw", Shader::BUILTIN_UNIFORMS_PER_DRAW },
|
|
|
|
+ { "love_UniformsPerDraw2", Shader::BUILTIN_UNIFORMS_PER_DRAW_2 },
|
|
};
|
|
};
|
|
|
|
|
|
static StringMap<Shader::BuiltinUniform, Shader::BUILTIN_MAX_ENUM> builtinNames(builtinNameEntries, sizeof(builtinNameEntries));
|
|
static StringMap<Shader::BuiltinUniform, Shader::BUILTIN_MAX_ENUM> builtinNames(builtinNameEntries, sizeof(builtinNameEntries));
|