fbpx
Wikipedia

Multiple buffering

In computer science, multiple buffering is the use of more than one buffer to hold a block of data, so that a "reader" will see a complete (though perhaps old) version of the data, rather than a partially updated version of the data being created by a "writer". It is very commonly used for computer display images. It is also used to avoid the need to use dual-ported RAM (DPRAM) when the readers and writers are different devices.

Sets 1, 2 and 3 represent the operation of single, double and triple buffering, respectively, with vertical synchronization (vsync) enabled. In each graph, time flows from left to right. Note that 3 shows a swap chain with three buffers; the original definition of triple buffering would throw away frame C as soon as frame D finished, and start drawing frame E into buffer 1 with no delay. Set 4 shows what happens when a frame (B, in this case) takes longer than normal to draw. In this case, a frame update is missed. In time-sensitive implementations such as video playback, the whole frame may be dropped. With a three-buffer swap chain in set 5, drawing of frame B can start without having to wait for frame A to be copied to video memory, reducing the chance of a delayed frame missing its vertical retrace.

Description edit

Double buffering Petri net edit

The Petri net in the illustration shows double buffering. Transitions W1 and W2 represent writing to buffer 1 and 2 respectively while R1 and R2 represent reading from buffer 1 and 2 respectively. At the beginning only the transition W1 is enabled. After W1 fires, R1 and W2 are both enabled and can proceed in parallel. When they finish, R2 and W1 proceed in parallel and so on.

So after the initial transient where W1 fires alone, this system is periodic and the transitions are enabled – always in pairs (R1 with W2 and R2 with W1 respectively).


 
Double Buffering Petri Net

Double buffering in computer graphics edit

In computer graphics, double buffering is a technique for drawing graphics that shows less stutter, tearing, and other artifacts.

It is difficult for a program to draw a display so that pixels do not change more than once. For instance, when updating a page of text, it is much easier to clear the entire page and then draw the letters than to somehow erase only the pixels that are used in old letters but not in new ones. However, this intermediate image is seen by the user as flickering. In addition, computer monitors constantly redraw the visible video page (traditionally at around 60 times a second), so even a perfect update may be visible momentarily as a horizontal divider between the "new" image and the un-redrawn "old" image, known as tearing.

Software double buffering edit

A software implementation of double buffering has all drawing operations store their results in some region of system RAM; any such region is often called a "back buffer". When all drawing operations are considered complete, the whole region (or only the changed portion) is copied into the video RAM (the "front buffer"); this copying is usually synchronized with the monitor's raster beam in order to avoid tearing. Software implementations of double buffering necessarily requires more memory and CPU time than single buffering because of the system memory allocated for the back buffer, the time for the copy operation, and the time waiting for synchronization.

Compositing window managers often combine the "copying" operation with "compositing" used to position windows, transform them with scale or warping effects, and make portions transparent. Thus the "front buffer" may contain only the composite image seen on the screen, while there is a different "back buffer" for every window containing the non-composited image of the entire window contents.

Page flipping edit

In the page-flip method, instead of copying the data, both buffers are capable of being displayed (both are in Video RAM). At any one time, one buffer is actively being displayed by the monitor, while the other, background buffer is being drawn. When the background buffer is complete, the roles of the two are switched. The page-flip is typically accomplished by modifying a hardware register in the video display controller—the value of a pointer to the beginning of the display data in the video memory.

The page-flip is much faster than copying the data and can guarantee that tearing will not be seen as long as the pages are switched over during the monitor's vertical blanking interval—the blank period when no video data is being drawn. The currently active and visible buffer is called the front buffer, while the background page is called the back buffer.

Triple buffering edit

In computer graphics, triple buffering is similar to double buffering but can provide improved performance. In double buffering, the program must wait until the finished drawing is copied or swapped before starting the next drawing. This waiting period could be several milliseconds during which neither buffer can be touched.

In triple buffering the program has two back buffers and can immediately start drawing in the one that is not involved in such copying. The third buffer, the front buffer, is read by the graphics card to display the image on the monitor. Once the image has been sent to the monitor, the front buffer is flipped with (or copied from) the back buffer holding the most recent complete image. Since one of the back buffers is always complete, the graphics card never has to wait for the software to complete. Consequently, the software and the graphics card are completely independent and can run at their own pace. Finally, the displayed image was started without waiting for synchronization and thus with minimum lag.[1]

Due to the software algorithm not polling the graphics hardware for monitor refresh events, the algorithm may continuously draw additional frames as fast as the hardware can render them. For frames that are completed much faster than interval between refreshes, it is possible to replace a back buffers' frames with newer iterations multiple times before copying. This means frames may be written to the back buffer that are never used at all before being overwritten by successive frames. Nvidia has implemented this method under the name "Fast Sync".[2]

An alternative method sometimes referred to as triple buffering is a swap chain three buffers long. After the program has drawn both back buffers, it waits until the first one is placed on the screen, before drawing another back buffer (i.e. it is a 3-long first in, first out queue). Most Windows games seem to refer to this method when enabling triple buffering.[citation needed]

Quad buffering edit

The term quad buffering is the use of double buffering for each of the left and right eye images in stereoscopic implementations, thus four buffers total (if triple buffering was used then there would be six buffers). The command to swap or copy the buffer typically applies to both pairs at once, so at no time does one eye see an older image than the other eye.

Quad buffering requires special support in the graphics card drivers which is disabled for most consumer cards. AMD's Radeon HD 6000 Series and newer support it.[3]

3D standards like OpenGL[4] and Direct3D support quad buffering.

Double buffering for DMA edit

The term double buffering is used for copying data between two buffers for direct memory access (DMA) transfers, not for enhancing performance, but to meet specific addressing requirements of a device (esp. 32-bit devices on systems with wider addressing provided via Physical Address Extension).[5] DOS and Windows device drivers are a place where the term "double buffering" is likely to be used. Linux and BSD source code calls these "bounce buffers".[6]

Some programmers try to avoid this kind of double buffering with zero-copy techniques.

Other uses edit

Double buffering is also used as a technique to facilitate interlacing or deinterlacing of video signals.

See also edit

References edit

  1. ^ "Triple Buffering: Why We Love It". AnandTech. June 26, 2009. Retrieved 2009-07-16.
  2. ^ Smith, Ryan. "The NVIDIA GeForce GTX 1080 & GTX 1070 Founders Editions Review: Kicking Off the FinFET Generation". Retrieved 2017-08-01.
  3. ^ http://devgurus.amd.com/thread/158704][bare URL]
  4. ^ OpenGL 3.0 Specification, Chapter 4
  5. ^ "Physical Address Extension - PAE Memory and Windows". Microsoft Windows Hardware Development Central. 2005. Retrieved 2008-04-07.
  6. ^ Gorman, Mel. "Understanding The Linux Virtual Memory Manager, 10.4 Bounce Buffers".

External links edit

multiple, buffering, this, article, multiple, issues, please, help, improve, discuss, these, issues, talk, page, learn, when, remove, these, template, messages, this, article, needs, additional, citations, verification, please, help, improve, this, article, ad. This article has multiple issues Please help improve it or discuss these issues on the talk page Learn how and when to remove these template messages This article needs additional citations for verification Please help improve this article by adding citations to reliable sources Unsourced material may be challenged and removed Find sources Multiple buffering news newspapers books scholar JSTOR November 2023 Learn how and when to remove this template message This article s tone or style may not reflect the encyclopedic tone used on Wikipedia See Wikipedia s guide to writing better articles for suggestions November 2023 Learn how and when to remove this template message This article may be too technical for most readers to understand Please help improve it to make it understandable to non experts without removing the technical details November 2023 Learn how and when to remove this template message Learn how and when to remove this template message In computer science multiple buffering is the use of more than one buffer to hold a block of data so that a reader will see a complete though perhaps old version of the data rather than a partially updated version of the data being created by a writer It is very commonly used for computer display images It is also used to avoid the need to use dual ported RAM DPRAM when the readers and writers are different devices Sets 1 2 and 3 represent the operation of single double and triple buffering respectively with vertical synchronization vsync enabled In each graph time flows from left to right Note that 3 shows a swap chain with three buffers the original definition of triple buffering would throw away frame C as soon as frame D finished and start drawing frame E into buffer 1 with no delay Set 4 shows what happens when a frame B in this case takes longer than normal to draw In this case a frame update is missed In time sensitive implementations such as video playback the whole frame may be dropped With a three buffer swap chain in set 5 drawing of frame B can start without having to wait for frame A to be copied to video memory reducing the chance of a delayed frame missing its vertical retrace Contents 1 Description 1 1 Double buffering Petri net 2 Double buffering in computer graphics 2 1 Software double buffering 2 2 Page flipping 3 Triple buffering 4 Quad buffering 5 Double buffering for DMA 6 Other uses 7 See also 8 References 9 External linksDescription editDouble buffering Petri net edit The Petri net in the illustration shows double buffering Transitions W1 and W2 represent writing to buffer 1 and 2 respectively while R1 and R2 represent reading from buffer 1 and 2 respectively At the beginning only the transition W1 is enabled After W1 fires R1 and W2 are both enabled and can proceed in parallel When they finish R2 and W1 proceed in parallel and so on So after the initial transient where W1 fires alone this system is periodic and the transitions are enabled always in pairs R1 with W2 and R2 with W1 respectively nbsp Double Buffering Petri NetDouble buffering in computer graphics editIn computer graphics double buffering is a technique for drawing graphics that shows less stutter tearing and other artifacts It is difficult for a program to draw a display so that pixels do not change more than once For instance when updating a page of text it is much easier to clear the entire page and then draw the letters than to somehow erase only the pixels that are used in old letters but not in new ones However this intermediate image is seen by the user as flickering In addition computer monitors constantly redraw the visible video page traditionally at around 60 times a second so even a perfect update may be visible momentarily as a horizontal divider between the new image and the un redrawn old image known as tearing Software double buffering edit A software implementation of double buffering has all drawing operations store their results in some region of system RAM any such region is often called a back buffer When all drawing operations are considered complete the whole region or only the changed portion is copied into the video RAM the front buffer this copying is usually synchronized with the monitor s raster beam in order to avoid tearing Software implementations of double buffering necessarily requires more memory and CPU time than single buffering because of the system memory allocated for the back buffer the time for the copy operation and the time waiting for synchronization Compositing window managers often combine the copying operation with compositing used to position windows transform them with scale or warping effects and make portions transparent Thus the front buffer may contain only the composite image seen on the screen while there is a different back buffer for every window containing the non composited image of the entire window contents Page flipping edit In the page flip method instead of copying the data both buffers are capable of being displayed both are in Video RAM At any one time one buffer is actively being displayed by the monitor while the other background buffer is being drawn When the background buffer is complete the roles of the two are switched The page flip is typically accomplished by modifying a hardware register in the video display controller the value of a pointer to the beginning of the display data in the video memory The page flip is much faster than copying the data and can guarantee that tearing will not be seen as long as the pages are switched over during the monitor s vertical blanking interval the blank period when no video data is being drawn The currently active and visible buffer is called the front buffer while the background page is called the back buffer Triple buffering editIn computer graphics triple buffering is similar to double buffering but can provide improved performance In double buffering the program must wait until the finished drawing is copied or swapped before starting the next drawing This waiting period could be several milliseconds during which neither buffer can be touched In triple buffering the program has two back buffers and can immediately start drawing in the one that is not involved in such copying The third buffer the front buffer is read by the graphics card to display the image on the monitor Once the image has been sent to the monitor the front buffer is flipped with or copied from the back buffer holding the most recent complete image Since one of the back buffers is always complete the graphics card never has to wait for the software to complete Consequently the software and the graphics card are completely independent and can run at their own pace Finally the displayed image was started without waiting for synchronization and thus with minimum lag 1 Due to the software algorithm not polling the graphics hardware for monitor refresh events the algorithm may continuously draw additional frames as fast as the hardware can render them For frames that are completed much faster than interval between refreshes it is possible to replace a back buffers frames with newer iterations multiple times before copying This means frames may be written to the back buffer that are never used at all before being overwritten by successive frames Nvidia has implemented this method under the name Fast Sync 2 An alternative method sometimes referred to as triple buffering is a swap chain three buffers long After the program has drawn both back buffers it waits until the first one is placed on the screen before drawing another back buffer i e it is a 3 long first in first out queue Most Windows games seem to refer to this method when enabling triple buffering citation needed Quad buffering editThe term quad buffering is the use of double buffering for each of the left and right eye images in stereoscopic implementations thus four buffers total if triple buffering was used then there would be six buffers The command to swap or copy the buffer typically applies to both pairs at once so at no time does one eye see an older image than the other eye Quad buffering requires special support in the graphics card drivers which is disabled for most consumer cards AMD s Radeon HD 6000 Series and newer support it 3 3D standards like OpenGL 4 and Direct3D support quad buffering Double buffering for DMA editThe term double buffering is used for copying data between two buffers for direct memory access DMA transfers not for enhancing performance but to meet specific addressing requirements of a device esp 32 bit devices on systems with wider addressing provided via Physical Address Extension 5 DOS and Windows device drivers are a place where the term double buffering is likely to be used Linux and BSD source code calls these bounce buffers 6 Some programmers try to avoid this kind of double buffering with zero copy techniques Other uses editDouble buffering is also used as a technique to facilitate interlacing or deinterlacing of video signals See also editAdaptive tile refresh Vertical synchronization Stereoscopy LC shutter glasses Nvidia 3D Vision HD3D Virtual DMA Services VDS References edit Triple Buffering Why We Love It AnandTech June 26 2009 Retrieved 2009 07 16 Smith Ryan The NVIDIA GeForce GTX 1080 amp GTX 1070 Founders Editions Review Kicking Off the FinFET Generation Retrieved 2017 08 01 http devgurus amd com thread 158704 bare URL OpenGL 3 0 Specification Chapter 4 Physical Address Extension PAE Memory and Windows Microsoft Windows Hardware Development Central 2005 Retrieved 2008 04 07 Gorman Mel Understanding The Linux Virtual Memory Manager 10 4 Bounce Buffers External links editTriple buffering improve your PC gaming performance for free by Mike Doolittle 2007 05 24 http www tweakguides com Graphics 10 html Archived 2016 08 18 at the Wayback Machine Retrieved from https en wikipedia org w index php title Multiple buffering amp oldid 1186434819 Double buffering in computer graphics, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.