Thinking more about this. I assume that windows doesn't run into this
problem because of the larger padding for the GFX ring, doesn't they?
Well what do you think about just increasing the padding to what the
windows KMD is using then?
Regards,
Christian.
Am 30.09.2016 um 11:06 schrieb Christian König:
NAK, please stop adding workarounds like this into common code.
If we need to add the extra NOPs between each command submission than
just do this in one of the existing IP specific callbacks.
Additional to that this sounds more and more like the removal of the
double sync wasn't such a good idea.
Christian.
Am 30.09.2016 um 07:00 schrieb Monk Liu:
this fix DOTA and other exclusive & full screen game
textrue blank bug, the root cause is that when no ctx
switch between two DMAframe, CE go too faster and step
to the next DMAframe, thus DE and CE are not working on
the same DAMframe.
Change-Id: I92714a1d434bb05e94220a2db9b4a6113b0c2efc
Signed-off-by: Monk Liu <[email protected]>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
index 38261a0..4863426 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
@@ -129,6 +129,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring,
unsigned num_ibs,
unsigned i;
int r = 0;
+ unsigned extra_nop = 0;
if (num_ibs == 0)
return -EINVAL;
@@ -155,6 +156,10 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring,
unsigned num_ibs,
alloc_size = amdgpu_ring_get_dma_frame_size(ring) +
num_ibs * amdgpu_ring_get_emit_ib_size(ring);
+ if (job && !job->vm_needs_flush && ring->type ==
AMDGPU_RING_TYPE_GFX) {
+ extra_nop = 128;
+ }
+
r = amdgpu_ring_alloc(ring, alloc_size);
if (r) {
dev_err(adev->dev, "scheduling IB failed (%d).\n", r);
@@ -165,6 +170,8 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring,
unsigned num_ibs,
patch_offset = amdgpu_ring_init_cond_exec(ring);
if (vm) {
+ amdgpu_ring_insert_nop(ring, extra_nop); /* prevent CE go
too fast than DE */
+
r = amdgpu_vm_flush(ring, job);
if (r) {
amdgpu_ring_undo(ring);
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx