xref: /aosp_15_r20/external/mesa3d/src/gfxstream/guest/platform/fuchsia/FuchsiaVirtGpu.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright 2023 Google LLC
3  * SPDX-License-Identifier: MIT
4  */
5 
6 #pragma once
7 
8 #include <lib/magma/magma.h>
9 
10 #include "VirtGpu.h"
11 
12 class FuchsiaVirtGpuResource : public std::enable_shared_from_this<FuchsiaVirtGpuResource>,
13                                public VirtGpuResource {
14    public:
15     FuchsiaVirtGpuResource(int64_t deviceHandle, uint32_t blobHandle, uint32_t resourceHandle,
16                            uint64_t size);
17     ~FuchsiaVirtGpuResource();
18 
19     uint32_t getResourceHandle() const override;
20     uint32_t getBlobHandle() const override;
21     uint64_t getSize() const override;
22     int wait() override;
23 
24     int exportBlob(struct VirtGpuExternalHandle& handle) override;
25     int transferFromHost(uint32_t offset, uint32_t size) override;
26     int transferToHost(uint32_t offset, uint32_t size) override;
27 
28     VirtGpuResourceMappingPtr createMapping(void) override;
29 };
30 
31 class FuchsiaVirtGpuResourceMapping : public VirtGpuResourceMapping {
32    public:
33     FuchsiaVirtGpuResourceMapping(VirtGpuResourcePtr blob, uint8_t* ptr, uint64_t size);
34     ~FuchsiaVirtGpuResourceMapping(void);
35 
36     uint8_t* asRawPtr(void) override;
37 };
38 
39 class FuchsiaVirtGpuDevice : public VirtGpuDevice {
40    public:
41     FuchsiaVirtGpuDevice(enum VirtGpuCapset capset, magma_device_t device);
42     ~FuchsiaVirtGpuDevice();
43 
44     int64_t getDeviceHandle(void) override;
45 
46     struct VirtGpuCaps getCaps(void) override;
47 
48     VirtGpuResourcePtr createBlob(const struct VirtGpuCreateBlob& blobCreate) override;
49     VirtGpuResourcePtr createResource(uint32_t width, uint32_t height, uint32_t stride,
50                                       uint32_t size, uint32_t virglFormat, uint32_t target,
51                                       uint32_t bind) override;
52     VirtGpuResourcePtr importBlob(const struct VirtGpuExternalHandle& handle) override;
53 
54     int execBuffer(struct VirtGpuExecBuffer& execbuffer, const VirtGpuResource* blob) override;
55 
56    private:
57     magma_device_t device_;
58     struct VirtGpuCaps mCaps;
59 };
60