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:
parent
6e2eb96b64
commit
cc69f2385e
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue