Skip to content

Commit fb4367c

Browse files
committed
hotfix
1 parent 8251f4c commit fb4367c

File tree

1 file changed

+61
-75
lines changed

1 file changed

+61
-75
lines changed

src/renderer/dx12/dx12_renderer.cpp

Lines changed: 61 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ void cg::renderer::dx12_renderer::init()
1313
{
1414
model = std::make_shared<cg::world::model>();
1515
model->load_obj(settings->model_path);
16-
1716
camera = std::make_shared<cg::world::camera>();
1817
camera->set_height(static_cast<float>(settings->height));
1918
camera->set_width(static_cast<float>(settings->width));
@@ -73,7 +72,7 @@ ComPtr<IDXGIFactory4> cg::renderer::dx12_renderer::get_dxgi_factory()
7372
UINT dxgi_factory_flags = 0;
7473
#ifdef _DEBUG
7574
ComPtr<ID3D12Debug> debug_controller;
76-
if (SUCCEEDED(D3D12GetDebugInterface(IID_PPV_ARGS(&debug_controller))))
75+
if (SUCCEEDED(IID_PPV_ARGS(&debug_controller)))
7776
{
7877
debug_controller->EnableDebugLayer();
7978
dxgi_factory_flags |= DXGI_CREATE_FACTORY_DEBUG;
@@ -105,7 +104,7 @@ void cg::renderer::dx12_renderer::create_direct_command_queue()
105104
queue_desc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT;
106105
queue_desc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;
107106
THROW_IF_FAILED(device->CreateCommandQueue(&queue_desc,
108-
IID_PPV_ARGS(&command_queue)));
107+
IID_PPV_ARGS(&command_queue)));
109108
}
110109

111110
void cg::renderer::dx12_renderer::create_swap_chain(ComPtr<IDXGIFactory4>& dxgi_factory)
@@ -126,31 +125,29 @@ void cg::renderer::dx12_renderer::create_swap_chain(ComPtr<IDXGIFactory4>& dxgi_
126125
&swap_chain_desc,
127126
nullptr,
128127
nullptr,
129-
&temp_swap_chain
130-
));
128+
&temp_swap_chain));
131129
dxgi_factory->MakeWindowAssociation(
132130
cg::utils::window::get_hwnd(),
133-
DXGI_MWA_NO_ALT_ENTER
134-
);
131+
DXGI_MWA_NO_ALT_ENTER);
135132
temp_swap_chain.As(&swap_chain);
136133
frame_index = swap_chain->GetCurrentBackBufferIndex();
137134
}
138135

139136
void cg::renderer::dx12_renderer::create_render_target_views()
140137
{
141138
rtv_heap.create_heap(device, D3D12_DESCRIPTOR_HEAP_TYPE_RTV, frame_number);
142-
for(UINT i =0; i< frame_number; i++){
139+
for (UINT i = 0; i < frame_number; i++) {
143140
THROW_IF_FAILED(swap_chain->GetBuffer(
144141
i,
145142
IID_PPV_ARGS(&render_targets[i])));
146-
device->CreateRenderTargetView(
147-
render_targets[i].Get(),
148-
nullptr,
149-
rtv_heap.get_cpu_descriptor_handle(i)
150-
);
151143
std::wstring name(L"Render target ");
152144
name += std::to_wstring(i);
153145
render_targets[i]->SetName(name.c_str());
146+
147+
device->CreateRenderTargetView(
148+
render_targets[i].Get(),
149+
nullptr,
150+
rtv_heap.get_cpu_descriptor_handle(i));
154151
}
155152
}
156153

@@ -160,7 +157,7 @@ void cg::renderer::dx12_renderer::create_depth_buffer()
160157

161158
void cg::renderer::dx12_renderer::create_command_allocators()
162159
{
163-
for (auto& command_allocator : command_allocators){
160+
for (auto& command_allocator: command_allocators) {
164161
THROW_IF_FAILED(device->CreateCommandAllocator(
165162
D3D12_COMMAND_LIST_TYPE_DIRECT,
166163
IID_PPV_ARGS(&command_allocator)));
@@ -173,8 +170,7 @@ void cg::renderer::dx12_renderer::create_command_list()
173170
0, D3D12_COMMAND_LIST_TYPE_DIRECT,
174171
command_allocators[0].Get(),
175172
pipeline_state.Get(),
176-
IID_PPV_ARGS(&command_list)
177-
));
173+
IID_PPV_ARGS(&command_list)));
178174
}
179175

180176

@@ -205,30 +201,32 @@ void cg::renderer::dx12_renderer::create_root_signature(const D3D12_STATIC_SAMPL
205201

206202
D3D12_FEATURE_DATA_ROOT_SIGNATURE rs_feature_data{};
207203
rs_feature_data.HighestVersion = D3D_ROOT_SIGNATURE_VERSION_1_1;
208-
if(FAILED(device->CheckFeatureSupport(
204+
if (FAILED(device->CheckFeatureSupport(
209205
D3D12_FEATURE_ROOT_SIGNATURE,
210206
&rs_feature_data,
211-
sizeof(rs_feature_data)))){
207+
sizeof(rs_feature_data)))) {
212208
rs_feature_data.HighestVersion = D3D_ROOT_SIGNATURE_VERSION_1_0;
213209
}
214210

215-
CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC rs_desc;
216-
rs_desc.Init_1_1(
211+
D3D12_ROOT_SIGNATURE_FLAGS rf_flags = D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT;
212+
213+
CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC rs_desccriptor;
214+
rs_desccriptor.Init_1_1(
217215
_countof(root_parameters),
218216
root_parameters,
219217
num_sampler_descriptors,
220218
sampler_descriptors,
221-
D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT
222-
);
223-
ComPtr<ID3DBlob> signature, error;
224-
225-
HRESULT result = D3DX12SerializeVersionedRootSignature(&rs_desc,
226-
rs_feature_data.HighestVersion,
227-
&signature,
228-
&error);
229-
if(FAILED(result)){
230-
OutputDebugStringA((char *) error->GetBufferPointer());
231-
THROW_IF_FAILED(result);
219+
rf_flags);
220+
ComPtr<ID3DBlob> signature;
221+
ComPtr<ID3DBlob> error;
222+
223+
HRESULT res = D3DX12SerializeVersionedRootSignature(&rs_desccriptor,
224+
rs_feature_data.HighestVersion,
225+
&signature,
226+
&error);
227+
if (FAILED(res)) {
228+
OutputDebugStringA((char*) error->GetBufferPointer());
229+
THROW_IF_FAILED(res);
232230
}
233231

234232
THROW_IF_FAILED(device->CreateRootSignature(0,
@@ -241,17 +239,18 @@ std::filesystem::path cg::renderer::dx12_renderer::get_shader_path(const std::st
241239
{
242240
WCHAR buffer[MAX_PATH];
243241
GetModuleFileName(nullptr, buffer, MAX_PATH);
244-
return std::filesystem::path(buffer).parent_path() / shader_name;
242+
auto shader_path = std::filesystem::path(buffer).parent_path() / shader_name
243+
return shader_path;
245244
}
246245

247246
ComPtr<ID3DBlob> cg::renderer::dx12_renderer::compile_shader(const std::filesystem::path& shader_path, const std::string& entrypoint, const std::string& target)
248247
{
249248
ComPtr<ID3DBlob> shader, error;
250249
UINT compile_flags = 0;
251-
#ifdef _DEBUG
250+
#ifdef _DEBUG
252251
compile_flags |= D3DCOMPILE_DEBUG | D3DCOMPILE_SKIP_OPTIMIZATION;
253-
#endif
254-
HRESULT result = D3DCompileFromFile(
252+
#endif
253+
HRESULT res = D3DCompileFromFile(
255254
shader_path.wstring().c_str(),
256255
nullptr,
257256
nullptr,
@@ -261,21 +260,21 @@ ComPtr<ID3DBlob> cg::renderer::dx12_renderer::compile_shader(const std::filesyst
261260
0,
262261
&shader,
263262
&error);
264-
if(FAILED(result)){
263+
if (FAILED(res)) {
265264
OutputDebugStringA((char*) error->GetBufferPointer());
266-
THROW_IF_FAILED(result);
265+
THROW_IF_FAILED(res);
267266
}
268267
return shader;
269268
}
270269

271270
void cg::renderer::dx12_renderer::create_pso(const std::string& shader_name)
272271
{
273-
ComPtr<ID3DBlob> vertex_shader = compile_shader(
272+
auto vertex_shader = compile_shader(
274273
get_shader_path(shader_name), "VSMain", "vs_5_0");
275-
ComPtr<ID3DBlob> pixel_shader = compile_shader(
274+
auto pixel_shader = compile_shader(
276275
get_shader_path(shader_name), "PSMain", "ps_5_0");
277276

278-
D3D12_INPUT_ELEMENT_DESC input_descriptors[] = {
277+
D3D12_INPUT_ELEMENT_DESC input_descs[] = {
279278
{"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT,
280279
0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0},
281280
{"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT,
@@ -291,7 +290,7 @@ void cg::renderer::dx12_renderer::create_pso(const std::string& shader_name)
291290
};
292291

293292
D3D12_GRAPHICS_PIPELINE_STATE_DESC pso_desc{};
294-
pso_desc.InputLayout = {input_descriptors, _countof(input_descriptors)};
293+
pso_desc.InputLayout = {input_descriptors, _countof(input_descs)};
295294
pso_desc.pRootSignature = root_signature.Get();
296295
pso_desc.VS = CD3DX12_SHADER_BYTECODE(vertex_shader.Get());
297296
pso_desc.PS = CD3DX12_SHADER_BYTECODE(pixel_shader.Get());
@@ -318,9 +317,8 @@ void cg::renderer::dx12_renderer::create_resource_on_upload_heap(ComPtr<ID3D12Re
318317
&CD3DX12_RESOURCE_DESC::Buffer(size),
319318
D3D12_RESOURCE_STATE_GENERIC_READ,
320319
nullptr,
321-
IID_PPV_ARGS(&resource)
322-
));
323-
if(!name.empty()){
320+
IID_PPV_ARGS(&resource)));
321+
if (!name.empty()) {
324322
resource->SetName(name.c_str());
325323
}
326324
}
@@ -335,8 +333,7 @@ void cg::renderer::dx12_renderer::copy_data(const void* buffer_data, UINT buffer
335333
CD3DX12_RANGE read_range(0, 0);
336334
THROW_IF_FAILED(
337335
destination_resource->Map(0, &read_range,
338-
reinterpret_cast<void **>(&buffer_data_begin))
339-
);
336+
reinterpret_cast<void**>(&buffer_data_begin)));
340337
memcpy(buffer_data_begin, buffer_data, buffer_size);
341338
destination_resource->Unmap(0, 0);
342339
}
@@ -383,19 +380,12 @@ void cg::renderer::dx12_renderer::load_assets()
383380
create_command_allocators();
384381
create_command_list();
385382

386-
cbv_srv_heap.create_heap(
387-
device,
388-
D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV,
389-
1,
390-
D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE
391-
);
392-
393-
size_t num_shapes = model->get_vertex_buffers().size();
394-
vertex_buffers.resize(num_shapes);
395-
vertex_buffer_views.resize(num_shapes);
396-
index_buffers.resize(num_shapes);
397-
index_buffer_views.resize(num_shapes);
398-
for (size_t i = 0; i < num_shapes; i++){
383+
vertex_buffers.resize(model.get_vertex_buffers().size());
384+
vertex_buffers_views.resize(model.get_vertex_buffers().size());
385+
386+
index_buffers.resize(model.get_index_buffers().size());
387+
index_buffer_views.resize(model.get_index_buffers().size());
388+
for (size_t i = 0; i < model.get_index_buffers().size(); i++) {
399389
//Vertex buffer
400390
auto vertex_buffer_data = model->get_vertex_buffers()[i];
401391
const UINT vertex_buffer_size = static_cast<UINT>(
@@ -418,8 +408,7 @@ void cg::renderer::dx12_renderer::load_assets()
418408
//Index buffer
419409
auto index_buffer_data = model->get_index_buffers()[i];
420410
const UINT index_buffer_size = static_cast<UINT>(
421-
index_buffer_data->get_size_in_bytes()
422-
);
411+
index_buffer_data->get_size_in_bytes());
423412

424413
std::wstring index_buffer_name(L"Index buffer ");
425414
index_buffer_name += std::to_wstring(i);
@@ -441,23 +430,23 @@ void cg::renderer::dx12_renderer::load_assets()
441430
// Constant buffer
442431
std::wstring const_buffer_name(L"Constant buffer");
443432
create_resource_on_upload_heap(constant_buffer,
444-
64*1024,
433+
64 * 1024,
445434
const_buffer_name);
446435
copy_data(&cb, sizeof(cb), constant_buffer);
447436
CD3DX12_RANGE read_range(0, 0);
448437
THROW_IF_FAILED(constant_buffer->Map(0, &read_range,
449438
reinterpret_cast<void**>(
450-
&constant_buffer_data_begin
451-
)));
439+
&constant_buffer_data_begin)));
452440

441+
cbv_srv_heap.create_heap(device, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, 1, D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE);
453442
create_constant_buffer_view(constant_buffer,
454443
cbv_srv_heap.get_cpu_descriptor_handle(0));
455444

456445
THROW_IF_FAILED(command_list->Close());
457446

458447
THROW_IF_FAILED(device->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&fence)));
459448
fence_event = CreateEvent(nullptr, FALSE, FALSE, nullptr);
460-
if(fence_event == nullptr)
449+
if (fence_event == nullptr)
461450
{
462451
THROW_IF_FAILED(HRESULT_FROM_WIN32(GetLastError()));
463452
}
@@ -489,35 +478,31 @@ void cg::renderer::dx12_renderer::populate_command_list()
489478
CD3DX12_RESOURCE_BARRIER::Transition(
490479
render_targets[frame_index].Get(),
491480
D3D12_RESOURCE_STATE_PRESENT,
492-
D3D12_RESOURCE_STATE_RENDER_TARGET
493-
)
494-
};
481+
D3D12_RESOURCE_STATE_RENDER_TARGET)};
495482
command_list->ResourceBarrier(_countof(begin_barriers), begin_barriers);
496483

497484
//Drawing
498485
command_list->OMSetRenderTargets(
499-
1, &rtv_heap.get_cpu_descriptor_handle(frame_index),
486+
1, &rtv_heap.get_cpu_descriptor_handle(frame_index),
500487
FALSE, nullptr);
501488
const float clear_color[] = {0.f, 0.f, 0.f, 1.f};
502489
command_list->ClearRenderTargetView(
503490
rtv_heap.get_cpu_descriptor_handle(frame_index),
504491
clear_color, 0, nullptr);
505492

506-
for(size_t s=0; s<model->get_vertex_buffers().size(); s++){
493+
for (size_t s = 0; s < model->get_vertex_buffers().size(); s++) {
507494
command_list->IASetVertexBuffers(0, 1, &vertex_buffer_views[s]);
508495
command_list->IASetIndexBuffer(&index_buffer_views[s]);
509496
command_list->DrawIndexedInstanced(
510497
static_cast<UINT>(model->get_index_buffers()[s]->get_number_of_elements()),
511-
1,0,0,0);
498+
1, 0, 0, 0);
512499
}
513500

514501
D3D12_RESOURCE_BARRIER end_barriers[] = {
515502
CD3DX12_RESOURCE_BARRIER::Transition(
516503
render_targets[frame_index].Get(),
517504
D3D12_RESOURCE_STATE_RENDER_TARGET,
518-
D3D12_RESOURCE_STATE_PRESENT
519-
)
520-
};
505+
D3D12_RESOURCE_STATE_PRESENT)};
521506
command_list->ResourceBarrier(_countof(end_barriers), end_barriers);
522507

523508
THROW_IF_FAILED(command_list->Close());
@@ -559,7 +544,8 @@ void cg::renderer::descriptor_heap::create_heap(ComPtr<ID3D12Device>& device, D3
559544
THROW_IF_FAILED(device->CreateDescriptorHeap(
560545
&heap_desc,
561546
IID_PPV_ARGS(&heap)));
562-
descriptor_size = device->GetDescriptorHandleIncrementSize(type);}
547+
descriptor_size = device->GetDescriptorHandleIncrementSize(type);
548+
}
563549

564550
D3D12_CPU_DESCRIPTOR_HANDLE cg::renderer::descriptor_heap::get_cpu_descriptor_handle(UINT index) const
565551
{

0 commit comments

Comments
 (0)