It seems that nv04_graph_mthd_page_flip() was called from isr , and page_flip ioctl only send a NV_SW_PAGE_FLIP pushbuffer bo to gem. If you don't want the screen show garbage you must make sure not to change frontbuffer or backbuffer in GPU when nv_set_crtc_base() is called, and not change the frontbuffer context when it is rendering, am I right? At 2011-10-25 13:45:29,"Maarten Maathuis" <madman2003@xxxxxxxxx> wrote: >2011/10/25 chris <wwzbwwzb@xxxxxxx>: >> Can anyone give a suggestion, is wait-vblank fully implemented in >> page_flip() for nouveau drm driver? >> >> >> At 2011-10-24 14:30:55,chris <wwzbwwzb@xxxxxxx> wrote: >> >> Dear, >> >> I use NVidia Geforce 7300GT graphics card in my PC, and Linux 3.1rc4 kernel >> code, git drm 2.4.36. >> When I run the vbltest program, it prints "60HZ" which indicated the >> implementation of drmWaitVBlank() and drm_vblank_wait() is correct. >> But when I run modetest with option " -v -s 12:1280x1024" , it prints high >> fresh rate up to "150 HZ" . I examing the code , and found that no waiting >> vblank operation is processed in nouveau_crtc_ page_flip() function. The >> screen produced lots of garbage and blink very much. >> int >> nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb, >> struct drm_pending_vblank_event *event) >> { >> ...... >> } >> I study the i915 intel_crtc_page_flip implementation. >> static int intel_crtc_page_flip(stru ct drm_crtc *crtc, >> struct drm_framebuffer *fb, >> struct drm_pending_vblank_event *event) >> { >> ...... >> >> ret = drm_vblank_get(dev, intel_crtc->pipe); >> if (ret) >> goto cleanup_objs; >> >> work->pending_flip_obj = obj; >> >> work->enable_stall_check = true; >> >> /* Block clients from rendering to the new back buffer until >> * the flip occurs and the object is no longer visible. >> */ >> atomic_add(1 << intel_crtc->plane, &work->old_fb_obj->pending_flip); >> >> ret = dev_priv->display.queue_flip(dev, crtc, fb, obj); >> &am p;nb sp; if (ret) >> goto cleanup_pending; >> ...... >> } >> >> after vblank irq acquired, the interrupt isr will wakup the runqueue. >> 6159 static void do_intel_finish_page_flip(struct drm_device *dev, >> 6160 struct drm_crtc *crtc) >> 6161 { >> ...... >> 6211 list_add_tail(&e->base.link, >> 6212 &e->base.file_priv->event_list); >> 6213 wake_up_interruptible(&e->base.file_priv->event_wait); >> 6214 } >> 6215 >> 6216 drm_vblank_put(dev, intel_crtc->pipe); >> 6217 >> >> >> Is there anyone use the same driver and foun d this issues can tell me "is >> it a bug"? >> >> Thanks! >> >> >> >> >> >> >> >> _______________________________________________ >> dri-devel mailing list >> dri-devel@xxxxxxxxxxxxxxxxxxxxx >> http://lists.freedesktop.org/mailman/listinfo/dri-devel >> >> > >It seems to be, the actual page flipping is done by software method >(see nv04_graph_mthd_page_flip). There is one thing i'm unsure about >and that is that we wait for the rendering to be done to the current >frontbuffer and not the current backbuffer (this is only done if the >page flip channel is different than the rendering channel). Maybe >someone else can comment on that. > >-- >Far away from the primal instinct, the song seems to fade away, the >river get wider between your thoughts and the things we do and say. _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel