mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
st/dri: Hook up throttling based on the drm driver_descriptor configuration
Hooks up throttling if there is a configuration function present and it indicates that throttling is desired. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
This commit is contained in:
parent
ec7d5b8c02
commit
bde2fc5a71
3 changed files with 27 additions and 2 deletions
|
|
@ -137,7 +137,9 @@ dri_create_buffer(__DRIscreen * sPriv,
|
|||
drawable->screen = screen;
|
||||
drawable->sPriv = sPriv;
|
||||
drawable->dPriv = dPriv;
|
||||
drawable->desired_fences = 2;
|
||||
drawable->desired_fences = screen->default_throttle_frames;
|
||||
if (drawable->desired_fences > DRI_SWAP_FENCES_MAX)
|
||||
drawable->desired_fences = DRI_SWAP_FENCES_MAX;
|
||||
|
||||
dPriv->driverPrivate = (void *)drawable;
|
||||
p_atomic_set(&drawable->base.stamp, 1);
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ struct dri_screen
|
|||
|
||||
/* dri */
|
||||
__DRIscreen *sPriv;
|
||||
int default_throttle_frames;
|
||||
|
||||
/**
|
||||
* Configuration cache with default values for all contexts
|
||||
|
|
|
|||
|
|
@ -623,6 +623,19 @@ static const __DRIextension *dri_screen_extensions[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
static const __DRIextension *dri_screen_extensions_throttle[] = {
|
||||
&driReadDrawableExtension,
|
||||
&driCopySubBufferExtension.base,
|
||||
&driSwapControlExtension.base,
|
||||
&driMediaStreamCounterExtension.base,
|
||||
&driTexBufferExtension.base,
|
||||
&dri2FlushExtension.base,
|
||||
&dri2ImageExtension.base,
|
||||
&dri2ConfigQueryExtension.base,
|
||||
&dri2ThrottleExtension.base,
|
||||
NULL
|
||||
};
|
||||
|
||||
/**
|
||||
* This is the driver specific part of the createNewScreen entry point.
|
||||
*
|
||||
|
|
@ -634,6 +647,7 @@ dri2_init_screen(__DRIscreen * sPriv)
|
|||
const __DRIconfig **configs;
|
||||
struct dri_screen *screen;
|
||||
struct pipe_screen *pscreen;
|
||||
const struct drm_conf_ret *throttle_ret = NULL;
|
||||
|
||||
screen = CALLOC_STRUCT(dri_screen);
|
||||
if (!screen)
|
||||
|
|
@ -643,9 +657,17 @@ dri2_init_screen(__DRIscreen * sPriv)
|
|||
screen->fd = sPriv->fd;
|
||||
|
||||
sPriv->private = (void *)screen;
|
||||
sPriv->extensions = dri_screen_extensions;
|
||||
|
||||
pscreen = driver_descriptor.create_screen(screen->fd);
|
||||
if (driver_descriptor.configuration)
|
||||
throttle_ret = driver_descriptor.configuration(DRM_CONF_THROTTLE);
|
||||
|
||||
if (throttle_ret && throttle_ret->val.val_int != -1) {
|
||||
sPriv->extensions = dri_screen_extensions_throttle;
|
||||
screen->default_throttle_frames = throttle_ret->val.val_int;
|
||||
} else
|
||||
sPriv->extensions = dri_screen_extensions;
|
||||
|
||||
/* dri_init_screen_helper checks pscreen for us */
|
||||
|
||||
configs = dri_init_screen_helper(screen, pscreen, 32);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue