What is indirect rendering and what sort of implications does it have on graphics performance?
Also, is it a Linux-specific term or can it be used in the context of other operating systems?
Super User is a question and answer site for computer enthusiasts and power users. It only takes a minute to sign up.
Sign up to join this communityIndirect rendering is when a remote application is rendered on the local computer. It transports the graphics data over the X11 protocol. How it performs depends both on the network connection to transport the data and how good your local gfx card is.
It's applicable on any system with a gfx card and an running X-Server (windows or linux)
Indirect rendering basically means that the entire rendering pipeline runs through GLX/X11. It is a trade-off that usually results in more resource consumption as well as greater latency and occasionally results in lower rendering speed
Simplified for illustration purposes I'll describe it here.
Direct Rendering:
Application --> LibGL --> Driver --> Hardware
Indirect Rendering
Application --> LibGL --> Xorg --> Driver --> Hardware
The advantages of Indirect rendering is it reduces some driver related bugs, doesn't require user level access to the video card (security feature), and it allows rendering over a network.
The disadvantages of Indirect rendering is it has a longer pipeline lantency and it's pipeline uses more resources (particularly memory bandwidth and processor time).
Indirect rendering usually results in lower performance, particularly on applications that have high processor overhead, or are designed to rely on a low-latency rendering pipeline.
In some rare cases Indirect rendering can be faster in applications that poorly handle the short queue buffer in the direct rendering pipeline. Much like when a print buffer would speeding printing, this can be due to bugs or limitations in applications that rely on the rate at which outgoing asynchronous render calls can be streamed out. This is only a very small number of programs with a long render pipeline and little to no latency dependency. This is not your typical program, and if Indirect Rendering is actually faster, it's a bug in the program's render queue handling.
However in some cases, your system reads indirect rendering because all software rendering is indirect. This is very slow even on rendering that doesn't hit typical bandwidth and latency bottlenecks, as it uses the CPU for most draw functions, and CPUs are inherently not as good at the bulk vector and matrix math used for rendering. LLVMPipe is the most common software rendering driver as of the writing of this.
Indirect rendering is the system of providing a drawing in guidance to OpenGL, of course, really most of the parameters to that request start from GPU amassing given by a Buffer Object.
For example, glDrawArrays()
takes a rough sort, the number of vertices, and the starting vertex. When using the deviant drawing heading glDrawArraysIndirect()
, the starting vertex and number of vertices to render would prefer to be taken care of in a support object.
glDrawArraysIndirect
. That’s not what I was asking about in this question, however. But thank you.
Oct 1, 2019 at 19:09
Indirect rendering as opposed to Direct rendering means your using some sort of software rendering instead of using your graphics card GPU. The results are poor 3D rendering.
Indirect rendering means no hardware graphics acceleration.