#include "fixtures/D3D12TestFixture.h" TEST_F(D3D12TestFixture, Buffer_Placeholder) { ASSERT_NE(GetDevice(), nullptr); } TEST_F(D3D12TestFixture, Buffer_CreateBuffer_DefaultHeap) { const uint64_t bufferSize = 1024; D3D12_HEAP_PROPERTIES heapProps = {}; heapProps.Type = D3D12_HEAP_TYPE_DEFAULT; heapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; heapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; D3D12_RESOURCE_DESC resourceDesc = {}; resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; resourceDesc.Width = bufferSize; resourceDesc.Height = 1; resourceDesc.DepthOrArraySize = 1; resourceDesc.MipLevels = 1; resourceDesc.Format = DXGI_FORMAT_UNKNOWN; resourceDesc.SampleDesc.Count = 1; resourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; D3D12_RESOURCE_STATES initialState = D3D12_RESOURCE_STATE_COMMON; ComPtr buffer; HRESULT hr = GetDevice()->CreateCommittedResource( &heapProps, D3D12_HEAP_FLAG_NONE, &resourceDesc, initialState, nullptr, IID_PPV_ARGS(&buffer) ); ASSERT_HRESULT_SUCCEEDED(hr); ASSERT_NE(buffer.Get(), nullptr); D3D12_RESOURCE_DESC desc = buffer->GetDesc(); EXPECT_EQ(desc.Dimension, D3D12_RESOURCE_DIMENSION_BUFFER); EXPECT_EQ(desc.Width, bufferSize); } TEST_F(D3D12TestFixture, Buffer_CreateBuffer_UploadHeap) { const uint64_t bufferSize = 2048; D3D12_HEAP_PROPERTIES heapProps = {}; heapProps.Type = D3D12_HEAP_TYPE_UPLOAD; heapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; heapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; D3D12_RESOURCE_DESC resourceDesc = {}; resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; resourceDesc.Width = bufferSize; resourceDesc.Height = 1; resourceDesc.DepthOrArraySize = 1; resourceDesc.MipLevels = 1; resourceDesc.Format = DXGI_FORMAT_UNKNOWN; resourceDesc.SampleDesc.Count = 1; resourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; ComPtr buffer; HRESULT hr = GetDevice()->CreateCommittedResource( &heapProps, D3D12_HEAP_FLAG_NONE, &resourceDesc, D3D12_RESOURCE_STATE_GENERIC_READ, nullptr, IID_PPV_ARGS(&buffer) ); ASSERT_HRESULT_SUCCEEDED(hr); ASSERT_NE(buffer.Get(), nullptr); } TEST_F(D3D12TestFixture, Buffer_GetGPUVirtualAddress) { const uint64_t bufferSize = 512; D3D12_HEAP_PROPERTIES heapProps = {}; heapProps.Type = D3D12_HEAP_TYPE_DEFAULT; D3D12_RESOURCE_DESC resourceDesc = {}; resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; resourceDesc.Width = bufferSize; resourceDesc.Height = 1; resourceDesc.DepthOrArraySize = 1; resourceDesc.MipLevels = 1; resourceDesc.Format = DXGI_FORMAT_UNKNOWN; resourceDesc.SampleDesc.Count = 1; resourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; ComPtr buffer; HRESULT hr = GetDevice()->CreateCommittedResource( &heapProps, D3D12_HEAP_FLAG_NONE, &resourceDesc, D3D12_RESOURCE_STATE_COMMON, nullptr, IID_PPV_ARGS(&buffer) ); ASSERT_HRESULT_SUCCEEDED(hr); D3D12_GPU_VIRTUAL_ADDRESS gpuAddress = buffer->GetGPUVirtualAddress(); EXPECT_NE(gpuAddress, 0); } TEST_F(D3D12TestFixture, Buffer_MapUnmap) { const uint64_t bufferSize = 256; D3D12_HEAP_PROPERTIES heapProps = {}; heapProps.Type = D3D12_HEAP_TYPE_UPLOAD; D3D12_RESOURCE_DESC resourceDesc = {}; resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; resourceDesc.Width = bufferSize; resourceDesc.Height = 1; resourceDesc.DepthOrArraySize = 1; resourceDesc.MipLevels = 1; resourceDesc.Format = DXGI_FORMAT_UNKNOWN; resourceDesc.SampleDesc.Count = 1; resourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; ComPtr buffer; HRESULT hr = GetDevice()->CreateCommittedResource( &heapProps, D3D12_HEAP_FLAG_NONE, &resourceDesc, D3D12_RESOURCE_STATE_GENERIC_READ, nullptr, IID_PPV_ARGS(&buffer) ); ASSERT_HRESULT_SUCCEEDED(hr); void* mappedData = nullptr; hr = buffer->Map(0, nullptr, &mappedData); ASSERT_HRESULT_SUCCEEDED(hr); ASSERT_NE(mappedData, nullptr); memset(mappedData, 0xAB, static_cast(bufferSize)); buffer->Unmap(0, nullptr); } TEST_F(D3D12TestFixture, Buffer_AlignmentRequirements) { D3D12_CONSTANT_BUFFER_VIEW_DESC cbvDesc = {}; cbvDesc.BufferLocation = 256; cbvDesc.SizeInBytes = 256; EXPECT_GE(cbvDesc.SizeInBytes, 256); EXPECT_EQ(cbvDesc.BufferLocation % 256, 0); }