Avoid unnecessary version_get_uniform() calls

This commit is contained in:
Marcos Casagrande 2025-04-28 14:27:26 +02:00
parent 1b4ed4c038
commit 19540a0758
4 changed files with 43 additions and 45 deletions

View File

@ -254,96 +254,96 @@ public:
}} }}
/* clang-format off */ /* clang-format off */
#define TRY_GET_UNIFORM if (version_get_uniform(p_uniform, p_version, p_variant, p_specialization) < 0) return #define TRY_GET_UNIFORM(var_name) int var_name = version_get_uniform(p_uniform, p_version, p_variant, p_specialization); if (var_name < 0) return
/* clang-format on */ /* clang-format on */
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, float p_value, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, float p_value, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
glUniform1f(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), p_value); glUniform1f(uniform_location, p_value);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, double p_value, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, double p_value, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
glUniform1f(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), p_value); glUniform1f(uniform_location, p_value);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, uint8_t p_value, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, uint8_t p_value, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
glUniform1ui(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), p_value); glUniform1ui(uniform_location, p_value);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, int8_t p_value, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, int8_t p_value, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
glUniform1i(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), p_value); glUniform1i(uniform_location, p_value);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, uint16_t p_value, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, uint16_t p_value, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
glUniform1ui(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), p_value); glUniform1ui(uniform_location, p_value);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, int16_t p_value, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, int16_t p_value, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
glUniform1i(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), p_value); glUniform1i(uniform_location, p_value);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, uint32_t p_value, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, uint32_t p_value, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
glUniform1ui(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), p_value); glUniform1ui(uniform_location, p_value);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, int32_t p_value, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, int32_t p_value, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
glUniform1i(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), p_value); glUniform1i(uniform_location, p_value);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, const Color &p_color, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, const Color &p_color, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
GLfloat col[4] = {{ p_color.r, p_color.g, p_color.b, p_color.a }}; GLfloat col[4] = {{ p_color.r, p_color.g, p_color.b, p_color.a }};
glUniform4fv(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), 1, col); glUniform4fv(uniform_location, 1, col);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, const Vector2 &p_vec2, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, const Vector2 &p_vec2, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
GLfloat vec2[2] = {{ float(p_vec2.x), float(p_vec2.y) }}; GLfloat vec2[2] = {{ float(p_vec2.x), float(p_vec2.y) }};
glUniform2fv(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), 1, vec2); glUniform2fv(uniform_location, 1, vec2);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, const Size2i &p_vec2, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, const Size2i &p_vec2, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
GLint vec2[2] = {{ GLint(p_vec2.x), GLint(p_vec2.y) }}; GLint vec2[2] = {{ GLint(p_vec2.x), GLint(p_vec2.y) }};
glUniform2iv(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), 1, vec2); glUniform2iv(uniform_location, 1, vec2);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, const Vector3 &p_vec3, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, const Vector3 &p_vec3, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
GLfloat vec3[3] = {{ float(p_vec3.x), float(p_vec3.y), float(p_vec3.z) }}; GLfloat vec3[3] = {{ float(p_vec3.x), float(p_vec3.y), float(p_vec3.z) }};
glUniform3fv(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), 1, vec3); glUniform3fv(uniform_location, 1, vec3);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, const Vector4 &p_vec4, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, const Vector4 &p_vec4, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
GLfloat vec4[4] = {{ float(p_vec4.x), float(p_vec4.y), float(p_vec4.z), float(p_vec4.w) }}; GLfloat vec4[4] = {{ float(p_vec4.x), float(p_vec4.y), float(p_vec4.z), float(p_vec4.w) }};
glUniform4fv(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), 1, vec4); glUniform4fv(uniform_location, 1, vec4);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, float p_a, float p_b, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, float p_a, float p_b, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
glUniform2f(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), p_a, p_b); glUniform2f(uniform_location, p_a, p_b);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, float p_a, float p_b, float p_c, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, float p_a, float p_b, float p_c, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
glUniform3f(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), p_a, p_b, p_c); glUniform3f(uniform_location, p_a, p_b, p_c);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, float p_a, float p_b, float p_c, float p_d, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, float p_a, float p_b, float p_c, float p_d, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
glUniform4f(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), p_a, p_b, p_c, p_d); glUniform4f(uniform_location, p_a, p_b, p_c, p_d);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, const Transform3D &p_transform, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, const Transform3D &p_transform, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
const Transform3D &tr = p_transform; const Transform3D &tr = p_transform;
GLfloat matrix[16] = {{ /* build a 16x16 matrix */ GLfloat matrix[16] = {{ /* build a 16x16 matrix */
@ -365,11 +365,11 @@ public:
(GLfloat)1 (GLfloat)1
}}; }};
glUniformMatrix4fv(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), 1, false, matrix); glUniformMatrix4fv(uniform_location, 1, false, matrix);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, const Transform2D &p_transform, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, const Transform2D &p_transform, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
const Transform2D &tr = p_transform; const Transform2D &tr = p_transform;
GLfloat matrix[16] = {{ /* build a 16x16 matrix */ GLfloat matrix[16] = {{ /* build a 16x16 matrix */
@ -391,11 +391,11 @@ public:
(GLfloat)1 (GLfloat)1
}}; }};
glUniformMatrix4fv(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), 1, false, matrix); glUniformMatrix4fv(uniform_location, 1, false, matrix);
}} }}
_FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, const Projection &p_matrix, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{ _FORCE_INLINE_ void version_set_uniform(Uniforms p_uniform, const Projection &p_matrix, RID p_version, ShaderVariant p_variant{defvariant}, uint64_t p_specialization = {defspec}) {{
TRY_GET_UNIFORM; TRY_GET_UNIFORM(uniform_location);
GLfloat matrix[16]; GLfloat matrix[16];
for (int i = 0; i < 4; i++) {{ for (int i = 0; i < 4; i++) {{
@ -404,7 +404,7 @@ public:
}} }}
}} }}
glUniformMatrix4fv(version_get_uniform(p_uniform, p_version, p_variant, p_specialization), 1, false, matrix); glUniformMatrix4fv(uniform_location, 1, false, matrix);
}} }}
#undef TRY_GET_UNIFORM #undef TRY_GET_UNIFORM

View File

@ -30,13 +30,13 @@ protected:
R"<!>( R"<!>(
precision highp float; precision highp float;
precision highp int; precision highp int;
/* clang-format on */
layout(location = 0) in highp vec3 vertex; layout(location = 0) in highp vec3 vertex;
out highp vec4 position_interp; out highp vec4 position_interp;
void main() { void main() {
position_interp = vec4(vertex.x,1,0,1); position_interp = vec4(vertex.x, 1, 0, 1);
} }
)<!>" )<!>"

View File

@ -5,7 +5,6 @@ R"<!>(#[compute]
#VERSION_DEFINES #VERSION_DEFINES
#define M_PI 3.14159265359 #define M_PI 3.14159265359
void main() { void main() {

View File

@ -12,9 +12,8 @@ lines = "#define MODE_LINES";
layout(location = 0) out vec3 uv_interp; layout(location = 0) out vec3 uv_interp;
void main() { void main() {
#ifdef MODE_LINES #ifdef MODE_LINES
uv_interp = vec3(0,0,1); uv_interp = vec3(0, 0, 1);
#endif #endif
} }
@ -29,7 +28,7 @@ void main() {
layout(location = 0) out vec4 dst_color; layout(location = 0) out vec4 dst_color;
void main() { void main() {
dst_color = vec4(1,1,0,0); dst_color = vec4(1, 1, 0, 0);
} }
)<!>" )<!>"
}; };