freedreno: add query for dmabuf modifiers

This commit is contained in:
Fritz Koenig 2018-11-01 17:08:39 -07:00 committed by Rob Clark
parent ddbe6171e6
commit 7c4b9510d1
2 changed files with 46 additions and 0 deletions

View File

@ -39,6 +39,7 @@
#include "util/os_time.h"
#include <drm_fourcc.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
@ -654,6 +655,37 @@ fd_screen_bo_get_handle(struct pipe_screen *pscreen,
}
}
static void
fd_screen_query_dmabuf_modifiers(struct pipe_screen *pscreen,
enum pipe_format format,
int max, uint64_t *modifiers,
unsigned int *external_only,
int *count)
{
struct fd_screen *screen = fd_screen(pscreen);
int i, num = 0;
max = MIN2(max, screen->num_supported_modifiers);
if (!max) {
max = screen->num_supported_modifiers;
external_only = NULL;
modifiers = NULL;
}
for (i = 0; i < max; i++) {
if (modifiers)
modifiers[num] = screen->supported_modifiers[i];
if (external_only)
external_only[num] = 0;
num++;
}
*count = num;
}
struct fd_bo *
fd_screen_bo_from_handle(struct pipe_screen *pscreen,
struct winsys_handle *whandle)
@ -853,6 +885,17 @@ fd_screen_create(struct fd_device *dev)
pscreen->fence_finish = fd_fence_finish;
pscreen->fence_get_fd = fd_fence_get_fd;
pscreen->query_dmabuf_modifiers = fd_screen_query_dmabuf_modifiers;
if (!screen->supported_modifiers) {
static const uint64_t supported_modifiers[] = {
DRM_FORMAT_MOD_LINEAR,
};
screen->supported_modifiers = supported_modifiers;
screen->num_supported_modifiers = ARRAY_SIZE(supported_modifiers);
}
slab_create_parent(&screen->transfer_pool, sizeof(struct fd_transfer), 16);
return pscreen;

View File

@ -97,6 +97,9 @@ struct fd_screen {
bool reorder;
uint16_t rsc_seqno;
unsigned num_supported_modifiers;
const uint64_t *supported_modifiers;
};
static inline struct fd_screen *