i915g: make gears run again.

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")
This commit is contained in:
Dave Airlie 2017-05-26 11:24:59 +10:00
parent 6e2eb96b64
commit cc69f2385e
4 changed files with 24 additions and 4 deletions

View File

@ -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);

View File

@ -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
*/

View File

@ -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);
}

View File

@ -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;