2

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?

4 Answers 4

5

Indirect 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)

4

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.

0

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.

2
  • I had no idea there was a function in OpenGL called glDrawArraysIndirect. That’s not what I was asking about in this question, however. But thank you. Oct 1, 2019 at 19:09
  • That is not what indirect rendering refers to in the context of GLX. However, yes, there are functions that forbid drawing directly or to forbid the option to pipeline the call with the function drawing directly into the GPU buffer. This works around some issues with vertexes that must be modified between shader stages. Still this is not the proper type of indirect rendering. Dec 6, 2019 at 18:23
-2

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.

1
  • While often this is the case, as all software drivers operate indirect, it is not always the case. If the direct stack is not available, hardware rendering can still be used so long as the indirect stack is available. There is also a runtime option to force the use of the indirect stack, often as diagnosis for issues with direct framebuffer access by restricting that to the driver level, or to sandbox badly behaved programs so they don't corrupt the video memory. Dec 6, 2019 at 18:26

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .