/// <summary> /// Mark a resource barrier on the command list /// </summary> /// <param name="resource">The resource to transition</param> /// <param name="transition">The transition</param> public void ResourceTransition(GpuResource resource, ResourceTransition transition) { // don't do unnecessary work if (resource.State == transition.NewState) { return; } var barrier = new D3D12_RESOURCE_BARRIER { Type = D3D12_RESOURCE_BARRIER_TYPE.D3D12_RESOURCE_BARRIER_TYPE_TRANSITION, Flags = D3D12_RESOURCE_BARRIER_FLAGS.D3D12_RESOURCE_BARRIER_FLAG_NONE, Anonymous = new D3D12_RESOURCE_BARRIER._Anonymous_e__Union { Transition = CreateD3D12Transition(resource, transition) } }; resource.State = transition.NewState; _list.Get()->ResourceBarrier(1, &barrier); }
private D3D12_RESOURCE_TRANSITION_BARRIER CreateD3D12Transition(GpuResource resource, ResourceTransition transition) { return(new D3D12_RESOURCE_TRANSITION_BARRIER { pResource = resource.UnderlyingResource, StateBefore = resource.State, StateAfter = transition.NewState, Subresource = transition.Subresource }); }