# Getting started

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

The following workflow shows how to get started with a graphics application on a Qualcomm
            device.

Figure : Workflow of graphics applications
                
                <?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 getting-started-graphics.svg Page-1 -->
<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="15.5833in" height="2.50694in" viewbox="0 0 1122 180.5" xml:space="preserve" color-interpolation-filters="sRGB" class="st8"><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: 2.5 }
.svg-1 .st2 { fill: none; stroke: #3253dc; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2.5 }
.svg-1 .st3 { fill: #000000; font-family: Arial; font-size: 1.16666em }
.svg-1 .st4 { fill: #000000; font-family: Arial; font-size: 1.00001em }
.svg-1 .st5 { font-size: 1em }
.svg-1 .st6 { marker-end: url("#mrkr5-36"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2.5 }
.svg-1 .st7 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.49800796812749 }
.svg-1 .st8 { 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-36" class="st7" v:arrowtype="5" v:arrowsize="2" v:setback="3.514" refx="-3.514" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(-2.008,-2.008) "></use>	</marker></defs><g v:mid="0" v:index="1" v:groupcontext="foregroundPage">	<title>Page-1</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="shape1009-1" v:mid="1009" v:groupcontext="shape" transform="translate(19.25,-19.25)">		<title></title>		<rect x="0" y="38.5" width="1083.5" height="142" class="st1"></rect>	</g>	<g id="shape3-3" v:mid="3" v:groupcontext="shape" transform="translate(248.125,-40.4969)">		<title></title>		<desc>Run sample applications</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="195.75" cy="129.748" width="391.5" height="101.503"></v:textrect>		<rect x="0" y="78.9969" width="391.5" height="101.503" rx="9" ry="9" class="st2"></rect>		<text x="122.99" y="112.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist><v:lf></v:lf>Run sample applications</text>		</g>	<g id="shape7-6" v:mid="7" v:groupcontext="shape" transform="translate(394.187,-47.5)">		<title></title>		<desc>OpenCL sample application</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="55.7171" cy="154.946" width="111.44" height="51.1072"></v:textrect>		<rect x="0" y="129.393" width="111.434" height="51.1072" rx="9" ry="9" class="st2"></rect>		<text x="12.36" y="151.35" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>OpenCL sample <tspan x="27.03" dy="1.2em" class="st5">application</tspan></text>		</g>	<g id="shape8-10" v:mid="8" v:groupcontext="shape" transform="translate(260.286,-47.5)">		<title></title>		<desc>OpenGL ES sample application</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="62.089" cy="154.946" width="124.18" height="51.1072"></v:textrect>		<rect x="0" y="129.393" width="124.178" height="51.1072" rx="9" ry="9" class="st2"></rect>		<text x="8.73" y="151.35" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>OpenGL ES sample <tspan x="33.4" dy="1.2em" class="st5">application</tspan></text>		</g>	<g id="shape10-14" v:mid="10" v:groupcontext="shape" transform="translate(515.875,-47.5)">		<title></title>		<desc>Vulkan sample application</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="55.7171" cy="153.38" width="111.44" height="54.2409"></v:textrect>		<rect x="0" y="126.259" width="111.434" height="54.2409" rx="9" ry="9" class="st2"></rect>		<text x="16.36" y="149.78" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Vulkan sample <tspan x="27.03" dy="1.2em" class="st5">application</tspan></text>		</g>	<g id="shape1016-18" v:mid="1016" v:groupcontext="shape" transform="translate(29.875,-40.4969)">		<title></title>		<desc>Generate Platform eSDK</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="80.1985" cy="129.748" width="160.4" height="101.503"></v:textrect>		<rect x="0" y="78.9969" width="160.397" height="101.503" rx="9" ry="9" class="st2"></rect>		<text x="23.01" y="123.15" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Generate Platform <tspan x="61.91" dy="1.457em" class="st5">eSDK</tspan></text>		</g>	<g id="shape1017-22" v:mid="1017" v:groupcontext="shape" transform="translate(697.978,-41.7484)">		<title></title>		<desc>Debug sample applications</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="80.1985" cy="129.748" width="160.4" height="101.503"></v:textrect>		<rect x="0" y="78.9969" width="160.397" height="101.503" rx="9" ry="9" class="st2"></rect>		<text x="35.06" y="123.15" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Debug sample <v:lf></v:lf><tspan x="46.73" dy="1.457em" class="st5">applications</tspan></text>		</g>	<g id="shape1018-26" v:mid="1018" v:groupcontext="shape" transform="translate(912.375,-41.7484)">		<title></title>		<desc>Run the Snapdragon Profiler tool for profiling sample applica...</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="89.9375" cy="129.748" width="179.88" height="101.503"></v:textrect>		<rect x="0" y="78.9969" width="179.875" height="101.503" rx="9" ry="9" class="st2"></rect>		<text x="25.33" y="114.75" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Run the Snapdragon  <tspan x="17.96" dy="1.2em" class="st5">Profiler tool for profiling </tspan><tspan x="28.46" dy="1.457em" class="st5">sample applications</tspan></text>		</g>	<g id="shape1022-31" v:mid="1022" v:groupcontext="shape" v:layermember="0" transform="translate(190.272,-82.2484)">		<title></title>		<path d="M0 171.5 L49.07 171.5" class="st6"></path>	</g>	<g id="shape1024-37" v:mid="1024" v:groupcontext="shape" v:layermember="0" transform="translate(639.625,-82.8742)">		<title></title>		<path d="M0 171.5 L49.57 171.5" class="st6"></path>	</g>	<g id="shape1025-42" v:mid="1025" v:groupcontext="shape" v:layermember="0" transform="translate(858.375,-83.5)">		<title></title>		<path d="M0 171.5 L45.21 171.5" class="st6"></path>	</g></g>
</svg>

## Run OpenGL ES sample application

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

### About this task

**Prerequisites**
- Install Platform eSDK using either of the following methods:
    - [Using Qualcomm release
                                    archive](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-51/install-sdk.html#download-qim-platform-esdk)
    - [Manually compile the Qualcomm
                                    Linux SDK](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-254/how_to.html#generate-an-esdk)
- Enable SSH to access the host device securely. For instructions, see [Use SSH](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-254/how_to.html#use-ssh).

For information on the OpenGL ES extensions supported on Qualcomm Linux devices, see
                    [EGL extensions](https://docs.qualcomm.com/doc/80-70015-19/topic/supported_extensions.html#supported-egl-client-extensions).

**Compile and run glmark2 application**

`glmark2` is an OpenGL ES-based sample application provided in the
                Platform eSDK.

### Procedure

1. To set the SDK environment in the Linux terminal, run the following
                    command:
                
source environment-setup-armv8-2a-qcom-linuxCopy to clipboard
2. To compile and generate a binary, run the following commands:
                
devtool modify glmark2Copy to clipboard

        devtool build glmark2Copy to clipboard

If
                    there is any umask error, set the umask to 022.

After successful compilation, the output files are generated at
                        &lt;path-to-installed-eSDK&gt;/workspace/sources/glmark2/oe-workdir/image/usr/bin.
3. To push the binary to the device, run the following commands:
                
scp -r <path-to-installed-Platform-eSDK>/workspace/sources/glmark2/oe-workdir/image/usr/bin/glmark2-es2-wayland root@[IP-address-of-device]:/tmpCopy to clipboard

        scp -r <path-to-installed-Platform-eSDK>/workspace/sources/glmark2/oe-workdir/image/usr/share/glmark2 root@[IP-address-of-device]:/tmpCopy to clipboard
4. To run the application on the device using SSH, open the SSH terminal using the
                    IP address of the device and run the following commands:
                
export XDG_RUNTIME_DIR=/dev/socket/weston export WAYLAND_DISPLAY=wayland-1Copy to clipboard

        chmod 777 /tmp/glmark2-es2-waylandCopy to clipboard

        chmod -R 777 /tmp/glmark2Copy to clipboard

        cd /tmpCopy to clipboard

        ./glmark2-es2-wayland --data-path /tmp/glmark2 -b jellyfishCopy to clipboard

Note:
    - To run sample application from the UART shell, remount the file
                                    system using the following
                                    command:

            mount -o remount,rw /Copy to clipboard
    - Before running the application, ensure that the Weston
                                    application is running. If the Weston application is not
                                    running, launch the Weston application by running the following
                                    commands:

            . /etc/profileCopy to clipboard

            export XDG_RUNTIME_DIR=/dev/socket/westonCopy to clipboard

            mkdir --parents $XDG_RUNTIME_DIRCopy to clipboard

            chmod 0700 $XDG_RUNTIME_DIRCopy to clipboard

            cd /usr/bin/Copy to clipboard

            killall westonCopy to clipboard

            weston --tty=2 --idle-time=0 --log=/tmp/weston.log --config=/etc/xdg/weston/weston.ini --continue-without-inputCopy to clipboard

        For
                                        more information about the Weston application, see [Qualcomm Linux Display
                                            Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-18).

## Run OpenCL sample application

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

### About this task

**Prerequisites**
- Install Platform eSDK using either of the following methods:
    - [Using Qualcomm release
                                    archive](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-51/install-sdk.html#download-qim-platform-esdk)
    - [Manually compile the Qualcomm
                                    Linux SDK](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-254/how_to.html#generate-an-esdk)
- Enable SSH to access the host device securely. For instructions, see  [Use SSH](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-254/how_to.html#use-ssh).
- Download the Adreno OpenCL [SDK 2.0](https://qpm.qualcomm.com/#/main/tools/details/Adreno_OpenCL_SDK).
Note: You must be a registered user to download the
                            Adreno OpenCL SDK.

For information on the OpenCL extensions supported on Qualcomm Linux devices, see
                    [OpenCL extensions](https://docs.qualcomm.com/doc/80-70015-19/topic/supported_extensions.html#supported-opencl-extensions).

**Compile and run the hello world sample application**

Multiple sample applications are provided in the Adreno OpenCL SDK. The steps to
                compile and run any sample application remain the same.

### Procedure

1. To compile the application on the host machine, run the following
                    commands:
                
cd opencl-sdkCopy to clipboard

        source <path-to-installed-Platform-eSDK>/environment-setup-armv8-2a-qcom-linuxCopy to clipboard

        cmake -B build -DCLSDK_OPENCL_LIBRARY=$OECORE_TARGET_SYSROOT/usr/lib/libOpenCL.so -DCLSDK_DMABUFHEAP_LIBRARY=$OECORE_TARGET_SYSROOT/usr/lib/libdmabufheap.so -DOPEN_EMBEDDED=1Copy to clipboard

        cmake --build buildCopy to clipboard

After successful compilation, binary files are generated at
                        /build.
2. To run the application, open the SSH terminal using the IP address of the
                    device and run the following commands on the device using the SSH
                    terminal:
                
mkdir -p /opt/dataCopy to clipboard

        mkdir -p /opt/data/openclCopy to clipboard

Note: If you want to run a sample application from the
                        UART shell, remount the file system using the following
                        command:

        mount -o remount,rw /Copy to clipboard
3. Run the following commands on the host machine:
                
scp -r <opencl-sdk>/build/* root@[IP-address-of-the device]:/opt/data/opencl/Copy to clipboard

        scp -r <opencl-sdk>/example_images/* root@[IP-address-of-the device]:/opt/data/opencl/Copy to clipboard
4. Run the following commands on the device using the SSH terminal:
                
cd /opt/data/opencl/Copy to clipboard

        mkdir outCopy to clipboard

        chmod 777 ./*Copy to clipboard

        echo "run hello world 2.0 opencl sdk" > hello_world_input.txtCopy to clipboard

        touch out/hello_world_output.txtCopy to clipboard

        cat out/hello_world_output.txtCopy to clipboard

        ./cl_sdk_hello_world hello_world_input.txt out/hello_world_output.txtCopy to clipboard

        cat out/hello_world_output.txtCopy to clipboard

## Run Vulkan sample applications

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

### About this task

**Prerequisites**
- Generate Platform eSDK using either of the following methods:
    - [Using Qualcomm release
                                    archive](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-51/install-sdk.html#download-qim-platform-esdk)
    - [Manually compile the Qualcomm
                                    Linux SDK](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-254/how_to.html#generate-an-esdk)
- Enable SSH to access the host device securely. For instructions, see [Use SSH](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-254/how_to.html#use-ssh).

For information on the Vulkan extensions supported on Qualcomm Linux devices, see
                    [Vulkan extensions](https://docs.qualcomm.com/doc/80-70015-19/topic/supported_extensions.html#supported-vulkan-extensions).

Multiple sample applications are provided in the Adreno SDK for Vulkan. The steps to
                compile and run any sample application remain the same. As an example, the steps to
                run a Sascha Willems and Khronos Vulkan sample applications are described here.

### Sascha Willems Vulkan sample application

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

### About this task

The Sascha Willems Vulkan sample applications are available at [https://github.com/SaschaWillems/Vulkan.git](https://github.com/SaschaWillems/Vulkan.git). The steps to compile and run any Sascha Willems Vulkan application are the same.

**Compile and run the triangle bin application**

### Procedure

1. To compile the application, run the following commands on the host
                    machine:
                
git clone --recurse-submodules https://github.com/SaschaWillems/Vulkan.gitCopy to clipboard

        cd VulkanCopy to clipboard

        source <path-to-installed-Platform-eSDK>/environment-setup-armv8-2a-qcom-linuxCopy to clipboard

        cmake -G "Unix Makefiles" -Bbuild/linux -DUSE_WAYLAND_WSI=ON -DRESOURCE_INSTALL_DIR="/tmp/"Copy to clipboard

        cmake --build build/linux --config Release  -j$(nproc)Copy to clipboard

After successful compilation, binary files are generated at
                        build/linux/bin.
2. To push the binary to the device, run the following commands on the host
                    machine:
                
cd VulkanCopy to clipboard

        scp -r assets root@[IP-address-of-device]:/tmp/Copy to clipboard

        scp -r shaders root@[IP-address-of-device]:/tmp/Copy to clipboard

        scp -r build/linux/bin/triangle root@[IP-address-of-device]:/tmp/Copy to clipboard
3. To run the application, open the SSH terminal using the IP address of the
                    device and run the following commands:
                
cd /tmpCopy to clipboard

        chmod -R 777 assetsCopy to clipboard

        chmod -R 777 shadersCopy to clipboard

        chmod 777 triangleCopy to clipboard

        . /etc/profileCopy to clipboard

        export XDG_RUNTIME_DIR=/dev/socket/westonCopy to clipboard

        mkdir --parents $XDG_RUNTIME_DIRCopy to clipboard

        chmod 0700 $XDG_RUNTIME_DIRCopy to clipboard

        export WAYLAND_DISPLAY=wayland-1Copy to clipboard

        ./triangleCopy to clipboard

### Khronos Vulkan sample application

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

### About this task
The Khronos Vulkan sample applications are available at
                [https://github.com/KhronosGroup/Vulkan-Samples.git](https://github.com/KhronosGroup/Vulkan-Samples.git). The steps to compile and run any Khronos Vulkan application are
            the same. 
**Compile and run the vulkan\_samples application**

### Procedure

1. To compile the application, run the following commands on the host
                    machine:
                
sudo apt-get install -y libwayland-devCopy to clipboard

        git clone --recurse-submodules https://github.com/KhronosGroup/Vulkan-Samples.gitCopy to clipboard

        cd Vulkan-Samples/Copy to clipboard

        source <path-to-installed-Platform-eSDK>/environment-setup-armv8-2a-qcom-linuxCopy to clipboard

        cmake -G "Unix Makefiles" -Bbuild/linux -DCMAKE_BUILD_TYPE=Release -DVKB_WSI_SELECTION=WAYLAND -DGLFW_BUILD_X11=OFFCopy to clipboard

If
                    the compilation fails, do the following:
    1. Open the Vulkan-Samples/build/linux/CmakeCache.txt
                            file.
    2. Change `GLFW_BUILD_X11` to `OFF`.
2. To generate the binary files, run the following command on the host
                    machine:
                
cmake --build build/linux --config Release --target vulkan_samples -j$(nproc)Copy to clipboard

After successful compilation, the binary files are generated at
                        Vulkan-Samples/build/linux/app/bin/Release/aarch64.
3. Run the following commands on the host machine:
                
cd Vulkan-SamplesCopy to clipboard

        scp -r assets root@[IP-address-of-device]:/tmp/Copy to clipboard

        scp -r shaders root@[IP-address-of-device]:/tmp/Copy to clipboard

        scp -r build/linux/app/bin/Release/aarch64/vulkan_samples root@[IP-address-of-device]:/tmp/Copy to clipboard
4. Open the SSH terminal using the IP address of the device and run the following
                    commands:
                
cd /tmpCopy to clipboard

        chmod -R 777 assetsCopy to clipboard

        chmod -R 777 shadersCopy to clipboard

        chmod 777 vulkan_samplesCopy to clipboard

        . /etc/profileCopy to clipboard

        export XDG_RUNTIME_DIR=/dev/socket/westonCopy to clipboard

        mkdir --parents $XDG_RUNTIME_DIRCopy to clipboard

        chmod 0700 $XDG_RUNTIME_DIRCopy to clipboard

        export WAYLAND_DISPLAY=wayland-1Copy to clipboard

        ./vulkan_samples sample swapchain_imagesCopy to clipboard

Note: If you are unable to
                        run these sample applications from the `/tmp` directory due
                        to storage issues, try alternative directories such as
                        `/etc`.

Last Published: Oct 14, 2024

[Previous Topic
Overview](https://docs.qualcomm.com/bundle/publicresource/80-70015-19/topics/graphics-overview.md) [Next Topic
Features](https://docs.qualcomm.com/bundle/publicresource/80-70015-19/topics/graphics_features.md)