i965/gs: Add a case to brwNewProgram() for geometry shaders.
[mesa.git] / src / mesa / drivers / dri / i965 / gen6_viewport_state.c
index 95243f08c5003b8906e70a8f4794aea78d214f1c..033592035f9de7f5b8e7d88d603dfee82bf4a7b6 100644 (file)
 static void
 gen6_upload_clip_vp(struct brw_context *brw)
 {
-   struct gl_context *ctx = &brw->intel.ctx;
+   struct gl_context *ctx = &brw->ctx;
    struct brw_clipper_viewport *vp;
 
    vp = brw_state_batch(brw, AUB_TRACE_CLIP_VP_STATE,
                        sizeof(*vp), 32, &brw->clip.vp_offset);
 
-   /* According to the Sandybridge PRM, Volume 2, Part 1, Section 6.3.8
-    * "Vertex X,Y Clamping and Quantization", the screen-aligned 2D
-    * bounding-box of an object must not exceed 16K pixels in either X or Y.
+   /* According to the "Vertex X,Y Clamping and Quantization" section of the
+    * Strips and Fans documentation, objects must not have a screen-space
+    * extents of over 8192 pixels, or they may be mis-rasterized.  The maximum
+    * screen space coordinates of a small object may larger, but we have no
+    * way to enforce the object size other than through clipping.
+    *
+    * If you're surprised that we set clip to -gbx to +gbx and it seems like
+    * we'll end up with 16384 wide, note that for a 8192-wide render target,
+    * we'll end up with a normal (-1, 1) clip volume that just covers the
+    * drawable.
     */
-   const float maximum_post_clamp_delta = 16384;
+   const float maximum_post_clamp_delta = 8192;
    float gbx = maximum_post_clamp_delta / (float) ctx->Viewport.Width;
    float gby = maximum_post_clamp_delta / (float) ctx->Viewport.Height;
 
@@ -71,7 +78,7 @@ const struct brw_tracked_state gen6_clip_vp = {
 static void
 gen6_upload_sf_vp(struct brw_context *brw)
 {
-   struct gl_context *ctx = &brw->intel.ctx;
+   struct gl_context *ctx = &brw->ctx;
    const GLfloat depth_scale = 1.0F / ctx->DrawBuffer->_DepthMaxF;
    struct brw_sf_viewport *sfv;
    GLfloat y_scale, y_bias;
@@ -113,8 +120,6 @@ const struct brw_tracked_state gen6_sf_vp = {
 
 static void upload_viewport_state_pointers(struct brw_context *brw)
 {
-   struct intel_context *intel = &brw->intel;
-
    BEGIN_BATCH(4);
    OUT_BATCH(_3DSTATE_VIEWPORT_STATE_POINTERS << 16 | (4 - 2) |
             GEN6_CC_VIEWPORT_MODIFY |