Announcement

Collapse
No announcement yet.

GLAMOR Radeon Shows 2D Acceleration Promise

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • GLAMOR Radeon Shows 2D Acceleration Promise

    Phoronix: GLAMOR Radeon Shows 2D Acceleration Promise

    It looks like, thanks in part to an existing shoddy EXA 2D acceleration implementation, that the GLAMOR-based Radeon acceleration support for xf86-video-ati may work out quite well...

    http://www.phoronix.com/vr.php?view=MTEzODc

  • #2
    Please AMD, entice Chris Wilson away!

    Comment


    • #3
      (Nicaragua is in America)

      There is no need to return...

      Originally posted by phoronix View Post
      Phoronix: GLAMOR Radeon Shows 2D Acceleration Promise

      It looks like, thanks in part to an existing shoddy EXA 2D acceleration implementation, that the GLAMOR-based Radeon acceleration support for xf86-video-ati may work out quite well...

      http://www.phoronix.com/vr.php?view=MTEzODc

      Comment


      • #4
        If GLAMOR is really that much better, it should be extended for all chips within the r600g driver at some point. Not just SI.

        Thanks Chris!

        Comment


        • #5
          Originally posted by halfmanhalfamazing View Post
          If GLAMOR is really that much better, it should be extended for all chips within the r600g driver at some point. Not just SI.

          Thanks Chris!
          According to what's on his blog, he was already testing on a Radeon HD5770. The patches were to the xf86-video-ati driver, and they don't seem chip-specific.

          From radeon_accel.c:
          Code:
          if (info->directRenderingEnabled) {
          	if (info->use_glamor) {
          	    if (!radeon_glamor_init(pScreen)) {
          		info->use_glamor = FALSE;
          		return FALSE;
          	    }
          	} else if (info->ChipFamily >= CHIP_FAMILY_CEDAR) {
          	    if (!EVERGREENDrawInit(pScreen))
          		return FALSE;
          	} else
          	    if (info->ChipFamily >= CHIP_FAMILY_R600) {
          		if (!R600DrawInit(pScreen))
          		    return FALSE;
          	    } else {
          		if (!RADEONDrawInit(pScreen))
          		    return FALSE;
          	    }
              }
          From what I was reading in the patches, you just need glamour >= 0.3.0, and a new git pull of the xf86-video-ati driver (xorg-edgers will probably be along shortly...).
          Last edited by Veerappan; 07-12-2012, 09:05 AM.

          Comment


          • #6
            Originally posted by halfmanhalfamazing View Post
            If GLAMOR is really that much better, it should be extended for all chips within the r600g driver at some point. Not just SI.
            It already works with all radeon chips with a 3D driver that supports shaders (basically R300+).

            Comment


            • #7
              uhm

              So Intel has come and done some work to make their competitor's GPU perform better in Linux? I realize that It's not really Intel, but just a single Intel dev's hobby project... but I can't help but wonder at AMD's relative rate of progress at this point .

              Comment


              • #8
                Originally posted by Rodrigo View Post
                There is no need to return...
                I saw what you did there.

                Originally posted by hiryu View Post
                So Intel has come and done some work to make their competitor's GPU perform better in Linux? I realize that It's not really Intel, but just a single Intel dev's hobby project... but I can't help but wonder at AMD's relative rate of progress at this point .
                Hey, cooperation is always good. Intel has acceleration that turned out to be not very spectacular, but why not give it to everyone, including AMD, if they have even worse acceleration. Why AMD has such poor acceleration in the first place is another matter, however...

                Comment


                • #9
                  Originally posted by Veerappan View Post
                  From what I was reading in the patches, you just need glamour >= 0.3.0, and a new git pull of the xf86-video-ati driver (xorg-edgers will probably be along shortly...).
                  xf86-video-ati has a new configure flag: --enable-glamor

                  But you can't use xorg git as of now:
                  Code:
                  make  all-recursive
                  make[1]: Entering directory `/home/chris/build/glamor-git/src/glamor-build'
                  Making all in src
                  make[2]: Entering directory `/home/chris/build/glamor-git/src/glamor-build/src'
                    CC       glamor.lo
                    CC       glamor_copyarea.lo
                    CC       glamor_copywindow.lo
                    CC       glamor_core.lo
                    CC       glamor_fill.lo
                  In file included from glamor_copywindow.c:24:0:
                  glamor_priv.h:551:11: warning: redundant redeclaration of 'glamor_create_pixmap' [-Wredundant-decls]
                  In file included from glamor_priv.h:40:0,
                                   from glamor_copywindow.c:24:
                  glamor.h:144:28: note: previous declaration of 'glamor_create_pixmap' was here
                  In file included from glamor_copywindow.c:24:0:
                  glamor_priv.h:570:6: warning: redundant redeclaration of 'glamor_init_pixmap_fbo' [-Wredundant-decls]
                  glamor_priv.h:566:6: note: previous declaration of 'glamor_init_pixmap_fbo' was here
                  glamor_priv.h:571:6: warning: redundant redeclaration of 'glamor_fini_pixmap_fbo' [-Wredundant-decls]
                  glamor_priv.h:567:6: note: previous declaration of 'glamor_fini_pixmap_fbo' was here
                  glamor_priv.h:605:6: warning: redundant redeclaration of 'glamor_create_gc' [-Wredundant-decls]
                  In file included from glamor_priv.h:40:0,
                                   from glamor_copywindow.c:24:
                  glamor.h:233:22: note: previous declaration of 'glamor_create_gc' was here
                  In file included from glamor_copywindow.c:24:0:
                  glamor_priv.h:685:6: warning: redundant redeclaration of 'glamor_glyph_unrealize' [-Wredundant-decls]
                  In file included from glamor_priv.h:40:0,
                                   from glamor_copywindow.c:24:
                  glamor.h:300:23: note: previous declaration of 'glamor_glyph_unrealize' was here
                  In file included from glamor_copywindow.c:24:0:
                  glamor_priv.h:950:2: warning: redundant redeclaration of 'glamor_upload_picture_to_texture' [-Wredundant-decls]
                  glamor_priv.h:924:2: note: previous declaration of 'glamor_upload_picture_to_texture' was here
                  glamor_priv.h:954:1: warning: redundant redeclaration of 'glamor_fixup_pixmap_priv' [-Wredundant-decls]
                  glamor_priv.h:578:6: note: previous declaration of 'glamor_fixup_pixmap_priv' was here
                  In file included from glamor_priv.h:1007:0,
                                   from glamor_copywindow.c:24:
                  glamor_utils.h:801:0: warning: "ARRAY_SIZE" redefined [enabled by default]
                  In file included from /usr/include/xorg/privates.h:152:0,
                                   from /usr/include/xorg/cursor.h:53,
                                   from /usr/include/xorg/scrnintstr.h:53,
                                   from glamor.h:32,
                                   from glamor_priv.h:40,
                                   from glamor_copywindow.c:24:
                  /usr/include/xorg/dix.h:67:0: note: this is the location of the previous definition
                  In file included from glamor_core.c:36:0:
                  glamor_priv.h:551:11: warning: redundant redeclaration of 'glamor_create_pixmap' [-Wredundant-decls]
                  In file included from glamor_priv.h:40:0,
                                   from glamor_core.c:36:
                  glamor.h:144:28: note: previous declaration of 'glamor_create_pixmap' was here
                  In file included from glamor_core.c:36:0:
                  glamor_priv.h:570:6: warning: redundant redeclaration of 'glamor_init_pixmap_fbo' [-Wredundant-decls]
                  glamor_priv.h:566:6: note: previous declaration of 'glamor_init_pixmap_fbo' was here
                  glamor_priv.h:571:6: warning: redundant redeclaration of 'glamor_fini_pixmap_fbo' [-Wredundant-decls]
                  glamor_priv.h:567:6: note: previous declaration of 'glamor_fini_pixmap_fbo' was here
                  glamor_priv.h:605:6: warning: redundant redeclaration of 'glamor_create_gc' [-Wredundant-decls]
                  In file included from glamor_priv.h:40:0,
                                   from glamor_core.c:36:
                  glamor.h:233:22: note: previous declaration of 'glamor_create_gc' was here
                  In file included from glamor_core.c:36:0:
                  glamor_priv.h:685:6: warning: redundant redeclaration of 'glamor_glyph_unrealize' [-Wredundant-decls]
                  In file included from glamor_priv.h:40:0,
                                   from glamor_core.c:36:
                  glamor.h:300:23: note: previous declaration of 'glamor_glyph_unrealize' was here
                  In file included from glamor_core.c:36:0:
                  glamor_priv.h:950:2: warning: redundant redeclaration of 'glamor_upload_picture_to_texture' [-Wredundant-decls]
                  glamor_priv.h:924:2: note: previous declaration of 'glamor_upload_picture_to_texture' was here
                  glamor_priv.h:954:1: warning: redundant redeclaration of 'glamor_fixup_pixmap_priv' [-Wredundant-decls]
                  glamor_priv.h:578:6: note: previous declaration of 'glamor_fixup_pixmap_priv' was here
                  In file included from glamor_priv.h:1007:0,
                                   from glamor_core.c:36:
                  glamor_utils.h:801:0: warning: "ARRAY_SIZE" redefined [enabled by default]
                  In file included from /usr/include/xorg/privates.h:152:0,
                                   from /usr/include/xorg/cursor.h:53,
                                   from /usr/include/xorg/scrnintstr.h:53,
                                   from glamor.h:32,
                                   from glamor_priv.h:40,
                                   from glamor_core.c:36:
                  /usr/include/xorg/dix.h:67:0: note: this is the location of the previous definition
                  In file included from glamor_fill.c:28:0:
                  glamor_priv.h:551:11: warning: redundant redeclaration of 'glamor_create_pixmap' [-Wredundant-decls]
                  In file included from glamor_priv.h:40:0,
                                   from glamor_fill.c:28:
                  glamor.h:144:28: note: previous declaration of 'glamor_create_pixmap' was here
                  In file included from glamor_fill.c:28:0:
                  glamor_priv.h:570:6: warning: redundant redeclaration of 'glamor_init_pixmap_fbo' [-Wredundant-decls]
                  glamor_priv.h:566:6: note: previous declaration of 'glamor_init_pixmap_fbo' was here
                  glamor_priv.h:571:6: warning: redundant redeclaration of 'glamor_fini_pixmap_fbo' [-Wredundant-decls]
                  glamor_priv.h:567:6: note: previous declaration of 'glamor_fini_pixmap_fbo' was here
                  glamor_priv.h:605:6: warning: redundant redeclaration of 'glamor_create_gc' [-Wredundant-decls]
                  In file included from glamor_priv.h:40:0,
                                   from glamor_fill.c:28:
                  glamor.h:233:22: note: previous declaration of 'glamor_create_gc' was here
                  In file included from glamor_fill.c:28:0:
                  glamor_priv.h:685:6: warning: redundant redeclaration of 'glamor_glyph_unrealize' [-Wredundant-decls]
                  In file included from glamor_priv.h:40:0,
                                   from glamor_fill.c:28:
                  glamor.h:300:23: note: previous declaration of 'glamor_glyph_unrealize' was here
                  In file included from glamor_fill.c:28:0:
                  glamor_priv.h:950:2: warning: redundant redeclaration of 'glamor_upload_picture_to_texture' [-Wredundant-decls]
                  glamor_priv.h:924:2: note: previous declaration of 'glamor_upload_picture_to_texture' was here
                  glamor_priv.h:954:1: warning: redundant redeclaration of 'glamor_fixup_pixmap_priv' [-Wredundant-decls]
                  glamor_priv.h:578:6: note: previous declaration of 'glamor_fixup_pixmap_priv' was here
                  In file included from glamor_priv.h:1007:0,
                                   from glamor_fill.c:28:
                  glamor_utils.h:801:0: warning: "ARRAY_SIZE" redefined [enabled by default]
                  In file included from /usr/include/xorg/privates.h:152:0,
                                   from /usr/include/xorg/cursor.h:53,
                                   from /usr/include/xorg/scrnintstr.h:53,
                                   from glamor.h:32,
                                   from glamor_priv.h:40,
                                   from glamor_fill.c:28:
                  /usr/include/xorg/dix.h:67:0: note: this is the location of the previous definition
                  glamor_core.c: In function 'glamor_gl_has_extension':
                  glamor_core.c:577:9: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual]
                  In file included from glamor_copyarea.c:28:0:
                  glamor_priv.h:551:11: warning: redundant redeclaration of 'glamor_create_pixmap' [-Wredundant-decls]
                  In file included from glamor_priv.h:40:0,
                                   from glamor_copyarea.c:28:
                  glamor.h:144:28: note: previous declaration of 'glamor_create_pixmap' was here
                  In file included from glamor_copyarea.c:28:0:
                  glamor_priv.h:570:6: warning: redundant redeclaration of 'glamor_init_pixmap_fbo' [-Wredundant-decls]
                  glamor_priv.h:566:6: note: previous declaration of 'glamor_init_pixmap_fbo' was here
                  glamor_priv.h:571:6: warning: redundant redeclaration of 'glamor_fini_pixmap_fbo' [-Wredundant-decls]
                  glamor_priv.h:567:6: note: previous declaration of 'glamor_fini_pixmap_fbo' was here
                  glamor_priv.h:605:6: warning: redundant redeclaration of 'glamor_create_gc' [-Wredundant-decls]
                  In file included from glamor_priv.h:40:0,
                                   from glamor_copyarea.c:28:
                  glamor.h:233:22: note: previous declaration of 'glamor_create_gc' was here
                  In file included from glamor_copyarea.c:28:0:
                  glamor_priv.h:685:6: warning: redundant redeclaration of 'glamor_glyph_unrealize' [-Wredundant-decls]
                  In file included from glamor_priv.h:40:0,
                                   from glamor_copyarea.c:28:
                  glamor.h:300:23: note: previous declaration of 'glamor_glyph_unrealize' was here
                  In file included from glamor_copyarea.c:28:0:
                  glamor_priv.h:950:2: warning: redundant redeclaration of 'glamor_upload_picture_to_texture' [-Wredundant-decls]
                  glamor_priv.h:924:2: note: previous declaration of 'glamor_upload_picture_to_texture' was here
                  glamor_priv.h:954:1: warning: redundant redeclaration of 'glamor_fixup_pixmap_priv' [-Wredundant-decls]
                  glamor_priv.h:578:6: note: previous declaration of 'glamor_fixup_pixmap_priv' was here
                  In file included from glamor_priv.h:1007:0,
                                   from glamor_copyarea.c:28:
                  glamor_utils.h:801:0: warning: "ARRAY_SIZE" redefined [enabled by default]
                  In file included from /usr/include/xorg/privates.h:152:0,
                                   from /usr/include/xorg/cursor.h:53,
                                   from /usr/include/xorg/scrnintstr.h:53,
                                   from glamor.h:32,
                                   from glamor_priv.h:40,
                                   from glamor_copyarea.c:28:
                  /usr/include/xorg/dix.h:67:0: note: this is the location of the previous definition
                  glamor_copyarea.c: In function '_glamor_copy_n_to_n':
                  glamor_copyarea.c:402:12: warning: variable 'screen' set but not used [-Wunused-but-set-variable]
                  glamor_copyarea.c:395:18: warning: variable 'dst_access' set but not used [-Wunused-but-set-variable]
                  In file included from glamor.c:36:0:
                  glamor_priv.h:551:11: warning: redundant redeclaration of 'glamor_create_pixmap' [-Wredundant-decls]
                  In file included from glamor_priv.h:40:0,
                                   from glamor.c:36:
                  glamor.h:144:28: note: previous declaration of 'glamor_create_pixmap' was here
                  In file included from glamor.c:36:0:
                  glamor_priv.h:570:6: warning: redundant redeclaration of 'glamor_init_pixmap_fbo' [-Wredundant-decls]
                  glamor_priv.h:566:6: note: previous declaration of 'glamor_init_pixmap_fbo' was here
                  glamor_priv.h:571:6: warning: redundant redeclaration of 'glamor_fini_pixmap_fbo' [-Wredundant-decls]
                  glamor_priv.h:567:6: note: previous declaration of 'glamor_fini_pixmap_fbo' was here
                  glamor_priv.h:605:6: warning: redundant redeclaration of 'glamor_create_gc' [-Wredundant-decls]
                  In file included from glamor_priv.h:40:0,
                                   from glamor.c:36:
                  glamor.h:233:22: note: previous declaration of 'glamor_create_gc' was here
                  In file included from glamor.c:36:0:
                  glamor_priv.h:685:6: warning: redundant redeclaration of 'glamor_glyph_unrealize' [-Wredundant-decls]
                  In file included from glamor_priv.h:40:0,
                                   from glamor.c:36:
                  glamor.h:300:23: note: previous declaration of 'glamor_glyph_unrealize' was here
                  In file included from glamor.c:36:0:
                  glamor_priv.h:950:2: warning: redundant redeclaration of 'glamor_upload_picture_to_texture' [-Wredundant-decls]
                  glamor_priv.h:924:2: note: previous declaration of 'glamor_upload_picture_to_texture' was here
                  glamor_priv.h:954:1: warning: redundant redeclaration of 'glamor_fixup_pixmap_priv' [-Wredundant-decls]
                  glamor_priv.h:578:6: note: previous declaration of 'glamor_fixup_pixmap_priv' was here
                  In file included from glamor_priv.h:1007:0,
                                   from glamor.c:36:
                  glamor_utils.h:801:0: warning: "ARRAY_SIZE" redefined [enabled by default]
                  In file included from /usr/include/xorg/privates.h:152:0,
                                   from /usr/include/xorg/cursor.h:53,
                                   from /usr/include/xorg/scrnintstr.h:53,
                                   from glamor.h:32,
                                   from glamor_priv.h:40,
                                   from glamor.c:36:
                  /usr/include/xorg/dix.h:67:0: note: this is the location of the previous definition
                  glamor.c: In function 'glamor_init':
                  glamor.c:328:6: warning: passing argument 1 of 'glamor_gl_has_extension' discards 'const' qualifier from pointer target type [enabled by default]
                  In file included from glamor.c:36:0:
                  glamor_priv.h:638:6: note: expected 'char *' but argument is of type 'const char *'
                  glamor.c:330:6: warning: passing argument 1 of 'glamor_gl_has_extension' discards 'const' qualifier from pointer target type [enabled by default]
                  In file included from glamor.c:36:0:
                  glamor_priv.h:638:6: note: expected 'char *' but argument is of type 'const char *'
                  glamor.c:350:22: warning: assignment from incompatible pointer type [enabled by default]
                  glamor.c: In function 'glamor_close_screen':
                  glamor.c:536:2: warning: passing argument 1 of 'screen->CloseScreen' makes pointer from integer without a cast [enabled by default]
                  glamor.c:536:2: note: expected 'ScreenPtr' but argument is of type 'int'
                  glamor.c:536:2: error: too many arguments to function 'screen->CloseScreen'
                  make[2]: *** [glamor.lo] Error 1
                  make[2]: *** Waiting for unfinished jobs....
                  make[2]: Leaving directory `/home/chris/build/glamor-git/src/glamor-build/src'
                  make[1]: *** [all-recursive] Error 1
                  make[1]: Leaving directory `/home/chris/build/glamor-git/src/glamor-build'
                  make: *** [all] Error 2

                  Comment


                  • #10
                    Originally posted by GreatEmerald View Post
                    Hey, cooperation is always good. Intel has acceleration that turned out to be not very spectacular, but why not give it to everyone, including AMD, if they have even worse acceleration. Why AMD has such poor acceleration in the first place is another matter, however...
                    Oh definitely! I was just pointing out the irony as well as the fact that a non-AMD dev was able to quickly get results in a little of their spare time. Hopefully with that China deal, AMD will be able to justify putting more resources towards the open radeon drivers.

                    Comment


                    • #11
                      EXA and UXA were designed years ago when a much smaller subset of operations could be accelerated to provide decent performance for most desktops. As the number of features and complexity of those features used on newer desktops has grown, the "2D" acceleration architectures have not kept up. Expanding EXA (or UXA) is a lot of work and the complexity is getting to the level where a good "2D" acceleration driver begins to rival a 3D driver. That's why something like glamor makes sense. You only have to write one hw driver (for GL) and you can take advantage of it for "2D" as well. The xorg gallium state tracker works similarly, but since it uses EXA, it is stuck with the inherent limitations of that older acceleration architecture. Since glamor uses GL directly, it can take advantage of all the flexibility offered by GL.

                      Another thing to note is that "2D" APIs are not as relevant today as they once were. A lot of apps use GL directly now so putting a lot of effort into "2D" it not always a good use of time. Benchmarks often have little bearing decent desktop performance.

                      Comment


                      • #12
                        EXA and UXA were designed years ago when a much smaller subset of operations could be accelerated to provide decent performance for most desktops. As the number of features and complexity of those features used on newer desktops has grown, the "2D" acceleration architectures have not kept up. Expanding EXA (or UXA) is a lot of work and the complexity is getting to the level where a good "2D" acceleration driver begins to rival a 3D driver. That's why something like glamor makes sense. You only have to write one hw driver (for GL) and you can take advantage of it for "2D" as well. The xorg gallium state tracker works similarly, but since it uses EXA, it is stuck with the inherent limitations of that older acceleration architecture. Since glamor uses GL directly, it can take advantage of all the flexibility offered by GL.

                        Another thing to note is that "2D" APIs are not as relevant today as they once were. A lot of apps use GL directly now so putting a lot of effort into "2D" it not always a good use of time. Benchmarks often have little bearing decent desktop performance.
                        I remember when almost nothing implemented EXA and how awesome it was... Until this post, I hadn't realized that we've come full circle and I assumed EXA was still awesome. With XAA gone, EXA has become the new XAA.

                        Comment


                        • #13
                          The main takeaway from this is that EXA really does perform rather lousy with radeon. Hint: count the number of RADEON_FALLBACK macros in the radeon DDX.

                          Comment


                          • #14
                            Originally posted by brent View Post
                            The main takeaway from this is that EXA really does perform rather lousy with radeon. Hint: count the number of RADEON_FALLBACK macros in the radeon DDX.
                            The problem is RENDER semantics map poorly to 3D hardware. Most older hardware (pre-DX10) can't handle RENDER sematics directly. Newer hardware can deal with them, but not without jumping through a lot of hoops. As I mentioned previously, the complexity in dealing with these cases means pulling in a lot of the 3D driver into the ddx (shader compiler, better state management, etc.) which is a lot of work for little gain which is why something like glamor or the xorg state tracker makes more sense.

                            Comment


                            • #15
                              Originally posted by agd5f View Post
                              The problem is RENDER semantics map poorly to 3D hardware.
                              In other words, the hardware vendors have just failed miserably to deliver the hardware capable of properly accelerating RENDER after all these years?

                              What about the dedicated 2D hardware accelerators? Are they going to solve the problem? Seems like such dedicated 2D hardware accelerators are becoming popular in modern ARM hardware (Exynos4, OMAP4470, ...).

                              Comment

                              Working...
                              X