namespace Msp {
namespace GL {
+class VulkanCommandRecorder;
+
class Synchronizer
{
private:
+ struct ImageAccess
+ {
+ VkImage image = 0;
+ unsigned aspect;
+ int level = -1;
+ unsigned current_layout;
+ unsigned pending_layout;
+ };
+
struct BufferAccess
{
VkBuffer buffer = 0;
Device &device;
std::vector<BufferAccess> buffer_accesses;
+ std::vector<ImageAccess> image_accesses;
public:
Synchronizer(Device &);
- void access(VkBuffer, std::size_t, std::size_t);
+ void write_buffer(VkBuffer, std::size_t, std::size_t, bool = false);
+ void split_image_mipmap(VkImage, unsigned, unsigned);
+ void change_image_layout(VkImage, unsigned, int, unsigned, bool);
void reset();
- void barrier(VkCommandBuffer);
+ void barrier(const VulkanCommandRecorder &);
+
+private:
+ bool is_write_layout(unsigned);
};
} // namespace GL