|
@@ -39,23 +39,32 @@ vec2 unpackSnorm2x16(uint p) {
|
|
|
return clamp((v - 32767.0) * vec2(0.00003051851), vec2(-1.0), vec2(1.0));
|
|
|
}
|
|
|
|
|
|
-uint packUnorm4x8(vec4 v) {
|
|
|
+#endif
|
|
|
+
|
|
|
+// Compatibility renames. These are exposed with the "godot_" prefix
|
|
|
+// to work around an Adreno bug which was exposing these ES310 functions
|
|
|
+// in ES300 shaders. Internally, we must use the "godot_" prefix, but user shaders
|
|
|
+// will be mapped automatically.
|
|
|
+uint godot_packUnorm4x8(vec4 v) {
|
|
|
uvec4 uv = uvec4(round(clamp(v, vec4(0.0), vec4(1.0)) * 255.0));
|
|
|
return uv.x | (uv.y << uint(8)) | (uv.z << uint(16)) | (uv.w << uint(24));
|
|
|
}
|
|
|
|
|
|
-vec4 unpackUnorm4x8(uint p) {
|
|
|
+vec4 godot_unpackUnorm4x8(uint p) {
|
|
|
return vec4(float(p & uint(0xff)), float((p >> uint(8)) & uint(0xff)), float((p >> uint(16)) & uint(0xff)), float(p >> uint(24))) * 0.00392156862; // 1.0 / 255.0
|
|
|
}
|
|
|
|
|
|
-uint packSnorm4x8(vec4 v) {
|
|
|
+uint godot_packSnorm4x8(vec4 v) {
|
|
|
uvec4 uv = uvec4(round(clamp(v, vec4(-1.0), vec4(1.0)) * 127.0) + 127.0);
|
|
|
return uv.x | uv.y << uint(8) | uv.z << uint(16) | uv.w << uint(24);
|
|
|
}
|
|
|
|
|
|
-vec4 unpackSnorm4x8(uint p) {
|
|
|
+vec4 godot_unpackSnorm4x8(uint p) {
|
|
|
vec4 v = vec4(float(p & uint(0xff)), float((p >> uint(8)) & uint(0xff)), float((p >> uint(16)) & uint(0xff)), float(p >> uint(24)));
|
|
|
return clamp((v - vec4(127.0)) * vec4(0.00787401574), vec4(-1.0), vec4(1.0));
|
|
|
}
|
|
|
|
|
|
-#endif
|
|
|
+#define packUnorm4x8 godot_packUnorm4x8
|
|
|
+#define unpackUnorm4x8 godot_unpackUnorm4x8
|
|
|
+#define packSnorm4x8 godot_packSnorm4x8
|
|
|
+#define unpackSnorm4x8 godot_unpackSnorm4x8
|