104 OUTPUT_WRITE = 1 << 1,
126 void processing_function(
const std::shared_ptr<Buffer>& buffer)
override;
127 void on_attach(
const std::shared_ptr<Buffer>& buffer)
override;
128 void on_detach(
const std::shared_ptr<Buffer>& buffer)
override;
130 [[nodiscard]]
bool is_compatible_with(
const std::shared_ptr<Buffer>& buffer)
const override;
144 void bind_buffer(
const std::string& descriptor_name,
const std::shared_ptr<VKBuffer>& buffer);
150 void unbind_buffer(
const std::string& descriptor_name);
157 [[nodiscard]] std::shared_ptr<VKBuffer> get_bound_buffer(
const std::string& descriptor_name)
const;
167 void auto_bind_buffer(
const std::shared_ptr<VKBuffer>& buffer);
180 bool hot_reload_shader();
186 void set_shader(
const std::string& shader_path);
191 [[nodiscard]]
const std::string&
get_shader_path()
const {
return m_config.shader_path; }
201 void set_push_constant_size(
size_t size);
207 template <
typename T>
210 set_push_constant_size(
sizeof(T));
220 template <
typename T>
221 void set_push_constant_data(
const T& data);
228 void set_push_constant_data_raw(
const void* data,
size_t size);
247 void set_specialization_constant(uint32_t constant_id, uint32_t value);
252 void clear_specialization_constants();
276 void add_binding(
const std::string& descriptor_name,
const ShaderBinding& binding);
287 [[nodiscard]]
virtual BufferUsageHint get_buffer_usage_hint(
const std::string& descriptor_name)
const;
294 [[nodiscard]]
virtual bool is_in_place_operation(
const std::string& descriptor_name)
const;
301 [[nodiscard]]
bool has_binding(
const std::string& descriptor_name)
const;
309 [[nodiscard]] std::vector<std::string> get_binding_names()
const;
315 [[nodiscard]]
bool are_bindings_complete()
const;
324 [[nodiscard]]
bool is_shader_loaded()
const {
return m_shader_id != Portal::Graphics::INVALID_SHADER; }
346 [[nodiscard]]
virtual std::shared_ptr<VKBuffer>
get_output_buffer()
const {
return m_last_processed_buffer; }
354 return m_last_command_buffer != Portal::Graphics::INVALID_COMMAND_BUFFER;
368 virtual void on_before_compile(
const std::string& shader_path);
399 virtual void on_before_descriptors_create();
406 virtual void on_descriptors_created();
442 bool m_initialized {};
443 bool m_needs_pipeline_rebuild =
true;
444 bool m_needs_descriptor_rebuild =
true;
446 size_t m_auto_bind_index {};
453 virtual void update_descriptors(
const std::shared_ptr<VKBuffer>& buffer);
454 virtual void cleanup();
461 void initialize_shader();