Skip to content

Commit

Permalink
Merge pull request #72914 from JonqsGames/GL-half_to_float_zero_exp
Browse files Browse the repository at this point in the history
OpenGl : Handle 0 exponent in float/half conversion
  • Loading branch information
akien-mga committed Feb 9, 2023
2 parents 2572f68 + a7f3b44 commit 913a65c
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions drivers/gles3/shaders/stdlib_inc.glsl
Expand Up @@ -2,13 +2,23 @@
#ifdef USE_GLES_OVER_GL
// Floating point pack/unpack functions are part of the GLSL ES 300 specification used by web and mobile.
uint float2half(uint f) {
return ((f >> uint(16)) & uint(0x8000)) |
((((f & uint(0x7f800000)) - uint(0x38000000)) >> uint(13)) & uint(0x7c00)) |
((f >> uint(13)) & uint(0x03ff));
uint e = f & uint(0x7f800000);
if (e <= uint(0x38000000)) {
return uint(0);
} else {
return ((f >> uint(16)) & uint(0x8000)) |
(((e - uint(0x38000000)) >> uint(13)) & uint(0x7c00)) |
((f >> uint(13)) & uint(0x03ff));
}
}

uint half2float(uint h) {
return ((h & uint(0x8000)) << uint(16)) | (((h & uint(0x7c00)) + uint(0x1c000)) << uint(13)) | ((h & uint(0x03ff)) << uint(13));
uint h_e = h & uint(0x7c00);
if (h_e == uint(0x0000)) {
return uint(0);
} else {
return ((h & uint(0x8000)) << uint(16)) | ((h_e + uint(0x1c000)) << uint(13)) | ((h & uint(0x03ff)) << uint(13));
}
}

uint packHalf2x16(vec2 v) {
Expand Down

0 comments on commit 913a65c

Please sign in to comment.