diff --git a/subprojects/gst-plugins-bad/sys/va/plugin.c b/subprojects/gst-plugins-bad/sys/va/plugin.c
index afcd65aa8d..edc442569d 100644
--- a/subprojects/gst-plugins-bad/sys/va/plugin.c
+++ b/subprojects/gst-plugins-bad/sys/va/plugin.c
@@ -29,6 +29,7 @@
 
 #include "gstvaav1dec.h"
 #include "gstvacaps.h"
+#include "gstvacompositor.h"
 #include "gstvadeinterlace.h"
 #include "gstvadevice.h"
 #include "gstvafilter.h"
@@ -206,16 +207,18 @@ static void
 plugin_register_vpp (GstPlugin * plugin, GstVaDevice * device)
 {
   GstVaFilter *filter;
-  gboolean has_colorbalance, has_deinterlace;
+  gboolean has_colorbalance, has_deinterlace, has_compose;
 
   has_colorbalance = FALSE;
   has_deinterlace = FALSE;
+  has_compose = FALSE;
   filter = gst_va_filter_new (device->display);
   if (gst_va_filter_open (filter)) {
     has_colorbalance =
         gst_va_filter_has_filter (filter, VAProcFilterColorBalance);
     has_deinterlace =
         gst_va_filter_has_filter (filter, VAProcFilterDeinterlacing);
+    has_compose = gst_va_filter_has_compose (filter);
   } else {
     GST_WARNING ("Failed open VA filter");
     gst_object_unref (filter);
@@ -232,6 +235,13 @@ plugin_register_vpp (GstPlugin * plugin, GstVaDevice * device)
           device->render_device_path);
     }
   }
+
+  if (has_compose) {
+    if (!gst_va_compositor_register (plugin, device, GST_RANK_NONE)) {
+      GST_WARNING ("Failed to register compositor: %s",
+          device->render_device_path);
+    }
+  }
 }
 
 static inline void