Permalink
Switch branches/tags
Nothing to show
Find file
35905d9 Oct 31, 2016
239 lines (140 sloc) 5.33 KB

GLSL optimizer Change Log

2016 10

  • Metal/GLES: Fixed bad optimization (all code removed) when framebuffer fetch extension is used, but fragment shader does not actually read the incoming color value.
  • Fixed translation of texelSize().
  • Fixed translation of texelFetch().

2016 09

  • Metal: Fixed constant precision propagation in some cases.
  • Metal: Fixed shadowmap sampling when reference Z value is outside of 0..1 range (now clamps to match GLES specs).

2016 06

Fixed:

  • Fixed Metal translation in some cases having wrong precision on constants or constant arrays.

2016 05

Fixed:

  • Fixed Metal translation in some cases having wrong precision on struct members.
  • Fixed Metal translation in some cases emitting struct declarations vs. constant initializers in wrong order.

2016 03

Fixed:

  • Fixed translation performance regression in loop analysis (regressed in 2015 06 fixes).

2015 08

Changes:

  • 2D shadow and 2D array uniforms got their own glslopt_basic_type entries.

Fixes:

  • Fixed translation of 2D texture arrays (GLSL with EXT_texture_array, GLES3 and Metal).

2015 06

Fixes:

  • Fixed some cases of different precision matrix assignments being miscompiled on Metal.
  • Fixed yet more issues with translation of weird loops.
  • Fixed translation of matrix+scalar, matrix-scalar, matrix/scalar operations on Metal.

2015 05

Fixes:

  • Fixes some cases of highp/mediump sampler sampling resulting in resulting temporaries wrongly being lowp.

2015 04

Goodies:

  • GLES2: support EXT_draw_instanced / gl_InstanceIDEXT.
  • Support gl_VertexID in GLSL < 1.30 when EXT_gpu_shader4 is used.

Fixes:

  • Metal: fixed some bugs with translation of weird loops.

2015 02

Tweaks:

  • Texture LOD sampling functions on GLES2.0 now produce a wrapper call, that does approximation (mip bias) on devices that don't support GL_EXT_shader_texture_lod.
  • Undefined precision integers on GLES now default to highp.

2015 01

Fixes:

  • Float literals are printed with 7 significant digits now.
  • Metal: GLSL mod() is properly translated into Metal's fmod().
  • Metal: Fixed some cases of reciprocal (1/x) printing missing half precision cast.
  • GLES3: textureOffset with a mipmap bias is printed correctly now.
  • Fixed a bug with loop inductor detection if the inductor was used before the loop for some things.
  • Fixed printing of int/float bitcast operations.
  • Improved precision determination of some constructs.

2014 10

Goodies:

  • Support for translating GLSL shaders into Apple Metal shading language. Exactly same process; GLSL in (preferably ES3 variant), optimization passes, Metal out. All uniforms currently will be put into one constant buffer. Pass kGlslTargetMetal target to get Metal.
  • Shader reflection API. See glslopt_shader_get_* functions. Binding indices are only automatically assigned on Metal now; on GL/ES targets the reflection API is only useful to get list of inputs/uniforms, their names and types.
  • Improved dead code elimation: some cases of swizzled/masked assignments where same variable was on both sides were not eliminated if that variable was totally unused later.
  • Merged with upstream Mesa, comes with new optimizations (min/max pruning, tree rebalancing, vector_insert lowering).

Fixes:

  • sampler3D declarations were missing precision qualifier on GLES3.0.

2014 09

Goodies:

  • Supports GL_EXT_draw_buffers in ES2.0, for MRT.

2014 08

Goodies:

  • Supports GL_EXT_shader_framebuffer_fetch now, in both ES2.0 & 3.0.

Fixes:

  • Fixed printing of infinities & NaNs.
  • Fixed vectorization pass in some cases going wrong on texture lookups.

2014 06

Goodies:

  • Optimization: split vectors with only some used components into scalars.

Fixes:

  • Fixed more issues with for-loop printing.
  • Fixed printing of unsigned integer swizzled & constants.

2014 03

Fixes:

  • Fixed missing precision qualifier in some ES shaders (mostly due to expansion of ternary ?: check).

2014 02

Fixes:

  • Fixed vectorize pass introduced last month going wrong with dot products.

2014 01

Goodies:

  • Better optimization: vectorize assignments to individual vector channels.
  • More OpenGL ES 2.0 conformant printing of complex for-loops (loop inductions printed as += or ++; loop initializers inside loop body).

Fixes:

  • Fixed array assignments sometimes appearing in pre-GLSL1.20 versions, especially with complex loops that couldn't be unrolled.
  • Fixed output of textureOffset and texelFetch.
  • Fixed error messages on MRT outputs on GL & GLES3 (now supports 4 MRTs).

2013 12

Goodies:

  • Optimized performance; was spending half of the time in stupid string code.
  • Added glslopt_shader_get_stats to get very approximate shader complexity stats.
  • Nicer printing of complicated for-loops.

Fixes:

  • Fixed printing of struct initializers.

2013 11

Goodies:

  • Better optimizations: CSE; A+(-B) => A-B; !A || !B => !(A && B).
  • Merged with upstream Mesa.

Fixes:

  • Fixed location qualifiers, ES3.0 version printing, samplerCubeShadow sampling operations.

2013 10

Goodies:

  • Initial OpenGL ES 3.0 support
  • API to query shader input names; glslopt_shader_get_input_count and glslopt_shader_get_input_name

Changes:

  • Xcode project files updated to Xcode 5

Fixes:

  • VS2013 fixes