Serenity Operating System
at master 42 lines 1.0 kB view raw
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}