i965: STATIC_ASSERT that there aren't too many BRW_NEW_* flags.

We are getting close to the maximum number of BRW_NEW_* bits that can
be stored in brw->state.dirty.brw without overflowing 32 bits, and
geometry shaders are going to add more.  Add a STATIC_ASSERT so that
we will be alerted when we need to switch to 64 bits.
glsl: Refactor handling of gl_ClipDistance/gl_ClipVertex linkage rules for GS.

This patch extracts the following logic from
validate_vertex_shader_executable():

(a) Generate an error if the shader writes to both gl_ClipDistance and
    gl_ClipVertex.

(b) Record whether the shader writes to gl_ClipDistance in
    gl_shader_program for use by the back-end.

(c) Record the size of gl_ClipDistance in gl_shader_program for use by
    transform feedback logic.

And moves it into a function that is shared between vertex and
geometry shaders.

Strictly speaking we only need to have shared logic for (b) and (c)
right now (since (a) only matters in compatibility contexts, and we're
only implementing geometry shaders in core contexts right now).  But
the three are closely related enough that it seems sensible to keep
them together.
mesa/program: Make prog_instruction.h and program.h safe to include from C++.
i965: Make brw_{program,shader,vec4,vs}.h safe to include from C++.
i965: Initialize all elements of ctx->ShaderCompilerOptions.

Otherwise any GS that requires lowering (e.g. one that uses
gl_ClipDistance or gl_ClipDistanceIn) will fail to work.
i965: Stop including brw_vs.h from brw_vec4.h.

This is backwards from what we are going to want in the long term, which is:

- brw_vec4.h declares general-purpose vec4 infrastructure needed by
  both VS and GS
- brw_vs.h includes brw_vec4.h and adds VS-specific parts.
- brw_gs.h includes brw_vec4.h and adds GS-specific parts.

Note that at the moment brw_vec.h contains a fair amount of
VS-specific declarations--I plan to address that in a later patch.
i965/vec4: Move vec4 data structures and functions to brw_vec4.{cpp,h}.

This patch moves the following things into brw_vec4.{cpp,h}:

- struct brw_vec4_compile
- struct brw_vec4_prog_key
- brw_vec4_prog_data_compare()
- brw_vec4_prog_data_free()

This will allow us to avoid having to include brw_vs.h in
geometry-shader-specific files.
i965/vec4: Allow for dispatch_grf_start_reg to vary.

Both 3DSTATE_VS and 3DSTATE_GS have a dispatch_grf_start_reg control,
which determines the register where the hardware delivers data sourced
from the URB (push constants followed by per-vertex input data).

For vertex shaders, we always set dispatch_grf_start_reg to 1, since
R1 is always the first register available for push constants in vertex
shaders.

For geometry shaders, we'll need the flexibility to set
dispatch_grf_start_reg to different values depending on the behvaiour
of the geometry shader; if it accesses gl_PrimitiveIDIn, we'll need to
set it to 2 to allow the primitive ID to be delivered to the thread in
R1.

This patch eliminates the assumption that dispatch_grf_start_reg is
always 1.  In vec4_visitor, we record the regnum that was passed to
vec4_visitor::setup_uniforms() in prog_data for later use.  In
vec4_generator, we consult this value when converting an abstract
UNIFORM register to a concrete hardware register.  And in the code
that emits 3DSTATE_VS, we set dispatch_grf_start_reg based on the
value recorded in prog_data.

This will allow us to set dispatch_grf_start_reg to the appropriate
value when compiling geometry shaders.  Vertex shaders will continue
to always use a dispatch_grf_start_reg of 1.
i965/vec4: Virtualize setup_payload instead of setup_attributes.

When I initially generaized the vec4_visitor class in preparation for
geometry shaders, I assumed that the setup_attributes() function would
need to be different between vertex and geometry shaders, but its
caller, setup_payload(), could be shared.  So I made
setup_attributes() a virtual function.

It turns out this isn't true; setup_payload() needs to be different
too, since the geometry shader payload sometimes includes an extra
register (primitive ID) that has to come before uniforms.

So setup_payload() needs to be the virtual function instead of
setup_attributes().
i965/gs: Add brw->geometry_program.
i965/gs: Add a case to brwBindProgram() for geometry shaders.
i965/gs: Create structs for use by GS program compilation.
i965/gs: Add a case to brwNewProgram() for geometry shaders.
i965: Combine 4 boolean args of brw_urb_WRITE into a flags bitfield.

The arguments to brw_urb_WRITE() were getting pretty unwieldy, and we
have to add more flags to support geometry shaders anyhow.

Also plumb these flags through brw_clip_emit_vue(),
brw_set_urb_message(), and the vec4_instruction class.
i965/gs: Add GS_OPCODE_URB_WRITE.

This opcode will be used by geometry shaders to write output vertex
data to the URB.

It differs from VS_OPCODE_URB_WRITE in that it doesn't do an implied
move from R0 to the MRF holding the message header.  This will allow
the geometry shader to direct the output data to the appropriate
vertex in the output URB entry.
i965/gs: Add GS_OPCODE_THREAD_END.

This opcode will be used at the end of a geometry shader thread.  This
is different from what we do in vertex shaders because vertex shaders
always end by writing vertex data to the URB.  Geometry shaders, on
the other hand, write vertex data to the URB during normal execution,
so at the end of the thread, they simply have to output a count of how
many vertices were generated.

As with GS_OPCODE_URB_WRITE, this opcode doesn't do an implied move
from R0 to the MRF holding the message header.  This will allow the
vertex counts to be stored in the message header.
i965/gs: Add GS_OPCODE_SET_WRITE_OFFSET.

This opcode will be used by geometry shaders to store the appropriate
write offset in the message header when performing URB writes of
output vertex data.
i965/gs: Add GS_OPCODE_SET_VERTEX_COUNT.

This opcode will be used by geometry shaders to store the final vertex
counts in the message header when preparing the message that ends the
geometry shader thread.
i965/gs: Add GS_OPCODE_SET_R0_2.

This opcode will be used by the geometry shader to initialize DWORD 2
of R0, which needs to be 0 in order for scratch reads and writes to
operate correctly.
!UPSTREAM: i965/gs: add GS visitors.