I’m looking for information (relevant posts, journal publications, developer guides, textbooks, open source reference implementations?..) which discuss HW details of various elements of the OpenGL programming model, such as
- shaders - how does the shader compile to machine-specific code, and how are shaders scheduled on the GPU (and is it different for a vertex vs fragment vs compute shader etc)?
- buffers/textures - how and where do OpenGL buffers, textures get placed in GPU memory and accessed from within shader code, how is the GPU memory hierarchy (registers, L1/L2/… caches, local, global device memory regions) utilized in these processes?
- HW fixed-function details - how is a tri-linear interp unit designed and operate? where are textures really placed in memory (and how/why is access faster for this than for “general” buffer memory… more parallel access banks, memory locality, different memory arch (SDRAM, DDR1/2/3/4, etc)) ?
- Also interested in how OpenGL implementation for shaders/compute-shaders differs from OpenCL compute kernels in terms of GPU HW utilization.
I realize a lot of these details for current HW is proprietary guarded IP, but even older “obsolete” HW which could give basic insight will be useful. Intel has the open-source Beignet and NEO driver projects which provide some of this information for OpenCL API. I haven’t looked at the Mesa project yet, but wonder how relevant that will be as SW-implementation.
I teach 2 EE Master’s classes at UW on GPU-Compute (OpenCL-based) and Scientific Visualization (OpenGL-based), and this information would be very useful for the curriculum and students.
Dr. Colin Reinhardt
University of Washington, Electrical and Computer Engineering Dept.