static void
gen7_upload_sf_clip_viewport(struct brw_context *brw)
{
- struct intel_context *intel = &brw->intel;
- struct gl_context *ctx = &intel->ctx;
+ struct gl_context *ctx = &brw->ctx;
const GLfloat depth_scale = 1.0F / ctx->DrawBuffer->_DepthMaxF;
GLfloat y_scale, y_bias;
const bool render_to_fbo = _mesa_is_user_fbo(ctx->DrawBuffer);
brw->clip.vp_offset = brw->sf.vp_offset;
/* According to the "Vertex X,Y Clamping and Quantization" section of the
- * Strips and Fans documentation, Ivybridge and later don't have a maximum
- * post-clamp delta. However, the guardband extent must fit in [-32K, 32K)
- * which gives us a maximum size of 64K. Use 65000 rather than 65536 to be
- * somewhat cautious---make the guardband slightly smaller than the maximum.
+ * 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_guardband_extent = 65000;
+ const float maximum_guardband_extent = 8192;
float gbx = maximum_guardband_extent / (float) ctx->Viewport.Width;
float gby = maximum_guardband_extent / (float) ctx->Viewport.Height;
static void upload_cc_viewport_state_pointer(struct brw_context *brw)
{
- struct intel_context *intel = &brw->intel;
-
BEGIN_BATCH(2);
OUT_BATCH(_3DSTATE_VIEWPORT_STATE_POINTERS_CC << 16 | (2 - 2));
OUT_BATCH(brw->cc.vp_offset);