2026-03-17 02:51:34 +08:00
|
|
|
#include "fixtures/D3D12TestFixture.h"
|
|
|
|
|
|
2026-03-17 03:29:39 +08:00
|
|
|
TEST_F(D3D12TestFixture, Buffer_Placeholder) {
|
2026-03-17 04:02:35 +08:00
|
|
|
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<ID3D12Resource> 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<ID3D12Resource> 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<ID3D12Resource> 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<ID3D12Resource> 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<size_t>(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);
|
2026-03-17 02:51:34 +08:00
|
|
|
}
|