12 uint64_t headerBytes, uint32_t slotCount,
13 std::wstring_view name) {
20 return std::unexpected(
"読み戻しのリングのバッファを作れない");
22 ring.
m_buffer->SetName(std::wstring(name).c_str());
23 ring.
m_zeros->SetName((std::wstring(name) + L
".zeros").c_str());
24 for (uint32_t slot = 0; slot < slotCount; ++slot) {
27 return std::unexpected(
"読み戻しのリングの読み戻しのバッファを作れない");
29 readback->SetName(std::format(L
"{}.readback{}", name, slot).c_str());
37 const D3D12_RESOURCE_BARRIER barrier =
Transition(
m_buffer.Get(), D3D12_RESOURCE_STATE_COMMON,
38 D3D12_RESOURCE_STATE_UNORDERED_ACCESS);
39 list->ResourceBarrier(1, &barrier);
43 uint64_t copyBytes)
const {
44 ID3D12Resource* buffer =
m_buffer.Get();
45 const D3D12_RESOURCE_BARRIER toCopySource =
Transition(buffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS,
46 D3D12_RESOURCE_STATE_COPY_SOURCE);
47 list->ResourceBarrier(1, &toCopySource);
48 list->CopyBufferRegion(
m_readbacks[slot].Get(), 0, buffer, 0, std::min(copyBytes,
m_bytes));
50 const D3D12_RESOURCE_BARRIER toCopyDest =
Transition(buffer, D3D12_RESOURCE_STATE_COPY_SOURCE,
51 D3D12_RESOURCE_STATE_COPY_DEST);
52 list->ResourceBarrier(1, &toCopyDest);
56 const D3D12_RESOURCE_BARRIER toCommon =
Transition(buffer, D3D12_RESOURCE_STATE_COPY_DEST,
57 D3D12_RESOURCE_STATE_COMMON);
58 list->ResourceBarrier(1, &toCommon);
static std::expected< ReadbackRing, std::string > Create(ID3D12Device *device, uint64_t bytes, uint64_t headerBytes, uint32_t slotCount, std::wstring_view name)