Skip to content

Commit b713be7

Browse files
committed
disp/vulkan: Consolidate class public and private sections
1 parent 68168c5 commit b713be7

File tree

4 files changed

+175
-188
lines changed

4 files changed

+175
-188
lines changed

src/video_display/vulkan/vulkan_context.hpp

Lines changed: 57 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -113,37 +113,27 @@ struct SwapchainImage {
113113
};
114114

115115
class VulkanContext {
116-
vk::Instance instance;
117-
#if VK_HEADER_VERSION >= 301
118-
std::unique_ptr<vk::detail::DispatchLoaderDynamic> dynamic_dispatcher{};
119-
#else
120-
std::unique_ptr<vk::DispatchLoaderDynamic> dynamic_dispatcher{};
121-
#endif
122-
vk::DebugUtilsMessengerEXT messenger;
123-
uint32_t vulkan_version{};
116+
public:
117+
VulkanContext() = default;
124118

125-
vk::PhysicalDevice gpu;
126-
vk::Device device;
127-
bool yCbCr_supported = false;
119+
void init(vulkan_display::VulkanInstance&& instance, vk::SurfaceKHR surface,
120+
vulkan_display::WindowParameters window_parameters, uint32_t gpu_index, vk::PresentModeKHR preferred_mode);
128121

129-
uint32_t queue_family_index = no_queue_index_found;
130-
vk::Queue queue;
122+
void destroy();
131123

132-
vk::SurfaceKHR surface;
133-
vk::SwapchainKHR swapchain;
134-
struct {
135-
vk::SurfaceCapabilitiesKHR capabilities;
136-
vk::SurfaceFormatKHR format;
137-
vk::PresentModeKHR mode = vk::PresentModeKHR::eFifo;
138-
vk::Extent2D image_size;
139-
} swapchain_attributes;
124+
void create_framebuffers(vk::RenderPass render_pass);
140125

141-
std::vector<SwapchainImage> swapchain_images{};
142-
vk::PresentModeKHR preferred_present_mode{};
126+
uint32_t acquire_next_swapchain_image(vk::Semaphore acquire_semaphore);
143127

144-
vulkan_display::WindowParameters window_parameters;
145-
bool swapchain_was_suboptimal = false;
146-
public:
128+
vk::Framebuffer get_framebuffer(uint32_t framebuffer_id) {
129+
return swapchain_images[framebuffer_id].framebuffer;
130+
}
131+
132+
vulkan_display::WindowParameters get_window_parameters() const {
133+
return window_parameters;
134+
}
135+
136+
void recreate_swapchain(vulkan_display::WindowParameters parameters, vk::RenderPass render_pass);
147137
//getters
148138
uint32_t get_vulkan_version() const { return vulkan_version; }
149139
vk::PhysicalDevice get_gpu() { return gpu; }
@@ -155,6 +145,7 @@ class VulkanContext {
155145
vk::Format get_swapchain_image_format() { return swapchain_attributes.format.format; };
156146
size_t get_swapchain_image_count() { return swapchain_images.size(); }
157147
vk::Extent2D get_render_area_size() { return swapchain_attributes.image_size; }
148+
158149
private:
159150
void create_logical_device();
160151

@@ -174,27 +165,36 @@ class VulkanContext {
174165
}
175166
}
176167

177-
public:
178-
VulkanContext() = default;
179-
180-
void init(vulkan_display::VulkanInstance&& instance, vk::SurfaceKHR surface,
181-
vulkan_display::WindowParameters window_parameters, uint32_t gpu_index, vk::PresentModeKHR preferred_mode);
182-
183-
void destroy();
168+
vk::Instance instance;
169+
#if VK_HEADER_VERSION >= 301
170+
std::unique_ptr<vk::detail::DispatchLoaderDynamic> dynamic_dispatcher{};
171+
#else
172+
std::unique_ptr<vk::DispatchLoaderDynamic> dynamic_dispatcher{};
173+
#endif
174+
vk::DebugUtilsMessengerEXT messenger;
175+
uint32_t vulkan_version{};
184176

185-
void create_framebuffers(vk::RenderPass render_pass);
177+
vk::PhysicalDevice gpu;
178+
vk::Device device;
179+
bool yCbCr_supported = false;
186180

187-
uint32_t acquire_next_swapchain_image(vk::Semaphore acquire_semaphore);
181+
uint32_t queue_family_index = no_queue_index_found;
182+
vk::Queue queue;
188183

189-
vk::Framebuffer get_framebuffer(uint32_t framebuffer_id) {
190-
return swapchain_images[framebuffer_id].framebuffer;
191-
}
184+
vk::SurfaceKHR surface;
185+
vk::SwapchainKHR swapchain;
186+
struct {
187+
vk::SurfaceCapabilitiesKHR capabilities;
188+
vk::SurfaceFormatKHR format;
189+
vk::PresentModeKHR mode = vk::PresentModeKHR::eFifo;
190+
vk::Extent2D image_size;
191+
} swapchain_attributes;
192192

193-
vulkan_display::WindowParameters get_window_parameters() const {
194-
return window_parameters;
195-
}
193+
std::vector<SwapchainImage> swapchain_images{};
194+
vk::PresentModeKHR preferred_present_mode{};
196195

197-
void recreate_swapchain(vulkan_display::WindowParameters parameters, vk::RenderPass render_pass);
196+
vulkan_display::WindowParameters window_parameters;
197+
bool swapchain_was_suboptimal = false;
198198
};
199199

200200
}//namespace vulkan_display_detail ----------------------------------------------------------------
@@ -205,19 +205,6 @@ namespace vulkan_display {
205205
namespace detail = vulkan_display_detail;
206206

207207
class VulkanInstance {
208-
vk::Instance instance{};
209-
#if VK_HEADER_VERSION >= 301
210-
std::unique_ptr<vk::detail::DispatchLoaderDynamic> dynamic_dispatcher = nullptr;
211-
#else
212-
std::unique_ptr<vk::DispatchLoaderDynamic> dynamic_dispatcher = nullptr;
213-
#endif
214-
vk::DebugUtilsMessengerEXT messenger{};
215-
uint32_t vulkan_version = VK_API_VERSION_1_1;
216-
217-
void init_validation_layers_error_messenger();
218-
219-
friend void vulkan_display_detail::VulkanContext::init(VulkanInstance&&,
220-
vk::SurfaceKHR, vulkan_display::WindowParameters, uint32_t, vk::PresentModeKHR);
221208
public:
222209
VulkanInstance() = default;
223210
VulkanInstance(const VulkanInstance& other) = delete;
@@ -248,6 +235,21 @@ class VulkanInstance {
248235
}
249236

250237
void destroy();
238+
239+
private:
240+
vk::Instance instance{};
241+
#if VK_HEADER_VERSION >= 301
242+
std::unique_ptr<vk::detail::DispatchLoaderDynamic> dynamic_dispatcher = nullptr;
243+
#else
244+
std::unique_ptr<vk::DispatchLoaderDynamic> dynamic_dispatcher = nullptr;
245+
#endif
246+
vk::DebugUtilsMessengerEXT messenger{};
247+
uint32_t vulkan_version = VK_API_VERSION_1_1;
248+
249+
void init_validation_layers_error_messenger();
250+
251+
friend void vulkan_display_detail::VulkanContext::init(VulkanInstance&&,
252+
vk::SurfaceKHR, vulkan_display::WindowParameters, uint32_t, vk::PresentModeKHR);
251253
};
252254

253255
}

src/video_display/vulkan/vulkan_display.hpp

Lines changed: 54 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -83,53 +83,6 @@ class WindowChangedCallback {
8383
};
8484

8585
class VulkanDisplay {
86-
std::string path_to_shaders;
87-
WindowChangedCallback* window = nullptr;
88-
detail::VulkanContext context;
89-
90-
vk::Device device;
91-
std::mutex device_mutex{};
92-
93-
bool format_conversion_enabled = false;
94-
detail::ConversionPipeline conversion_pipeline;
95-
96-
detail::RenderPipeline render_pipeline;
97-
98-
vk::DescriptorPool descriptor_pool;
99-
vk::CommandPool command_pool;
100-
101-
std::array<detail::PerFrameResources, 3> frame_resources;
102-
std::vector<detail::PerFrameResources*> free_frame_resources;
103-
104-
ImageDescription current_image_description;
105-
106-
using TransferImageImpl = detail::TransferImageImpl;
107-
std::deque<TransferImageImpl> transfer_images{};
108-
109-
/// available_img_queue - producer is the render thread, consumer is the provided thread
110-
detail::ConcurrentQueue<TransferImageImpl*> available_img_queue{};
111-
/// filled_img_queue - producer is the provider thread, consumer is the render thread
112-
detail::ConcurrentQueue<TransferImageImpl*, detail::filled_img_max_count> filled_img_queue{};
113-
/// local to provider thread
114-
std::vector<TransferImageImpl*> available_images;
115-
116-
struct RenderedImage{
117-
TransferImageImpl* image;
118-
detail::PerFrameResources* gpu_commands;
119-
};
120-
std::queue<RenderedImage> rendered_images;
121-
122-
bool destroyed = false;
123-
private:
124-
void bind_transfer_image(TransferImageImpl& image, detail::PerFrameResources& resources);
125-
//void create_transfer_image(transfer_image*& result, image_description description);
126-
[[nodiscard]] TransferImageImpl& acquire_transfer_image();
127-
128-
void record_graphics_commands(detail::PerFrameResources& commands, TransferImageImpl& transfer_image, uint32_t swapchain_image_id);
129-
130-
void reconfigure(const TransferImageImpl& transfer_image);
131-
132-
void destroy_format_dependent_resources();
13386
public:
13487
/// TERMINOLOGY:
13588
/// render thread - thread which renders queued images on the screen
@@ -152,9 +105,12 @@ class VulkanDisplay {
152105
}
153106
}
154107

155-
void init(VulkanInstance&& instance, vk::SurfaceKHR surface, uint32_t transfer_image_count,
156-
WindowChangedCallback& window, uint32_t gpu_index = no_gpu_selected,
157-
std::string path_to_shaders = "./shaders", bool vsync = true, bool tearing_permitted = false);
108+
void init(VulkanInstance&& instance, vk::SurfaceKHR surface,
109+
uint32_t transfer_image_count,
110+
WindowChangedCallback& window,
111+
uint32_t gpu_index = no_gpu_selected,
112+
std::string path_to_shaders = "./shaders",
113+
bool vsync = true, bool tearing_permitted = false);
158114

159115
void destroy();
160116

@@ -163,34 +119,26 @@ class VulkanDisplay {
163119

164120
/** Thread-safe to call from provider thread.*/
165121
TransferImage acquire_image(ImageDescription description);
166-
167122
/** Thread-safe to call from provider thread.
168123
**
169124
** @return true if image was discarded
170125
*/
171126
bool queue_image(TransferImage img, bool discardable);
172-
173127
/** Thread-safe to call from provider thread.*/
174128
void copy_and_queue_image(unsigned char* frame, ImageDescription description);
175-
176129
/** Thread-safe to call from provider thread.*/
177130
void discard_image(TransferImage image) {
178131
auto* ptr = image.get_transfer_image();
179132
assert(ptr);
180133
available_images.push_back(ptr);
181134
}
182-
183-
184-
185135
/** Thread-safe to call from render thread.
186136
**
187137
** @return true if image was displayed
188138
*/
189139
bool display_queued_image();
190-
191140
/** Thread-safe*/
192141
uint32_t get_vulkan_version() const { return context.get_vulkan_version(); }
193-
194142
/** Thread-safe*/
195143
bool is_yCbCr_supported() const { return context.is_yCbCr_supported(); }
196144

@@ -199,12 +147,58 @@ class VulkanDisplay {
199147
* Thread-safe.
200148
*/
201149
void window_parameters_changed(WindowParameters new_parameters);
202-
203-
204150
/** Thread-safe */
205151
void window_parameters_changed() {
206152
window_parameters_changed(window->get_window_parameters());
207153
}
154+
155+
private:
156+
using TransferImageImpl = detail::TransferImageImpl;
157+
void bind_transfer_image(TransferImageImpl& image,
158+
detail::PerFrameResources& resources);
159+
//void create_transfer_image(transfer_image*& result, image_description description);
160+
[[nodiscard]] TransferImageImpl& acquire_transfer_image();
161+
void record_graphics_commands(detail::PerFrameResources& commands,
162+
TransferImageImpl& transfer_image, uint32_t swapchain_image_id);
163+
void reconfigure(const TransferImageImpl& transfer_image);
164+
void destroy_format_dependent_resources();
165+
166+
std::string path_to_shaders;
167+
WindowChangedCallback* window = nullptr;
168+
detail::VulkanContext context;
169+
170+
vk::Device device;
171+
std::mutex device_mutex{};
172+
173+
bool format_conversion_enabled = false;
174+
detail::ConversionPipeline conversion_pipeline;
175+
176+
detail::RenderPipeline render_pipeline;
177+
178+
vk::DescriptorPool descriptor_pool;
179+
vk::CommandPool command_pool;
180+
181+
std::array<detail::PerFrameResources, 3> frame_resources;
182+
std::vector<detail::PerFrameResources*> free_frame_resources;
183+
184+
ImageDescription current_image_description;
185+
186+
std::deque<TransferImageImpl> transfer_images{};
187+
188+
/// available_img_queue - producer is the render thread, consumer is the provided thread
189+
detail::ConcurrentQueue<TransferImageImpl*> available_img_queue{};
190+
/// filled_img_queue - producer is the provider thread, consumer is the render thread
191+
detail::ConcurrentQueue<TransferImageImpl*, detail::filled_img_max_count> filled_img_queue{};
192+
/// local to provider thread
193+
std::vector<TransferImageImpl*> available_images;
194+
195+
struct RenderedImage{
196+
TransferImageImpl* image;
197+
detail::PerFrameResources* gpu_commands;
198+
};
199+
std::queue<RenderedImage> rendered_images;
200+
201+
bool destroyed = false;
208202
};
209203

210204
} //vulkan_display

0 commit comments

Comments
 (0)