mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-28 08:10:09 +01:00
asahi: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
Signed-off-by: Eric Engestrom <eric@igalia.com> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20180>
This commit is contained in:
parent
8193efec83
commit
cd152ec930
2 changed files with 19 additions and 2 deletions
|
|
@ -1782,6 +1782,12 @@ static const struct u_transfer_vtbl transfer_vtbl = {
|
|||
.get_stencil = agx_resource_get_stencil,
|
||||
};
|
||||
|
||||
static int
|
||||
agx_screen_get_fd(struct pipe_screen *pscreen)
|
||||
{
|
||||
return agx_device(pscreen)->fd;
|
||||
}
|
||||
|
||||
struct pipe_screen *
|
||||
agx_screen_create(int fd, struct renderonly *ro, struct sw_winsys *winsys)
|
||||
{
|
||||
|
|
@ -1822,6 +1828,7 @@ agx_screen_create(int fd, struct renderonly *ro, struct sw_winsys *winsys)
|
|||
}
|
||||
|
||||
screen->destroy = agx_destroy_screen;
|
||||
screen->get_screen_fd = agx_screen_get_fd;
|
||||
screen->get_name = agx_get_name;
|
||||
screen->get_vendor = agx_get_vendor;
|
||||
screen->get_device_vendor = agx_get_device_vendor;
|
||||
|
|
|
|||
|
|
@ -30,20 +30,30 @@
|
|||
#include "util/os_file.h"
|
||||
#include "util/u_math.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "util/u_screen.h"
|
||||
|
||||
#include "drm-uapi/drm.h"
|
||||
#include "renderonly/renderonly.h"
|
||||
#include "asahi_drm_public.h"
|
||||
#include "asahi/agx_public.h"
|
||||
|
||||
static struct pipe_screen *
|
||||
asahi_screen_create(int fd, const struct pipe_screen_config *config,
|
||||
struct renderonly *ro)
|
||||
{
|
||||
return agx_screen_create(fd, ro, NULL);
|
||||
}
|
||||
|
||||
struct pipe_screen *
|
||||
asahi_drm_screen_create(int fd)
|
||||
{
|
||||
return agx_screen_create(os_dupfd_cloexec(fd), NULL, NULL);
|
||||
return u_pipe_screen_lookup_or_create(os_dupfd_cloexec(fd), NULL,
|
||||
NULL, asahi_screen_create);
|
||||
}
|
||||
|
||||
struct pipe_screen *
|
||||
asahi_drm_screen_create_renderonly(struct renderonly *ro)
|
||||
{
|
||||
return agx_screen_create(os_dupfd_cloexec(ro->gpu_fd), ro, NULL);
|
||||
return u_pipe_screen_lookup_or_create(os_dupfd_cloexec(ro->gpu_fd), NULL,
|
||||
ro, asahi_screen_create);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue