# Overview

Source: [https://docs.qualcomm.com/doc/80-70015-19/topic/graphics-overview.html](https://docs.qualcomm.com/doc/80-70015-19/topic/graphics-overview.html)

The graphics subsystem is powered by the Qualcomm^®^ Adreno™ GPU. The Adreno GPU
            is a three-dimensional (3D) graphics accelerator with 64‑bit addressing and incorporates
            the graphics memory (GMEM). The GMEM serves as a dedicated memory for the graphics
            subsystem and facilitates Fast Z, color, and stencil rendering. Additionally, the Adreno
            GPU supports the Qualcomm^®^ Universal Bandwidth Compression, enhancing the
            overall performance.

The Adreno GPU supports the following graphics and compute APIs: 
- **OpenGL ES**:  [3.0](https://registry.khronos.org/OpenGL/specs/es/3.0/es_spec_3.0.pdf), [3.1](https://registry.khronos.org/OpenGL/specs/es/3.1/es_spec_3.1.pdf), [3.2](https://registry.khronos.org/OpenGL/specs/es/3.2/es_spec_3.2.pdf)
- **OpenCL**: [1.2 FP](https://registry.khronos.org/OpenCL/specs/opencl-1.2.pdf), [2.0 FP](https://registry.khronos.org/SPIR-V/specs/1.0/OpenCL.std.20.pdf)
- **EGL**: [1.5](https://registry.khronos.org/EGL/specs/eglspec.1.5.pdf)
- **Vulkan**: [1.1](https://registry.khronos.org/vulkan/#vulkan1.1)

Note: See [Hardware SoCs](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-115/soc.html) that are supported on
                    Qualcomm^®^ Linux^®^.

### Architecture

Figure : Graphics subsystem architecture
                    
                    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export Graphics-driver.svg Page-2 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="12.2821in" height="9.02591in" viewbox="0 0 884.313 649.865" xml:space="preserve" color-interpolation-filters="sRGB" class="st21"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(1):26"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-1 .st1 { fill: #f7f8fa; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st2 { fill: #3253dc; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st3 { fill: #ffffff; font-family: Arial; font-size: 1.16666em }
.svg-1 .st4 { fill: #acbacf; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st5 { fill: #000000; font-family: Arial; font-size: 1.00001em }
.svg-1 .st6 { fill: #ffffff; font-family: Arial; font-size: 1.00001em }
.svg-1 .st7 { font-size: 1em }
.svg-1 .st8 { stroke: #000000; stroke-dasharray: 14, 10; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st9 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st10 { fill: #000000; font-family: Arial; font-size: 1.00001em; font-weight: bold }
.svg-1 .st11 { marker-end: url("#mrkr5-55"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st12 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.31645569620253 }
.svg-1 .st13 { marker-end: url("#mrkr5-55"); marker-start: url("#mrkr5-87"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st14 { fill: #000000; font-family: Arial; font-size: 0.833336em }
.svg-1 .st15 { marker-end: url("#mrkr5-128"); marker-start: url("#mrkr5-126"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st16 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.23584905660377 }
.svg-1 .st17 { fill: #f7f8fa; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st18 { marker-start: url("#mrkr5-87"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st19 { fill: #f7f8fa; marker-end: url("#mrkr5-145"); stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st20 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.37313432835821 }
.svg-1 .st21 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<defs id="Markers">	<g id="lend5">		<path d="M 2 1 L 0 0 L 1.98117 -0.993387 C 1.67173 -0.364515 1.67301 0.372641 1.98465 1.00043 " style="stroke:none"></path>	</g>	<marker id="mrkr5-55" class="st12" v:arrowtype="5" v:arrowsize="3" v:setback="5.53" refx="-5.53" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(-3.16,-3.16) "></use>	</marker>	<marker id="mrkr5-87" class="st12" v:arrowtype="5" v:arrowsize="3" v:setback="5.29" refx="5.29" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(3.16) "></use>	</marker>	<marker id="mrkr5-126" class="st16" v:arrowtype="5" v:arrowsize="3" v:setback="7.06" refx="7.06" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(4.24) "></use>	</marker>	<marker id="mrkr5-128" class="st16" v:arrowtype="5" v:arrowsize="3" v:setback="7.42" refx="-7.42" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(-4.24,-4.24) "></use>	</marker>	<marker id="mrkr5-145" class="st20" v:arrowtype="5" v:arrowsize="2" v:setback="4.69" refx="-4.69" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(-2.68,-2.68) "></use>	</marker></defs><g v:mid="4" v:index="2" v:groupcontext="foregroundPage">	<title></title>	<v:pageproperties v:drawingscale="0.0138889" v:pagescale="0.0138889" v:drawingunits="29" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<v:layer v:name="Connector" v:index="0"></v:layer>	<g id="group66-1" transform="translate(27.6875,-18.375)" v:mid="66" v:groupcontext="group">		<title></title>		<g id="shape54-2" v:mid="54" v:groupcontext="shape">			<title></title>			<rect x="0" y="36.75" width="836.625" height="613.115" class="st1"></rect>		</g>	</g>	<g id="shape1-4" v:mid="1" v:groupcontext="shape" transform="translate(348.063,-405.807)">		<title></title>		<desc>Adreno GPU driver</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="153" cy="604.181" width="306" height="91.3686"></v:textrect>		<rect x="0" y="558.497" width="306" height="91.3686" class="st2"></rect>		<text x="93.87" y="608.49" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Adreno GPU driver</text>		</g>	<g id="shape3-7" v:mid="3" v:groupcontext="shape" transform="translate(297.843,-574.65)">		<title></title>		<desc>Wayland client</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="70.27" cy="629.027" width="140.55" height="41.6777"></v:textrect>		<rect x="0" y="608.188" width="140.54" height="41.6777" class="st4"></rect>		<text x="31.25" y="632.63" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Wayland client</text>		</g>	<g id="shape4-10" v:mid="4" v:groupcontext="shape" transform="translate(453.575,-575.284)">		<title></title>		<desc>Weston (Compositor)</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="145.244" cy="629.592" width="290.49" height="40.5468"></v:textrect>		<rect x="0" y="609.319" width="290.487" height="40.5468" class="st4"></rect>		<text x="88.56" y="633.19" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Weston (Compositor)</text>		</g>	<g id="shape5-13" v:mid="5" v:groupcontext="shape" transform="translate(420.263,-217.865)">		<title></title>		<desc>KGSL driver</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="68.5264" cy="630.474" width="137.06" height="38.7834"></v:textrect>		<rect x="0" y="611.082" width="137.053" height="38.7834" class="st2"></rect>		<text x="35.85" y="634.07" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>KGSL driver</text>		</g>	<g id="shape6-16" v:mid="6" v:groupcontext="shape" transform="translate(643.01,-221.097)">		<title></title>		<desc>Display Kernel driver</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="68.5264" cy="630.474" width="137.06" height="38.7834"></v:textrect>		<rect x="0" y="611.082" width="137.053" height="38.7834" class="st2"></rect>		<text x="13.17" y="634.07" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Display Kernel driver</text>		</g>	<g id="shape7-19" v:mid="7" v:groupcontext="shape" transform="translate(636.667,-353.778)">		<title></title>		<desc>Drm-backend (display)</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="70.27" cy="629.027" width="140.55" height="41.6777"></v:textrect>		<rect x="0" y="608.188" width="140.54" height="41.6777" class="st4"></rect>		<text x="9.92" y="632.63" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Drm-backend (display)</text>		</g>	<g id="shape8-22" v:mid="8" v:groupcontext="shape" transform="translate(61.5642,-410.883)">		<title></title>		<desc>Graphics buffer management</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="66.858" cy="629.027" width="133.72" height="41.6777"></v:textrect>		<rect x="0" y="608.188" width="133.716" height="41.6777" class="st4"></rect>		<text x="25.84" y="625.43" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Graphics buffer <tspan x="31.84" dy="1.2em" class="st7">management</tspan></text>		</g>	<g id="shape9-26" v:mid="9" v:groupcontext="shape" transform="translate(60.5148,-462.739)">		<title></title>		<desc>Wayland protocol</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="67.3827" cy="629.027" width="134.77" height="41.6777"></v:textrect>		<rect x="0" y="608.188" width="134.765" height="41.6777" class="st4"></rect>		<text x="21.03" y="632.72" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Wayland protocol</text>		</g>	<g id="shape10-29" v:mid="10" v:groupcontext="shape" v:layermember="0" transform="translate(51.0625,-273.078)">		<title></title>		<path d="M0 637.37 L796.5 637.37" class="st8"></path>	</g>	<g id="shape11-32" v:mid="11" v:groupcontext="shape" v:layermember="0" transform="translate(53.2582,-164.041)">		<title></title>		<path d="M0 637.37 L791.34 637.37" class="st8"></path>	</g>	<g id="shape12-35" v:mid="12" v:groupcontext="shape" transform="translate(420.263,-101.078)">		<title></title>		<desc>Adreno GPU</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="68.5264" cy="630.474" width="137.06" height="38.7834"></v:textrect>		<rect x="0" y="611.082" width="137.053" height="38.7834" class="st2"></rect>		<text x="34.51" y="634.07" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Adreno GPU</text>		</g>	<g id="shape13-38" v:mid="13" v:groupcontext="shape" transform="translate(643.01,-101.078)">		<title></title>		<desc>Adreno DPU</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="68.5264" cy="630.474" width="137.06" height="38.7834"></v:textrect>		<rect x="0" y="611.082" width="137.053" height="38.7834" class="st2"></rect>		<text x="34.84" y="634.07" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Adreno DPU</text>		</g>	<g id="shape14-41" v:mid="14" v:groupcontext="shape" transform="translate(789.938,-146.078)">		<title></title>		<desc>Hardware</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="34.2632" cy="638.444" width="68.53" height="22.8421"></v:textrect>		<rect x="0" y="627.023" width="68.5264" height="22.8421" class="st9"></rect>		<text x="4" y="642.04" class="st10" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>Hardware</text>		</g>	<g id="shape15-44" v:mid="15" v:groupcontext="shape" transform="translate(786.661,-260.657)">		<title></title>		<desc>Kernel</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="34.2632" cy="638.444" width="68.53" height="22.8421"></v:textrect>		<rect x="0" y="627.023" width="68.5264" height="22.8421" class="st9"></rect>		<text x="4" y="642.04" class="st10" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>Kernel</text>		</g>	<g id="shape16-47" v:mid="16" v:groupcontext="shape" transform="translate(785.438,-294.235)">		<title></title>		<desc>User space</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40.25" cy="638.444" width="80.51" height="22.8421"></v:textrect>		<rect x="0" y="627.023" width="80.5" height="22.8421" class="st9"></rect>		<text x="4" y="642.04" class="st10" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>User space</text>		</g>	<g id="shape17-50" v:mid="17" v:groupcontext="shape" transform="translate(1357.92,78.6477) rotate(90.3585)">		<title></title>		<path d="M0 649.87 L171.54 649.87" class="st11"></path>	</g>	<g id="shape18-56" v:mid="18" v:groupcontext="shape" transform="translate(1361.4,296.088) rotate(90)">		<title></title>		<path d="M0 649.87 L85.6 649.87" class="st11"></path>	</g>	<g id="shape19-61" v:mid="19" v:groupcontext="shape" transform="translate(1361.4,428.769) rotate(90)">		<title></title>		<path d="M0 649.87 L72.94 649.87" class="st11"></path>	</g>	<g id="shape23-66" v:mid="23" v:groupcontext="shape" transform="translate(1138.65,432.001) rotate(90)">		<title></title>		<path d="M0 649.87 L69.71 649.87" class="st11"></path>	</g>	<g id="shape26-71" v:mid="26" v:groupcontext="shape" transform="translate(1017.98,75.2156) rotate(90)">		<title></title>		<path d="M0 649.87 L69.18 649.87" class="st11"></path>	</g>	<g id="shape27-76" v:mid="27" v:groupcontext="shape" transform="translate(389.261,-239.893)">		<title></title>		<path d="M0 483.95 L0 649.87 L22.71 649.87" class="st11"></path>	</g>	<g id="shape29-81" v:mid="29" v:groupcontext="shape" transform="translate(194.66,-480.837)">		<title></title>		<path d="M7.93 649.87 L8.29 649.87 L144.44 649.87" class="st13"></path>	</g>	<g id="shape30-89" v:mid="30" v:groupcontext="shape" transform="translate(1137.43,74.5811) rotate(90)">		<title></title>		<path d="M7.93 649.87 L8.29 649.87 L69.81 649.87" class="st13"></path>	</g>	<g id="shape31-96" v:mid="31" v:groupcontext="shape" transform="translate(324.389,-534.189)">		<title></title>		<desc>1. Application calls EGL/OpenGL ES</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="51.3948" cy="636.507" width="102.79" height="26.7175"></v:textrect>		<rect x="0" y="623.148" width="102.79" height="26.7175" class="st1"></rect>		<text x="4" y="633.51" class="st14" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>1. Application calls <tspan x="4" dy="1.2em" class="st7">EGL/OpenGL ES</tspan></text>		</g>	<g id="shape35-100" v:mid="35" v:groupcontext="shape" transform="translate(210.066,-486.73)">		<title></title>		<desc>2. When rendering, sets registry and callbacks</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="61.071" cy="636.507" width="122.15" height="26.7175"></v:textrect>		<rect x="0" y="623.148" width="122.142" height="26.7175" class="st1"></rect>		<text x="4" y="633.51" class="st14" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>2. When rendering, sets <tspan x="4" dy="1.2em" class="st7">registry and callbacks</tspan></text>		</g>	<g id="shape39-104" v:mid="39" v:groupcontext="shape" transform="translate(214.348,-436.328)">		<title></title>		<desc>3. Gets Wayland backbuffer for rendering</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="61.071" cy="632.734" width="122.15" height="34.2632"></v:textrect>		<rect x="0" y="615.602" width="122.142" height="34.2632" class="st1"></rect>		<text x="4" y="629.73" class="st14" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>3. Gets Wayland <tspan x="4" dy="1.2em" class="st7">backbuffer for rendering</tspan></text>		</g>	<g id="shape41-108" v:mid="41" v:groupcontext="shape" transform="translate(324.92,-317.078)">		<title></title>		<desc>4. Submits to KGSL using swapbuffer/glflush/glfinish to rende...</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="66.858" cy="629.027" width="133.72" height="41.6777"></v:textrect>		<rect x="0" y="608.188" width="133.716" height="41.6777" class="st1"></rect>		<text x="4" y="620.03" class="st14" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>4. Submits to KGSL using <tspan x="4" dy="1.2em" class="st7">swapbuffer/glflush/glfinish to </tspan><tspan x="4" dy="1.2em" class="st7">render with OpenGL ES</tspan></text>		</g>	<g id="shape42-113" v:mid="42" v:groupcontext="shape" transform="translate(194.875,-439.436)">		<title></title>		<path d="M7.93 649.87 L8.29 649.87 L144.44 649.87" class="st13"></path>	</g>	<g id="shape43-120" v:mid="43" v:groupcontext="shape" transform="translate(1255.99,74.5811) rotate(90)">		<title></title>		<path d="M7.06 649.87 L7.42 649.87 L70.69 649.87" class="st15"></path>	</g>	<g id="shape44-129" v:mid="44" v:groupcontext="shape" transform="translate(433.563,-515.078)">		<title></title>		<desc>5. EGL/Commit render surface to Wayland</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="54.9639" cy="636.507" width="109.93" height="26.7175"></v:textrect>		<rect x="0" y="623.148" width="109.928" height="26.7175" class="st1"></rect>		<text x="4" y="633.51" class="st14" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>5. EGL/Commit render <tspan x="4" dy="1.2em" class="st7">surface to Wayland</tspan></text>		</g>	<g id="shape45-133" v:mid="45" v:groupcontext="shape" transform="translate(546.063,-536.894)">		<title></title>		<desc>6. Sends rendered surfaces for composition</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="61.071" cy="638.273" width="122.15" height="23.1839"></v:textrect>		<rect x="0" y="626.682" width="122.142" height="23.1839" class="st17"></rect>		<text x="4" y="635.27" class="st14" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>6. Sends rendered <tspan x="4" dy="1.2em" class="st7">surfaces for composition</tspan></text>		</g>	<g id="shape46-137" v:mid="46" v:groupcontext="shape" transform="translate(195.28,-416.594)">		<title></title>		<path d="M7.93 649.87 L8.29 649.87 L152.16 649.87" class="st18"></path>	</g>	<g id="shape47-142" v:mid="47" v:groupcontext="shape" transform="translate(202.688,-378.73)">		<title></title>		<desc>7. Gets GBM surface for composing the render frame</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="70.27" cy="632.734" width="140.55" height="34.2632"></v:textrect>		<rect x="0" y="615.602" width="140.54" height="34.2632" class="st19"></rect>		<text x="4" y="629.73" class="st14" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>7. Gets GBM surface for <tspan x="4" dy="1.2em" class="st7">composing the render frame</tspan></text>		</g>	<g id="shape49-148" v:mid="49" v:groupcontext="shape" transform="translate(1186.56,244.058) rotate(90)">		<title></title>		<path d="M0 649.87 L140.86 649.87" class="st11"></path>	</g>	<g id="shape50-153" v:mid="50" v:groupcontext="shape" transform="translate(472.614,-365.031)">		<title></title>		<desc>8. Submits render frame for composition to GPU</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="68.5264" cy="636.507" width="137.06" height="26.7175"></v:textrect>		<rect x="0" y="623.148" width="137.053" height="26.7175" class="st1"></rect>		<text x="4" y="633.51" class="st14" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>8. Submits render frame for <tspan x="4" dy="1.2em" class="st7">composition to GPU</tspan></text>		</g>	<g id="shape51-157" v:mid="51" v:groupcontext="shape" transform="translate(665.635,-455.924)">		<title></title>		<desc>9. Sends final composed buffer to display DRM</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="61.071" cy="636.507" width="122.15" height="26.7175"></v:textrect>		<rect x="0" y="623.148" width="122.142" height="26.7175" class="st1"></rect>		<text x="4" y="633.51" class="st14" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>9. Sends final composed <tspan x="4" dy="1.2em" class="st7">buffer to display DRM</tspan></text>		</g>	<g id="shape53-161" v:mid="53" v:groupcontext="shape" transform="translate(665.968,-318.644)">		<title></title>		<desc>10. Submits buffer to display kernel</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="55.3953" cy="638.273" width="110.8" height="23.1839"></v:textrect>		<rect x="0" y="626.682" width="110.791" height="23.1839" class="st1"></rect>		<text x="4" y="635.27" class="st14" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>10. Submits buffer to <tspan x="4" dy="1.2em" class="st7">display kernel</tspan></text>		</g>	<g id="shape64-165" v:mid="64" v:groupcontext="shape" transform="translate(677.743,-34.8554)">		<title></title>		<desc>Qualcomm</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.11520015844595):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.11520015844595):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.11520015844595):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.11520015844595):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="41.4721" cy="639.093" width="82.95" height="21.5439"></v:textrect>		<path d="M8.29 649.87 L74.65 649.87 A8.29428 8.29428 -180 0 0 82.94 641.57 L82.94 636.62 A8.29428 8.29428 -180 0 0 74.65					 628.32 L8.29 628.32 A8.29428 8.29428 -180 0 0 0 636.62 L0 641.57 A8.29428 8.29428 -180 0 0 8.29 649.87 Z" class="st2"></path>		<text x="12.46" y="642.69" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm</text>		</g>	<g id="shape65-168" v:mid="65" v:groupcontext="shape" transform="translate(767.743,-34.4804)">		<title></title>		<desc>Open source</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.11520015844595):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.11520015844595):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.11520015844595):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.11520015844595):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="41.4721" cy="639.093" width="82.95" height="21.5439"></v:textrect>		<path d="M8.29 649.87 L74.65 649.87 A8.29428 8.29428 -180 0 0 82.94 641.57 L82.94 636.62 A8.29428 8.29428 -180 0 0 74.65					 628.32 L8.29 628.32 A8.29428 8.29428 -180 0 0 0 636.62 L0 641.57 A8.29428 8.29428 -180 0 0 8.29 649.87 Z" class="st4"></path>		<text x="7.12" y="642.69" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Open source</text>		</g></g>
</svg>

**Adreno GPU driver**

The Adreno GPU driver is a collection of user-mode precompiled libraries and firmware
                developed by Qualcomm. The Adreno GPU driver must be used as-is. 
Note: To use all the features supported by the Adreno GPU,
                    ensure that the files listed in the Table : GPU firmware files and Table : GPU libraries and KGSL driver are
                    present on the device at /lib/firmware/.

**Adreno GPU firmware**

The following table lists the firmware files of the Adreno GPU hardware.

Table : GPU firmware files

| **Description** | QCS5430/QCS6490 firmware | QCS9075 firmware |
| --- | --- | --- |
| Microcode for command processor | a660\_sqe.fw | a660\_sqe.fw |
| Microcode for secure content support | a660\_zap | a663\_zap |
| Microcode for graphics management unit (GMU) | a660\_gmu.bin | a660\_gmu.bin |

**Kernel Graphics Support Layer (KGSL)**

The KGSL serves as the kernel-mode driver for the Adreno GPU. The primary function of
                the KGSL driver is to submit commands generated by the Adreno user-mode driver to
                the Adreno GPU for processing. Additionally, the KGSL driver communicates with the
                GMU to ensure proper state management.

The following table lists the supported GPU libraries and KGSL driver.

Table : GPU libraries and KGSL driver

| Adreno GPU libraries | KGSL driver |
| --- | --- |
| <table cellpadding="4" cellspacing="0" summary="" id="graphics-home__table_xr4_gpt_hzb" class="table" frame="border" border="1" rules="all"><colgroup><col style="width:37.5%"><col style="width:62.5%"></colgroup><thead class="thead" style="text-align:left;"> <tr class="row"> <th class="entry nocellnorowborder" style="vertical-align:top;" id="d1540e261">Library</th> <th class="entry cell-norowborder" style="vertical-align:top;" id="d1540e264">Description</th> </tr> </thead><tbody class="tbody"> <tr class="row"> <td class="entry nocellnorowborder" style="vertical-align:top;" headers="d1540e261 ">libCB.so </td> <td class="entry cell-norowborder" style="vertical-align:top;" headers="d1540e264 ">Driver for GPU computing</td> </tr> <tr class="row"> <td class="entry nocellnorowborder" style="vertical-align:top;" headers="d1540e261 ">libEGL_adreno.so</td> <td class="entry cell-norowborder" style="vertical-align:top;" headers="d1540e264 ">EGL 1.4 driver</td> </tr> <tr class="row"> <td class="entry nocellnorowborder" style="vertical-align:top;" headers="d1540e261 ">libeglSubDriverWayland.so</td> <td class="entry cell-norowborder" style="vertical-align:top;" headers="d1540e264 ">EGL driver for Wayland subsystem</td> </tr> <tr class="row"> <td class="entry nocellnorowborder" style="vertical-align:top;" headers="d1540e261 ">libadreno_utils.so </td> <td class="entry cell-norowborder" style="vertical-align:top;" headers="d1540e264 ">Utility library for Adreno GPU                                                  driver</td> </tr> <tr class="row"> <td class="entry nocellnorowborder" style="vertical-align:top;" headers="d1540e261 ">libgsl.so</td> <td class="entry cell-norowborder" style="vertical-align:top;" headers="d1540e264 ">GSL library</td> </tr> <tr class="row"> <td class="entry nocellnorowborder" style="vertical-align:top;" headers="d1540e261 ">libq3dtools_adreno.so</td> <td class="entry cell-norowborder" style="vertical-align:top;" headers="d1540e264 ">Adreno profiler support layer</td> </tr> <tr class="row"> <td class="entry nocellnorowborder" style="vertical-align:top;" headers="d1540e261 ">libGLESv1_CM_adreno.so </td> <td class="entry cell-norowborder" style="vertical-align:top;" headers="d1540e264 ">OpenGL ES 1.1 driver</td> </tr> <tr class="row"> <td class="entry nocellnorowborder" style="vertical-align:top;" headers="d1540e261 ">libGLESv2_adreno.so</td> <td class="entry cell-norowborder" style="vertical-align:top;" headers="d1540e264 ">OpenGL ES 2.0/3.0/3.1 driver</td> </tr> <tr class="row"> <td class="entry nocellnorowborder" style="vertical-align:top;" headers="d1540e261 ">libq3dtools_esx.so</td> <td class="entry cell-norowborder" style="vertical-align:top;" headers="d1540e264 ">OpenGL ES profiler support layer</td> </tr> <tr class="row"> <td class="entry nocellnorowborder" style="vertical-align:top;" headers="d1540e261 ">libOpenCL.so </td> <td class="entry cell-norowborder" style="vertical-align:top;" headers="d1540e264 ">OpenCL library</td> </tr> <tr class="row"> <td class="entry nocellnorowborder" style="vertical-align:top;" headers="d1540e261 ">libOpenCL_adreno.so</td> <td class="entry cell-norowborder" style="vertical-align:top;" headers="d1540e264 ">OpenCL library for Adreno GPU</td> </tr> <tr class="row"> <td class="entry nocellnorowborder" style="vertical-align:top;" headers="d1540e261 ">libllvm-qcom.so </td> <td class="entry cell-norowborder" style="vertical-align:top;" headers="d1540e264 ">OpenCL compiler library </td> </tr> <tr class="row"> <td class="entry nocellnorowborder" style="vertical-align:top;" headers="d1540e261 ">libvulkan_adreno.so</td> <td class="entry cell-norowborder" style="vertical-align:top;" headers="d1540e264 ">Vulkan 1.x driver</td> </tr> <tr class="row"> <td class="entry nocellnorowborder" style="vertical-align:top;" headers="d1540e261 ">libllvm-glnext.so</td> <td class="entry cell-norowborder" style="vertical-align:top;" headers="d1540e264 ">OpenGL ES and Vulkan program binary                                                  loader</td> </tr> <tr class="row"> <td class="entry row-nocellborder" style="vertical-align:top;" headers="d1540e261 ">libllvm-qgl.so</td> <td class="entry cellrowborder" style="vertical-align:top;" headers="d1540e264 ">OpenGL ES and Vulkan core compiler                                                  library</td> </tr> </tbody></table> | <table cellpadding="4" cellspacing="0" summary="" id="graphics-home__table_dr5_lm3_kcc" class="table" frame="border" border="1" rules="all"><colgroup><col style="width:25%"><col style="width:75%"></colgroup><tbody class="tbody"> <tr class="row"> <td class="entry cellrowborder" style="vertical-align:top;"><strong class="ph b">Linux kernel</strong></td> <td class="entry cellrowborder" style="vertical-align:top;">6.6</td> </tr> <tr class="row"> <td class="entry cellrowborder" style="vertical-align:top;"><strong class="ph b">Source code path</strong></td> <td class="entry cellrowborder" style="vertical-align:top;"><span class="ph filepath">&lt;root_dir&gt;/source/graphics-kernel/</span></td> </tr> <tr class="row"> <td class="entry cellrowborder" colspan="2" style="text-align:center;vertical-align:top;"><strong class="ph b">GPU DTSI files</strong></td> </tr> <tr class="row"> <td class="entry cellrowborder" style="vertical-align:top;"><strong class="ph b">QCS5430</strong></td> <td class="entry cellrowborder" style="vertical-align:top;"><ul class="ul" id="graphics-home__ul_yf3_k2z_lcc"> <li class="li"><span class="ph filepath">&lt;root_dir&gt;/source/graphics-devicetree/gpu/qcs5430-graphics.dtsi</span></li> <li class="li"><span class="ph filepath">&lt;root_dir&gt;/source/graphics-devicetree/gpu/qcs5430-graphics-pwrlevels.dtsi</span></li> </ul> </td> </tr> <tr class="row"> <td class="entry cellrowborder" style="vertical-align:top;"><strong class="ph b">QCS6490</strong></td> <td class="entry cellrowborder" style="vertical-align:top;"><ul class="ul" id="graphics-home__ul_wz5_ppr_lcc"> <li class="li"><span class="ph filepath">&lt;root_dir&gt;/source/graphics-devicetree/gpu/qcm6490-graphics.dtsi</span></li> <li class="li"><span class="ph filepath">&lt;root_dir&gt;/source/graphics-devicetree/gpu/qcm6490-graphics-pwrlevels.dtsi</span></li> </ul> </td> </tr> <tr class="row"> <td class="entry cellrowborder" style="vertical-align:top;"><strong class="ph b">QCS9075</strong></td> <td class="entry cellrowborder" style="vertical-align:top;"><span class="ph filepath">&lt;root_dir&gt;/source/graphics-devicetree/gpu/qcs9075-graphics.dtsi</span></td> </tr> </tbody></table> |

Last Published: Oct 14, 2024

Next Topic

Getting started