The following illustration shows how each execute buffer and viewport is owned by exactly one device, and each light is owned by exactly one viewport.
Material and texture objects can be associated with more than one device. Each node in the following illustration contains a pointer back to the head of the list it is in. (These pointers, however, are not shown in the illustration.) From any texture or material node, pointers lead back both to the texture or material object and to the relevant device.
You can create interface, device, and texture objects by calling the QueryInterface method. Material, light, and viewport objects are created by calls to the methods of the IDirect3D interface. Execute buffers and matrices are created by calls to the methods of the IDirect3DDevice interface. An interface object (Direct3D object) has a list of all created device, viewport, light, and material objects, but not execute buffers or textures.