diff options
author | Paul Berry <[email protected]> | 2013-10-15 20:44:00 -0700 |
---|---|---|
committer | Paul Berry <[email protected]> | 2013-10-24 22:00:57 -0700 |
commit | 1e3e72e3054de27b35322feb6c715e433b00be2a (patch) | |
tree | 138339d059877a06ce56568c3577cd1c62924ca0 | |
parent | 3c2feb1969db110523093740ace594b5c9d75a25 (diff) |
i965: Reduce gl_MaxGeometryInputComponents to 64.
Although in principle there is no hardware limitation that prevents
gl_MaxGeometryInputComponents from being set to 128 on Gen7, we have
the following limitations in the vec4 compiler back end:
- Registers assigned to geometry shader inputs can't be spilled or
later re-used for any other purpose.
- The last 16 registers are set aside for the "MRF hack", meaning they
can only be used to send messages, and not for general purpose
computation.
- Up to 32 registers may be reserved for push constants, even if there
is sufficient register pressure to make this impractical.
A shader using 128 geometry input components, and having an input type
of triangles_adjacency, would use up:
- 1 register for r0 (which holds URB handles and various pieces of
control information).
- 1 register for gl_PrimitiveID.
- 102 registers for geometry shader inputs (17 registers per input
vertex, assuming DUAL_INSTANCED dispatch mode and allowing for one
register of overhead for gl_Position and gl_PointSize, which are
present in the URB map even if they are not used).
- Up to 32 registers for push constants.
- 16 registers for the "MRF hack".
That's a total of 152 registers, which is well over the 128 registers
the hardware supports.
Fortunately, the GLSL 1.50 spec allows us to reduce
gl_MaxGeometryInputComponents to 64. Doing that frees up 48
registers, brining the total down to 104 registers, leaving 24
registers available to do computation.
Fixes piglit test
spec/glsl-1.50/execution/geometry/max-input-components.
Reviewed-by: Eric Anholt <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
Reviewed-by: Ian Romanick <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index 44fcfa9cad6..8420c656b2d 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -415,7 +415,7 @@ brw_initialize_context_constants(struct brw_context *brw) if (brw->gen >= 6) { ctx->Const.MaxVarying = 32; ctx->Const.VertexProgram.MaxOutputComponents = 128; - ctx->Const.GeometryProgram.MaxInputComponents = 128; + ctx->Const.GeometryProgram.MaxInputComponents = 64; ctx->Const.GeometryProgram.MaxOutputComponents = 128; ctx->Const.FragmentProgram.MaxInputComponents = 128; } |