[Mesa-dev] [PATCH 00/30] i965/gen7: Initial geometry shader support.

Paul Berry stereotype441 at gmail.com
Tue Aug 20 11:30:15 PDT 2013

This series constitutes the initial geometry shader support for i965
Gen7 (Ivy Bridge) and Gen7.5 (Haswell).

Basic functionality works, but I haven't turned it on yet because the
following tasks still need to be done:

- Get sampling to work

- Support EndPrimitive()

- Support gl_PrimitiveID (and gl_PrimitiveIDIn)

- Support >64 varying components

- Support new primitive types (e.g. GL_TRIANGLES_ADJACENCY)

- Support built-in variables being used as GS inputs
  (e.g. gl_in[].gl_PointSize)

- A lot more testing

Patches 01-02 do some minor core mesa refactoring needed by this

Patches 03-13 do basic prep work (mostly refactoring).

Patches 14-19 create the vec4_gs_visitor class, which translates
geometry shaders from GLSL IR to back-end opcodes (it is parallel to
the existing vec4_vs_visitor class).

Patches 20-25 create the brw_vec4_gs_prog state atom, which invokes
back-end geometry shader compilation when demanded by a change to the
GL pipeline state.

Patches 26-28 modify the URB configuration to make room for geometry
shader push constants and geometry shader output data.

Patches 29-30 create the gen7_gs_push_constants and gen7_gs_state
state atoms, which cause the geometry shader portion of the pipeline
to be programmed properly when a geometry shader is in use.

This series is available on branch "gs-phase-2" of
https://github.com/stereotype441/mesa.git.  Additional unfinished
geometry shader work is in branch "gs".  Note that the "gs" branch is
rebased very frequently.

Thanks in advance for your review!

[PATCH 01/30] glsl: Refactor handling of gl_ClipDistance/gl_ClipVertex linkage rules for GS.
[PATCH 02/30] mesa/program: Make prog_instruction.h and program.h safe to include from C++.
[PATCH 03/30] i965: Make brw_{program,shader,vec4,vs}.h safe to include from C++.
[PATCH 04/30] i965: Initialize all elements of ctx->ShaderCompilerOptions.
[PATCH 05/30] i965: Stop including brw_vs.h from brw_vec4.h.
[PATCH 06/30] i965/vec4: Move vec4 data structures and functions to brw_vec4.{cpp,h}.
[PATCH 07/30] i965/vec4: Allow for dispatch_grf_start_reg to vary.
[PATCH 08/30] i965/vec4: Virtualize setup_payload instead of setup_attributes.
[PATCH 09/30] i965/gs: Add brw->geometry_program.
[PATCH 10/30] i965/gs: Add a case to brwBindProgram() for geometry shaders.
[PATCH 11/30] i965/gs: Create structs for use by GS program compilation.
[PATCH 12/30] i965/gs: Add a case to brwNewProgram() for geometry shaders.
[PATCH 13/30] i965: Combine 4 boolean args of brw_urb_WRITE into a flags bitfield.
[PATCH 14/30] i965/gs: Add GS_OPCODE_URB_WRITE.
[PATCH 15/30] i965/gs: Add GS_OPCODE_THREAD_END.
[PATCH 18/30] i965/gs: Add GS_OPCODE_SET_DWORD_2_IMMED.
[PATCH 19/30] i965/gs: add GS visitors.
[PATCH 20/30] i965: Make prim_to_hw_prim accessible outside brw_draw.c.
[PATCH 21/30] i965/vec4: Make a function for setting up vec4 program key clip info.
[PATCH 22/30] i965/gs: Add a data structure for tracking VS output VUE map.
[PATCH 23/30] i965/gs: Create brw_context::vec4_gs structure to track GS program state.
[PATCH 24/30] i965/gs: Support UBOs by generating surface state and binding tables.
[PATCH 25/30] i965/gs: make the state atom for compiling Gen7 geometry shaders.
[PATCH 26/30] i965/gs: Allocate URB space for use by geometry shader.
[PATCH 27/30] i965/gs: Allocate push constant space.
[PATCH 28/30] i965: Make sure constants re-sent after constant buffer reallocation.
[PATCH 29/30] i965/vs: generalize push const upload in preparation for GS.
[PATCH 30/30] i965/gs: set up GS state.

More information about the mesa-dev mailing list