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