mirror of
https://github.com/VincentWei/MiniGUI.git
synced 2026-02-07 11:01:57 +08:00
use named semaphore for update lock for drm engine
This commit is contained in:
@@ -59,10 +59,6 @@
|
||||
#include <sys/time.h>
|
||||
#include <sys/termios.h>
|
||||
|
||||
#ifdef _MGSCHEMA_SHAREDFB
|
||||
#include <semaphore.h>
|
||||
#endif
|
||||
|
||||
#include "constants.h"
|
||||
|
||||
enum {
|
||||
@@ -112,9 +108,6 @@ typedef struct tagG_RES {
|
||||
char video_exdriver [LEN_EXDRIVER_NAME + 1];
|
||||
Uint32 video_drm_format;
|
||||
Uint32 video_dbl_buff:1;
|
||||
#ifdef _MGSCHEMA_SHAREDFB
|
||||
sem_t video_update_lock; /* the semaphore used for sync update */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
int nr_layers;
|
||||
@@ -191,9 +184,6 @@ typedef G_RES* PG_RES;
|
||||
#define SHAREDRES_VIDEO_EXDRIVER (((PG_RES)mgSharedRes)->video_exdriver)
|
||||
#define SHAREDRES_VIDEO_DRM_FORMAT (((PG_RES)mgSharedRes)->video_drm_format)
|
||||
#define SHAREDRES_VIDEO_DBL_BUFF (((PG_RES)mgSharedRes)->video_dbl_buff)
|
||||
#ifdef _MGSCHEMA_SHAREDFB
|
||||
#define SHAREDRES_VIDEO_UPDATE_LOCK (&((PG_RES)mgSharedRes)->video_update_lock)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define SHAREDRES_TIMER_COUNTER (((PG_RES)mgSharedRes)->timer_counter)
|
||||
|
||||
@@ -1251,8 +1251,11 @@ static GAL_VideoDevice *DRM_CreateDevice(int devindex)
|
||||
|
||||
#ifdef _MGSCHEMA_SHAREDFB
|
||||
if (device->hidden->dbl_buff) {
|
||||
if (sem_init (SHAREDRES_VIDEO_UPDATE_LOCK, 1, 0)) {
|
||||
_WRN_PRINTF ("Failed to create update lock\n");
|
||||
sem_unlink (SEM_UPDATE_LOCK);
|
||||
device->hidden->update_lock = sem_open (SEM_UPDATE_LOCK,
|
||||
O_CREAT | O_RDWR | O_EXCL, 0666, 1);
|
||||
if (device->hidden->update_lock == NULL) {
|
||||
_WRN_PRINTF ("Failed to create update lock: %s\n", strerror (errno));
|
||||
device->hidden->dbl_buff = 0;
|
||||
}
|
||||
}
|
||||
@@ -1261,6 +1264,15 @@ static GAL_VideoDevice *DRM_CreateDevice(int devindex)
|
||||
#ifdef _MGRM_PROCESSES
|
||||
else {
|
||||
device->hidden->dbl_buff = SHAREDRES_VIDEO_DBL_BUFF;
|
||||
#ifdef _MGSCHEMA_SHAREDFB
|
||||
if (device->hidden->dbl_buff) {
|
||||
device->hidden->update_lock = sem_open (SEM_UPDATE_LOCK, O_RDWR);
|
||||
if (device->hidden->update_lock == NULL) {
|
||||
_WRN_PRINTF ("Failed to open update lock: %s\n", strerror (errno));
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif /* defined _MGRM_PROCESSES */
|
||||
|
||||
@@ -1661,8 +1673,9 @@ static void DRM_VideoQuit(_THIS)
|
||||
|
||||
#if defined (_MGRM_PROCESSES) && defined (_MGSCHEMA_SHAREDFB)
|
||||
if (mgIsServer && this->hidden->dbl_buff) {
|
||||
if (sem_destroy (SHAREDRES_VIDEO_UPDATE_LOCK)) {
|
||||
_ERR_PRINTF ("Failed to destroy the update lock\n");
|
||||
if (sem_unlink (SEM_UPDATE_LOCK)) {
|
||||
_ERR_PRINTF ("Failed to unlink the update lock semaphore: %s\n",
|
||||
strerror (errno));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -3220,7 +3233,7 @@ static void DRM_UpdateRects (_THIS, int numrects, GAL_Rect *rects)
|
||||
|
||||
#if IS_SHAREDFB_SCHEMA_PROCS
|
||||
if (this->hidden->dbl_buff) {
|
||||
sem_wait (SHAREDRES_VIDEO_UPDATE_LOCK);
|
||||
sem_wait (this->hidden->update_lock);
|
||||
}
|
||||
|
||||
GAL_ShadowSurfaceHeader* hdr;
|
||||
@@ -3257,7 +3270,7 @@ static void DRM_UpdateRects (_THIS, int numrects, GAL_Rect *rects)
|
||||
|
||||
#if IS_SHAREDFB_SCHEMA_PROCS
|
||||
if (this->hidden->dbl_buff) {
|
||||
sem_post (SHAREDRES_VIDEO_UPDATE_LOCK);
|
||||
sem_post (this->hidden->update_lock);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -3270,7 +3283,7 @@ static BOOL DRM_SyncUpdate (_THIS)
|
||||
|
||||
#if IS_SHAREDFB_SCHEMA_PROCS
|
||||
if (this->hidden->dbl_buff) {
|
||||
sem_wait (SHAREDRES_VIDEO_UPDATE_LOCK);
|
||||
sem_wait (this->hidden->update_lock);
|
||||
}
|
||||
|
||||
GAL_ShadowSurfaceHeader* hdr;
|
||||
@@ -3379,7 +3392,7 @@ static BOOL DRM_SyncUpdate (_THIS)
|
||||
ret:
|
||||
#if IS_SHAREDFB_SCHEMA_PROCS
|
||||
if (this->hidden->dbl_buff) {
|
||||
sem_post (SHAREDRES_VIDEO_UPDATE_LOCK);
|
||||
sem_post (this->hidden->update_lock);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -50,6 +50,14 @@
|
||||
|
||||
#include "sysvideo.h"
|
||||
|
||||
#if IS_SHAREDFB_SCHEMA_PROCS
|
||||
#include <fcntl.h> /* For O_* constants */
|
||||
#include <sys/stat.h> /* For mode constants */
|
||||
#include <semaphore.h>
|
||||
|
||||
#define SEM_UPDATE_LOCK "mginit-drm-update"
|
||||
#endif
|
||||
|
||||
/* Hidden "this" pointer for the video functions */
|
||||
#define _THIS GAL_VideoDevice *this
|
||||
|
||||
@@ -86,7 +94,9 @@ typedef struct GAL_PrivateVideoData {
|
||||
uint32_t real_name, shadow_name;
|
||||
#endif /* not defined _MGSCHEMA_COMPOSITING */
|
||||
|
||||
#if !IS_SHAREDFB_SCHEMA_PROCS
|
||||
#if IS_SHAREDFB_SCHEMA_PROCS
|
||||
sem_t *update_lock;
|
||||
#else
|
||||
RECT dirty_rc;
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user