[Mesa-dev] [PATCH 1/2] i915g: make gears run again.

Marek Olšák maraeo at gmail.com
Fri May 26 10:56:51 UTC 2017


No! We were supposed to keep it broken for a while and then remove it (like
I said in the bug report). Why are you ruining the plan? :O

Marek

On May 26, 2017 3:32 AM, "Dave Airlie" <airlied at gmail.com> wrote:

From: Dave Airlie <airlied at redhat.com>

We need to validate some structs exist before we dirty the states, and
avoid the problem in some other places.

Fixes: e027935a7 ("st/mesa: don't update unrelated states in non-draw calls
such as Clear")
---
 src/gallium/drivers/i915/i915_state_derived.c   |   17 +++++++++++++++++
 src/gallium/drivers/i915/i915_state_dynamic.c   |    3 ++-
 src/gallium/drivers/i915/i915_state_immediate.c |    6 ++++--
 src/gallium/drivers/i915/i915_state_static.c    |    2 +-
 4 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/i915/i915_state_derived.c
b/src/gallium/drivers/i915/i915_state_derived.c
index dbfbc84..7809010 100644
--- a/src/gallium/drivers/i915/i915_state_derived.c
+++ b/src/gallium/drivers/i915/i915_state_derived.c
@@ -216,6 +216,23 @@ void i915_update_derived(struct i915_context *i915)
    if (I915_DBG_ON(DBG_ATOMS))
       i915_dump_dirty(i915, __FUNCTION__);

+   if (!i915->fs) {
+      i915->dirty &= ~(I915_NEW_FS_CONSTANTS | I915_NEW_FS);
+      i915->hardware_dirty &= ~(I915_HW_PROGRAM | I915_HW_CONSTANTS);
+   }
+
+   if (!i915->vs)
+      i915->dirty &= ~I915_NEW_VS;
+
+   if (!i915->blend)
+      i915->dirty &= ~I915_NEW_BLEND;
+
+   if (!i915->rasterizer)
+      i915->dirty &= ~I915_NEW_RASTERIZER;
+
+   if (!i915->depth_stencil)
+      i915->dirty &= ~I915_NEW_DEPTH_STENCIL;
+
    for (i = 0; atoms[i]; i++)
       if (atoms[i]->dirty & i915->dirty)
          atoms[i]->update(i915);
diff --git a/src/gallium/drivers/i915/i915_state_dynamic.c
b/src/gallium/drivers/i915/i915_state_dynamic.c
index 85b2721..434b09d 100644
--- a/src/gallium/drivers/i915/i915_state_dynamic.c
+++ b/src/gallium/drivers/i915/i915_state_dynamic.c
@@ -213,7 +213,8 @@ static void upload_STIPPLE(struct i915_context *i915)

    /* I915_NEW_RASTERIZER
     */
-   st[1] |= i915->rasterizer->st;
+   if (i915->rasterizer)
+      st[1] |= i915->rasterizer->st;

    /* I915_NEW_STIPPLE
     */
diff --git a/src/gallium/drivers/i915/i915_state_immediate.c
b/src/gallium/drivers/i915/i915_state_immediate.c
index b6007ac..14566a4 100644
--- a/src/gallium/drivers/i915/i915_state_immediate.c
+++ b/src/gallium/drivers/i915/i915_state_immediate.c
@@ -168,11 +168,13 @@ static void upload_S6(struct i915_context *i915)

    /* I915_NEW_BLEND
     */
-   LIS6 |= i915->blend->LIS6;
+   if (i915->blend)
+      LIS6 |= i915->blend->LIS6;

    /* I915_NEW_DEPTH
     */
-   LIS6 |= i915->depth_stencil->depth_LIS6;
+   if (i915->depth_stencil)
+      LIS6 |= i915->depth_stencil->depth_LIS6;

    set_immediate(i915, I915_IMMEDIATE_S6, LIS6);
 }
diff --git a/src/gallium/drivers/i915/i915_state_static.c
b/src/gallium/drivers/i915/i915_state_static.c
index 9a7ea22..88b418b 100644
--- a/src/gallium/drivers/i915/i915_state_static.c
+++ b/src/gallium/drivers/i915/i915_state_static.c
@@ -216,7 +216,7 @@ static void update_dst_buf_vars(struct i915_context
*i915)
       zformat = translate_depth_format(depth_surface->format);

       if (is->is_i945 && tex->tiling != I915_TILE_NONE
-            && !i915->fs->info.writes_z)
+          && (i915->fs && !i915->fs->info.writes_z))
          early_z = CLASSIC_EARLY_DEPTH;
    } else
       zformat = 0;
--
1.7.1

_______________________________________________
mesa-dev mailing list
mesa-dev at lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170526/adff1839/attachment.html>


More information about the mesa-dev mailing list