broadcom/simulator: Add support for asahi based systems

Dumb buffers do not work with the asahi kernel driver. So use asahi ioctl to create
proper buffers.

Signed-off-by: Christian Gmeiner <cgmeiner@igalia.com>
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31169>
This commit is contained in:
Christian Gmeiner 2024-09-13 19:19:30 +02:00 committed by Marge Bot
parent 514df444eb
commit b11296bd3e

View file

@ -61,6 +61,7 @@
#include "util/u_math.h"
#include <xf86drm.h>
#include "asahi/lib/unstable_asahi_drm.h"
#include "drm-uapi/amdgpu_drm.h"
#include "drm-uapi/i915_drm.h"
#include "drm-uapi/v3d_drm.h"
@ -102,6 +103,7 @@ static struct v3d_simulator_state {
enum gem_type {
GEM_I915,
GEM_AMDGPU,
GEM_ASAHI,
GEM_DUMB
};
@ -277,6 +279,16 @@ v3d_create_simulator_bo_for_gem(int fd, int handle, unsigned size)
sim_bo->mmap_offset = map.out.addr_ptr;
break;
}
case GEM_ASAHI:
{
struct drm_asahi_gem_mmap_offset gem_mmap_offset = {
.handle = handle
};
ret = drmIoctl(fd, DRM_IOCTL_ASAHI_GEM_MMAP_OFFSET, &gem_mmap_offset);
sim_bo->mmap_offset = gem_mmap_offset.offset;
break;
}
default:
{
struct drm_mode_map_dumb map = {
@ -564,6 +576,17 @@ v3d_simulator_create_bo_ioctl(int fd, struct drm_v3d_create_bo *args)
args->handle = create.out.handle;
break;
}
case GEM_ASAHI:
{
struct drm_asahi_gem_create create = {
.size = args->size,
};
ret = drmIoctl(fd, DRM_IOCTL_ASAHI_GEM_CREATE, &create);
args->handle = create.handle;
break;
}
default:
{
struct drm_mode_create_dumb create = {
@ -1180,6 +1203,8 @@ v3d_simulator_init(int fd)
sim_file->gem_type = GEM_I915;
else if (version && strncmp(version->name, "amdgpu", version->name_len) == 0)
sim_file->gem_type = GEM_AMDGPU;
else if (version && strncmp(version->name, "asahi", version->name_len) == 0)
sim_file->gem_type = GEM_ASAHI;
else
sim_file->gem_type = GEM_DUMB;
drmFreeVersion(version);