I get errors if I try to transition a D3D12_RESOURCE_STATE_UNORDERED_ACCESS to D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT in a compute command list. Specifically,
D3D12_RESOURCE_STATES has invalid flags for compute command list
Well, okay, switching to a direct command list makes the error go away... but uh, does this mean compute command lists can't reliably write to a buffer and then call ExecuteIndirect on it?
The API doesn't care if I don't transition from uav to indirect, but the ExecuteIndirect call predictably gets bad data, as I assume the writes to the buffer don't get finished off.
Interestingly I can call UAV barriers just fine on a compute command list and they work great between different dispatches, however, it doesn't work in the case of ExecuteIndirect.
Is the only option to synchronize compute queues with direct queues when trying to use ExecuteIndirect? That kind of sucks...