AnsweredAssumed Answered

Compute shader issue in current D3D driver

Question asked by ronan.bel on Oct 7, 2015
Latest reply on Oct 8, 2015 by pinform

Hi, there is a bug in the current driver (present from 15.5 beta driver)

 

(short)

 

If you code a sequence of 3 ComputeShader using one resource as UAV then UAV then SRV

CS1 ( rsc @ slotN as UAV )    // rsc used as WriteOnly

CS2 ( rsc @ slotN as UAV )    // rsc used as Read then Write

CS3 ( rsc @ slotK as SRV )    // rsc used as ReadOnly (SRV)

it seems the driver doesn't insert a proper sync between CS1 and CS2 (and a proper sync between CS2 and CS3)

I can't send you a repro (confidental big engine with huge dataset)

I can add more detail by email (ronan.bel@ubisoft.com)

 

(long)

 

My dev PC has an NVidia GPU.

I was working on some GPU code running fine with this kind of GPU.

The same code was giving random results on PC with AMD GPU, even causing the driver to reset (win7,win8.1) or simply to hang (win10)

I tried to find a bug in my code (believing it was due to the 32/64 threads difference between warp & wavefront)

The code was running fine on a PC with 14.12 AMD driver. I checked with later drivers, the bug appeared with 15.5 beta driver.

Today (after 2 weeks banging me head against the walls), I reproduced this issue on a PS4, and figured out what was wrong using Razor.

We were inserting sync only for rsc state transitions, in this case, since the rsc was UAV (RW) then UAV (RW), we missed a sync.

And I believe it's also the case in current driver (from 15.5).

 

(hazard and state transition are listed page 77 of Mantle documentation)

 

Changing my code using 2 buffers (same size, same flags) solves the issue (it's not a solution, only a hack)

CS1 ( rsc1 @ slotN as UAV )

CS2 ( rsc2 @ slotN as UAV + rsc1 @ slotT as SRV )

CS2 ( rsc2 @ slotK as SRV )

 

 

(by the way, I wasn't able to post in dev forum, in the past I was able to post in CodeXL forum)

Outcomes