Driver.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. /*
  2. * Copyright (c) 2022, Stephan Unverwerth <s.unverwerth@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Error.h>
  8. #include <AK/NonnullOwnPtr.h>
  9. #include <AK/NonnullRefPtr.h>
  10. #include <AK/RefCounted.h>
  11. #include <AK/StringView.h>
  12. #include <AK/Weakable.h>
  13. #include <LibGPU/Device.h>
  14. #include <LibGfx/Size.h>
  15. namespace GPU {
  16. class Driver final
  17. : public RefCounted<Driver>
  18. , public Weakable<Driver> {
  19. public:
  20. static ErrorOr<NonnullRefPtr<Driver>> try_create(StringView driver_name);
  21. ~Driver();
  22. ErrorOr<NonnullOwnPtr<Device>> try_create_device(Gfx::IntSize size);
  23. private:
  24. Driver(void* dlopen_result, serenity_gpu_create_device_t device_creation_function)
  25. : m_dlopen_result { dlopen_result }
  26. , m_serenity_gpu_create_device { device_creation_function }
  27. {
  28. VERIFY(dlopen_result);
  29. VERIFY(device_creation_function);
  30. }
  31. void* const m_dlopen_result { nullptr };
  32. serenity_gpu_create_device_t m_serenity_gpu_create_device { nullptr };
  33. };
  34. }