Revert "i915g: Remove unused poly stipple state."
authorStéphane Marchesin <marcheu@chromium.org>
Fri, 13 Apr 2012 01:30:59 +0000 (18:30 -0700)
committerStéphane Marchesin <marcheu@chromium.org>
Fri, 13 Apr 2012 01:30:59 +0000 (18:30 -0700)
This reverts commit be6a02266d1a934c6eff9aaf12fc618588b2d586.

src/gallium/drivers/i915/i915_context.h
src/gallium/drivers/i915/i915_state_dynamic.c

index 5790a2d0d261b5b306614e98f5eea936344b5ba0..b019c9f342a2a30dc680652f2a5e8d207a4d49ac 100644 (file)
@@ -239,6 +239,7 @@ struct i915_context {
    struct pipe_clip_state clip;
    struct pipe_resource *constants[PIPE_SHADER_TYPES];
    struct pipe_framebuffer_state framebuffer;
+   struct pipe_poly_stipple poly_stipple;
    struct pipe_scissor_state scissor;
    struct pipe_sampler_view *fragment_sampler_views[PIPE_MAX_SAMPLERS];
    struct pipe_sampler_view *vertex_sampler_views[PIPE_MAX_SAMPLERS];
index 7e1759786586add17cfa614165bfd777e40f7545..1a21433eb9e3e5ec7cb55b52b02f36fe346851b3 100644 (file)
@@ -193,6 +193,58 @@ const struct i915_tracked_state i915_upload_DEPTHSCALE = {
 
 
 
+/***********************************************************************
+ * Polygon stipple
+ *
+ * The i915 supports a 4x4 stipple natively, GL wants 32x32.
+ * Fortunately stipple is usually a repeating pattern.
+ *
+ * XXX: does stipple pattern need to be adjusted according to
+ * the window position?
+ *
+ * XXX: possibly need workaround for conform paths test.
+ */
+static void upload_STIPPLE(struct i915_context *i915)
+{
+   unsigned st[2];
+
+   st[0] = _3DSTATE_STIPPLE;
+   st[1] = 0;
+
+   /* I915_NEW_RASTERIZER
+    */
+   st[1] |= i915->rasterizer->st;
+
+   /* I915_NEW_STIPPLE
+    */
+   {
+      const ubyte *mask = (const ubyte *)i915->poly_stipple.stipple;
+      ubyte p[4];
+
+      p[0] = mask[12] & 0xf;
+      p[1] = mask[8] & 0xf;
+      p[2] = mask[4] & 0xf;
+      p[3] = mask[0] & 0xf;
+
+      /* Not sure what to do about fallbacks, so for now just dont:
+       */
+      st[1] |= ((p[0] << 0) |
+                (p[1] << 4) |
+                (p[2] << 8) |
+                (p[3] << 12));
+   }
+
+   set_dynamic_array(i915, I915_DYNAMIC_STP_0, st, 2);
+}
+
+const struct i915_tracked_state i915_upload_STIPPLE = {
+   "STIPPLE",
+   upload_STIPPLE,
+   I915_NEW_RASTERIZER | I915_NEW_STIPPLE
+};
+
+
+
 /***********************************************************************
  * Scissor enable
  */
@@ -243,6 +295,7 @@ static const struct i915_tracked_state *atoms[] = {
    &i915_upload_BLENDCOLOR,
    &i915_upload_IAB,
    &i915_upload_DEPTHSCALE,
+   &i915_upload_STIPPLE,
    &i915_upload_SCISSOR_ENABLE,
    &i915_upload_SCISSOR_RECT
 };