Превышение конца виртуального адреса в CreateConstantBufferView - PullRequest
0 голосов
/ 07 августа 2020

Я слежу за кодами раздела 6 «Программирование игр с использованием DirectX12».

Но в ID3DDevice :: CreateConstantBufferView я обнаружил ошибку D3D12.

D3D12 ERROR: ID3D12Device :: CreateConstantBufferView: pDes c -> BufferLocation + SizeInBytes - 1 (0x00000000087b00ff) превышает конец диапазона виртуальных адресов ресурса (0x0DA64DA0: 'ID3D12Resource Object', диапазон виртуального процессора GPU: 0x00000000087b0000 - 0x00000000087b003b003). [STATE_CREATION ERROR # 649: CREATE_CONSTANT_BUFFER_VIEW_INVALID_RESOURCE]

А это мой код.

void BoxApp::BuildConstantBuffers()
{
    mObjectCB = std::make_unique<UploadBuffer<ObjectConstants>>(md3dDevice.Get(), 1, true);

    UINT objCBByteSize = calcConstantBufferByteSize(sizeof(ObjectConstants));

    D3D12_GPU_VIRTUAL_ADDRESS cbAddress = mObjectCB->Resource()->GetGPUVirtualAddress();

    int boxCBufIndex = 0;
    cbAddress += static_cast<UINT64>(boxCBufIndex) * static_cast<UINT64>(objCBByteSize);

    D3D12_CONSTANT_BUFFER_VIEW_DESC cbvDesc;
    cbvDesc.BufferLocation = cbAddress;
    cbvDesc.SizeInBytes = calcConstantBufferByteSize(sizeof(ObjectConstants));
    md3dDevice->CreateConstantBufferView(&cbvDesc, mCbvHeap->GetCPUDescriptorHandleForHeapStart());
}


static UINT calcConstantBufferByteSize(UINT byteSize)
{
    return (byteSize + 255) & ~255;
}

Что происходит ошибка и как ее исправить?

...