gallium: replace DRM_CONF_SHARE_FD with PIPE_CAP_DMABUF
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
e3841368f3
commit
8ae50e6004
|
@ -7,20 +7,9 @@
|
||||||
#include "state_tracker/drm_driver.h"
|
#include "state_tracker/drm_driver.h"
|
||||||
#include "util/xmlpool.h"
|
#include "util/xmlpool.h"
|
||||||
|
|
||||||
static const struct drm_conf_ret share_fd_ret = {
|
|
||||||
.type = DRM_CONF_BOOL,
|
|
||||||
.val.val_bool = true,
|
|
||||||
};
|
|
||||||
|
|
||||||
const struct drm_conf_ret *
|
const struct drm_conf_ret *
|
||||||
pipe_default_configuration_query(enum drm_conf conf)
|
pipe_default_configuration_query(enum drm_conf conf)
|
||||||
{
|
{
|
||||||
switch (conf) {
|
|
||||||
case DRM_CONF_SHARE_FD:
|
|
||||||
return &share_fd_ret;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -355,6 +355,13 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
|
||||||
case PIPE_CAP_MAX_FRAMES_IN_FLIGHT:
|
case PIPE_CAP_MAX_FRAMES_IN_FLIGHT:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case PIPE_CAP_DMABUF:
|
||||||
|
#ifdef PIPE_OS_LINUX
|
||||||
|
return 1;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
unreachable("bad PIPE_CAP_*");
|
unreachable("bad PIPE_CAP_*");
|
||||||
}
|
}
|
||||||
|
|
|
@ -519,6 +519,8 @@ The integer capabilities:
|
||||||
* ``PIPE_CAP_MAX_FRAMES_IN_FLIGHT``: Maximum number of frames that state
|
* ``PIPE_CAP_MAX_FRAMES_IN_FLIGHT``: Maximum number of frames that state
|
||||||
trackers should allow to be in flight before throttling pipe_context
|
trackers should allow to be in flight before throttling pipe_context
|
||||||
execution. 0 = throttling is disabled.
|
execution. 0 = throttling is disabled.
|
||||||
|
* ``PIPE_CAP_DMABUF``: Whether Linux DMABUF handles are supported by
|
||||||
|
resource_from_handle and resource_get_handle.
|
||||||
|
|
||||||
.. _pipe_capf:
|
.. _pipe_capf:
|
||||||
|
|
||||||
|
|
|
@ -881,6 +881,7 @@ enum pipe_cap
|
||||||
PIPE_CAP_TGSI_SKIP_SHRINK_IO_ARRAYS,
|
PIPE_CAP_TGSI_SKIP_SHRINK_IO_ARRAYS,
|
||||||
PIPE_CAP_IMAGE_LOAD_FORMATTED,
|
PIPE_CAP_IMAGE_LOAD_FORMATTED,
|
||||||
PIPE_CAP_MAX_FRAMES_IN_FLIGHT,
|
PIPE_CAP_MAX_FRAMES_IN_FLIGHT,
|
||||||
|
PIPE_CAP_DMABUF,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -15,8 +15,6 @@ struct pipe_resource;
|
||||||
* Configuration queries.
|
* Configuration queries.
|
||||||
*/
|
*/
|
||||||
enum drm_conf {
|
enum drm_conf {
|
||||||
/* Can this driver, running on this kernel, import and export dma-buf fds? */
|
|
||||||
DRM_CONF_SHARE_FD, /* DRM_CONF_BOOL. */
|
|
||||||
/* XML string describing the available config options. */
|
/* XML string describing the available config options. */
|
||||||
DRM_CONF_XML_OPTIONS, /* DRM_CONF_POINTER */
|
DRM_CONF_XML_OPTIONS, /* DRM_CONF_POINTER */
|
||||||
DRM_CONF_MAX
|
DRM_CONF_MAX
|
||||||
|
@ -26,8 +24,6 @@ enum drm_conf {
|
||||||
* Type of configuration answer
|
* Type of configuration answer
|
||||||
*/
|
*/
|
||||||
enum drm_conf_type {
|
enum drm_conf_type {
|
||||||
DRM_CONF_BOOL,
|
|
||||||
DRM_CONF_FLOAT,
|
|
||||||
DRM_CONF_POINTER
|
DRM_CONF_POINTER
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -37,8 +33,6 @@ enum drm_conf_type {
|
||||||
struct drm_conf_ret {
|
struct drm_conf_ret {
|
||||||
enum drm_conf_type type;
|
enum drm_conf_type type;
|
||||||
union {
|
union {
|
||||||
bool val_bool;
|
|
||||||
float val_float;
|
|
||||||
void *val_pointer;
|
void *val_pointer;
|
||||||
} val;
|
} val;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1908,7 +1908,6 @@ dri2_init_screen(__DRIscreen * sPriv)
|
||||||
const __DRIconfig **configs;
|
const __DRIconfig **configs;
|
||||||
struct dri_screen *screen;
|
struct dri_screen *screen;
|
||||||
struct pipe_screen *pscreen = NULL;
|
struct pipe_screen *pscreen = NULL;
|
||||||
const struct drm_conf_ret *dmabuf_ret;
|
|
||||||
|
|
||||||
screen = CALLOC_STRUCT(dri_screen);
|
screen = CALLOC_STRUCT(dri_screen);
|
||||||
if (!screen)
|
if (!screen)
|
||||||
|
@ -1932,13 +1931,11 @@ dri2_init_screen(__DRIscreen * sPriv)
|
||||||
screen->default_throttle_frames =
|
screen->default_throttle_frames =
|
||||||
pscreen->get_param(pscreen, PIPE_CAP_MAX_FRAMES_IN_FLIGHT);
|
pscreen->get_param(pscreen, PIPE_CAP_MAX_FRAMES_IN_FLIGHT);
|
||||||
|
|
||||||
dmabuf_ret = pipe_loader_configuration(screen->dev, DRM_CONF_SHARE_FD);
|
|
||||||
|
|
||||||
if (pscreen->resource_create_with_modifiers)
|
if (pscreen->resource_create_with_modifiers)
|
||||||
dri2ImageExtension.createImageWithModifiers =
|
dri2ImageExtension.createImageWithModifiers =
|
||||||
dri2_create_image_with_modifiers;
|
dri2_create_image_with_modifiers;
|
||||||
|
|
||||||
if (dmabuf_ret && dmabuf_ret->val.val_bool) {
|
if (pscreen->get_param(pscreen, PIPE_CAP_DMABUF)) {
|
||||||
uint64_t cap;
|
uint64_t cap;
|
||||||
|
|
||||||
if (drmGetCap(sPriv->fd, DRM_CAP_PRIME, &cap) == 0 &&
|
if (drmGetCap(sPriv->fd, DRM_CAP_PRIME, &cap) == 0 &&
|
||||||
|
|
|
@ -205,7 +205,6 @@ drm_create_adapter( int fd,
|
||||||
struct d3dadapter9drm_context *ctx = CALLOC_STRUCT(d3dadapter9drm_context);
|
struct d3dadapter9drm_context *ctx = CALLOC_STRUCT(d3dadapter9drm_context);
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
bool different_device;
|
bool different_device;
|
||||||
const struct drm_conf_ret *dmabuf_ret = NULL;
|
|
||||||
driOptionCache defaultInitOptions;
|
driOptionCache defaultInitOptions;
|
||||||
driOptionCache userInitOptions;
|
driOptionCache userInitOptions;
|
||||||
int throttling_value_user = -2;
|
int throttling_value_user = -2;
|
||||||
|
@ -235,8 +234,7 @@ drm_create_adapter( int fd,
|
||||||
return D3DERR_DRIVERINTERNALERROR;
|
return D3DERR_DRIVERINTERNALERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
dmabuf_ret = pipe_loader_configuration(ctx->dev, DRM_CONF_SHARE_FD);
|
if (!ctx->base.hal->get_param(ctx->base.hal, PIPE_CAP_DMABUF)) {
|
||||||
if (!dmabuf_ret || !dmabuf_ret->val.val_bool) {
|
|
||||||
ERR("The driver is not capable of dma-buf sharing."
|
ERR("The driver is not capable of dma-buf sharing."
|
||||||
"Abandon to load nine state tracker\n");
|
"Abandon to load nine state tracker\n");
|
||||||
drm_destroy(&ctx->base);
|
drm_destroy(&ctx->base);
|
||||||
|
|
|
@ -23,19 +23,8 @@ create_screen(int fd, const struct pipe_screen_config *config)
|
||||||
return screen;
|
return screen;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct drm_conf_ret share_fd_ret = {
|
|
||||||
.type = DRM_CONF_BOOL,
|
|
||||||
.val.val_bool = true,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
|
static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
|
||||||
{
|
{
|
||||||
switch (conf) {
|
|
||||||
case DRM_CONF_SHARE_FD:
|
|
||||||
return &share_fd_ret;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,19 +17,8 @@ create_screen(int fd, const struct pipe_screen_config *config)
|
||||||
return screen;
|
return screen;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct drm_conf_ret share_fd_ret = {
|
|
||||||
.type = DRM_CONF_BOOL,
|
|
||||||
.val.val_bool = true,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
|
static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
|
||||||
{
|
{
|
||||||
switch (conf) {
|
|
||||||
case DRM_CONF_SHARE_FD:
|
|
||||||
return &share_fd_ret;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,19 +17,8 @@ create_screen(int fd, const struct pipe_screen_config *config)
|
||||||
return screen;
|
return screen;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct drm_conf_ret share_fd_ret = {
|
|
||||||
.type = DRM_CONF_BOOL,
|
|
||||||
.val.val_bool = true,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
|
static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
|
||||||
{
|
{
|
||||||
switch (conf) {
|
|
||||||
case DRM_CONF_SHARE_FD:
|
|
||||||
return &share_fd_ret;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,19 +13,8 @@ create_screen(int fd, const struct pipe_screen_config *config)
|
||||||
return sws ? debug_screen_wrap(sws->screen) : NULL;
|
return sws ? debug_screen_wrap(sws->screen) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct drm_conf_ret share_fd_ret = {
|
|
||||||
.type = DRM_CONF_BOOL,
|
|
||||||
.val.val_bool = true,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
|
static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
|
||||||
{
|
{
|
||||||
switch (conf) {
|
|
||||||
case DRM_CONF_SHARE_FD:
|
|
||||||
return &share_fd_ret;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,19 +13,8 @@ create_screen(int fd, const struct pipe_screen_config *config)
|
||||||
return rw ? debug_screen_wrap(rw->screen) : NULL;
|
return rw ? debug_screen_wrap(rw->screen) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct drm_conf_ret share_fd_ret = {
|
|
||||||
.type = DRM_CONF_BOOL,
|
|
||||||
.val.val_bool = true,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
|
static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
|
||||||
{
|
{
|
||||||
switch (conf) {
|
|
||||||
case DRM_CONF_SHARE_FD:
|
|
||||||
return &share_fd_ret;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,11 +20,6 @@ create_screen(int fd, const struct pipe_screen_config *config)
|
||||||
return rw ? debug_screen_wrap(rw->screen) : NULL;
|
return rw ? debug_screen_wrap(rw->screen) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct drm_conf_ret share_fd_ret = {
|
|
||||||
.type = DRM_CONF_BOOL,
|
|
||||||
.val.val_bool = true,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
|
static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
|
||||||
{
|
{
|
||||||
static const struct drm_conf_ret xml_options_ret = {
|
static const struct drm_conf_ret xml_options_ret = {
|
||||||
|
@ -34,8 +29,6 @@ static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
|
||||||
};
|
};
|
||||||
|
|
||||||
switch (conf) {
|
switch (conf) {
|
||||||
case DRM_CONF_SHARE_FD:
|
|
||||||
return &share_fd_ret;
|
|
||||||
case DRM_CONF_XML_OPTIONS:
|
case DRM_CONF_XML_OPTIONS:
|
||||||
return &xml_options_ret;
|
return &xml_options_ret;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -23,19 +23,8 @@ create_screen(int fd, const struct pipe_screen_config *config)
|
||||||
return screen;
|
return screen;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct drm_conf_ret share_fd_ret = {
|
|
||||||
.type = DRM_CONF_BOOL,
|
|
||||||
.val.val_bool = true,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
|
static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
|
||||||
{
|
{
|
||||||
switch (conf) {
|
|
||||||
case DRM_CONF_SHARE_FD:
|
|
||||||
return &share_fd_ret;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue