Re: Non-conformant VK 1.1+ support on A702

Allan MacKinnon <[email protected]> Sat, 31 Jan 2026 13:10:26 -0500
Newsgroups gmane.comp.video.mesa3d.user
Message-ID <CAAwCruwyqjRkCfWde4xwBb1ymAXkkKvM+S_guXb+2aYycjn5Zw@mail.gmail.com>
--00000000000037bd280649b30357
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

False alarm...

The A702 is a non-ideal Vulkan 1.0 conformant device but with effort you
should be able to (validly) access all the interesting features.

I dug a little more and it seems that all extensions that could be
supported by the hardware are actually advertised so Vulkan 1.0 conformance
is not a problem for applications that don't give up based on the 1.0.x
`.apiVersion`.

For example, all the A702 compatible SaschaWillems samples I tried worked
fine including those that use relatively new post-1.0 extensions like
timeline semaphores and buffer device addresses.

But, unfortunately there are device properties like
`.subgroupSupported[Operations|Stages]` that never existed as an extension
(e.g. like VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR) so you would
have to check for the instance
extension VK_KHR_get_physical_device_properties2 (which is correctly
advertised on the A702 -- good job) but there was never a
VkPhysicalDeviceSubgroupProperties*KHR* structure so I don't know if the
validator will bleat when you do this.

It may be that VkPhysicalDeviceSubgroupProperties is one of the few structs
without a typedef'd KHR struct.

FWIW, here is the `vulkanCapsViewer` of the Arduino's Debian Mesa driver:

Arduino Debian Mesa: https://vulkan.gpuinfo.org/displayreport.php?id=3D4597=
5

You can see the A702 configuration here and what features are added to
later devices:

https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/freedreno/common/f=
reedreno_devices.py?ref_type=3Dheads#L889

Nice to see the A702 working well!

Thanks!

On Fri, Jan 30, 2026 at 2:12=E2=80=AFPM Allan MacKinnon <[email protected].=
edu>
wrote:

> Hi Turnip Team,
>
> You may have noticed that Arduino/Qualcomm released the Arduino Uno Q SBC
> which has a QRB2210 SoC and an Adreno 702 GPU.   I suspect they'll sell a
> decent number of these devices.
>
> I skimmed the driver and noticed the A702 doesn't support multiview which
> is mandatory in VK 1.1 and therefore `.apiVersion` is set to 1.0.x which
> lops off a lot of interesting Vulkan features.
>
> It's too bad that the lack of multiview has gated so many features (I
> understand why) but let's say I won't be using multiview and, for example=
,
> really want to use subgroup compute capabilities.
>
> How accurate are the rest of the physical device properties for A702 in
> case I want to run a non-conformant driver that lifts the `.apiVersion` t=
o
> 1.3 or 1.4?
>
> I don't recall the Vulkan org describing a workaround for a situation lik=
e
> this (nor should they).
>
> Whatever the answer, it's interesting that a low-end board now has an
> *almost* compliant Vulkan 1.4 GPU...
>
> Thanks for any suggestions.
>
> Allan
>
> ----
>
> A702 checks in `tu_device.cc`:
>
>    -
>    https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/freedreno/vul=
kan/tu_device.cc?ref_type=3Dheads#L1220
>    -
>    https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/freedreno/vul=
kan/tu_device.cc?ref_type=3Dheads#L151
>
>

--00000000000037bd280649b30357
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>False alarm...</div><div><br></div><div>The A702 is a=
 non-ideal Vulkan 1.0 conformant device but with effort you should be able =
to (validly) access all the interesting features.</div><div><br></div><div>=
I dug a little more and it seems that all extensions that could be supporte=
d by the hardware are actually advertised so Vulkan 1.0 conformance is not =
a problem for applications that don&#39;t give up based on the 1.0.x `.apiV=
ersion`.</div><div><br></div><div>For example, all the A702 compatible Sasc=
haWillems samples I tried worked fine including those that use relatively n=
ew post-1.0 extensions like timeline semaphores and buffer device addresses=
.</div><div><br></div><div>But, unfortunately there are device properties l=
ike `.subgroupSupported[Operations|Stages]` that never existed as an extens=
ion (e.g. like VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR) so you woul=
d have to check for the instance extension=C2=A0VK_KHR_get_physical_device_=
properties2 (which is correctly advertised on the A702 -- good job) but the=
re was never a VkPhysicalDeviceSubgroupProperties*KHR* structure so I don&#=
39;t know if the validator will bleat when you do this.</div><div><br></div=
><div>It may be that VkPhysicalDeviceSubgroupProperties is one of the few s=
tructs without a typedef&#39;d KHR struct.</div><div><br></div><div>FWIW, h=
ere is the `vulkanCapsViewer` of the Arduino&#39;s Debian Mesa driver:</div=
><div><div><div><br></div><blockquote style=3D"margin:0px 0px 0px 40px;bord=
er:none;padding:0px"><div><div>Arduino Debian Mesa: <a href=3D"https://vulk=
an.gpuinfo.org/displayreport.php?id=3D45975">https://vulkan.gpuinfo.org/dis=
playreport.php?id=3D45975</a></div></div><div><br></div></blockquote>You ca=
n see the A702 configuration here and what features are added to later devi=
ces:=C2=A0<div><br></div><blockquote style=3D"margin:0px 0px 0px 40px;borde=
r:none;padding:0px"><div><a href=3D"https://gitlab.freedesktop.org/mesa/mes=
a/-/blob/main/src/freedreno/common/freedreno_devices.py?ref_type=3Dheads#L8=
89">https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/freedreno/comm=
on/freedreno_devices.py?ref_type=3Dheads#L889</a></div><div><br></div></blo=
ckquote>Nice to see the A702 working well!</div><div><br></div><div>Thanks!=
</div></div></div><br><div class=3D"gmail_quote gmail_quote_container"><div=
 dir=3D"ltr" class=3D"gmail_attr">On Fri, Jan 30, 2026 at 2:12=E2=80=AFPM A=
llan MacKinnon &lt;<a href=3D"mailto:[email protected]">[email protected]=
it.edu</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"m=
argin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left=
:1ex"><div dir=3D"ltr"><div>Hi Turnip Team,</div><div><br></div><div>You ma=
y have noticed that Arduino/Qualcomm released the Arduino Uno Q SBC which h=
as a=C2=A0QRB2210 SoC and an Adreno 702 GPU.=C2=A0 =C2=A0I suspect they&#39=
;ll sell a decent number of these devices.</div><div><br></div><div>I skimm=
ed the driver and noticed the A702 doesn&#39;t support multiview which is m=
andatory in VK 1.1 and therefore `.apiVersion` is set to 1.0.x which lops o=
ff a lot of interesting Vulkan features.</div><div><br></div><div>It&#39;s =
too bad that the lack of multiview has gated so many features (I understand=
 why) but let&#39;s say I won&#39;t be using multiview and, for example, re=
ally want to use subgroup compute capabilities.</div><div><br></div><div>Ho=
w accurate are the rest of the physical device properties for A702 in case =
I want to run a non-conformant driver that lifts the `.apiVersion` to 1.3 o=
r 1.4?</div><div><br><div>I don&#39;t recall the Vulkan org describing a wo=
rkaround for a situation like this (nor should they).</div><div></div></div=
><div><br>Whatever the answer, it&#39;s interesting that a low-end board no=
w has an *almost* compliant Vulkan 1.4 GPU...</div><div><br></div><div>Than=
ks for any suggestions.</div><div><br></div><div>Allan</div><div><br></div>=
<div>----</div><div><br></div><div>A702 checks in `tu_device.cc`:</div><div=
><ul><li><a href=3D"https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/sr=
c/freedreno/vulkan/tu_device.cc?ref_type=3Dheads#L1220" target=3D"_blank">h=
ttps://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/freedreno/vulkan/tu=
_device.cc?ref_type=3Dheads#L1220</a></li><li><a href=3D"https://gitlab.fre=
edesktop.org/mesa/mesa/-/blob/main/src/freedreno/vulkan/tu_device.cc?ref_ty=
pe=3Dheads#L151" target=3D"_blank">https://gitlab.freedesktop.org/mesa/mesa=
/-/blob/main/src/freedreno/vulkan/tu_device.cc?ref_type=3Dheads#L151</a></l=
i></ul></div></div>
</blockquote></div>

--00000000000037bd280649b30357--