社区
其它游戏引擎
帖子详情
D3D12 资源 维度 复制
DestinedToDie
2019-06-14 05:27:46
我想检查一下纹理里的数据,打算拷贝到内存,最后选择用回读堆,但是回读堆上的资源必须是缓存,要怎么样才能把纹理拷贝到缓冲呢?
...全文
249
8
打赏
收藏
D3D12 资源 维度 复制
我想检查一下纹理里的数据,打算拷贝到内存,最后选择用回读堆,但是回读堆上的资源必须是缓存,要怎么样才能把纹理拷贝到缓冲呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
DestinedToDie
2019-06-16
打赏
举报
回复
这是UAV对应资源的创建
D3D12_HEAP_DESC RTBufferHeapDesc = {
FLOOR(RTBuffer_Size, static_cast<UINT64>(256)),
{D3D12_HEAP_TYPE_DEFAULT,D3D12_CPU_PAGE_PROPERTY_UNKNOWN,D3D12_MEMORY_POOL_UNKNOWN},
D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT,
D3D12_HEAP_FLAG_NONE
};
ThrowIfFailed(Device->CreateHeap(&RTBufferHeapDesc, IID_PPV_ARGS(&RT_ResultHeap)));
D3D12_RESOURCE_DESC RTBufferDesc = CD3DX12_RESOURCE_DESC::Tex2D(
RenderTargetFormat, Width, Height);
RTBufferDesc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS;
RTBufferDesc.DepthOrArraySize = 1;
ThrowIfFailed(Device->CreatePlacedResource(
RT_ResultHeap.Get(),
0,
&RTBufferDesc,
D3D12_RESOURCE_STATE_UNORDERED_ACCESS,
nullptr,
IID_PPV_ARGS(&CS_ResultResource)));
#ifdef _DEBUG
ThrowIfFailed(CS_ResultResource->SetName(L"RT"));
#endif // _DEBUG
DestinedToDie
2019-06-16
打赏
举报
回复
这是用于拷贝的代码块
{
ComPtr<ID3D12Resource> Reader = nullptr;
D3D12_HEAP_PROPERTIES Prop = {};
Prop.Type = D3D12_HEAP_TYPE_READBACK;
D3D12_RESOURCE_DESC Desc = CD3DX12_RESOURCE_DESC::Buffer(RTBuffer_Size);
Device->CreateCommittedResource(
&Prop,
D3D12_HEAP_FLAG_NONE,
&Desc,
D3D12_RESOURCE_STATE_COPY_DEST,
nullptr,
IID_PPV_ARGS(&Reader)
);
D3D12_TEXTURE_COPY_LOCATION Src = {}, Dst = {};
Src.pResource = CS_ResultResource.Get();
Dst.pResource = Reader.Get();
Dst.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT;
DirectGraphicsCommandList->CopyTextureRegion(&Dst, 0, 0, 0, &Src, nullptr);
XMVECTOR* pData = nullptr;
{
Barrier = CD3DX12_RESOURCE_BARRIER::Transition(
CS_ResultResource.Get(),
D3D12_RESOURCE_STATE_UNORDERED_ACCESS,
D3D12_RESOURCE_STATE_COPY_SOURCE);
DirectGraphicsCommandList->ResourceBarrier(1, &Barrier);
}
ThrowIfFailed(Reader->Map(0, &D3D12_RANGE({ 0,RTBuffer_Size }), reinterpret_cast<void**>(pData)));
for (UINT64 i = 0; i < RTBuffer_Size / sizeof(XMFLOAT4); i++)
{
if (pData == nullptr)
{
break;
}
if (XMVector4Length(*pData).m128_f32[0] >= 0.01f)
{
OutputDebugStringA("Found not-zero pixel");
}
pData++;
}
Reader->Unmap(0, &D3D12_RANGE({ 0,0 }));
{
Barrier = CD3DX12_RESOURCE_BARRIER::Transition(
CS_ResultResource.Get(),
D3D12_RESOURCE_STATE_COPY_SOURCE,
D3D12_RESOURCE_STATE_UNORDERED_ACCESS);
DirectGraphicsCommandList->ResourceBarrier(1, &Barrier);
}
}
DestinedToDie
2019-06-16
打赏
举报
回复
那我等会贴一下
可能也没什么人像我这样做
WJN92
2019-06-16
打赏
举报
回复
没遇到过这样的问题,你又不贴一下代码
DestinedToDie
2019-06-15
打赏
举报
回复
我的UAV在默认堆里不能直接Map()
DestinedToDie
2019-06-15
打赏
举报
回复
但是CopyBufferRegion()CopyTextureRegion()CopyResource()都有维度要求,回读堆又不能是纹理
DestinedToDie
2019-06-15
打赏
举报
回复
对啊UAV里的2D纹理
WJN92
2019-06-15
打赏
举报
回复
你应该是用uav的吧,好像能映射到内存吧
D
3D
12
渲染技术之初始化流程
掌握了矩阵向量运算的实现后,接下来我们要做的事情运行我们的D
3D
12
,看看会出现什么效果?也就是我们通常说的初始化D
3D
12
,D
3D
12
的初始化工作与以前的D
3D
9是完全不一样的,D
3D
12
做了大幅的升级。但是每个D
3D
图形API都有自己的初始化流程,大家只要记住这个流程,学习起来就比较容易,就跟生产车架的流水线作业一样的原理,先做什么后做什么。我们先聊聊D
3D
12
的初始化流程,然后再编程实现。 ...
DirectX
12
(D
3D
12
)基础教程(二)——理解根签名、初识显存管理和加载纹理、理解
资源
屏障
目录 1、前言及本章内容提要 2、初步理解和使用根签名 3、使用WIC库加载图片 4、D
3D
12
内存管理导论——上传堆和默认堆 4.1、D
3D
12
中创建
资源
的三种方式 4.1.1、提交方式(CreateCommittedResource) 4.1.2、定位方式(CreatePlacedResource) 4.1.3、保留方式(CreateReservedResource) ...
DirectX
12
(D
3D
12
)基础教程(二十)—— 纹理数组(Texture Array)非DDS初始化操作
在本系列教程的DirectX
12
(D
3D
12
)基础教程(五)——理解和使用捆绑包,加载并使用DDS Cube Map中,第一次介绍并引入了基于 DDS 格式的CubeMap的操作和使用方法。在后续示例代码的编写过程中,逐渐发现 DDS CubeMap 的种种局限,主要是 DDS 的 CubeMap 其实很难找,并且使用它来加载 SkyBox ,会因为其相关代码的过渡封装而导致对 Texture 或 Texture Array 本身的各种操作和理解基本上是很困难的。
《DirectX
12
3D
游戏开发实战》读书笔记3:D
3D
12
初始化
《DirectX
12
3D
游戏开发实战》读书笔记3
D
3D
12
渲染技术之过滤
纹理贴图的元素应该被认为是来自连续图像的离散颜色样本,它们不应该被认为是带有区域的矩形。所以问题是:如果我们的纹理坐标(u,v)与其中一个纹素点不一致,会发生什么?这可能发生以下情况。假设播放器放大场景中的墙壁,使墙壁覆盖整个屏幕,例如,假设显示器分辨率为1024×1024,墙壁的纹理分辨率为256×256,这说明纹理放大 - 我们试图用几个纹素覆盖许多像素,在我们的例子中,每个texel点之间有...
其它游戏引擎
456
社区成员
668
社区内容
发帖
与我相关
我的任务
其它游戏引擎
其它游戏引擎
复制链接
扫一扫
分享
社区描述
其它游戏引擎
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章