DX12学习笔记

转换资源屏障

相关的概念:

  1. D3D12中的资源权限问题
  2. 图形/计算类:直接命令队列, 计算命令队列
  3. 复制类:复制命令队列
  4. 资源可以看成是一种子资源的序列,以及每份子资源关联的两份权限,(图形计算类和复制类)
  5. 这两种资源权限的体现:
    1. CPU线程执行直接命令队列/计算命令队列中的命令时访问子资源
    2. CPU线程执行复制命令队列中的命令时访问子资源
    3. 特殊情况:CPU线程访问子资源时的权限要求

D3D12中添加资源屏障命令:

  1. 使用 ID3D12GraphicsCommandList 接口的 ResourceBarrier方法在命令队列中添 ResourceBarrier 命令转换子资源对改命令所在的命令列表、命令队列、所属的类的权限
  2. 方法原型:
void STDMETHODCALLTYPE 
ResourceBarrier(
    UINT NumBarriers, //in
    const D3D12_RESOURCE_BARRIER *pBarriers //in
    );
  1. 以上方法的第二个参数用于描述 ResourceBarrier:
struct D3D12_RESOURCE_BARRIER
{
    D3D12_RESOURCE_BARRIER_TYPE Type; //资源屏障类型
    D3D12_RESOURCE_BARRIER_FLAGS Flags; //分离资源屏障
    union //根据Type在下面选择对应屏障
    {
        D3D12_RESOURCE_TRANSITION_BARRIER Transition;
        D3D12_RESOURCE_ALIASING_BARRIER Aliasing;
        D3D12_RESOURCE_UAV_BARRIER UAV;
    };
};

//其中 Transition 结构体如下:
struct D3D12_RESOURCE_TRANSITION_BARRIER
{
    ID3D12Resource *pResource; //要转换权限的子资源所在的资源,用IDXGISwapchain::GetBuffer获取交换链头部指针
    UINT Subresource; //子资源索引
    D3D12_RESOURCE_STATES StateBefore; //权限的当前值,若与实际不符GPU会崩溃,因此要跟踪该值
    D3D12_RESOURCE_STATES StateAfter; //转换后的值
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值