mirror of
				https://github.com/Ryujinx/SDL.git
				synced 2025-11-04 04:04:58 +00: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");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* 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!.
 | 
			
		||||
       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. */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -150,7 +150,7 @@ get_driindex(void)
 | 
			
		|||
#define VOID2U64(x) ((uint64_t)(unsigned long)(x))
 | 
			
		||||
 | 
			
		||||
static int add_connector_property(drmModeAtomicReq *req, struct connector *connector,
 | 
			
		||||
					const char *name, uint64_t value)
 | 
			
		||||
                                     const char *name, uint64_t value)
 | 
			
		||||
{
 | 
			
		||||
    unsigned int i;
 | 
			
		||||
    int prop_id = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -170,8 +170,8 @@ static int add_connector_property(drmModeAtomicReq *req, struct connector *conne
 | 
			
		|||
    return KMSDRM_drmModeAtomicAddProperty(req, connector->connector->connector_id, prop_id, value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int add_crtc_property(drmModeAtomicReq *req, struct crtc *crtc,
 | 
			
		||||
				const char *name, uint64_t value)
 | 
			
		||||
int add_crtc_property(drmModeAtomicReq *req, struct crtc *crtc,
 | 
			
		||||
                         const char *name, uint64_t value)
 | 
			
		||||
{
 | 
			
		||||
    unsigned int i;
 | 
			
		||||
    int prop_id = -1;
 | 
			
		||||
| 
						 | 
				
			
			@ -192,7 +192,7 @@ static int add_crtc_property(drmModeAtomicReq *req, struct crtc *crtc,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
int add_plane_property(drmModeAtomicReq *req, struct plane *plane,
 | 
			
		||||
                              const char *name, uint64_t value)
 | 
			
		||||
                          const char *name, uint64_t value)
 | 
			
		||||
{
 | 
			
		||||
    unsigned int i;
 | 
			
		||||
    int prop_id = -1;
 | 
			
		||||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
        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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -161,6 +161,8 @@ void drm_atomic_waitpending(_THIS);
 | 
			
		|||
int drm_atomic_commit(_THIS, SDL_bool blocking);
 | 
			
		||||
int add_plane_property(drmModeAtomicReq *req, struct plane *plane,
 | 
			
		||||
                             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);
 | 
			
		||||
void free_plane(struct plane **plane);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue