mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2024-12-20 22:16:49 +01:00
kmsdrm: move FENCE FD props setting to SwapWindow(), where it belongs.
This commit is contained in:
parent
3f38009b2f
commit
9316a8d979
@ -151,6 +151,18 @@ KMSDRM_GLES_SwapWindow(_THIS, SDL_Window * window)
|
|||||||
return SDL_SetError("Failed to request prop changes for setting plane buffer and CRTC");
|
return SDL_SetError("Failed to request prop changes for setting plane buffer and CRTC");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set the IN_FENCE and OUT_FENCE props only here, since this is the only place
|
||||||
|
on which we're interested in managing who and when should access the buffers
|
||||||
|
that the display plane uses, and that's what these props are for. */
|
||||||
|
if (dispdata->kms_in_fence_fd != -1)
|
||||||
|
{
|
||||||
|
if (add_crtc_property(dispdata->atomic_req, dispdata->crtc, "OUT_FENCE_PTR",
|
||||||
|
VOID2U64(&dispdata->kms_out_fence_fd)) < 0)
|
||||||
|
return SDL_SetError("Failed to set CRTC OUT_FENCE_PTR prop");
|
||||||
|
if (add_plane_property(dispdata->atomic_req, dispdata->display_plane, "IN_FENCE_FD", dispdata->kms_in_fence_fd) < 0)
|
||||||
|
return SDL_SetError("Failed to set plane IN_FENCE_FD prop");
|
||||||
|
}
|
||||||
|
|
||||||
/* Issue the one and only atomic commit where all changes will be requested!.
|
/* Issue the one and only atomic commit where all changes will be requested!.
|
||||||
We need e a non-blocking atomic commit for triple buffering, because we
|
We need e a non-blocking atomic commit for triple buffering, because we
|
||||||
must not block on this atomic commit so we can re-enter program loop once more. */
|
must not block on this atomic commit so we can re-enter program loop once more. */
|
||||||
|
@ -170,7 +170,7 @@ static int add_connector_property(drmModeAtomicReq *req, struct connector *conne
|
|||||||
return KMSDRM_drmModeAtomicAddProperty(req, connector->connector->connector_id, prop_id, value);
|
return KMSDRM_drmModeAtomicAddProperty(req, connector->connector->connector_id, prop_id, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int add_crtc_property(drmModeAtomicReq *req, struct crtc *crtc,
|
int add_crtc_property(drmModeAtomicReq *req, struct crtc *crtc,
|
||||||
const char *name, uint64_t value)
|
const char *name, uint64_t value)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@ -493,18 +493,6 @@ drm_atomic_set_plane_props(struct KMSDRM_PlaneInfo *info)
|
|||||||
if (add_plane_property(dispdata->atomic_req, info->plane, "CRTC_Y", info->crtc_y) < 0)
|
if (add_plane_property(dispdata->atomic_req, info->plane, "CRTC_Y", info->crtc_y) < 0)
|
||||||
return SDL_SetError("Failed to set plane CRTC_Y prop");
|
return SDL_SetError("Failed to set plane CRTC_Y prop");
|
||||||
|
|
||||||
/* Set the IN_FENCE and OUT_FENCE props only if we're operating on the display plane,
|
|
||||||
since that's the only plane for which we manage who and when should access the buffers
|
|
||||||
it uses. */
|
|
||||||
if (info->plane == dispdata->display_plane && dispdata->kms_in_fence_fd != -1)
|
|
||||||
{
|
|
||||||
if (add_crtc_property(dispdata->atomic_req, dispdata->crtc, "OUT_FENCE_PTR",
|
|
||||||
VOID2U64(&dispdata->kms_out_fence_fd)) < 0)
|
|
||||||
return SDL_SetError("Failed to set CRTC OUT_FENCE_PTR prop");
|
|
||||||
if (add_plane_property(dispdata->atomic_req, info->plane, "IN_FENCE_FD", dispdata->kms_in_fence_fd) < 0)
|
|
||||||
return SDL_SetError("Failed to set plane IN_FENCE_FD prop");
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,6 +161,8 @@ void drm_atomic_waitpending(_THIS);
|
|||||||
int drm_atomic_commit(_THIS, SDL_bool blocking);
|
int drm_atomic_commit(_THIS, SDL_bool blocking);
|
||||||
int add_plane_property(drmModeAtomicReq *req, struct plane *plane,
|
int add_plane_property(drmModeAtomicReq *req, struct plane *plane,
|
||||||
const char *name, uint64_t value);
|
const char *name, uint64_t value);
|
||||||
|
int add_crtc_property(drmModeAtomicReq *req, struct crtc *crtc,
|
||||||
|
const char *name, uint64_t value);
|
||||||
int setup_plane(_THIS, struct plane **plane, uint32_t plane_type);
|
int setup_plane(_THIS, struct plane **plane, uint32_t plane_type);
|
||||||
void free_plane(struct plane **plane);
|
void free_plane(struct plane **plane);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user