drm/r100/kms: Emit cache flush to the end of command buffer. (v2)
Cache flush is required in case CPU is accessing rendered data. This fixes glean/readPixSanity test case and random rendering errors in sauerbraten and warzone2100. v2 Fix comment ordering in r100_fence_ring_emit and remove extra defines added in first version. Signed-off-by: Pauli Nieminen <suokkos@gmail.com> Reviewed-by: Jerome Glisse <jglisse@redhat.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
062b389c87
commit
9e5b2af75a
|
@ -354,11 +354,17 @@ u32 r100_get_vblank_counter(struct radeon_device *rdev, int crtc)
|
||||||
return RREG32(RADEON_CRTC2_CRNT_FRAME);
|
return RREG32(RADEON_CRTC2_CRNT_FRAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Who ever call radeon_fence_emit should call ring_lock and ask
|
||||||
|
* for enough space (today caller are ib schedule and buffer move) */
|
||||||
void r100_fence_ring_emit(struct radeon_device *rdev,
|
void r100_fence_ring_emit(struct radeon_device *rdev,
|
||||||
struct radeon_fence *fence)
|
struct radeon_fence *fence)
|
||||||
{
|
{
|
||||||
/* Who ever call radeon_fence_emit should call ring_lock and ask
|
/* We have to make sure that caches are flushed before
|
||||||
* for enough space (today caller are ib schedule and buffer move) */
|
* CPU might read something from VRAM. */
|
||||||
|
radeon_ring_write(rdev, PACKET0(RADEON_RB3D_DSTCACHE_CTLSTAT, 0));
|
||||||
|
radeon_ring_write(rdev, RADEON_RB3D_DC_FLUSH_ALL);
|
||||||
|
radeon_ring_write(rdev, PACKET0(RADEON_RB3D_ZCACHE_CTLSTAT, 0));
|
||||||
|
radeon_ring_write(rdev, RADEON_RB3D_ZC_FLUSH_ALL);
|
||||||
/* Wait until IDLE & CLEAN */
|
/* Wait until IDLE & CLEAN */
|
||||||
radeon_ring_write(rdev, PACKET0(0x1720, 0));
|
radeon_ring_write(rdev, PACKET0(0x1720, 0));
|
||||||
radeon_ring_write(rdev, (1 << 16) | (1 << 17));
|
radeon_ring_write(rdev, (1 << 16) | (1 << 17));
|
||||||
|
|
Loading…
Reference in New Issue