Skip to content

Commit 9eb1096

Browse files
committed
better handling of backbuffers
1 parent eb876a6 commit 9eb1096

File tree

3 files changed

+22
-18
lines changed

3 files changed

+22
-18
lines changed

drivers/staging/fbtft/fbtft-bus.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,16 +146,27 @@ int fbtft_start_new_screen_transfer_async(struct fbtft_par *par)
146146
"Display update%s: fps=%ld\n",
147147
par->pdata->te_irq_enabled?" (TE)":"",
148148
par->avg_fps / par->nb_fps_values);
149-
printk("Display update%s: fps=%ld, par->must_render=%d\n",
149+
printk("Display update%s: fps=%ld, par->nb_backbuffers_full=%d\n",
150150
par->pdata->te_irq_enabled?" (TE)":"",
151-
par->avg_fps / par->nb_fps_values, par->must_render);
151+
par->avg_fps / par->nb_fps_values, par->nb_backbuffers_full);
152152
par->avg_fps = 0;
153153
par->nb_fps_values = 0;
154154
}
155155
}
156156

157157
#endif //FPS_DEBUG
158158

159+
/* Get last memory buffer not written */
160+
if(par->nb_backbuffers_full > 0){
161+
par->vmem_ptr = par->vmem_back_buffers[par->vmem_prev_buf_idx];
162+
par->nb_backbuffers_full--;
163+
par->nb_backbuffers_full = !!par->nb_backbuffers_full; //back to 1 or 0 to avoid overflows
164+
}
165+
else{
166+
par->nb_backbuffers_full = 0; // Avoid overflows, should not happen
167+
par->vmem_ptr = par->info->screen_buffer;
168+
}
169+
159170
/* Post process screen for doufle buf copy, notifs, rotation soft... */
160171
fbtft_post_process_screen(par);
161172

drivers/staging/fbtft/fbtft-core.c

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -578,13 +578,6 @@ void fbtft_post_process_screen(struct fbtft_par *par)
578578
screen_post_process = true;
579579
}
580580

581-
/* Get last memory buffer not written */
582-
if(par->must_render){
583-
par->vmem_ptr = par->vmem_back_buffers[par->vmem_prev_buf_idx];
584-
}
585-
else{
586-
par->vmem_ptr = par->info->screen_buffer;
587-
}
588581
//par->vmem_ptr = par->vmem_back_buffers[par->vmem_prev_buf_idx];
589582
//par->vmem_ptr = par->info->screen_buffer;
590583

@@ -652,7 +645,7 @@ void fbtft_flip_backbuffer(struct fbtft_par *par)
652645
par->vmem_size);
653646
par->vmem_prev_buf_idx = par->vmem_cur_buf_idx;
654647
par->vmem_cur_buf_idx = (par->vmem_cur_buf_idx+1)%FBTFT_VMEM_BUFS;
655-
par->must_render++;
648+
par->nb_backbuffers_full++;
656649
//spin_unlock(&par->dirty_lock);
657650
}
658651

@@ -1224,7 +1217,7 @@ struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
12241217
par->vmem_prev_buf_idx = 0;
12251218
par->vmem_cur_buf_idx = 0;
12261219
par->vmem_ptr = par->info->screen_buffer + (par->vmem_cur_buf_idx*par->vmem_size);
1227-
par->must_render = 0;
1220+
par->nb_backbuffers_full = 0;
12281221
par->pdata = pdata;
12291222
pdata->par = par;
12301223
par->debug = display->debug;
@@ -1717,17 +1710,17 @@ static irqreturn_t irq_TE_handler(int irq_no, void *dev_id)
17171710
return IRQ_HANDLED;
17181711

17191712
#if 0
1720-
if (pdata->par->must_render <= 0)
1713+
if (pdata->par->nb_backbuffers_full <= 0)
17211714
return IRQ_HANDLED;
17221715
/*static int prev_must_render = 0;
1723-
if (prev_must_render == pdata->par->must_render);
1716+
if (prev_must_render == pdata->par->nb_backbuffers_full);
17241717
return IRQ_HANDLED;*/
17251718

1726-
pdata->par->must_render--;
1727-
if(pdata->par->must_render > 1024){
1728-
pdata->par->must_render=1;
1719+
pdata->par->nb_backbuffers_full--;
1720+
if(pdata->par->nb_backbuffers_full > 1024){
1721+
pdata->par->nb_backbuffers_full=1;
17291722
}
1730-
prev_must_render = pdata->par->must_render;
1723+
prev_must_render = pdata->par->nb_backbuffers_full;
17311724
#endif
17321725

17331726
fbtft_start_new_screen_transfer_async(pdata->par);

include/linux/fbtft.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ struct fbtft_par {
230230
u8 vmem_prev_buf_idx;
231231
u8 vmem_cur_buf_idx;
232232
int vmem_size;
233-
int must_render;
233+
int nb_backbuffers_full;
234234
u8 startbyte;
235235
struct fbtft_ops fbtftops;
236236
spinlock_t dirty_lock;

0 commit comments

Comments
 (0)