Skip to content

Commit

Permalink
Fix for VK_KHR_dynamic_rendering
Browse files Browse the repository at this point in the history
  • Loading branch information
locke-lunarg committed Nov 11, 2021
1 parent 604033c commit 5ed3cae
Show file tree
Hide file tree
Showing 4 changed files with 176 additions and 174 deletions.
11 changes: 6 additions & 5 deletions framework/encode/vulkan_state_tracker_initializers.h
Original file line number Diff line number Diff line change
Expand Up @@ -352,11 +352,12 @@ inline void InitializeGroupObjectState<VkDevice, VkPipelineCache, PipelineWrappe
}

auto render_pass_wrapper = reinterpret_cast<RenderPassWrapper*>(create_info->renderPass);
assert(render_pass_wrapper != nullptr);

wrapper->render_pass_dependency.handle_id = render_pass_wrapper->handle_id;
wrapper->render_pass_dependency.create_call_id = render_pass_wrapper->create_call_id;
wrapper->render_pass_dependency.create_parameters = render_pass_wrapper->create_parameters;
if (render_pass_wrapper)
{
wrapper->render_pass_dependency.handle_id = render_pass_wrapper->handle_id;
wrapper->render_pass_dependency.create_call_id = render_pass_wrapper->create_call_id;
wrapper->render_pass_dependency.create_parameters = render_pass_wrapper->create_parameters;
}

auto layout_wrapper = reinterpret_cast<PipelineLayoutWrapper*>(create_info->layout);
assert(layout_wrapper != nullptr);
Expand Down
26 changes: 14 additions & 12 deletions framework/encode/vulkan_state_writer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -521,20 +521,22 @@ void VulkanStateWriter::WritePipelineState(const VulkanStateTable& state_table)
graphics_pipelines.push_back(wrapper->create_parameters.get());
processed_graphics_pipelines.insert(wrapper->create_parameters.get());
}

// Check for graphics-specific creation dependencies that no longer exist.
auto render_pass_wrapper = state_table.GetRenderPassWrapper(wrapper->render_pass_dependency.handle_id);
if (render_pass_wrapper == nullptr)
if (wrapper->render_pass_dependency.create_call_id != format::ApiCallId::ApiCall_Unknown)
{
// The object no longer exists, so a temporary object must be created.
auto create_parameters = wrapper->render_pass_dependency.create_parameters.get();
const auto& inserted = temp_render_passes.insert(
std::make_pair(wrapper->render_pass_dependency.handle_id, create_parameters));

// Create a temporary object on first encounter.
if (inserted.second)
// Check for graphics-specific creation dependencies that no longer exist.
auto render_pass_wrapper = state_table.GetRenderPassWrapper(wrapper->render_pass_dependency.handle_id);
if (render_pass_wrapper == nullptr)
{
WriteFunctionCall(wrapper->render_pass_dependency.create_call_id, create_parameters);
// The object no longer exists, so a temporary object must be created.
auto create_parameters = wrapper->render_pass_dependency.create_parameters.get();
const auto& inserted = temp_render_passes.insert(
std::make_pair(wrapper->render_pass_dependency.handle_id, create_parameters));

// Create a temporary object on first encounter.
if (inserted.second)
{
WriteFunctionCall(wrapper->render_pass_dependency.create_call_id, create_parameters);
}
}
}
}
Expand Down
Loading

0 comments on commit 5ed3cae

Please sign in to comment.