118 OUTPUT_WRITE = 1 << 1,
140 void processing_function(
const std::shared_ptr<Buffer>& buffer)
override;
141 void on_attach(
const std::shared_ptr<Buffer>& buffer)
override;
142 void on_detach(
const std::shared_ptr<Buffer>& buffer)
override;
144 [[nodiscard]]
bool is_compatible_with(
const std::shared_ptr<Buffer>& buffer)
const override;
158 void bind_buffer(
const std::string& descriptor_name,
const std::shared_ptr<VKBuffer>& buffer);
164 void unbind_buffer(
const std::string& descriptor_name);
171 [[nodiscard]] std::shared_ptr<VKBuffer> get_bound_buffer(
const std::string& descriptor_name)
const;
181 void auto_bind_buffer(
const std::shared_ptr<VKBuffer>& buffer);
194 bool hot_reload_shader();
200 void set_shader(
const std::string& shader_path);
205 [[nodiscard]]
const std::string&
get_shader_path()
const {
return m_config.shader_path; }
215 void set_push_constant_size(
size_t size);
221 template <
typename T>
224 set_push_constant_size(
sizeof(T));
234 template <
typename T>
235 void set_push_constant_data(
const T& data);
242 void set_push_constant_data_raw(
const void* data,
size_t size);
261 void set_specialization_constant(uint32_t constant_id, uint32_t value);
266 void clear_specialization_constants();
290 void add_binding(
const std::string& descriptor_name,
const ShaderBinding& binding);
301 [[nodiscard]]
virtual BufferUsageHint get_buffer_usage_hint(
const std::string& descriptor_name)
const;
308 [[nodiscard]]
virtual bool is_in_place_operation(
const std::string& descriptor_name)
const;
315 [[nodiscard]]
bool has_binding(
const std::string& descriptor_name)
const;
323 [[nodiscard]] std::vector<std::string> get_binding_names()
const;
329 [[nodiscard]]
bool are_bindings_complete()
const;
338 [[nodiscard]]
bool is_shader_loaded()
const {
return m_shader_id != Portal::Graphics::INVALID_SHADER; }
360 [[nodiscard]]
virtual std::shared_ptr<VKBuffer>
get_output_buffer()
const {
return m_last_processed_buffer; }
368 return m_last_command_buffer != Portal::Graphics::INVALID_COMMAND_BUFFER;
382 virtual void on_before_compile(
const std::string& shader_path);
413 virtual void on_before_descriptors_create();
420 virtual void on_descriptors_created();
456 bool m_initialized {};
457 bool m_needs_pipeline_rebuild =
true;
458 bool m_needs_descriptor_rebuild =
true;
460 size_t m_auto_bind_index {};
467 virtual void update_descriptors(
const std::shared_ptr<VKBuffer>& buffer);
468 virtual void cleanup();
475 void initialize_shader();