Index: /trunk/src/VBox/Main/include/PlatformImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/PlatformImpl.h	(revision 105958)
+++ /trunk/src/VBox/Main/include/PlatformImpl.h	(revision 105959)
@@ -71,4 +71,6 @@
     HRESULT i_applyDefaults(GuestOSType *aOsType);
 
+    PlatformArchitecture_T i_getArchitecture();
+
 public:
 
Index: /trunk/src/VBox/Main/include/PlatformPropertiesImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/PlatformPropertiesImpl.h	(revision 105958)
+++ /trunk/src/VBox/Main/include/PlatformPropertiesImpl.h	(revision 105959)
@@ -68,6 +68,6 @@
     static ULONG s_getMaxNetworkAdaptersOfType(ChipsetType_T aChipset, NetworkAttachmentType_T aType);
     static HRESULT s_getSupportedVRAMRange(GraphicsControllerType_T aGraphicsControllerType, BOOL fAccelerate3DEnabled, ULONG *aMinMB, ULONG *aMaxMB, ULONG *aStrideSizeMB);
-    static int  s_getSupportedGraphicsControllerFeatures(GraphicsControllerType_T enmController, std::vector<GraphicsFeature_T> &vecSupportedGraphicsFeatures);
-    static bool s_isGraphicsControllerFeatureSupported(GraphicsControllerType_T enmController, GraphicsFeature_T enmFeature);
+    static int  s_getSupportedGraphicsControllerFeatures(PlatformArchitecture_T enmArchitecture, GraphicsControllerType_T enmController, std::vector<GraphicsFeature_T> &vecSupportedGraphicsFeatures);
+    static bool s_isGraphicsControllerFeatureSupported(PlatformArchitecture_T enmArchitecture, GraphicsControllerType_T enmController, GraphicsFeature_T enmFeature);
 
 private:
Index: /trunk/src/VBox/Main/src-all/PlatformPropertiesImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-all/PlatformPropertiesImpl.cpp	(revision 105958)
+++ /trunk/src/VBox/Main/src-all/PlatformPropertiesImpl.cpp	(revision 105959)
@@ -830,43 +830,61 @@
  *
  * @returns VBox status code.
+ * @param   enmArchitecture              Platform architecture to query a feature for.
  * @param   enmController                Graphics controller to return supported features for.
  * @param   vecSupportedGraphicsFeatures Returned features on success.
  */
 /* static */
-int PlatformProperties::s_getSupportedGraphicsControllerFeatures(GraphicsControllerType_T enmController,
+int PlatformProperties::s_getSupportedGraphicsControllerFeatures(PlatformArchitecture_T enmArchitecture,
+                                                                 GraphicsControllerType_T enmController,
                                                                  std::vector<GraphicsFeature_T> &vecSupportedGraphicsFeatures)
 {
-    switch (enmController)
-    {
+   switch (enmArchitecture)
+    {
+        case PlatformArchitecture_x86:
+        {
+            switch (enmController)
+            {
 #ifdef VBOX_WITH_VMSVGA
-        case GraphicsControllerType_VBoxSVGA:
-        {
-            static const GraphicsFeature_T s_aGraphicsFeatures[] =
-            {
+                case GraphicsControllerType_VBoxSVGA:
+                {
+                    static const GraphicsFeature_T s_aGraphicsFeatures[] =
+                    {
 # ifdef VBOX_WITH_VIDEOHWACCEL
-                GraphicsFeature_Acceleration2DVideo,
+                        GraphicsFeature_Acceleration2DVideo,
 # endif
 # ifdef VBOX_WITH_3D_ACCELERATION
-                GraphicsFeature_Acceleration3D
+                        GraphicsFeature_Acceleration3D
 # endif
-            };
-            RT_CPP_VECTOR_ASSIGN_ARRAY(vecSupportedGraphicsFeatures, s_aGraphicsFeatures);
-            break;
-        }
+                    };
+                    RT_CPP_VECTOR_ASSIGN_ARRAY(vecSupportedGraphicsFeatures, s_aGraphicsFeatures);
+                    break;
+                }
 #endif
-        case GraphicsControllerType_VBoxVGA:
-            RT_FALL_THROUGH();
-        case GraphicsControllerType_QemuRamFB:
-        {
-            static const GraphicsFeature_T s_aGraphicsFeatures[] =
-            {
-                GraphicsFeature_None
-            };
-            RT_CPP_VECTOR_ASSIGN_ARRAY(vecSupportedGraphicsFeatures, s_aGraphicsFeatures);
-            break;
-        }
-
-        default:
-            return VERR_INVALID_PARAMETER;
+                case GraphicsControllerType_VBoxVGA:
+                    RT_FALL_THROUGH();
+                case GraphicsControllerType_QemuRamFB:
+                {
+                    vecSupportedGraphicsFeatures.clear(); /* None supported. */
+                    break;
+                }
+
+                default:
+                {
+                    AssertFailedStmt(vecSupportedGraphicsFeatures.clear());
+                    return VERR_INVALID_PARAMETER;
+                }
+            }
+
+            break;
+        }
+
+        case PlatformArchitecture_ARM:
+        {
+            vecSupportedGraphicsFeatures.clear(); /* None supported. */
+            break;
+        }
+
+        default:
+            break;
     }
 
@@ -878,12 +896,13 @@
  *
  * @returns \c true if the given feature is supported, or \c false if not.
+ * @param   enmArchitecture         Platform architecture to query a feature for.
  * @param   enmController           Graphics controlller to query a feature for.
  * @param   enmFeature              Feature to query.
  */
 /* static */
-bool PlatformProperties::s_isGraphicsControllerFeatureSupported(GraphicsControllerType_T enmController, GraphicsFeature_T enmFeature)
+bool PlatformProperties::s_isGraphicsControllerFeatureSupported(PlatformArchitecture_T enmArchitecture, GraphicsControllerType_T enmController, GraphicsFeature_T enmFeature)
 {
     std::vector<GraphicsFeature_T> vecSupportedGraphicsFeatures;
-    int vrc = PlatformProperties::s_getSupportedGraphicsControllerFeatures(enmController, vecSupportedGraphicsFeatures);
+    int vrc = PlatformProperties::s_getSupportedGraphicsControllerFeatures(enmArchitecture, enmController, vecSupportedGraphicsFeatures);
     if (RT_SUCCESS(vrc))
         return std::find(vecSupportedGraphicsFeatures.begin(),
@@ -990,5 +1009,6 @@
                                                            std::vector<GraphicsFeature_T> &aSupportedGraphicsFeatures)
 {
-    int vrc = PlatformProperties::s_getSupportedGraphicsControllerFeatures(aGraphicsControllerType, aSupportedGraphicsFeatures);
+    int vrc = PlatformProperties::s_getSupportedGraphicsControllerFeatures(mPlatformArchitecture,
+                                                                           aGraphicsControllerType, aSupportedGraphicsFeatures);
     if (RT_FAILURE(vrc))
         return setError(E_INVALIDARG, tr("The graphics controller type (%d) is invalid"), aGraphicsControllerType);
Index: /trunk/src/VBox/Main/src-server/GraphicsAdapterImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/GraphicsAdapterImpl.cpp	(revision 105958)
+++ /trunk/src/VBox/Main/src-server/GraphicsAdapterImpl.cpp	(revision 105959)
@@ -264,6 +264,7 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    /* Validate if the given feature is supported by this graphics controller. */
-    if (!PlatformProperties::s_isGraphicsControllerFeatureSupported(mData->graphicsControllerType, aFeature))
+    /* Validate if the given feature is supported by this graphics controller on the given VM platform. */
+    if (!PlatformProperties::s_isGraphicsControllerFeatureSupported(mParent->i_getPlatform()->i_getArchitecture(),
+                                                                    mData->graphicsControllerType, aFeature))
         return setError(VBOX_E_NOT_SUPPORTED, tr("The graphics controller does not support the given feature"));
 
@@ -305,8 +306,6 @@
     switch (aFeature)
     {
-#ifndef VBOX_WITH_VIRT_ARMV8 /* On macOS (ARM) we don't support any 2D/3D acceleration for now. */
         case GraphicsFeature_Acceleration2DVideo:
             pfSetting = &mData->fAccelerate2DVideo;
-            *pfSetting = false; /* @bugref{9691} -- The legacy VHWA acceleration has been disabled completely. */
             break;
 
@@ -314,5 +313,5 @@
             pfSetting = &mData->fAccelerate3D;
             break;
-#endif
+
         default:
             break;
Index: /trunk/src/VBox/Main/src-server/PlatformImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/PlatformImpl.cpp	(revision 105958)
+++ /trunk/src/VBox/Main/src-server/PlatformImpl.cpp	(revision 105959)
@@ -850,2 +850,17 @@
 }
 
+/**
+ * Internal helper to return the currently set architecture of this platform.
+ *
+ * @returns Currently set architecture.
+ *
+ * @note    Takes the read lock.
+ */
+PlatformArchitecture_T Platform::i_getArchitecture(void)
+{
+    PlatformArchitecture_T enmArchitecture;
+    HRESULT const hrc = getArchitecture(&enmArchitecture);
+    AssertComRCReturn(hrc, PlatformArchitecture_None);
+    return enmArchitecture;
+}
+
Index: /trunk/src/VBox/Main/src-server/SystemPropertiesImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/SystemPropertiesImpl.cpp	(revision 105958)
+++ /trunk/src/VBox/Main/src-server/SystemPropertiesImpl.cpp	(revision 105959)
@@ -1153,14 +1153,19 @@
 HRESULT SystemProperties::getSupportedGraphicsFeatures(std::vector<GraphicsFeature_T> &aSupportedGraphicsFeatures)
 {
+#if defined(RT_ARCH_X86) || defined(RT_ARCH_AMD64)
     static const GraphicsFeature_T s_aGraphicsFeatures[] =
     {
-#ifdef VBOX_WITH_VIDEOHWACCEL
+# ifdef VBOX_WITH_VIDEOHWACCEL
         GraphicsFeature_Acceleration2DVideo,
-#endif
-#ifdef VBOX_WITH_3D_ACCELERATION
+# endif
+# ifdef VBOX_WITH_3D_ACCELERATION
         GraphicsFeature_Acceleration3D
-#endif
+# endif
     };
     RT_CPP_VECTOR_ASSIGN_ARRAY(aSupportedGraphicsFeatures, s_aGraphicsFeatures);
+#else
+    /* On ARM-based hosts we don't support any 2D/3D acceleration for now.*/
+    aSupportedGraphicsFeatures.clear();
+#endif
 
     return S_OK;
