gfxstream: guest: plumb descriptor all the way through the HostConnection
A descriptor is an int32_t number. Anything >= 0 is considered a valid descriptor. It essentially like a fd, but it will be used with kumquat testing. Reviewed-by: Aaron Ruby <aruby@blackberry.com> Acked-by: Yonggang Luo <luoyonggang@gmail.com> Acked-by: Adam Jackson <ajax@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27246>
This commit is contained in:

committed by
Marge Bot

parent
6785aae717
commit
0f7101a5dc
@@ -23,7 +23,7 @@ static VirtGpuDevice* sDevice = nullptr;
|
||||
|
||||
} // namespace
|
||||
|
||||
VirtGpuDevice* VirtGpuDevice::getInstance(enum VirtGpuCapset capset) {
|
||||
VirtGpuDevice* VirtGpuDevice::getInstance(enum VirtGpuCapset capset, int32_t descriptor) {
|
||||
// If kCapsetNone is passed, we return a device that was created with any capset.
|
||||
// Otherwise, the created device's capset must match the requested capset.
|
||||
// We could support multiple capsets with a map of devices but that case isn't needed
|
||||
@@ -34,7 +34,7 @@ VirtGpuDevice* VirtGpuDevice::getInstance(enum VirtGpuCapset capset) {
|
||||
return nullptr;
|
||||
}
|
||||
if (!sDevice) {
|
||||
sDevice = createPlatformVirtGpuDevice(capset);
|
||||
sDevice = createPlatformVirtGpuDevice(capset, descriptor);
|
||||
}
|
||||
return sDevice;
|
||||
}
|
||||
|
@@ -95,11 +95,10 @@ int FuchsiaVirtGpuDevice::execBuffer(struct VirtGpuExecBuffer& execbuffer,
|
||||
|
||||
struct VirtGpuCaps FuchsiaVirtGpuDevice::getCaps(void) { return {}; }
|
||||
|
||||
VirtGpuDevice* createPlatformVirtGpuDevice(enum VirtGpuCapset capset, int fd) {
|
||||
VirtGpuDevice* createPlatformVirtGpuDevice(enum VirtGpuCapset capset, int32_t descriptor) {
|
||||
// We don't handle the VirtioGpuPipeStream case.
|
||||
if (fd >= 0) {
|
||||
if (descriptor >= 0) {
|
||||
ALOGE("Fuchsia: fd not handled");
|
||||
abort();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@@ -141,6 +141,8 @@ struct VirtGpuCaps {
|
||||
struct composerCapset composerCapset;
|
||||
};
|
||||
|
||||
#define INVALID_DESCRIPTOR -1
|
||||
|
||||
class VirtGpuResourceMapping;
|
||||
class VirtGpuResource;
|
||||
using VirtGpuResourcePtr = std::shared_ptr<VirtGpuResource>;
|
||||
@@ -177,28 +179,29 @@ class VirtGpuResourceMapping {
|
||||
|
||||
class VirtGpuDevice {
|
||||
public:
|
||||
static VirtGpuDevice* getInstance(enum VirtGpuCapset capset = kCapsetNone);
|
||||
static void resetInstance();
|
||||
static VirtGpuDevice* getInstance(enum VirtGpuCapset capset = kCapsetNone,
|
||||
int32_t descriptor = INVALID_DESCRIPTOR);
|
||||
static void resetInstance();
|
||||
|
||||
VirtGpuDevice(enum VirtGpuCapset capset) : mCapset(capset) {}
|
||||
virtual ~VirtGpuDevice() {}
|
||||
VirtGpuDevice(enum VirtGpuCapset capset) : mCapset(capset) {}
|
||||
virtual ~VirtGpuDevice() {}
|
||||
|
||||
enum VirtGpuCapset capset() { return mCapset; }
|
||||
enum VirtGpuCapset capset() { return mCapset; }
|
||||
|
||||
virtual int64_t getDeviceHandle(void) = 0;
|
||||
virtual int64_t getDeviceHandle(void) = 0;
|
||||
|
||||
virtual struct VirtGpuCaps getCaps(void) = 0;
|
||||
virtual struct VirtGpuCaps getCaps(void) = 0;
|
||||
|
||||
virtual VirtGpuResourcePtr createBlob(const struct VirtGpuCreateBlob& blobCreate) = 0;
|
||||
virtual VirtGpuResourcePtr createResource(uint32_t width, uint32_t height, uint32_t stride,
|
||||
uint32_t size, uint32_t virglFormat, uint32_t target,
|
||||
uint32_t bind) = 0;
|
||||
virtual VirtGpuResourcePtr importBlob(const struct VirtGpuExternalHandle& handle) = 0;
|
||||
virtual VirtGpuResourcePtr createBlob(const struct VirtGpuCreateBlob& blobCreate) = 0;
|
||||
virtual VirtGpuResourcePtr createResource(uint32_t width, uint32_t height, uint32_t stride,
|
||||
uint32_t size, uint32_t virglFormat, uint32_t target,
|
||||
uint32_t bind) = 0;
|
||||
virtual VirtGpuResourcePtr importBlob(const struct VirtGpuExternalHandle& handle) = 0;
|
||||
|
||||
virtual int execBuffer(struct VirtGpuExecBuffer& execbuffer, const VirtGpuResource* blob) = 0;
|
||||
virtual int execBuffer(struct VirtGpuExecBuffer& execbuffer, const VirtGpuResource* blob) = 0;
|
||||
|
||||
private:
|
||||
enum VirtGpuCapset mCapset;
|
||||
private:
|
||||
enum VirtGpuCapset mCapset;
|
||||
};
|
||||
|
||||
VirtGpuDevice* createPlatformVirtGpuDevice(enum VirtGpuCapset capset = kCapsetNone, int fd = -1);
|
||||
|
@@ -32,7 +32,8 @@
|
||||
|
||||
static inline uint32_t align_up(uint32_t n, uint32_t a) { return ((n + a - 1) / a) * a; }
|
||||
|
||||
VirtGpuKumquatDevice::VirtGpuKumquatDevice(enum VirtGpuCapset capset, int) : VirtGpuDevice(capset) {
|
||||
VirtGpuKumquatDevice::VirtGpuKumquatDevice(enum VirtGpuCapset capset, int32_t descriptor)
|
||||
: VirtGpuDevice(capset) {
|
||||
struct VirtGpuParam params[] = {
|
||||
PARAM(VIRTGPU_KUMQUAT_PARAM_3D_FEATURES),
|
||||
PARAM(VIRTGPU_KUMQUAT_PARAM_CAPSET_QUERY_FIX),
|
||||
@@ -46,6 +47,7 @@ VirtGpuKumquatDevice::VirtGpuKumquatDevice(enum VirtGpuCapset capset, int) : Vir
|
||||
PARAM(VIRTGPU_KUMQUAT_PARAM_CREATE_GUEST_HANDLE),
|
||||
};
|
||||
|
||||
(void)descriptor;
|
||||
int ret;
|
||||
struct drm_kumquat_get_caps get_caps = {0};
|
||||
struct drm_kumquat_context_init init = {0};
|
||||
@@ -240,6 +242,6 @@ int VirtGpuKumquatDevice::execBuffer(struct VirtGpuExecBuffer& execbuffer,
|
||||
return 0;
|
||||
}
|
||||
|
||||
VirtGpuDevice* createPlatformVirtGpuDevice(enum VirtGpuCapset capset, int fd) {
|
||||
return new VirtGpuKumquatDevice(capset, fd);
|
||||
VirtGpuDevice* createPlatformVirtGpuDevice(enum VirtGpuCapset capset, int32_t descriptor) {
|
||||
return new VirtGpuKumquatDevice(capset, descriptor);
|
||||
}
|
||||
|
@@ -39,7 +39,8 @@
|
||||
|
||||
static inline uint32_t align_up(uint32_t n, uint32_t a) { return ((n + a - 1) / a) * a; }
|
||||
|
||||
LinuxVirtGpuDevice::LinuxVirtGpuDevice(enum VirtGpuCapset capset, int fd) : VirtGpuDevice(capset) {
|
||||
LinuxVirtGpuDevice::LinuxVirtGpuDevice(enum VirtGpuCapset capset, int32_t descriptor)
|
||||
: VirtGpuDevice(capset) {
|
||||
struct VirtGpuParam params[] = {
|
||||
PARAM(VIRTGPU_PARAM_3D_FEATURES), PARAM(VIRTGPU_PARAM_CAPSET_QUERY_FIX),
|
||||
PARAM(VIRTGPU_PARAM_RESOURCE_BLOB), PARAM(VIRTGPU_PARAM_HOST_VISIBLE),
|
||||
@@ -61,14 +62,14 @@ LinuxVirtGpuDevice::LinuxVirtGpuDevice(enum VirtGpuCapset capset, int fd) : Virt
|
||||
processName = getprogname();
|
||||
#endif
|
||||
|
||||
if (fd < 0) {
|
||||
if (descriptor < 0) {
|
||||
mDeviceHandle = static_cast<int64_t>(drmOpenRender(128));
|
||||
if (mDeviceHandle < 0) {
|
||||
ALOGE("Failed to open rendernode: %s", strerror(errno));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
mDeviceHandle = dup(fd);
|
||||
mDeviceHandle = dup(descriptor);
|
||||
if (mDeviceHandle < 0) {
|
||||
ALOGE("Failed to dup rendernode: %s", strerror(errno));
|
||||
return;
|
||||
@@ -257,6 +258,6 @@ int LinuxVirtGpuDevice::execBuffer(struct VirtGpuExecBuffer& execbuffer,
|
||||
return 0;
|
||||
}
|
||||
|
||||
VirtGpuDevice* createPlatformVirtGpuDevice(enum VirtGpuCapset capset, int fd) {
|
||||
return new LinuxVirtGpuDevice(capset, fd);
|
||||
VirtGpuDevice* createPlatformVirtGpuDevice(enum VirtGpuCapset capset, int32_t descriptor) {
|
||||
return new LinuxVirtGpuDevice(capset, descriptor);
|
||||
}
|
||||
|
Reference in New Issue
Block a user