Skip to content
This repository was archived by the owner on Nov 1, 2020. It is now read-only.

Feature headless #384

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
16 changes: 5 additions & 11 deletions src/d3d12/d3d12_renderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ namespace wr
SetName(m_compute_queue, L"Default D3D12 Compute Command Queue");
SetName(m_copy_queue, L"Default D3D12 Copy Command Queue");

if (window.has_value())
if (window.has_value() && window.value()->HasPhysicalWindow())
{
m_render_window = d3d12::CreateRenderWindow(m_device, window.value()->GetWindowHandle(), m_direct_queue, d3d12::settings::num_back_buffers);
}
Expand Down Expand Up @@ -159,7 +159,7 @@ namespace wr
m_raytracing_offset_sb_pool = CreateStructuredBufferPool(rt_offset_align_size);

// Begin Recording
auto frame_idx = m_render_window.has_value() ? m_render_window.value()->m_frame_idx : 0;
auto frame_idx = GetFrameIdx();
d3d12::Begin(m_direct_cmd_list, frame_idx);

// Stage fullscreen quad
Expand Down Expand Up @@ -304,6 +304,8 @@ namespace wr
// Optional CPU-visible copy of the render target pixel data
const auto cpu_output_texture = frame_graph.GetOutputTexture();

++frame_counter;

// Optional CPU-visible copy of the render target pixel and/or depth data
return frame_graph.GetOutputTexture();
}
Expand Down Expand Up @@ -997,13 +999,6 @@ namespace wr
{
d3d12::Begin(m_direct_cmd_list, frame_idx);

if (clear_frame_buffer)
{
CD3DX12_CPU_DESCRIPTOR_HANDLE rtv_descriptor(m_render_window.value()->m_rtv_descriptor_heap->GetCPUDescriptorHandleForHeapStart());

rtv_descriptor.Offset(frame_idx, m_render_window.value()->m_rtv_descriptor_increment_size);
}

for (int i = 0; i < m_structured_buffer_pools.size(); ++i)
{
m_structured_buffer_pools[i]->UpdateBuffers(m_direct_cmd_list, frame_idx);
Expand Down Expand Up @@ -1285,8 +1280,7 @@ namespace wr
}
else
{
LOGW("Called `D3D12RenderSystem::GetFrameIdx` without a window!");
return 0;
return frame_counter % d3d12::settings::num_back_buffers;
}
}

Expand Down
1 change: 1 addition & 0 deletions src/d3d12/d3d12_renderer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,7 @@ namespace wr
MaterialHandle m_last_material = { nullptr, 0 };

bool m_skybox_changed = false;
std::uint32_t frame_counter = 0;

};

Expand Down
3 changes: 1 addition & 2 deletions src/render_tasks/d3d12_cubemap_convolution.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -138,11 +138,10 @@ namespace wr

if (radiance->m_is_staged)
{
if (n_render_system.m_render_window.has_value())
{
auto cmd_list = fg.GetCommandList<d3d12::CommandList>(handle);
const auto viewport = d3d12::CreateViewport(static_cast<int>(irradiance->m_width), static_cast<int>(irradiance->m_height));
const auto frame_idx = n_render_system.GetRenderWindow()->m_frame_idx;
const auto frame_idx = n_render_system.GetFrameIdx();

d3d12::BindViewport(cmd_list, viewport);
d3d12::BindPipeline(cmd_list, data.in_pipeline);
Expand Down
1 change: 0 additions & 1 deletion src/render_tasks/d3d12_deferred_composition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,6 @@ namespace wr
}
}

if (n_render_system.m_render_window.has_value())
{
const auto viewport = n_render_system.m_viewport;
const auto frame_idx = n_render_system.GetFrameIdx();
Expand Down
3 changes: 1 addition & 2 deletions src/render_tasks/d3d12_deferred_main.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,9 @@ namespace wr
auto& data = fg.GetData<DeferredMainTaskData>(handle);
auto cmd_list = fg.GetCommandList<d3d12::CommandList>(handle);

if (n_render_system.m_render_window.has_value())
{
const auto viewport = n_render_system.m_viewport;
const auto frame_idx = n_render_system.GetRenderWindow()->m_frame_idx;
const auto frame_idx = n_render_system.GetFrameIdx();

d3d12::BindViewport(cmd_list, viewport);
d3d12::BindPipeline(cmd_list, data.in_pipeline);
Expand Down
3 changes: 1 addition & 2 deletions src/render_tasks/d3d12_equirect_to_cubemap.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -209,11 +209,10 @@ namespace wr
d3d12::TextureResource* equirect_text = static_cast<d3d12::TextureResource*>(data.in_equirect.m_pool->GetTextureResource(data.in_equirect));
d3d12::TextureResource* cubemap_text = static_cast<d3d12::TextureResource*>(data.out_cubemap.m_pool->GetTextureResource(data.out_cubemap));

if (n_render_system.m_render_window.has_value())
{
auto cmd_list = fg.GetCommandList<d3d12::CommandList>(handle);
const auto viewport = d3d12::CreateViewport(static_cast<int>(cubemap_text->m_width), static_cast<int>(cubemap_text->m_height));
const auto frame_idx = n_render_system.GetRenderWindow()->m_frame_idx;
const auto frame_idx = n_render_system.GetFrameIdx();

d3d12::BindViewport(cmd_list, viewport);
d3d12::BindPipeline(cmd_list, data.in_pipeline);
Expand Down
3 changes: 1 addition & 2 deletions src/render_tasks/d3d12_imgui_render_task.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ namespace wr
{
auto& n_render_system = static_cast<D3D12RenderSystem&>(rs);

if (!n_render_system.m_window.has_value())
if (!n_render_system.m_window.has_value() || !n_render_system.m_window.value()->HasPhysicalWindow())
{
LOGC("Tried using imgui without a window!");
}
Expand Down Expand Up @@ -91,7 +91,6 @@ namespace wr
auto cmd_list = fg.GetCommandList<d3d12::CommandList>(handle);

// Temp rendering
if (n_render_system.m_render_window.has_value())
{
auto frame_idx = n_render_system.GetFrameIdx();

Expand Down
14 changes: 6 additions & 8 deletions src/render_tasks/d3d12_path_tracer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@ namespace wr
d3d12::AccelerationStructure out_tlas = {};

// Shader tables
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_raygen_shader_table = { nullptr, nullptr, nullptr };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_miss_shader_table = { nullptr, nullptr, nullptr };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_hitgroup_shader_table = { nullptr, nullptr, nullptr };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_raygen_shader_table = { };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_miss_shader_table = { };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_hitgroup_shader_table = { };

// Pipeline objects
d3d12::StateObject* out_state_object = nullptr;
Expand Down Expand Up @@ -195,10 +195,9 @@ namespace wr
auto& rt_registry = RTPipelineRegistry::Get();
data.out_state_object = static_cast<d3d12::StateObject*>(rt_registry.Find(state_objects::path_tracer_state_object));

// Create Shader Tables
CreateShaderTables(device, data, 0);
CreateShaderTables(device, data, 1);
CreateShaderTables(device, data, 2);
// Create Shader Tables
for (int i = 0; i < d3d12::settings::num_back_buffers; ++i)
CreateShaderTables(device, data, i);
}

}
Expand Down Expand Up @@ -246,7 +245,6 @@ namespace wr
// Wait for AS to be built
d3d12::UAVBarrierAS(cmd_list, as_build_data.out_tlas, frame_idx);

if (n_render_system.m_render_window.has_value())
{
d3d12::BindRaytracingPipeline(cmd_list, data.out_state_object, d3d12::GetRaytracingType(device) == RaytracingType::FALLBACK);

Expand Down
18 changes: 8 additions & 10 deletions src/render_tasks/d3d12_raytracing_task.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#pragma once

#include "../d3d12/d3d12_renderer.hpp"
#include "../d3d12/d3d12_functions.hpp"
Expand All @@ -38,9 +38,9 @@ namespace wr
{
d3d12::AccelerationStructure out_tlas;

std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_raygen_shader_table = { nullptr, nullptr, nullptr };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_miss_shader_table = { nullptr, nullptr, nullptr };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_hitgroup_shader_table = { nullptr, nullptr, nullptr };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_raygen_shader_table = { };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_miss_shader_table = { };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_hitgroup_shader_table = { };
d3d12::StateObject* out_state_object = nullptr;
d3d12::RootSignature* out_root_signature = nullptr;
D3D12ConstantBufferHandle* out_cb_camera_handle = nullptr;
Expand Down Expand Up @@ -151,15 +151,13 @@ namespace wr

data.tlas_requires_init = true;

CreateShaderTables(device, data, 0);
CreateShaderTables(device, data, 1);
CreateShaderTables(device, data, 2);
for(int i = 0; i < d3d12::settings::num_back_buffers; ++i)
CreateShaderTables(device, data, i);
}

for (auto frame_idx = 0; frame_idx < 1; frame_idx++)
{
d3d12::DescHeapCPUHandle desc_handle = data.out_uav_from_rtv.GetDescriptorHandle();
d3d12::CreateUAVFromSpecificRTV(n_render_target, desc_handle, frame_idx, n_render_target->m_create_info.m_rtv_formats[frame_idx]);
d3d12::CreateUAVFromSpecificRTV(n_render_target, desc_handle, 0, n_render_target->m_create_info.m_rtv_formats[0]);
}
}

Expand All @@ -184,7 +182,6 @@ namespace wr
d3d12::UAVBarrierAS(cmd_list, as_build_data.out_tlas, frame_idx);
}

if (n_render_system.m_render_window.has_value())
{

d3d12::BindRaytracingPipeline(cmd_list, data.out_state_object, d3d12::GetRaytracingType(device) == RaytracingType::FALLBACK);
Expand Down Expand Up @@ -334,6 +331,7 @@ namespace wr
//#ifdef _DEBUG
CreateShaderTables(device, data, frame_idx);
//#endif

d3d12::DispatchRays(cmd_list,
data.out_hitgroup_shader_table[frame_idx],
data.out_miss_shader_table[frame_idx],
Expand Down
6 changes: 3 additions & 3 deletions src/render_tasks/d3d12_rt_hybrid_helpers.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@ namespace wr
d3d12::AccelerationStructure out_tlas = {};

// Shader tables
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_raygen_shader_table = { nullptr, nullptr, nullptr };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_miss_shader_table = { nullptr, nullptr, nullptr };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_hitgroup_shader_table = { nullptr, nullptr, nullptr };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_raygen_shader_table = { };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_miss_shader_table = { };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> out_hitgroup_shader_table = { };


// Pipeline objects
Expand Down
1 change: 0 additions & 1 deletion src/render_tasks/d3d12_rt_reflection_task.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,6 @@ namespace wr
d3d12::UAVBarrierAS(cmd_list, as_build_data.out_tlas, frame_idx);
}

if (n_render_system.m_render_window.has_value())
{
d3d12::BindRaytracingPipeline(cmd_list, data.base_data.out_state_object, d3d12::GetRaytracingType(device) == RaytracingType::FALLBACK);

Expand Down
1 change: 0 additions & 1 deletion src/render_tasks/d3d12_rt_shadow_task.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,6 @@ namespace wr
d3d12::UAVBarrierAS(cmd_list, as_build_data.out_tlas, frame_idx);
}

if (n_render_system.m_render_window.has_value())
{
d3d12::BindRaytracingPipeline(cmd_list, data.base_data.out_state_object, d3d12::GetRaytracingType(device) == RaytracingType::FALLBACK);

Expand Down
13 changes: 5 additions & 8 deletions src/render_tasks/d3d12_rtao_task.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ namespace wr
d3d12::AccelerationStructure out_tlas = {};

// Shader tables
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> in_raygen_shader_table = { nullptr, nullptr, nullptr };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> in_miss_shader_table = { nullptr, nullptr, nullptr };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> in_hitgroup_shader_table = { nullptr, nullptr, nullptr };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> in_raygen_shader_table = { };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> in_miss_shader_table = { };
std::array<d3d12::ShaderTable*, d3d12::settings::num_back_buffers> in_hitgroup_shader_table = { };

// Pipeline objects
d3d12::StateObject* in_state_object;
Expand All @@ -66,7 +66,6 @@ namespace wr
DescriptorAllocation in_depthbuffer;

bool tlas_requires_init = false;

};

namespace internal
Expand Down Expand Up @@ -165,9 +164,8 @@ namespace wr
data.in_root_signature = static_cast<d3d12::RootSignature*>(rs_registry.Find(root_signatures::rt_ao_global));

// Create Shader Tables
CreateShaderTables(device, data, 0);
CreateShaderTables(device, data, 1);
CreateShaderTables(device, data, 2);
for (int i = 0; i < d3d12::settings::num_back_buffers; ++i)
CreateShaderTables(device, data, i);
}
}

Expand All @@ -186,7 +184,6 @@ namespace wr
fg.WaitForPredecessorTask<CubemapConvolutionTaskData>();
float scalar = 1.0f;

if (n_render_system.m_render_window.has_value())
{

d3d12::BindRaytracingPipeline(cmd_list, data.in_state_object, false);
Expand Down
1 change: 0 additions & 1 deletion src/render_tasks/d3d12_shadow_denoiser_task.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -571,7 +571,6 @@ namespace wr
data.m_constant_buffer_pool->Update(data.m_denoiser_settings_buffer[i], sizeof(temp::ShadowDenoiserSettings_CBData), 0, n_render_system.GetFrameIdx(), (uint8_t*)& data.m_denoiser_settings);
}

if (n_render_system.m_render_window.has_value())
{
const auto viewport = n_render_system.m_viewport;
const auto frame_idx = n_render_system.GetFrameIdx();
Expand Down
Loading