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 series. 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 16/30] i965/gs: Add GS_OPCODE_SET_WRITE_OFFSET. [PATCH 17/30] i965/gs: Add GS_OPCODE_SET_VERTEX_COUNT. [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. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev