Skip to content

Commit 5ce473a

Browse files
committed
Rebase
1 parent 1a36aef commit 5ce473a

9 files changed

Lines changed: 210 additions & 380 deletions

File tree

framework/rendering/render_pipeline.h

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -104,14 +104,15 @@ class RenderPipeline
104104
void set_load_store(const std::vector<LoadStoreInfoType> &load_store);
105105

106106
private:
107-
void draw_impl(vkb::core::CommandBufferCpp &command_buffer,
108-
vkb::rendering::HPPRenderTarget &render_target,
109-
vk::SubpassContents contents);
107+
void draw_impl(vkb::core::CommandBufferCpp &command_buffer, vkb::rendering::HPPRenderTarget &render_target, vk::SubpassContents contents);
110108

111109
private:
112-
size_t active_subpass_index = 0;
113-
std::vector<vk::ClearValue> clear_value{vk::ClearColorValue{0.0f, 0.0f, 0.0f, 1.0f}, vk::ClearDepthStencilValue{0.0f, ~0U}}; // Defaults for swapchain and depth attachment
114-
std::vector<vkb::common::HPPLoadStoreInfo> load_store{{vk::AttachmentLoadOp::eClear, vk::AttachmentStoreOp::eStore}, {vk::AttachmentLoadOp::eClear, vk::AttachmentStoreOp::eDontCare}}; // Defaults for swapchain and depth attachment
110+
size_t active_subpass_index = 0;
111+
std::vector<vk::ClearValue> clear_value{vk::ClearColorValue{0.0f, 0.0f, 0.0f, 1.0f},
112+
vk::ClearDepthStencilValue{0.0f, ~0U}}; // Defaults for swapchain and depth attachment
113+
std::vector<vkb::common::HPPLoadStoreInfo> load_store{
114+
{vk::AttachmentLoadOp::eClear, vk::AttachmentStoreOp::eStore},
115+
{vk::AttachmentLoadOp::eClear, vk::AttachmentStoreOp::eDontCare}}; // Defaults for swapchain and depth attachment
115116
std::vector<std::unique_ptr<vkb::rendering::SubpassCpp>> subpasses;
116117
};
117118

@@ -166,18 +167,16 @@ void RenderPipeline<bindingType>::draw(vkb::core::CommandBuffer<bindingType> &co
166167
}
167168
else
168169
{
169-
draw_impl(reinterpret_cast<vkb::core::CommandBufferCpp &>(command_buffer),
170-
reinterpret_cast<vkb::rendering::HPPRenderTarget &>(render_target),
170+
draw_impl(reinterpret_cast<vkb::core::CommandBufferCpp &>(command_buffer), reinterpret_cast<vkb::rendering::HPPRenderTarget &>(render_target),
171171
static_cast<vk::SubpassContents>(contents));
172172
}
173173

174174
active_subpass_index = 0;
175175
}
176176

177177
template <vkb::BindingType bindingType>
178-
void RenderPipeline<bindingType>::draw_impl(vkb::core::CommandBufferCpp &command_buffer,
179-
vkb::rendering::HPPRenderTarget &render_target,
180-
vk::SubpassContents contents)
178+
void RenderPipeline<bindingType>::draw_impl(vkb::core::CommandBufferCpp &command_buffer, vkb::rendering::HPPRenderTarget &render_target,
179+
vk::SubpassContents contents)
181180
{
182181
for (size_t i = 0; i < subpasses.size(); ++i)
183182
{

samples/extensions/dynamic_multisample_rasterization/dynamic_multisample_rasterization.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -240,15 +240,9 @@ void DynamicMultisampleRasterization::build_command_buffers()
240240
vkb::image_layout_transition(draw_cmd_buffers[i], depth_stencil.image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
241241
depth_range);
242242

243-
vkb::image_layout_transition(draw_cmd_buffers[i],
244-
color_attachment.image,
245-
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
246-
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
247-
0,
248-
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
249-
VK_IMAGE_LAYOUT_UNDEFINED,
250-
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
251-
range);
243+
vkb::image_layout_transition(draw_cmd_buffers[i], color_attachment.image, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
244+
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_LAYOUT_UNDEFINED,
245+
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, range);
252246

253247
vkCmdBeginRenderingKHR(draw_cmd_buffers[i], &render_info);
254248
vkCmdSetRasterizationSamplesEXT(draw_cmd_buffers[i], sample_count); // VK_EXT_extended_dynamic_state3

samples/extensions/open_gl_interop/open_gl_interop.cpp

Lines changed: 91 additions & 185 deletions
Large diffs are not rendered by default.

samples/extensions/rasterization_order_attachment_access/rasterization_order_attachment_access.cpp

Lines changed: 45 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -92,21 +92,17 @@ void RasterizationOrderAttachmentAccess::load_assets()
9292
// Creates uniform buffer for scene data and instance buffer with randomized sphere transforms/colors
9393
void RasterizationOrderAttachmentAccess::create_buffers()
9494
{
95-
scene_uniform_buffer = std::make_unique<vkb::core::BufferC>(
96-
get_device(), sizeof(SceneUniforms),
97-
VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VMA_MEMORY_USAGE_CPU_TO_GPU);
95+
scene_uniform_buffer =
96+
std::make_unique<vkb::core::BufferC>(get_device(), sizeof(SceneUniforms), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VMA_MEMORY_USAGE_CPU_TO_GPU);
9897

99-
instance_buffer = std::make_unique<vkb::core::BufferC>(
100-
get_device(), sizeof(InstanceData) * kInstanceCount,
101-
VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, VMA_MEMORY_USAGE_CPU_TO_GPU);
98+
instance_buffer = std::make_unique<vkb::core::BufferC>(get_device(), sizeof(InstanceData) * kInstanceCount, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
99+
VMA_MEMORY_USAGE_CPU_TO_GPU);
102100

103101
// Initialize instance data with random colors
104102
instances.resize(kInstanceCount);
105103
srand(42);
106104

107-
const auto random_float = []() {
108-
return static_cast<float>(rand()) / static_cast<float>(RAND_MAX);
109-
};
105+
const auto random_float = []() { return static_cast<float>(rand()) / static_cast<float>(RAND_MAX); };
110106

111107
uint32_t idx = 0;
112108
for (uint32_t z = 0; z < kInstanceLayerCount; ++z)
@@ -115,20 +111,12 @@ void RasterizationOrderAttachmentAccess::create_buffers()
115111
{
116112
for (uint32_t x = 0; x < kInstanceRowCount; ++x, ++idx)
117113
{
118-
const glm::vec3 pos = {
119-
static_cast<float>(x) - (kInstanceRowCount - 1) * 0.5f,
120-
static_cast<float>(y) - (kInstanceColumnCount - 1) * 0.5f,
121-
static_cast<float>(z) - (kInstanceLayerCount - 1) * 0.5f};
122-
123-
instances[idx].model = glm::scale(
124-
glm::translate(glm::mat4(1.0f), pos),
125-
glm::vec3(0.03f));
126-
127-
instances[idx].color = glm::vec4(
128-
random_float(),
129-
random_float(),
130-
random_float(),
131-
random_float() * 0.8f + 0.2f);
114+
const glm::vec3 pos = {static_cast<float>(x) - (kInstanceRowCount - 1) * 0.5f, static_cast<float>(y) - (kInstanceColumnCount - 1) * 0.5f,
115+
static_cast<float>(z) - (kInstanceLayerCount - 1) * 0.5f};
116+
117+
instances[idx].model = glm::scale(glm::translate(glm::mat4(1.0f), pos), glm::vec3(0.03f));
118+
119+
instances[idx].color = glm::vec4(random_float(), random_float(), random_float(), random_float() * 0.8f + 0.2f);
132120
}
133121
}
134122
}
@@ -153,7 +141,8 @@ void RasterizationOrderAttachmentAccess::create_descriptors()
153141
vkb::initializers::descriptor_set_layout_binding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 2),
154142
vkb::initializers::descriptor_set_layout_binding(VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, VK_SHADER_STAGE_FRAGMENT_BIT, 3),
155143
};
156-
const VkDescriptorSetLayoutCreateInfo layout_info = vkb::initializers::descriptor_set_layout_create_info(bindings.data(), static_cast<uint32_t>(bindings.size()));
144+
const VkDescriptorSetLayoutCreateInfo layout_info =
145+
vkb::initializers::descriptor_set_layout_create_info(bindings.data(), static_cast<uint32_t>(bindings.size()));
157146
VK_CHECK(vkCreateDescriptorSetLayout(device, &layout_info, nullptr, &descriptor_set_layout));
158147
}
159148

@@ -175,7 +164,8 @@ void RasterizationOrderAttachmentAccess::create_descriptors()
175164
vkb::initializers::descriptor_pool_size(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, set_count),
176165
vkb::initializers::descriptor_pool_size(VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, set_count),
177166
};
178-
VkDescriptorPoolCreateInfo pool_info = vkb::initializers::descriptor_pool_create_info(static_cast<uint32_t>(pool_sizes.size()), pool_sizes.data(), set_count);
167+
VkDescriptorPoolCreateInfo pool_info =
168+
vkb::initializers::descriptor_pool_create_info(static_cast<uint32_t>(pool_sizes.size()), pool_sizes.data(), set_count);
179169
VK_CHECK(vkCreateDescriptorPool(device, &pool_info, nullptr, &descriptor_pool));
180170

181171
// Allocate
@@ -222,17 +212,21 @@ void RasterizationOrderAttachmentAccess::create_pipelines()
222212
const VkFormat color_format = get_render_context().get_swapchain().get_format();
223213

224214
// Common pipeline state
225-
VkPipelineVertexInputStateCreateInfo vertex_input_state = vkb::initializers::pipeline_vertex_input_state_create_info();
226-
const VkPipelineInputAssemblyStateCreateInfo input_assembly_state = vkb::initializers::pipeline_input_assembly_state_create_info(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, 0, VK_FALSE);
227-
const VkPipelineRasterizationStateCreateInfo rasterization_state = vkb::initializers::pipeline_rasterization_state_create_info(VK_POLYGON_MODE_FILL, VK_CULL_MODE_NONE, VK_FRONT_FACE_COUNTER_CLOCKWISE, 0);
228-
const VkPipelineColorBlendAttachmentState blend_attachment = vkb::initializers::pipeline_color_blend_attachment_state(0xF, VK_FALSE);
229-
VkPipelineColorBlendStateCreateInfo color_blend_state = vkb::initializers::pipeline_color_blend_state_create_info(1, &blend_attachment);
230-
const VkPipelineMultisampleStateCreateInfo multisample_state = vkb::initializers::pipeline_multisample_state_create_info(VK_SAMPLE_COUNT_1_BIT, 0);
231-
const VkPipelineViewportStateCreateInfo viewport_state = vkb::initializers::pipeline_viewport_state_create_info(1, 1, 0);
232-
const VkPipelineDepthStencilStateCreateInfo depth_stencil_state = vkb::initializers::pipeline_depth_stencil_state_create_info(VK_FALSE, VK_FALSE, VK_COMPARE_OP_GREATER);
215+
VkPipelineVertexInputStateCreateInfo vertex_input_state = vkb::initializers::pipeline_vertex_input_state_create_info();
216+
const VkPipelineInputAssemblyStateCreateInfo input_assembly_state =
217+
vkb::initializers::pipeline_input_assembly_state_create_info(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, 0, VK_FALSE);
218+
const VkPipelineRasterizationStateCreateInfo rasterization_state =
219+
vkb::initializers::pipeline_rasterization_state_create_info(VK_POLYGON_MODE_FILL, VK_CULL_MODE_NONE, VK_FRONT_FACE_COUNTER_CLOCKWISE, 0);
220+
const VkPipelineColorBlendAttachmentState blend_attachment = vkb::initializers::pipeline_color_blend_attachment_state(0xF, VK_FALSE);
221+
VkPipelineColorBlendStateCreateInfo color_blend_state = vkb::initializers::pipeline_color_blend_state_create_info(1, &blend_attachment);
222+
const VkPipelineMultisampleStateCreateInfo multisample_state = vkb::initializers::pipeline_multisample_state_create_info(VK_SAMPLE_COUNT_1_BIT, 0);
223+
const VkPipelineViewportStateCreateInfo viewport_state = vkb::initializers::pipeline_viewport_state_create_info(1, 1, 0);
224+
const VkPipelineDepthStencilStateCreateInfo depth_stencil_state =
225+
vkb::initializers::pipeline_depth_stencil_state_create_info(VK_FALSE, VK_FALSE, VK_COMPARE_OP_GREATER);
233226

234227
const std::vector<VkDynamicState> dynamic_states = {VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR};
235-
const VkPipelineDynamicStateCreateInfo dynamic_state = vkb::initializers::pipeline_dynamic_state_create_info(dynamic_states.data(), static_cast<uint32_t>(dynamic_states.size()), 0);
228+
const VkPipelineDynamicStateCreateInfo dynamic_state =
229+
vkb::initializers::pipeline_dynamic_state_create_info(dynamic_states.data(), static_cast<uint32_t>(dynamic_states.size()), 0);
236230

237231
std::array<VkPipelineShaderStageCreateInfo, 2> shader_stages{};
238232

@@ -260,7 +254,7 @@ void RasterizationOrderAttachmentAccess::create_pipelines()
260254
VK_CHECK(vkCreateGraphicsPipelines(device, pipeline_cache, 1, &pipeline_info, nullptr, &background_pipeline));
261255

262256
// Blend pipelines (sphere geometry with local read)
263-
const VkVertexInputBindingDescription vertex_binding = vkb::initializers::vertex_input_binding_description(0, sizeof(Vertex), VK_VERTEX_INPUT_RATE_VERTEX);
257+
const VkVertexInputBindingDescription vertex_binding = vkb::initializers::vertex_input_binding_description(0, sizeof(Vertex), VK_VERTEX_INPUT_RATE_VERTEX);
264258
const VkVertexInputAttributeDescription vertex_attribute = vkb::initializers::vertex_input_attribute_description(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0);
265259

266260
vertex_input_state.vertexBindingDescriptionCount = 1;
@@ -400,12 +394,9 @@ void RasterizationOrderAttachmentAccess::build_command_buffers()
400394
}
401395

402396
// Transition: UNDEFINED -> RENDERING_LOCAL_READ_KHR (enables framebuffer fetch)
403-
vkb::image_layout_transition(
404-
draw_cmd_buffers[i], swapchain_buffers[i].image,
405-
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
406-
0, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
407-
VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ_KHR,
408-
{VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1});
397+
vkb::image_layout_transition(draw_cmd_buffers[i], swapchain_buffers[i].image, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
398+
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_LAYOUT_UNDEFINED,
399+
VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ_KHR, {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1});
409400

410401
// Set up color attachment for dynamic rendering with local read support
411402
VkRenderingAttachmentInfoKHR color_attachment = {};
@@ -457,9 +448,10 @@ void RasterizationOrderAttachmentAccess::build_command_buffers()
457448

458449
VkDependencyInfoKHR dependency_info = {};
459450
dependency_info.sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR;
460-
dependency_info.dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT; // BY_REGION makes the barrier tile-local, which is more efficient on tiled GPUs
461-
dependency_info.memoryBarrierCount = 1;
462-
dependency_info.pMemoryBarriers = &memory_barrier;
451+
dependency_info.dependencyFlags =
452+
VK_DEPENDENCY_BY_REGION_BIT; // BY_REGION makes the barrier tile-local, which is more efficient on tiled GPUs
453+
dependency_info.memoryBarrierCount = 1;
454+
dependency_info.pMemoryBarriers = &memory_barrier;
463455
vkCmdPipelineBarrier2KHR(draw_cmd_buffers[i], &dependency_info);
464456

465457
// ROAA ON: Single instanced draw. Extension guarantees fragment ordering.
@@ -497,22 +489,17 @@ void RasterizationOrderAttachmentAccess::build_command_buffers()
497489
}
498490

499491
// Transition: RENDERING_LOCAL_READ_KHR -> COLOR_ATTACHMENT_OPTIMAL (required for UI rendering)
500-
vkb::image_layout_transition(
501-
draw_cmd_buffers[i], swapchain_buffers[i].image,
502-
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
503-
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
504-
VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ_KHR, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
505-
{VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1});
492+
vkb::image_layout_transition(draw_cmd_buffers[i], swapchain_buffers[i].image, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
493+
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
494+
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ_KHR,
495+
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1});
506496

507497
draw_ui(draw_cmd_buffers[i], i);
508498

509499
// Transition: COLOR_ATTACHMENT_OPTIMAL -> PRESENT_SRC_KHR
510-
vkb::image_layout_transition(
511-
draw_cmd_buffers[i], swapchain_buffers[i].image,
512-
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
513-
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, 0,
514-
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
515-
{VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1});
500+
vkb::image_layout_transition(draw_cmd_buffers[i], swapchain_buffers[i].image, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
501+
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, 0,
502+
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1});
516503
}
517504
VK_CHECK(vkEndCommandBuffer(draw_cmd_buffers[i]));
518505
}
@@ -549,14 +536,8 @@ void RasterizationOrderAttachmentAccess::retrieve_timestamp_results()
549536

550537
// WAIT_BIT blocks until results are available. 64_BIT for full precision timestamps
551538
const VkDevice device = get_device().get_handle();
552-
vkGetQueryPoolResults(
553-
device,
554-
timestamp_query_pool,
555-
0, 2,
556-
timestamp_results.size() * sizeof(uint64_t),
557-
timestamp_results.data(),
558-
sizeof(uint64_t),
559-
VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT);
539+
vkGetQueryPoolResults(device, timestamp_query_pool, 0, 2, timestamp_results.size() * sizeof(uint64_t), timestamp_results.data(), sizeof(uint64_t),
540+
VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT);
560541

561542
// timestampPeriod is nanoseconds per tick, convert delta to milliseconds
562543
const VkPhysicalDeviceProperties &properties = get_device().get_gpu().get_properties();

samples/extensions/rasterization_order_attachment_access/rasterization_order_attachment_access.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -142,12 +142,7 @@ class RasterizationOrderAttachmentAccess : public ApiVulkanSample
142142
// Maps color attachment 0 to input_attachment_index 0 in the fragment shader
143143
static constexpr uint32_t COLOR_ATTACHMENT_INPUT_INDEX = 0;
144144
static inline const VkRenderingInputAttachmentIndexInfo INPUT_ATTACHMENT_INDEX_INFO{
145-
VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO_KHR,
146-
nullptr,
147-
1,
148-
&COLOR_ATTACHMENT_INPUT_INDEX,
149-
nullptr,
150-
nullptr};
145+
VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO_KHR, nullptr, 1, &COLOR_ATTACHMENT_INPUT_INDEX, nullptr, nullptr};
151146

152147
// ============================================================================
153148
// Performance measurement

0 commit comments

Comments
 (0)