/*!
@page middleware_log Middleware Change Log

@section vglite VGLite GPU Driver
  The current version of the VGLite GPU Driver is 3.0.15_rev7.
  - version 3.0.15_rev7
    - Fixed:
      - (MCUX-54842) Fixed build warnings
  - version 3.0.15_rev6
    - Fixed:
      - Fixed incorrect scissoring issue in single thread mode
      - Optimized line stroking to reduce memory consumption
      - Extended blit output quality workaround to "vg_lite_blit_rect"
      - (IMX-3008) Fixed driver reporting incorrect version number
      - (IMX-2848) Allocated path stroking parameters dynamically
      - (IMX-3010) Fixed scissoring window check with large tessellation buffers
    - Changed:
      - (IMX-2907) Removed obsolete "vg_lite_perspective" API
  - version 3.0.15_rev5
    - Fixed:
      - (IMX-2867) Fixed hang when processing vector paths with zero length
      - (IMX-2959) Fixed GPU using garbage data during image filtering
      - (IMX-2900) Restructured source code for better single thread & multithread modes maintenance
    - Changed:
      - (MCUX-52922) Disable GPU auto clock gating by default. Feature can be enabled from build config
  - version 3.0.15_rev4
    - Changed:
      - (IMX-2900) Renamed build switch for disabling driver multithread support
  - version 3.0.15_rev3
    - Fixed:
      - Relocated centerX/Y definitions in vg_lite.c
      - (IMX-2918) Reduced vg_lite_finish() delay when it has nothing to do
      - (IMX-2901) Fixed reversed red and blue channels in colour gradients fill colour
      - (IMX-2901) Fixed linear gradient matrix transformation error
      - (IMX-2901) Fixed radial gradient render error
    - Changed:
      - (IMX-2799) Enabled GPU auto clock gating by default
      - (IMX-2799) Added build switch to disable GPU auto clock gating
    - Added:
      - (IMX-2900) Added initial support for single thread mode
  - version 3.0.15_rev2
    - Fixed:
      - (IMX-2881) Fixed memory leaks in vector path stroking implementation
      - (IMX-2863) Fixed stroked polygons rendering issue
      - (IMX-2842) Fixed system hang when drawing circular arcs
      - (MGG-897) Use OS heap instead of application heap for stroked vector polygons
      - (MGG-897) Use OS heap instead of application heap for ciecular arc rendering
    - Changed:
      - (IMX-2863) Allow users to configure fill colour for stroked & filled vector paths
  - version 3.0.15_rev1
    - Fixed:
      - (IMX-2844) Fixed missing path descriptor initialization in "vg_lite_init_arc_path"
      - (IMX-2837) Fixed arc drawing direction
      - (IMX-2811) Added VGPE flush after buffer clear
    - Changed:
      - (IMX-2835) Optimized storage of radial gradients params to allow memory saving
    - Added:
      - Added dithering support for RT11xx platforms
      - Added color keying support for RT11xx platforms
      - (IMX-2817) Added vector path stroking
      - (IMX-2692) Added support for HW accelerated linear gradients on RT11xx platforms
  - version 3.0.13_rev2
    - Fixed:
      - (MGG-793) Fixed clipping issue when using the RT500 blit output quality workaround
      - (MGG-830) Disabled RT500 blit output quality workaround for non-affine graphic transformations
      - (IMX-2701) Fixed memory leak in vector arc drawing API
      - (IMX-2699) Fixed build warnings in vector arc drawing API
      - (MGG-836) Fixed the font/text support via main VGLite driver API
    - Changed:
      - (IMX-1724) Changed image width 16 pixels alignment to stride 16 byte alignment
      - (MCUX-46210) Dropped useless "const" qualifier for the "name" attribute of "vg_lite_font_params_t" data structure
      - (MGG-836) Reordered "vg_lite_draw_text" API arguments
  - version 3.0.13_rev1
    - Fixed:
      - (IMX-2577) Fixed support for colour palettes (CLUT) in multithread mode
      - (MGG-735) Fixed Elementary library instability caused by using calloc/free in ElmWrapBuffer
    - Changed:
      - (IMX-2600) Updated "vg_lite_finish" to wait for all frames previously submitted with "vg_lite_flush"
      - Aligned "vg_lite_radial_gradient_parameter" data struct with parameters in Elementary EVO object
    - Added:
      - Added support for drawing vector arcs/circles
      - Added support for i.MXRT6Q GPU
      - Added support for GCNanoliteV GPU Rev. 0x1322
      - Added vector arcs support in Elementary library
  - version 3.0.11_rev3
    - Fixed:
      - Fix async event reset after being initialized
      - (IMX-2604) Fix polygon's rendering regression in multitasking scenarios
      - Avoid "vg_lite_blit" modifying user's transformation matrix
  - version 3.0.11_rev2
    - Fixed:
      - (MGG-685) Added workaround to improve "blit" output quality for RT500
      - (MCUX-43004) Fixed clipping window regression issue introduced by VGLite 3.0.11.1
      - (MGG-764) Fixed VGLite heap useless splitting of memory nodes
      - (MGG-765) Fixed regression issue introduced by VGLite 3.0.11.1 when loading graphic resources using Elementary library
      - (IMX-2506) Fixed "vg_lite_update_rad_grad" not checking the result of memory allocation
      - (MCUX-42992) Fixed IAR toolchain not recognizing optimization directive
      - (MGG-763) Remove risk of out-of-bounds read in "vg_lite_update_rad_grad" function
    - Changed:
      - (IMX-2527) Improved memory footprint by using a common tessellation buffer for all drawing tasks
      - (MGG-712) Restructured OS abstraction layer to allow easier integration with popular OSes
  - version 3.0.11_rev1
    - Fixed:
      - (IMX-2502) Fixed GPU command buffer overflow when copying context data
      - (IMX-2503) Fixed additional colour ring incorrectly appearing at the edge of radial gradients
      - (IMX-2487) Fixed risk of memory leak in "vg_lite_upload_path"
      - (IMX-2429) Fixed incorrect blending of A4 and A8 images (regression since VGLite 3.0.4.x)
      - (MGG-687) Fixed build warning when VG_RENDER_TEXT feature is disabled
    - Changed:
      - (IMX-2354) Added support for dynamic command buffer size management
    - Added:
      - (IMX-2435) Added new API function - vg_lite_get_transform_matrix - to calculate parameters for 2D perspective transformations
      - (IMX-2411) Added support for radial gradients in Elementary library
      - (IMX-2026) Added support for images embedded in EVO data in Elementary library
      - (IMX-2026) Added support for patterns embedded in EVO data in Elementary library
  - version 3.0.9_rev2
    - Fixed:
      - (MCUX-40557) Fixed build warnings
  - version 3.0.9_rev1
    - Fixed:
      - (MGG-648) Fixed rendered text overlapping issue
      - (MGG-650) Fixed memory leak caused by failure to unload RLE font data
      - (IMX-2395) Fixed incorrect reporting of indexed images as "supported" for GC355 GPU (RT1170)
    - Changed:
      - (IMX-2370) Refactored GPU driver HAL and OS layers
      - (MGG-646) Configured a vector font as default font
  - version 3.0.9
    - Fixed:
      - (IMX-2361) Fixed tessellation bounds computation error
    - Changed:
      - (IMX-2367) Enabled alpha channel premultiplication by default for GC355 GPU (RT1170)
      - (IMX-2261) Added Elementary library input data address alignment verification
    - Added:
      - (IMX-2323) Added support for radial colour gradients for GC355 GPU (RT1170)
      - (IMX-2317) Upgraded the Elementary library to be thread safe
  - version 3.0.6_rev4
    - Fixed:
      - (IMX-2357) Fixed rendering performance degradation since the implementation of the multithread/multicontext support
      - (MGG-576) Elementary: Fixed hard fault when resetting translation of EVO object
      - (MCUX-38672) Fixed font and text support build warnings
      - (MGG-596) Fixed memory leak in raster font loading
      - (MGG-596) Font and text support: Fixed out of range memory access in Elementary library
    - Changed:
      - (MGG-596) "VG_RENDER_TEXT=1" build symbol now required to enable font and text support
      - (MGG-594) Updated font and text support to allow easy decoupling from GPU driver and Elementary when not needed
      - (MGG-533) Removed "is_tspan" attribute from "vg_lite_font_attributes_t"
      - (MGG-533) Added new attribute "tspan_has_dx_dy" to "vg_lite_font_attributes_t"
      - (MGG-533) Added new argument "matrix" to "vg_lite_draw_text" API function
      - (MGG-592) Renamed "eFontTypes_t" enum to "eFontType_t"
      - (MGG-592) Renamed "eFontVectorType" identifier to "eFontTypeVector"
      - (MGG-592) Renamed "eFontRasterType" identifier to "eFontTypeRaster"
      - (MGG-596) Changed "vg_lite_draw_text" function return value from "int" to "vg_lite_error_t"
    - Added:
      - (MGG-596) Added "vg_lite_find_font" API function
      - (MGG-596) Added 2 new error codes for "vg_lite_error_t": VG_LITE_ALREADY_EXISTS and VG_LITE_NOT_ALIGNED
      - (IMX-2357) Allow users to override command queue task priority at build time using QUEUE_TASK_PRIO build symbol
      - (MGG-551) Added text wrapping support for vector fonts
      - (MGG-533) Added support for text right alignment
  - version 3.0.6_rev3
    - Added:
      - (MGG-551) Added support for font and text rendering
  - version 3.0.6_rev2
    - Fixed:
      - (IMX-2292) Fixed command buffer flushing after draw
      - (IMX-2293) Fixed copy of register status when command buffer was not full
      - (IMX-2305) Fixed scissor window taking no effect
      - (IMX-2324) Fixed GPU feature table reset when calling "vg_lite_close"
      - (IMX-2358) Fixed misuse of address operator in checking colour channel premultiplication flag
      - (MGG-542) Cleaned up useless "memset" in "vg_lite_init"
  - version 3.0.6_rev1
    - Fixed:
      - (IMX-2295) Initialize task context to zero in vg_lite_init()
  - version 3.0.6
    - Fixed:
      - (MGG-525) Fixed "vg_lite_init_path" not properly initializating the "path" data structure
    - Changed:
      - (IMX-2255) Updated "vg_lite_set_scissor" arguments to (x, y, width, height) instead of (x0, y0, x1, y1)
    - Added:
      - (IMX-2104) Added API to enable/disable colour channel pre-multiplication at runtime on RT1170
  - version 3.0.5
    - Fixed:
      - (IMX-2252) Reset global mutex when it is destroyed
      - (IMX-2252) Fixed reset of task local context in vg_lite_close()
    - Changed:
      - (MGG-333) Enabled scissoring for GC255 GPU (i.MXRT500)
    - Added:
      - (IMX-1729) Added support for drawing from multiple threads
  - version 3.0.4_rev5
    - Changed:
      - (IMX-2104) Disabled by default colour channel pre-multiplication on RT1170 platform
      - (MGG-517) Updated "vg_lite_draw_pattern" function to return VG_LITE_NOT_SUPPORT for A4/A8 patterns
    - Fixed:
      - (IMX-2155) Fixed hard coded image mode in "vg_lite_draw_pattern"
      - (IMX-2153) Updated "vg_lite_draw_pattern" to take into account pattern transparency
      - (KPSDK-37093) Elementary library - Fixed bad free in "load_evo"
      - (KPSDK-37093) Elementary library - Avoid resource leak in "ElmCreateBuffer"
  - version 3.0.4_rev4
    - Fixed:
      - Fixed empty function argument lists definition for scissoring related API functions
      - (IMX-1995) Extended RT500 image rotation fix to vg_lite_blit_rect, vg_lite_draw_pattern
      - (IMX-1995) Isolated RT500 image rotation fix effects to RT500 platform only
  - version 3.0.4_rev3
    - Fixed:
      - (IMX-1995) Compensated for RT500 image shift effect when rotation is approaching multiples of 90 dgs
  - version 3.0.4_rev2
    - Fixed:
      - Fixed integration issue of "vg_lite_mem_avail" API
  - version 3.0.4_rev1
    - Changed:
      - (IMX-1768) Enabled users to query, at runtime, the support for VG_LITE_UPPER draw quality
    - Fixed:
      - (IMX-2074) Fixed GPU exception handling issue
    - Added:
      - (IMX-2045) Added API to provide available heap memory
  - version 3.0.4
    - Changed:
      - (IMX-1957) Enabled users to query, at runtime, the support for BORDER_CULLING and SCISSOR features
      - Enable users to query, at runtime, the support for RGBA 2 bits-per-channel image formats
    - Fixed:
      - (IMX-1934) Fixed image stride alignment verification for TILED images
      - Fix GC355 GPU (i.MXRT1170) draw error when tessellation window width is not aligned to 128
    - Added:
      - (MGG-333) Added support for GC355 GPU (i.MXRT1170) scissoring
  - version 3.0.1_rev1
    - Fixed:
      - (MGG-250) Fixed GPU hang after a random time (mostly reproduced on RT1170 platforms)
      - (KPSDK-33132) Fixed Elementary library memory leaks in case of failed EBO loading
      - (MGG-336) Allow use of blend modes not affected by the border culling limitation
      - (MGG-18) Fixed Elementary library memory leaks when loading EVO/EBO/EGO objects
      - (MGG-353) Fixed linear colour gradient rendering error when loading EVOs using the Elementary library
  - version 3.0.1
    - Changed:
      - Removed "vg_lite_blit2" API function due to lack of hardware support
      - Removed "vg_lite_scanline" API function due to lack of harware support
      - Aggregated "vg_lite_error.h" API header file content into "vg_lite.h"
      - Aggregated "vg_lite_features.h" API header file content into "vg_lite.h"
      - Aggregated "vg_lite_matrix.h" API header file content into "vg_lite.h"
      - Aggregated "vg_lite_path.h" API header file content into "vg_lite.h"
      - Aggregated "vg_lite_util.h" API header file content into "vg_lite.h"
      - (IMX-1861) Added return code to the "vg_lite_flush" API function
      - Changed VGLite GPU driver license from proprietary to MIT
    - Fixed:
      - Fixed definition of "elm_alloc" function in Elementary toolkit
      - (IMX-1869) Fixed initialization of aligned bytes in the command buffer
      - (IMX-1821) Fixed inverted background colours when using "vg_lite_draw_pattern"
      - Fixed hang when calling "vg_lite_flush" repeatedly
      - (IMX-1861) Fix propagation of return codes from "stall", "submit", "vg_lite_flush" function calls
  - version 2.0.14_rev1
    - Changed:
      - (IMX-1809) Fixed misspelling of "vg_lite_buffer_transparency_mode"
      - (IMX-1778) Added verification of colour gradients parameters
      - (IMX-1813) Added return code to the "vg_lite_hal_allocate_contiguous" function
      - (MGG-204) Added return code to "vg_lite_finish"
    - Fixed:
      - (IMX-1808) Fixed "vg_lite_blit" failure on dynamically allocated buffers
      - (IMX-1773) Fixed failure to create 16 colours gradients
      - (IMX-1790) Fixed driver incorrectly reporting available heap space
      - (IMX-1810) Fixed verification of raster image stride alignment
      - (IMX-1810) Fixed verification of raster image colour depth
      - (IMX-1816) Fixed "vg_lite_close" not releasing memory allocated from OS heap
      - (MGG-201) Fixed hard fault caused by command buffer management
      - (MGG-202) Fixed "vg_lite_hal_wait_interrupt" function ignoring the timeout
      - (MGG-203) Fixed "vg_lite_draw" function always returning success
  - version 2.0.13_rev2
    - Fixed:
      - (MGG-102) Fixed incorrect colour gradient clipping issue when using "vg_lite_draw_gradient" API
      - (MGG-140) Fixed "vg_lite_draw_gradient" error when gradient is not covering the entire shape
  - version 2.0.13_rev1
    - Added:
      - (MGG-88) Support for operating with BGRA2222, ABGR2222, ARGB2222 type images
      - (MGG-88) Support for operating with ABGR4444, ARGB4444 type images
      - (MGG-88) Support for operating with ABGR8888, ARGB8888 type images
      - (MGG-88) Support for operating with XBGR8888, XRGB8888 type images
      - (MGG-52) Improved GPU bus error reporting by using weak functions
    - Changed:
      - (MGG-66) Restructured GPU driver by exposing the HAL source code for easier integration with operating systems
    - Fixed:
      - (MGG-72) Fixed rough edges of vector artefacts when using the "vg_lite_draw_pattern" API
      - (MGG-58) Fixed "vg_lite_blit_rect" API not supporting a zero Y coordinate
  - version 2.0.13_rev0
*/
