Skip to content

TurboPixel Framebuffer Compression

Overview

TurboPixel is a fixed-ratio, lossy compression format for the final rendered bitmap on supported SF32 devices. It is part of the display path: extDMA compresses the bitmap, and the display controller decompresses TurboPixel as it transfers pixels to the panel.

TurboPixel is not an asset-storage format and does not replace eZip. eZip losslessly compresses source assets before they are read from storage; TurboPixel compresses the final rendered bitmap to reduce the PSRAM capacity and PSRAM bandwidth required by framebuffer traffic.

For the complete graphics flow and the position of TurboPixel relative to eZip, ePicasso, and the display controller, see Graphics Overview. This page focuses on TurboPixel's compression behavior, integration trade-offs, and availability.

Read this page when framebuffer capacity or display-read traffic is the bottleneck on an SF32LB55x, SF32LB56x, or SF32LB58x design. It helps product and firmware engineers weigh predictable PSRAM savings against lossy image quality; it is not a substitute for eZip asset compression.

Fixed-Ratio and Lossy by Design

TurboPixel has two defining properties:

  • Fixed ratio for a selected configuration. The input pixel format and compression setting determine the nominal factor; it does not vary with image detail. The required allocation also depends on row alignment and chunking. Use the selected chip and SDK's sizing rules rather than a ratio copied from another configuration.
  • Lossy compression. A TurboPixel-decompressed bitmap is not guaranteed to reproduce every original pixel value. The format trades some image fidelity for predictable reductions in PSRAM use and PSRAM traffic.

Lossy compression is often a sensible trade in a constrained embedded display system, but it is a product decision. Evaluate real screens at the target panel resolution, color depth, viewing distance, and refresh behavior rather than judging quality from a generic test image.

Framebuffer Measurement Template

Use this section to record measured TurboPixel results for one representative display resolution and SDK configuration. Unlike the eZip file-size comparison, this is a framebuffer allocation and PSRAM-traffic comparison: TurboPixel operates after rendering, not on the source asset file.

Include both opaque and alpha-blended screens. Alpha blending normally happens before TurboPixel, when the renderer composites foreground and background pixels into the final framebuffer. A screen that contains translucent icons, text, shadows, or layers can still produce an opaque RGB565 final framebuffer; record that distinction rather than treating the presence of alpha in source assets as an alpha channel in the compressed framebuffer.

Representative TurboPixel Framebuffer Measurement Template
Scenario Source / Layer Alpha Final Framebuffer Format and Alpha State Uncompressed Allocation / Traffic TurboPixel Allocation / Traffic Relative to Uncompressed Test Settings / Visual Result
Opaque UI None TBD, opaque TBD TBD TBD Resolution: TBD; refresh policy: TBD; TurboPixel ratio/configuration: TBD
Alpha-blended UI, composited before output Per-pixel and/or global alpha in source layers TBD, typically opaque after composition TBD TBD TBD Record blended content: TBD; check edge, shadow, gradient, and text artifacts
Alpha-preserving output path, if supported Alpha retained to the final buffer TBD TBD TBD TBD Confirm exact chip, SDK, format, and display path before testing

For each valid TurboPixel path, calculate Relative to Uncompressed as TurboPixel framebuffer bytes ÷ uncompressed framebuffer bytes × 100%. The expected allocation follows the applicable fixed ratio, but the exact ratio, supported formats, alignment, refresh policy, and measured PSRAM traffic must come from the selected chip's documentation, SDK, and target-hardware test. Record visual acceptance separately: a fixed allocation ratio does not guarantee identical artifacts across opaque, text-heavy, gradient, and alpha-blended content.

Why Use TurboPixel

Reduce Framebuffer Storage

A full framebuffer can occupy substantial PSRAM at high resolution or with multiple draw buffers. TurboPixel reduces the allocation for the compressed final bitmap, which can leave more memory for UI assets, audio, application data, or other surfaces.

Budget peak live memory, not just that bitmap. An uncompressed render buffer, compressed display buffer, compression workspace, and double-buffered copies may coexist. Their sizes and lifetimes determine whether the complete design actually needs less PSRAM.

Reduce Display-Read Traffic

The display controller reads fewer bytes from a compressed framebuffer before decompression, reducing display-read traffic and contention with CPU, ePicasso, DMA, audio, and wireless activity.

That is not the total memory-traffic saving. Rendering still writes pixels, and compression reads its input and writes its output. Measure those transfers and their overlap with display reads. For frequently redrawn screens, compression overhead may offset the read savings; for repeatedly displayed frames, the balance can be different. Measure system energy as well as bandwidth.

Make Budgeting Predictable

For a fixed pixel format and compression setting, content changes do not change the nominal ratio. Use the SDK's compressed-row sizing and alignment rules to allocate buffers, then include all render, compression, and display reads/writes in the bandwidth budget. Keep panel-transfer bytes separate: TurboPixel is decompressed before panel output and does not automatically reduce that transfer.

Quality and Integration Trade-Offs

TurboPixel should be validated as part of the complete display design:

  • Test text, thin lines, gradients, icons, photographs, animations, and high-contrast UI elements for visible artifacts.
  • Confirm the color format, buffer alignment, extDMA path, and display-controller configuration supported by the chosen device and SDK.
  • Measure frame time, PSRAM bandwidth, UI latency, and power under combined display, Bluetooth, audio, and AI workloads.
  • Keep an uncompressed path available during bring-up so that image-quality and driver issues can be isolated.
  • Do not present TurboPixel as lossless, even when artifacts are not visible in a particular UI.

SDK Integration Checks

The referenced extDMA guide lists ten nominal compression levels, while the referenced SDK sizing implementation supports levels 1, 2, and 3. Do not assume all documented levels are accepted by your build. Validate the selected setting and use the matching row-size calculation; an unsupported value can fall back to a different setting in a helper.

The extDMA guide lists RGB565, RGB888, and ARGB8888 inputs. Input support alone does not guarantee an alpha-preserving compressed display path. The LCDC branch without its dedicated layer-0 decompression register accepts RGB565/RGB888 for compressed layers; check the branch used by the selected chip. In the referenced LCDC driver, compression is enabled on layer 0 through HAL_LCDC_LayerSetCmpr.

The current OpenSiFli LCDC header defines the compressed-layer support macro only when HAL_EXTDMA_MODULE_ENABLED is enabled; its family guard excludes SF32LB52x and SF32LB57x. The header defines maximum compressed-layer widths of 512 pixels for SF32LB55x/SF32LB56x and 1024 pixels for SF32LB58x. These are compressed-layer integration limits, not universal panel-resolution limits. A source comment also notes that the LCPU path is not enabled.

SF32LB55x needs an integration caveat. The current OpenSiFli LCDC header defines the compressed-layer macro when HAL_EXTDMA_MODULE_ENABLED is enabled, but its comment notes that the LCPU path is not enabled. The published SDK LCDC capability table marks compressed-layer decompression unsupported on 55x, while the SF32LB55x datasheet describes TurboPixel and LCD-controller decompression. A compile-time macro does not prove that the complete display path has been validated. Treat 55x support as conditional and verify the exact SDK revision, core, build configuration, and target hardware; do not infer runtime support from the macro alone.

Keep renderer, extDMA, and display-controller buffer ownership separate. Wait for rendering before compression, for compression before display use, and for display use to finish before reusing that buffer. With cacheable shared memory, clean CPU-written input before hardware reads, prepare destination cache lines so dirty data cannot overwrite hardware output, and invalidate after completion before CPU reads it. Respect cache-line boundaries and neighboring data. Compression completion is not panel-transfer completion.

The extDMA source address, destination address, and transfer length must be 4-byte aligned. Follow the selected SDK's row stride, chunking, and buffer-sizing rules; dividing raw frame bytes by a nominal ratio is not sufficient.

Availability in the SF32 Family

TurboPixel is documented for the following SF32 families:

Documented TurboPixel Availability
SF32 Family TurboPixel Status Integration Context
SF32LB52x Not available Use an uncompressed framebuffer or another supported memory/bandwidth strategy.
SF32LB55x Conditional in current source; end-to-end support not established The current LCDC header exposes compressed-layer capability when extDMA is enabled, but notes that the LCPU path is not enabled; the published feature table marks 55x unsupported. Verify the exact core, SDK configuration, and target hardware.
SF32LB56x Documented extDMA fixed-ratio lossy final-framebuffer compression with display-controller decompression.
SF32LB57x Not available Use an uncompressed framebuffer or another supported memory/bandwidth strategy.
SF32LB58x Documented extDMA fixed-ratio lossy final-framebuffer compression with display-controller decompression.
Other SF32 families Confirm per device Do not infer TurboPixel support from eZip, ePicasso, or the presence of PSRAM. Check the exact chip datasheet, reference manual, SDK release, and display driver.

This table records documented family-level availability, not a promise for every package, panel interface, pixel format, SDK version, or board configuration. Confirm the exact target before making a memory or bandwidth commitment.

Key Takeaways

  • TurboPixel is a fixed-ratio, lossy final-framebuffer compression format.
  • extDMA produces TurboPixel from the rendered bitmap; the display controller decompresses it on the panel path.
  • Its main purpose is to reduce framebuffer storage and display-read traffic; confirm the savings for the complete buffer and transfer pipeline.
  • TurboPixel is documented for SF32LB55x, SF32LB56x, and SF32LB58x. For 55x, the current header exposes the compressed-layer macro when extDMA is enabled but notes that the LCPU path is not enabled; the published feature table marks 55x unsupported. Treat it as conditional and validate the complete display path. The current source excludes SF32LB52x and SF32LB57x; confirm any other target individually.
  • TurboPixel complements eZip: eZip is lossless asset compression, while TurboPixel is lossy compression for the final bitmap.

Primary References

Last updated: