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