Revision control
++ // Copyright (C) 2026 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
++
++ // While the container references leafPass it is a sub-pass: it produces no
++ // output of its own and the provider-driven quad stays empty. When the
++ // reference is dropped the leaf must return to being a top-level pass and
++ // render into its own (implicit default) attachment again.
++
++ import QtQuick
++ import QtQuick3D
++ import QtQuick3D.Helpers
++
++ Item {
++ id: root
++ width: 200
++ height: 200
++
++ property bool useAsSubPass: true
++
++ View3D {
++ anchors.fill: parent
++ renderOverrides: View3D.DisableInternalPasses
++
++ PerspectiveCamera { position: Qt.vector3d(0, 0, 300) }
++ DirectionalLight {}
++
++ // No attachment commands: as a top-level pass it renders into the
++ // implicit default color attachment, and as a sub-pass there are no
++ // ignored-attachment warnings.
++ RenderPass {
++ id: leafPass
++ objectName: "leafPass"
++ clearColor: "black"
++ commands: [
++ RenderablesFilter { layerMask: ContentLayer.Layer0 }
++ ]
++ }
++
++ RenderPass {
++ id: containerPass
++ objectName: "containerPass"
++ clearColor: "black"
++ commands: [
++ RenderablesFilter { renderableTypes: RenderablesFilter.None },
++ SubRenderPass { renderPass: root.useAsSubPass ? leafPass : null }
++ ]
++ }
++
++ // Displays the leaf's own output: empty while the leaf is a sub-pass,
++ // the green cube once it is a top-level pass again.
++ SimpleQuadRenderer {
++ texture: Texture {
++ textureProvider: RenderOutputProvider {
++ textureSource: RenderOutputProvider.UserPassTexture
++ renderPass: leafPass
++ }
++ }
++ }
++
++ Model {
++ layers: ContentLayer.Layer0
++ source: "#Cube"
++ materials: PrincipledMaterial {
++ baseColor: "green"
++ lighting: PrincipledMaterial.NoLighting
++ }
++ }
++ }
++ }