示例#1
0
        /// <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);
        }
示例#2
0
 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
     });
 }