Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions examples/DynamicBuffers/include/app.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,11 @@ class App
void init_window ();
void init_vulkan ();

static void draw_frame (void* app_raw_ptr);
static VkBool32 on_validation_callback(VkDebugReportFlagsEXT message_flags,
VkDebugReportObjectTypeEXT object_type,
const char* layer_prefix,
const char* message,
void* user_arg);
void draw_frame ();
VkBool32 on_validation_callback(VkDebugReportFlagsEXT message_flags,
VkDebugReportObjectTypeEXT object_type,
const char* layer_prefix,
const char* message);

void get_buffer_memory_offsets(uint32_t n_sine_pair,
uint32_t* out_opt_sine1SB_offset_ptr,
Expand Down
53 changes: 28 additions & 25 deletions examples/DynamicBuffers/src/app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -248,39 +248,38 @@ void App::deinit()
m_instance_ptr.reset();
}

void App::draw_frame(void* app_raw_ptr)
void App::draw_frame()
{
App* app_ptr = static_cast<App*>(app_raw_ptr);
std::shared_ptr<Anvil::Semaphore> curr_frame_signal_semaphore_ptr;
std::shared_ptr<Anvil::Semaphore> curr_frame_wait_semaphore_ptr;
std::shared_ptr<Anvil::SGPUDevice> device_locked_ptr = app_ptr->m_device_ptr.lock();
std::shared_ptr<Anvil::SGPUDevice> device_locked_ptr = m_device_ptr.lock();
static uint32_t n_frames_rendered = 0;
uint32_t n_swapchain_image;
std::shared_ptr<Anvil::Semaphore> present_wait_semaphore_ptr;
const VkPipelineStageFlags wait_stage_mask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;

/* Determine the signal + wait semaphores to use for drawing this frame */
app_ptr->m_n_last_semaphore_used = (app_ptr->m_n_last_semaphore_used + 1) % app_ptr->m_n_swapchain_images;
m_n_last_semaphore_used = (m_n_last_semaphore_used + 1) % m_n_swapchain_images;

curr_frame_signal_semaphore_ptr = app_ptr->m_frame_signal_semaphores[app_ptr->m_n_last_semaphore_used];
curr_frame_wait_semaphore_ptr = app_ptr->m_frame_wait_semaphores [app_ptr->m_n_last_semaphore_used];
curr_frame_signal_semaphore_ptr = m_frame_signal_semaphores[m_n_last_semaphore_used];
curr_frame_wait_semaphore_ptr = m_frame_wait_semaphores [m_n_last_semaphore_used];

present_wait_semaphore_ptr = curr_frame_signal_semaphore_ptr;

/* Determine the semaphore which the swapchain image */
n_swapchain_image = app_ptr->m_swapchain_ptr->acquire_image(curr_frame_wait_semaphore_ptr,
true); /* in_should_block */
n_swapchain_image = m_swapchain_ptr->acquire_image(curr_frame_wait_semaphore_ptr,
true); /* in_should_block */

/* Update time value, used by the generator compute shader */
const uint64_t time_msec = app_ptr->m_time.get_time_in_msec();
const uint64_t time_msec = m_time.get_time_in_msec();
const float t = time_msec / 1000.0f;

app_ptr->m_sine_props_data_buffer_ptr->write(app_ptr->m_sine_props_data_buffer_size_per_swapchain_image * n_swapchain_image, /* start_offset */
sizeof(float), /* size */
&t);
m_sine_props_data_buffer_ptr->write(m_sine_props_data_buffer_size_per_swapchain_image * n_swapchain_image, /* start_offset */
sizeof(float), /* size */
&t);

/* Submit jobs to relevant queues and make sure they are correctly synchronized */
device_locked_ptr->get_universal_queue(0)->submit_command_buffer_with_signal_wait_semaphores(app_ptr->m_command_buffers[n_swapchain_image],
device_locked_ptr->get_universal_queue(0)->submit_command_buffer_with_signal_wait_semaphores(m_command_buffers[n_swapchain_image],
1, /* n_semaphores_to_signal */
&curr_frame_signal_semaphore_ptr,
1, /* n_semaphores_to_wait_on */
Expand All @@ -289,18 +288,18 @@ void App::draw_frame(void* app_raw_ptr)
false, /* should_block */
nullptr);

app_ptr->m_present_queue_ptr->present(app_ptr->m_swapchain_ptr,
n_swapchain_image,
1, /* n_wait_semaphores */
&present_wait_semaphore_ptr);
m_present_queue_ptr->present(m_swapchain_ptr,
n_swapchain_image,
1, /* n_wait_semaphores */
&present_wait_semaphore_ptr);

++n_frames_rendered;

#if defined(ENABLE_OFFSCREEN_RENDERING)
{
if (n_frames_rendered >= N_FRAMES_TO_RENDER)
{
app_ptr->m_window_ptr->close();
m_window_ptr->close();
}
}
#endif
Expand Down Expand Up @@ -1160,8 +1159,9 @@ void App::init_window()
APP_NAME,
1280,
720,
draw_frame,
this);
true, /* in_closable */
std::bind(&App::draw_frame,
this) );
}

void App::init_vulkan()
Expand All @@ -1170,11 +1170,15 @@ void App::init_vulkan()
m_instance_ptr = Anvil::Instance::create(APP_NAME, /* app_name */
APP_NAME, /* engine_name */
#ifdef ENABLE_VALIDATION
on_validation_callback,
std::bind(&App::on_validation_callback,
this,
std::placeholders::_1,
std::placeholders::_2,
std::placeholders::_3,
std::placeholders::_4) );
#else
nullptr,
nullptr);
#endif
nullptr); /* validation_proc_user_arg */

m_physical_device_ptr = m_instance_ptr->get_physical_device(0);

Expand All @@ -1189,8 +1193,7 @@ void App::init_vulkan()
VkBool32 App::on_validation_callback(VkDebugReportFlagsEXT message_flags,
VkDebugReportObjectTypeEXT object_type,
const char* layer_prefix,
const char* message,
void* user_arg)
const char* message)
{
if ((message_flags & VK_DEBUG_REPORT_ERROR_BIT_EXT) != 0)
{
Expand Down
11 changes: 5 additions & 6 deletions examples/MultiViewport/include/app.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,11 @@ class App
void get_scissor_viewport_info(VkRect2D* out_scissors,
VkViewport* out_viewports);

static void draw_frame (void* app_raw_ptr);
static VkBool32 on_validation_callback(VkDebugReportFlagsEXT message_flags,
VkDebugReportObjectTypeEXT object_type,
const char* layer_prefix,
const char* message,
void* user_arg);
void draw_frame ();
VkBool32 on_validation_callback(VkDebugReportFlagsEXT message_flags,
VkDebugReportObjectTypeEXT object_type,
const char* layer_prefix,
const char* message);

/* Private variables */
std::weak_ptr<Anvil::SGPUDevice> m_device_ptr;
Expand Down
38 changes: 21 additions & 17 deletions examples/MultiViewport/src/app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -220,28 +220,27 @@ void App::deinit()
m_window_ptr.reset();
}

void App::draw_frame(void* app_raw_ptr)
void App::draw_frame()
{
App* app_ptr = static_cast<App*>(app_raw_ptr);
std::shared_ptr<Anvil::Semaphore> curr_frame_signal_semaphore_ptr;
std::shared_ptr<Anvil::Semaphore> curr_frame_wait_semaphore_ptr;
std::shared_ptr<Anvil::SGPUDevice> device_locked_ptr = app_ptr->m_device_ptr.lock();
std::shared_ptr<Anvil::SGPUDevice> device_locked_ptr = m_device_ptr.lock();
static uint32_t n_frames_rendered = 0;
uint32_t n_swapchain_image;
std::shared_ptr<Anvil::Queue> present_queue_ptr = device_locked_ptr->get_universal_queue(0);
const VkPipelineStageFlags wait_stage_mask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;

/* Determine the signal + wait semaphores to use for drawing this frame */
app_ptr->m_n_last_semaphore_used = (app_ptr->m_n_last_semaphore_used + 1) % app_ptr->m_n_swapchain_images;
m_n_last_semaphore_used = (m_n_last_semaphore_used + 1) % m_n_swapchain_images;

curr_frame_signal_semaphore_ptr = app_ptr->m_frame_signal_semaphores[app_ptr->m_n_last_semaphore_used];
curr_frame_wait_semaphore_ptr = app_ptr->m_frame_wait_semaphores [app_ptr->m_n_last_semaphore_used];
curr_frame_signal_semaphore_ptr = m_frame_signal_semaphores[m_n_last_semaphore_used];
curr_frame_wait_semaphore_ptr = m_frame_wait_semaphores [m_n_last_semaphore_used];

/* Determine the semaphore which the swapchain image */
n_swapchain_image = app_ptr->m_swapchain_ptr->acquire_image(curr_frame_wait_semaphore_ptr);
n_swapchain_image = m_swapchain_ptr->acquire_image(curr_frame_wait_semaphore_ptr);

/* Submit work chunk and present */
device_locked_ptr->get_universal_queue(0)->submit_command_buffer_with_signal_wait_semaphores(app_ptr->m_command_buffers[n_swapchain_image],
device_locked_ptr->get_universal_queue(0)->submit_command_buffer_with_signal_wait_semaphores(m_command_buffers[n_swapchain_image],
1, /* n_semaphores_to_signal */
&curr_frame_signal_semaphore_ptr,
1, /* n_semaphores_to_wait_on */
Expand All @@ -250,7 +249,7 @@ void App::draw_frame(void* app_raw_ptr)
false, /* should_block */
nullptr); /* opt_fence_ptr */

present_queue_ptr->present(app_ptr->m_swapchain_ptr,
present_queue_ptr->present(m_swapchain_ptr,
n_swapchain_image,
1, /* n_wait_semaphores */
&curr_frame_signal_semaphore_ptr);
Expand All @@ -263,7 +262,7 @@ void App::draw_frame(void* app_raw_ptr)
}
else
{
app_ptr->m_window_ptr->close();
m_window_ptr->close();
}
}
#endif
Expand Down Expand Up @@ -884,8 +883,10 @@ void App::init_window()
APP_NAME,
1280,
720,
draw_frame,
this);
true, /* in_closable */
std::bind(&App::draw_frame,
this)
);
}

void App::init_vulkan()
Expand All @@ -894,11 +895,15 @@ void App::init_vulkan()
m_instance_ptr = Anvil::Instance::create(APP_NAME, /* app_name */
APP_NAME, /* engine_name */
#ifdef ENABLE_VALIDATION
on_validation_callback,
std::bind(&App::on_validation_callback,
this,
std::placeholders::_1,
std::placeholders::_2,
std::placeholders::_3,
std::placeholders::_4) );
#else
nullptr,
nullptr);
#endif
nullptr); /* validation_proc_user_arg */

m_physical_device_ptr = m_instance_ptr->get_physical_device(0);

Expand All @@ -913,8 +918,7 @@ void App::init_vulkan()
VkBool32 App::on_validation_callback(VkDebugReportFlagsEXT message_flags,
VkDebugReportObjectTypeEXT object_type,
const char* layer_prefix,
const char* message,
void* user_arg)
const char* message)
{
if ((message_flags & VK_DEBUG_REPORT_ERROR_BIT_EXT) != 0)
{
Expand Down
11 changes: 5 additions & 6 deletions examples/OcclusionQuery/include/app.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,11 @@ class App
void init_window ();
void init_vulkan ();

static void draw_frame (void* app_raw_ptr);
static VkBool32 on_validation_callback(VkDebugReportFlagsEXT message_flags,
VkDebugReportObjectTypeEXT object_type,
const char* layer_prefix,
const char* message,
void* user_arg);
void draw_frame ();
VkBool32 on_validation_callback(VkDebugReportFlagsEXT message_flags,
VkDebugReportObjectTypeEXT object_type,
const char* layer_prefix,
const char* message);

/* Private variables */
std::weak_ptr<Anvil::SGPUDevice> m_device_ptr;
Expand Down
Loading