qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] OpenGL for OS X
@ 2008-02-01 16:45 Mike Kronenberg
  2008-02-05  9:05 ` Alexander Graf
  2008-02-16  7:54 ` Mike Kronenberg
  0 siblings, 2 replies; 9+ messages in thread
From: Mike Kronenberg @ 2008-02-01 16:45 UTC (permalink / raw)
  To: qemu-devel

[-- Attachment #1: Type: text/plain, Size: 21481 bytes --]

After a little discussion on the list, I made this patch for cocoa.m,  
to replace CoreGraphic by OpenGL.

It's way faster than CG, but it requires a Mac with OpenGL capable  
Graphics Card and at least 8mb of VRAM.
I think starting with G4 and Highend G3, this requirements are met.

features:
[new] draws dirty lines of the window as needed, implemented with  
OpenGL (used the extensions as proposed by Pierre)
[new] window can be resized
[fix] conditional builds for Leopard, without linking to a specific sdk
[fix] lineflicker in fullscreen mode

The Question is, where to draw the line - or - if it needs a switch  
for CG/OpenGL support for cocoa.

Please test and comment.

  Mike

[1] http://www.kberg.ch/qemu/091patches/cocoa_m_OpenGL.diff.gz





--- /Users/mike/Documents/Qemu091gcc4/qemu/cocoa.m_original.m	 
2008-01-21 17:11:30.000000000 +0100
+++ /Users/mike/Documents/Qemu091gcc4/qemu/cocoa.m	2008-02-01  
17:11:41.000000000 +0100
@@ -22,12 +22,17 @@
   * THE SOFTWARE.
   */

+#include <AvailabilityMacros.h>
+
  #import <Cocoa/Cocoa.h>

+#import <OpenGL/gl.h>
+
  #include "qemu-common.h"
  #include "console.h"
  #include "sysemu.h"

+#define titleBarHeight 21.0

  //#define DEBUG

@@ -54,6 +59,16 @@
      int bitsPerPixel;
  } QEMUScreen;

+typedef struct {
+    float x;
+    float y;
+    float width;
+    float height;
+    float dx;
+    float dy;
+    float zoom;
+} COCOADisplayProperties;
+
  int qemu_main(int argc, char **argv); // main defined in qemu/vl.c
  NSWindow *normalWindow;
  id cocoaView;
@@ -246,18 +261,19 @@
      QemuCocoaView
   ------------------------------------------------------
  */
-@interface QemuCocoaView : NSView
+@interface QemuCocoaView : NSOpenGLView
  {
      QEMUScreen screen;
+    COCOADisplayProperties displayProperties;
      NSWindow *fullScreenWindow;
-    float cx,cy,cw,ch,cdx,cdy;
-    CGDataProviderRef dataProviderRef;
+    GLuint screen_tex;
      int modifiers_state[256];
      BOOL isMouseGrabed;
      BOOL isFullscreen;
      BOOL isAbsoluteEnabled;
      BOOL isTabletEnabled;
  }
+- (void) setContentDimensionsForFrame:(NSRect)rect;
  - (void) resizeContentToWidth:(int)w height:(int)h displayState: 
(DisplayState *)ds;
  - (void) grabMouse;
  - (void) ungrabMouse;
@@ -266,17 +282,16 @@
  - (void) setAbsoluteEnabled:(BOOL)tIsAbsoluteEnabled;
  - (BOOL) isMouseGrabed;
  - (BOOL) isAbsoluteEnabled;
-- (float) cdx;
-- (float) cdy;
  - (QEMUScreen) gscreen;
+- (COCOADisplayProperties) displayProperties;
  @end

  @implementation QemuCocoaView
-- (id)initWithFrame:(NSRect)frameRect
+- (id)initWithFrame:(NSRect)frameRect pixelFormat: 
(NSOpenGLPixelFormat *)format
  {
-    COCOA_DEBUG("QemuCocoaView: initWithFrame\n");
+    COCOA_DEBUG("QemuCocoaView: initWithFrame:pixelFormat\n");

-    self = [super initWithFrame:frameRect];
+    self = [super initWithFrame:frameRect pixelFormat:format];
      if (self) {

          screen.bitsPerComponent = 8;
@@ -284,6 +299,8 @@
          screen.width = frameRect.size.width;
          screen.height = frameRect.size.height;

+        displayProperties.zoom = 1.0;
+
      }
      return self;
  }
@@ -295,110 +312,118 @@
      if (screenBuffer)
          free(screenBuffer);

-    if (dataProviderRef)
-        CGDataProviderRelease(dataProviderRef);
-
      [super dealloc];
  }

  - (void) drawRect:(NSRect) rect
  {
-    COCOA_DEBUG("QemuCocoaView: drawRect\n");
+    COCOA_DEBUG("QemuCocoaView: drawRect: NSRect(%f, %f, %f, %f)\n",  
rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);

      if ((int)screenBuffer == -1)
          return;

-    // get CoreGraphic context
-    CGContextRef viewContextRef = [[NSGraphicsContext currentContext]  
graphicsPort];
-    CGContextSetInterpolationQuality (viewContextRef,  
kCGInterpolationNone);
-    CGContextSetShouldAntialias (viewContextRef, NO);
-
-    // draw screen bitmap directly to Core Graphics context
-    if (dataProviderRef) {
-        CGImageRef imageRef = CGImageCreate(
-            screen.width, //width
-            screen.height, //height
-            screen.bitsPerComponent, //bitsPerComponent
-            screen.bitsPerPixel, //bitsPerPixel
-            (screen.width * 4), //bytesPerRow
+    // remove old texture
+    if( screen_tex != 0) {
+        glDeleteTextures(1, &screen_tex);
+    }
+
+    screen_tex = 1;
+    float onePixel[2];
+    onePixel[0] = 2.0 / displayProperties.width;
+    onePixel[1] = 2.0 / displayProperties.height;
+
+    //calculate the texure rect
+    NSRect clipRect;
+    clipRect = NSMakeRect(
+        0.0, // we update the whole width, as QEMU in vga is always  
updating whole memory pages)
+        floor((float)screen.height - (rect.origin.y +  
rect.size.height) / displayProperties.dy),
+        (float)screen.width,
+        ceil(rect.size.height / displayProperties.dy));
+    int start = (int)clipRect.origin.y * screen.width * 4;
+    unsigned char *startPointer = screenBuffer;
+
+    //adapt the drawRect to the textureRect
+    rect = NSMakeRect(
+        0.0, // we update the whole width, as QEMU in vga is always  
updating whole memory pages)
+        (screen.height - (clipRect.origin.y + clipRect.size.height))  
* displayProperties.dy,
+        displayProperties.width,
+        clipRect.size.height * displayProperties.dy);
+
+    glEnable(GL_TEXTURE_RECTANGLE_ARB); // enable rectangle textures
+
+    // bind screenBuffer to texture
+    glPixelStorei(GL_UNPACK_ROW_LENGTH, screen.width); // Sets the  
appropriate unpacking row length for the bitmap.
+    glPixelStorei(GL_UNPACK_ALIGNMENT, 1); // Sets the byte-aligned  
unpacking that's needed for bitmaps that are 3 bytes per pixel.
+
+    glBindTexture (GL_TEXTURE_RECTANGLE_ARB, screen_tex); // Binds  
the texture name to the texture target.
+    glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER,  
GL_LINEAR); // Sets filtering so that it does not use a mipmap, which  
would be redundant for the texture rectangle extension
+
+    // optimize loading of texture
+    glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,  
GL_TEXTURE_STORAGE_HINT_APPLE, GL_STORAGE_SHARED_APPLE); //
+    glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE); // bypass  
OpenGL framework
+    glTextureRangeAPPLE(GL_TEXTURE_RECTANGLE_EXT,  
(int)clipRect.size.height * screen.width * 4,  
&startPointer[start]); // bypass OpenGL driver
+
+    glTexImage2D(
+        GL_TEXTURE_RECTANGLE_ARB,
+        0,
+        GL_RGBA,
+        screen.width,
+        (int)clipRect.size.height,
+        0,
  #if __LITTLE_ENDIAN__
-            CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB), // 
colorspace for OS X >= 10.4
-            kCGImageAlphaNoneSkipLast,
+        GL_RGBA,
+        GL_UNSIGNED_BYTE,
  #else
-            CGColorSpaceCreateDeviceRGB(), //colorspace for OS X <  
10.4 (actually ppc)
-            kCGImageAlphaNoneSkipFirst, //bitmapInfo
-#endif
-            dataProviderRef, //provider
-            NULL, //decode
-            0, //interpolate
-            kCGRenderingIntentDefault //intent
-        );
-// test if host support "CGImageCreateWithImageInRect" at compiletime
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
-        if (CGImageCreateWithImageInRect == NULL) { // test if  
"CGImageCreateWithImageInRect" is supported on host at runtime
+        GL_BGRA,
+        GL_UNSIGNED_INT_8_8_8_8_REV,
  #endif
-            // compatibility drawing code (draws everything) (OS X <  
10.4)
-            CGContextDrawImage (viewContextRef, CGRectMake(0, 0,  
[self bounds].size.width, [self bounds].size.height), imageRef);
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
-        } else {
-            // selective drawing code (draws only dirty rectangles)  
(OS X >= 10.4)
-            const NSRect *rectList;
-            int rectCount;
-            int i;
-            CGImageRef clipImageRef;
-            CGRect clipRect;
-
-            [self getRectsBeingDrawn:&rectList count:&rectCount];
-            for (i = 0; i < rectCount; i++) {
-                clipRect.origin.x = rectList[i].origin.x / cdx;
-                clipRect.origin.y = (float)screen.height -  
(rectList[i].origin.y + rectList[i].size.height) / cdy;
-                clipRect.size.width = rectList[i].size.width / cdx;
-                clipRect.size.height = rectList[i].size.height / cdy;
-                clipImageRef = CGImageCreateWithImageInRect(
-                    imageRef,
-                    clipRect
-                );
-                CGContextDrawImage (viewContextRef,  
cgrect(rectList[i]), clipImageRef);
-                CGImageRelease (clipImageRef);
-            }
-        }
-#endif
-        CGImageRelease (imageRef);
+        &startPointer[start]);
+
+    glBegin(GL_QUADS);
+    {
+    glTexCoord2f(0.0f, 0.0f);
+    glVertex2f(-1.0f, (GLfloat)(onePixel[1] * (rect.origin.y +  
rect.size.height) - 1.0));
+
+    glTexCoord2f(0.0f, (GLfloat)clipRect.size.height);
+    glVertex2f(-1.0f, (GLfloat)(onePixel[1] * rect.origin.y - 1.0));
+
+    glTexCoord2f((GLfloat)clipRect.size.width,  
(GLfloat)clipRect.size.height);
+    glVertex2f(1.0f, (GLfloat)(onePixel[1] * rect.origin.y - 1.0));
+
+    glTexCoord2f((GLfloat)clipRect.size.width, 0.0f);
+    glVertex2f(1.0f, (GLfloat)(onePixel[1] * (rect.origin.y +  
rect.size.height) - 1.0));
      }
+    glEnd();
+
+    glFlush();
  }

-- (void) setContentDimensions
+- (void) setContentDimensionsForFrame:(NSRect)rect
  {
-    COCOA_DEBUG("QemuCocoaView: setContentDimensions\n");
+    COCOA_DEBUG("QemuCocoaView: setContentDimensionsForFrame:  
NSRect(%f, %f, %f, %f)\n", rect.origin.x, rect.origin.y,  
rect.size.width, rect.size.height);

-    if (isFullscreen) {
-        cdx = [[NSScreen mainScreen] frame].size.width /  
(float)screen.width;
-        cdy = [[NSScreen mainScreen] frame].size.height /  
(float)screen.height;
-        cw = screen.width * cdx;
-        ch = screen.height * cdy;
-        cx = ([[NSScreen mainScreen] frame].size.width - cw) / 2.0;
-        cy = ([[NSScreen mainScreen] frame].size.height - ch) / 2.0;
-    } else {
-        cx = 0;
-        cy = 0;
-        cw = screen.width;
-        ch = screen.height;
-        cdx = 1.0;
-        cdy = 1.0;
-    }
+    displayProperties.dx = rect.size.width / (float)screen.width;
+    displayProperties.dy = rect.size.height / (float)screen.height;
+    displayProperties.width = rect.size.width;
+    displayProperties.height = rect.size.height;
+    displayProperties.x = 0.0;//([self bounds].size.width - cw) / 2.0;
+    displayProperties.y = 0.0;//([self bounds].size.height - ch) / 2.0;
+
+    [[self openGLContext] makeCurrentContext];
+    glViewport(displayProperties.x, displayProperties.y,  
displayProperties.width, displayProperties.height);
+    [self update];
  }

  - (void) resizeContentToWidth:(int)w height:(int)h displayState: 
(DisplayState *)ds
  {
-    COCOA_DEBUG("QemuCocoaView: resizeContent\n");
+    COCOA_DEBUG("QemuCocoaView: resizeContentToWidth:%i height:%i\n",  
w, h);

      // update screenBuffer
-    if (dataProviderRef)
-        CGDataProviderRelease(dataProviderRef);
      if (screenBuffer)
          free(screenBuffer);
      screenBuffer = malloc( w * 4 * h );

+    // update display state
      ds->data = screenBuffer;
      ds->linesize =  (w * 4);
      ds->depth = 32;
@@ -410,21 +435,31 @@
      ds->bgr = 0;
  #endif

-    dataProviderRef = CGDataProviderCreateWithData(NULL,  
screenBuffer, w * 4 * h, NULL);
+    // update screen state
+    screen.width = w;
+    screen.height = h;
+
+    NSSize normalWindowSize;
+    normalWindowSize = NSMakeSize(
+        (float)w * displayProperties.zoom,
+        (float)h * displayProperties.zoom + titleBarHeight
+    );
+
+    // keep Window in correct aspect ratio
+    [normalWindow setMaxSize:NSMakeSize(normalWindowSize.width,  
normalWindowSize.height)];
+    [normalWindow setAspectRatio:NSMakeSize(normalWindowSize.width,  
normalWindowSize.height)];

      // update windows
      if (isFullscreen) {
-        [[fullScreenWindow contentView] setFrame:[[NSScreen  
mainScreen] frame]];
-        [normalWindow setFrame:NSMakeRect([normalWindow  
frame].origin.x, [normalWindow frame].origin.y - h + screen.height, w,  
h + [normalWindow frame].size.height - screen.height) display:NO  
animate:NO];
+        [self setContentDimensionsForFrame:[[NSScreen mainScreen]  
frame]];
+        [normalWindow setFrame:NSMakeRect([normalWindow  
frame].origin.x, [normalWindow frame].origin.y + [normalWindow  
frame].size.height - normalWindowSize.height, normalWindowSize.width,  
normalWindowSize.height) display:NO animate:NO];
      } else {
          if (qemu_name)
              [normalWindow setTitle:[NSString stringWithFormat:@"QEMU  
%s", qemu_name]];
-        [normalWindow setFrame:NSMakeRect([normalWindow  
frame].origin.x, [normalWindow frame].origin.y - h + screen.height, w,  
h + [normalWindow frame].size.height - screen.height) display:YES  
animate:YES];
+        [self setContentDimensionsForFrame:NSMakeRect(0, 0, w *  
displayProperties.zoom, h * displayProperties.zoom)];
+        [self setFrame:NSMakeRect(0, 0, w * displayProperties.zoom, h  
* displayProperties.zoom)];
+        [normalWindow setFrame:NSMakeRect([normalWindow  
frame].origin.x, [normalWindow frame].origin.y + [normalWindow  
frame].size.height - normalWindowSize.height, normalWindowSize.width,  
normalWindowSize.height) display:YES animate:YES];
      }
-    screen.width = w;
-    screen.height = h;
-    [self setContentDimensions];
-    [self setFrame:NSMakeRect(cx, cy, cw, ch)];
  }

  - (void) toggleFullScreen:(id)sender
@@ -434,9 +469,8 @@
      if (isFullscreen) { // switch from fullscreen to desktop
          isFullscreen = FALSE;
          [self ungrabMouse];
-        [self setContentDimensions];
  // test if host support "enterFullScreenMode:withOptions" at  
compiletime
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
+#ifdef AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER
          if ([NSView  
respondsToSelector:@selector(exitFullScreenModeWithOptions:)]) { //  
test if "exitFullScreenModeWithOptions" is supported on host at runtime
              [self exitFullScreenModeWithOptions:nil];
          } else {
@@ -445,15 +479,16 @@
              [normalWindow setContentView: self];
              [normalWindow makeKeyAndOrderFront: self];
              [NSMenu setMenuBarVisible:YES];
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
+#ifdef AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER
          }
  #endif
+        [self setContentDimensionsForFrame:NSMakeRect(0.0, 0.0,  
screen.width * displayProperties.zoom, screen.height *  
displayProperties.zoom)];
      } else { // switch from desktop to fullscreen
          isFullscreen = TRUE;
          [self grabMouse];
-        [self setContentDimensions];
+        [self setContentDimensionsForFrame:NSMakeRect(0.0, 0.0,  
[[NSScreen mainScreen] frame].size.width, [[NSScreen mainScreen]  
frame].size.height)];
  // test if host support "enterFullScreenMode:withOptions" at  
compiletime
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
+#ifdef AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER
          if ([NSView  
respondsToSelector:@selector(enterFullScreenMode:withOptions:)]) { //  
test if "enterFullScreenMode:withOptions" is supported on host at  
runtime
              [self enterFullScreenMode:[NSScreen mainScreen]  
withOptions:[NSDictionary dictionaryWithObjectsAndKeys:
                  [NSNumber numberWithBool:NO],  
NSFullScreenModeAllScreens,
@@ -469,7 +504,7 @@
              [fullScreenWindow setHasShadow:NO];
              [fullScreenWindow setContentView:self];
              [fullScreenWindow makeKeyAndOrderFront:self];
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
+#ifdef AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER
          }
  #endif
      }
@@ -581,7 +616,7 @@
              break;
          case NSMouseMoved:
              if (isAbsoluteEnabled) {
-                if (p.x < 0 || p.x > screen.width || p.y < 0 || p.y >  
screen.height || ![[self window] isKeyWindow]) {
+                if (p.x < 0 || p.x > (screen.width *  
displayProperties.zoom) || p.y < 0 || p.y > (screen.height *  
displayProperties.zoom) || ![[self window] isKeyWindow]) {
                      if (isTabletEnabled) { // if we leave the  
window, deactivate the tablet
                          [NSCursor unhide];
                          isTabletEnabled = FALSE;
@@ -688,12 +723,42 @@
      isMouseGrabed = FALSE;
  }

+- (NSSize)windowWillResize:(NSWindow *)window toSize: 
(NSSize)proposedFrameSize
+{
+    COCOA_DEBUG("QemuCocoaView: windowWillResize: toSize: NSSize(%f,  
%f)\n", proposedFrameSize.width, proposedFrameSize.height);
+
+    // update zoom
+    displayProperties.zoom = proposedFrameSize.width /  
(float)screen.width;
+
+    // Update the content to new size before window is resized, if  
the new size is bigger
+    if (proposedFrameSize.width > [window frame].size.width ||  
proposedFrameSize.height > [window frame].size.height) {
+        [self setContentDimensionsForFrame:NSMakeRect(0, 0,  
proposedFrameSize.width, proposedFrameSize.height - titleBarHeight)];
+        [self setFrame:NSMakeRect(displayProperties.x,  
displayProperties.y, displayProperties.width, displayProperties.height  
- titleBarHeight)];
+    }
+
+    return proposedFrameSize;
+}
+
+- (void)windowDidResize:(NSNotification *)notification
+{
+    COCOA_DEBUG("QemuCocoaView: windowDidResize\n");
+
+    // update the content, if the size has changed
+    if (displayProperties.width != [[self window] frame].size.width  
|| displayProperties.height != [[self window] frame].size.height -  
titleBarHeight) {
+        if (isFullscreen) {
+            [self setContentDimensionsForFrame:NSMakeRect(0, 0,  
[[self window] frame].size.width, [[self window] frame].size.height)];
+        } else {
+            [self setContentDimensionsForFrame:NSMakeRect(0, 0,  
[[self window] frame].size.width, [[self window] frame].size.height -  
titleBarHeight)];
+        }
+        [self setFrame:NSMakeRect(displayProperties.x,  
displayProperties.y, displayProperties.width,  
displayProperties.height)];
+    }
+}
+
  - (void) setAbsoluteEnabled:(BOOL)tIsAbsoluteEnabled  
{isAbsoluteEnabled = tIsAbsoluteEnabled;}
  - (BOOL) isMouseGrabed {return isMouseGrabed;}
  - (BOOL) isAbsoluteEnabled {return isAbsoluteEnabled;}
-- (float) cdx {return cdx;}
-- (float) cdy {return cdy;}
  - (QEMUScreen) gscreen {return screen;}
+- (COCOADisplayProperties) displayProperties {return  
displayProperties;}
  @end


@@ -722,7 +787,7 @@
      if (self) {

          // create a view and add it to the window
-        cocoaView = [[QemuCocoaView alloc]  
initWithFrame:NSMakeRect(0.0, 0.0, 640.0, 480.0)];
+        cocoaView = [[QemuCocoaView alloc]  
initWithFrame:NSMakeRect(0.0, 0.0, 640.0, 480.0) pixelFormat: 
[NSOpenGLView defaultPixelFormat]];
          if(!cocoaView) {
              fprintf(stderr, "(cocoa) can't create a view\n");
              exit(1);
@@ -730,7 +795,7 @@

          // create a window
          normalWindow = [[NSWindow alloc] initWithContentRect: 
[cocoaView frame]
-            styleMask:NSTitledWindowMask|NSMiniaturizableWindowMask| 
NSClosableWindowMask
+            styleMask:NSTitledWindowMask|NSMiniaturizableWindowMask| 
NSClosableWindowMask|NSResizableWindowMask
              backing:NSBackingStoreBuffered defer:NO];
          if(!normalWindow) {
              fprintf(stderr, "(cocoa) can't create window\n");
@@ -740,6 +805,7 @@
          [normalWindow setTitle:[NSString stringWithFormat:@"QEMU"]];
          [normalWindow setContentView:cocoaView];
          [normalWindow makeKeyAndOrderFront:self];
+        [normalWindow setDelegate:cocoaView];

      }
      return self;
@@ -927,15 +993,12 @@
      COCOA_DEBUG("qemu_cocoa: cocoa_update\n");

      NSRect rect;
-    if ([cocoaView cdx] == 1.0) {
-        rect = NSMakeRect(x, [cocoaView gscreen].height - y - h, w, h);
-    } else {
-        rect = NSMakeRect(
-            x * [cocoaView cdx],
-            ([cocoaView gscreen].height - y - h) * [cocoaView cdy],
-            w * [cocoaView cdx],
-            h * [cocoaView cdy]);
-    }
+    rect = NSMakeRect(
+        x * [cocoaView displayProperties].dx,
+        ([cocoaView gscreen].height - y - h) * [cocoaView  
displayProperties].dy,
+        w * [cocoaView displayProperties].dx,
+        h * [cocoaView displayProperties].dy);
+
      [cocoaView displayRect:rect];
  }

--- /Users/mike/Documents/Qemu091gcc4/qemu/configure_original	 
2008-02-01 09:27:49.000000000 +0100
+++ /Users/mike/Documents/Qemu091gcc4/qemu/configure	2008-02-01  
09:33:37.000000000 +0100
@@ -154,7 +154,7 @@
  cocoa="yes"
  coreaudio="yes"
  OS_CFLAGS="-mdynamic-no-pic"
-OS_LDFLAGS="-framework CoreFoundation -framework IOKit"
+OS_LDFLAGS="-framework CoreFoundation -framework IOKit -framework  
OpenGL"
  ;;
  SunOS)
      solaris="yes"
--- /Users/mike/Documents/Qemu091gcc4/qemu/Makefile.target_original	 
2008-02-01 09:38:48.000000000 +0100
+++ /Users/mike/Documents/Qemu091gcc4/qemu/Makefile.target	2008-02-01  
09:38:32.000000000 +0100
@@ -525,7 +525,7 @@
  VL_OBJS+=gdbstub.o
  endif
  ifdef CONFIG_COCOA
-COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa -framework  
IOKit
+COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa -framework  
IOKit -framework OpenGL
  ifdef CONFIG_COREAUDIO
  COCOA_LIBS+=-framework CoreAudio
  endif


[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 2111 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH] OpenGL for OS X
  2008-02-01 16:45 [Qemu-devel] [PATCH] OpenGL for OS X Mike Kronenberg
@ 2008-02-05  9:05 ` Alexander Graf
  2008-02-05 16:06   ` Anthony Liguori
  2008-02-16  7:54 ` Mike Kronenberg
  1 sibling, 1 reply; 9+ messages in thread
From: Alexander Graf @ 2008-02-05  9:05 UTC (permalink / raw)
  To: qemu-devel

On Feb 1, 2008, at 5:45 PM, Mike Kronenberg wrote:

> After a little discussion on the list, I made this patch for  
> cocoa.m, to replace CoreGraphic by OpenGL.

Great! Thank you.

> It's way faster than CG, but it requires a Mac with OpenGL capable  
> Graphics Card and at least 8mb of VRAM.
> I think starting with G4 and Highend G3, this requirements are met.

Maybe I will try if I find some spare time, but as far as I know Apple  
provides a quite powerful OpenGL emulation. Last time I ran osx on  
Vesa output, everything worked just fine.

> features:
> [new] draws dirty lines of the window as needed, implemented with  
> OpenGL (used the extensions as proposed by Pierre)
> [new] window can be resized
> [fix] conditional builds for Leopard, without linking to a specific  
> sdk
> [fix] lineflicker in fullscreen mode
>
> The Question is, where to draw the line - or - if it needs a switch  
> for CG/OpenGL support for cocoa.

As this OpenGL implementation is based on the Apple pass-through  
extensions, I don't think it'd make a good start for a generic  
implementation. Additionally I believe SDL is a good choice for the  
output too, as they implement optimizations for the specific  
platforms. The only sad part is that I have not seen a 64-bit capable  
SDL on Mac OS X ;-).

> Please test and comment.
>
> Mike
>
> [1] http://www.kberg.ch/qemu/091patches/cocoa_m_OpenGL.diff.gz
>

Apart from this core dump which I received after playing a bit with an  
ubuntu image, the patch looks fine to me. It's a lot faster than the  
previous one.

Regards,

Alex

Process:         qemu-system-x86_64 [58929]
Path:            /Users/alex/Documents/business/suse/qemu.patches.mac/ 
qemu.nonpatched/qemu/x86_64-softmmu/qemu-system-x86_64
Identifier:      qemu-system-x86_64
Version:         ??? (???)
Code Type:       X86-64 (Native)
Parent Process:  bash [1763]

Date/Time:       2008-02-05 09:56:07.071 +0100
OS Version:      Mac OS X 10.5.1 (9B18)
Report Version:  6

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000239ae600
Crashed Thread:  0

Thread 0 Crashed:
0   libGLImage.dylib              	0x00007fff8464e490 void  
glgConvertTo_32<GLGConverter_ABGR8_ARGB8, (GLGMemory)1>(GLGOperation  
const*, GLDPixelMode const*) + 96
1   libGLImage.dylib              	0x00007fff84627eb3  
glgProcessPixelsWithProcessor + 1187
2   ...er.AppleIntelGMA950GLDriver	0x0000000003599adc  
glrLoadSysTexture + 4188
3   ...er.AppleIntelGMA950GLDriver	0x000000000357f8cc  
glrLoadCurrentTextures + 556
4   ...er.AppleIntelGMA950GLDriver	0x00000000035b2f0a  
gldUpdateDispatch + 394
5   GLEngine                      	0x0000000014cd8fee glBegin_Exec + 302
6   qemu-system-x86_64            	0x0000000001089dca -[QemuCocoaView  
drawRect:] + 506 (cocoa.m:384)
7   com.apple.AppKit              	0x00007fff8396f479 -[NSView  
_drawRect:clip:] + 3618
8   com.apple.AppKit              	0x00007fff8396dfeb -[NSView  
_recursiveDisplayAllDirtyWithLockFocus:visRect:] + 1234
9   com.apple.AppKit              	0x00007fff8396e37e -[NSView  
_recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2149
10  com.apple.AppKit              	0x00007fff8396c7c5 -[NSView  
_recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView 
:] + 806
11  com.apple.AppKit              	0x00007fff8396c06c -[NSThemeFrame  
_recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView 
:] + 328
12  com.apple.AppKit              	0x00007fff839688dc -[NSView  
_displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] +  
3008
13  com.apple.AppKit              	0x00007fff838a63cd -[NSView  
displayIfNeeded] + 1190
14  com.apple.AppKit              	0x00007fff8395b90b -[NSWindow  
_setFrameCommon:display:stashSize:] + 1615
15  com.apple.AppKit              	0x00007fff839ae2e8  
_NSMoveHelperTimerCallBack + 1115
16  com.apple.CoreFoundation      	0x00007fff821ff5f5  
CFRunLoopRunSpecific + 3813
17  com.apple.AppKit              	0x00007fff83b0a5c6 -[NSMoveHelper  
_doAnimation] + 1012
18  com.apple.AppKit              	0x00007fff83b86af3 -[NSMoveHelper  
_resizeWindow:toFrame:display:] + 535
19  com.apple.AppKit              	0x00007fff83996c68 -[NSWindow  
setFrame:display:animate:] + 955
20  qemu-system-x86_64            	0x0000000001089979 -[QemuCocoaView  
resizeContentToWidth:height:displayState:] + 1065 (cocoa.m:463)
21  qemu-system-x86_64            	0x0000000001030957  
vga_update_display + 2679 (vga.c:1495)
22  qemu-system-x86_64            	0x0000000001007e4f gui_update + 15  
(vl.c:7173)
23  qemu-system-x86_64            	0x0000000001001cc6 qemu_run_timers  
+ 54 (vl.c:1069)
24  qemu-system-x86_64            	0x0000000001008b3a main_loop_wait +  
650 (vl.c:7445)
25  qemu-system-x86_64            	0x0000000001009ee1 qemu_main + 4817  
(vl.c:7527)
26  qemu-system-x86_64            	0x00000000010879fe - 
[QemuCocoaAppController startEmulationWithArgc:argv:] + 14 (cocoa.m:855)
27  com.apple.Foundation          	0x00007fff810399e0 _nsnote_callback  
+ 112
28  com.apple.CoreFoundation      	0x00007fff821e2846  
_CFXNotificationPostNotification + 566
29  com.apple.Foundation          	0x00007fff81036de6 - 
[NSNotificationCenter postNotificationName:object:userInfo:] + 102
30  com.apple.AppKit              	0x00007fff83930454 -[NSApplication  
_postDidFinishNotification] + 104
31  com.apple.AppKit              	0x00007fff8393037f -[NSApplication  
_sendFinishLaunchingNotification] + 78
32  com.apple.AppKit              	0x00007fff838a6c9d - 
[NSApplication(NSAppleEventHandling) _handleAEOpen:] + 239
33  com.apple.AppKit              	0x00007fff838a6582 - 
[NSApplication(NSAppleEventHandling) _handleCoreEvent:withReplyEvent:]  
+ 84
34  com.apple.Foundation          	0x00007fff8105dc27 - 
[NSAppleEventManager  
dispatchRawAppleEvent:withRawReply:handlerRefCon:] + 375
35  com.apple.Foundation          	0x00007fff8105da45  
_NSAppleEventManagerGenericHandler + 117
36  com.apple.AE                  	0x00007fff833d3717  
aeDispatchAppleEvent(AEDesc const*, AEDesc*, unsigned int, unsigned  
char*) + 123
37  com.apple.AE                  	0x00007fff833c138b  
dispatchEventAndSendReply(AEDesc const*, AEDesc*) + 41
38  com.apple.AE                  	0x00007fff833c122d  
aeProcessAppleEvent + 179
39  com.apple.HIToolbox           	0x00007fff81659a77  
AEProcessAppleEvent + 34
40  com.apple.AppKit              	0x00007fff838a41d2 _DPSNextEvent +  
1068
41  com.apple.AppKit              	0x00007fff838a39fc -[NSApplication  
nextEventMatchingMask:untilDate:inMode:dequeue:] + 136
42  com.apple.AppKit              	0x00007fff8389d796 -[NSApplication  
run] + 455
43  qemu-system-x86_64            	0x0000000001088313 main + 1651  
(cocoa.m:982)
44  qemu-system-x86_64            	0x0000000001001124 start + 52

Thread 1:
0   libSystem.B.dylib             	0x00007fff819657de __semwait_signal  
+ 10
1   libGLProgrammability.dylib    	0x00007fff824aba7b glvmDoWork + 155
2   libSystem.B.dylib             	0x00007fff8198c1e3 _pthread_start +  
316
3   libSystem.B.dylib             	0x00007fff8198c0a5 thread_start + 13

Thread 0 crashed with X86 Thread State (64-bit):
   rax: 0x0000000000000280  rbx: 0x0000000000000a00  rcx:  
0x0000000000000000  rdx: 0x00000000239ae600
   rdi: 0x00007fff5fbf89f0  rsi: 0x0000000023adbf40  rbp:  
0x00007fff5fbf8740  rsp: 0x00007fff5fbf8728
    r8: 0x00000000239ae600   r9: 0x0000000023adc940  r10:  
0x0000000023adbf40  r11: 0x00000000000001e1
   r12: 0x0000000000000a00  r13: 0x0000000000000a00  r14:  
0x00007fff5fbf87e0  r15: 0x0000000003894338
   rip: 0x00007fff8464e490  rfl: 0x0000000000010246  cr2:  
0x00000000239ae600

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH] OpenGL for OS X
  2008-02-05  9:05 ` Alexander Graf
@ 2008-02-05 16:06   ` Anthony Liguori
  2008-02-05 16:29     ` Johannes Schindelin
  0 siblings, 1 reply; 9+ messages in thread
From: Anthony Liguori @ 2008-02-05 16:06 UTC (permalink / raw)
  To: qemu-devel

Alexander Graf wrote:
> On Feb 1, 2008, at 5:45 PM, Mike Kronenberg wrote:
>
>> After a little discussion on the list, I made this patch for cocoa.m, 
>> to replace CoreGraphic by OpenGL.
>
> Great! Thank you.
>
>> It's way faster than CG, but it requires a Mac with OpenGL capable 
>> Graphics Card and at least 8mb of VRAM.
>> I think starting with G4 and Highend G3, this requirements are met.
>
> Maybe I will try if I find some spare time, but as far as I know Apple 
> provides a quite powerful OpenGL emulation. Last time I ran osx on 
> Vesa output, everything worked just fine.
>
>> features:
>> [new] draws dirty lines of the window as needed, implemented with 
>> OpenGL (used the extensions as proposed by Pierre)
>> [new] window can be resized
>> [fix] conditional builds for Leopard, without linking to a specific sdk
>> [fix] lineflicker in fullscreen mode
>>
>> The Question is, where to draw the line - or - if it needs a switch 
>> for CG/OpenGL support for cocoa.
>
> As this OpenGL implementation is based on the Apple pass-through 
> extensions, I don't think it'd make a good start for a generic 
> implementation. Additionally I believe SDL is a good choice for the 
> output too, as they implement optimizations for the specific 
> platforms. The only sad part is that I have not seen a 64-bit capable 
> SDL on Mac OS X ;-).

I would really like to use OpenGL on non-Apple platforms.  OpenGL gives 
much better scaling than SDL.  Typically, and OpenGL app has very little 
platform specific code.  It would be nice if we could use similar code here.

Regards,

Anthony Liguori

>> Please test and comment.
>>
>> Mike
>>
>> [1] http://www.kberg.ch/qemu/091patches/cocoa_m_OpenGL.diff.gz
>>
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH] OpenGL for OS X
  2008-02-05 16:06   ` Anthony Liguori
@ 2008-02-05 16:29     ` Johannes Schindelin
  2008-02-05 16:34       ` Anthony Liguori
  0 siblings, 1 reply; 9+ messages in thread
From: Johannes Schindelin @ 2008-02-05 16:29 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: qemu-devel

Hi,

On Tue, 5 Feb 2008, Anthony Liguori wrote:

> I would really like to use OpenGL on non-Apple platforms.  OpenGL gives 
> much better scaling than SDL.  Typically, and OpenGL app has very little 
> platform specific code.  It would be nice if we could use similar code 
> here.

But SDL runs on many more platforms than those which have OpenGL.

So if at all, this should be optional, and not replace SDL.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH] OpenGL for OS X
  2008-02-05 16:29     ` Johannes Schindelin
@ 2008-02-05 16:34       ` Anthony Liguori
  2008-02-05 16:45         ` Fabrice Bellard
  0 siblings, 1 reply; 9+ messages in thread
From: Anthony Liguori @ 2008-02-05 16:34 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: qemu-devel

Johannes Schindelin wrote:
> Hi,
>
> On Tue, 5 Feb 2008, Anthony Liguori wrote:
>
>   
>> I would really like to use OpenGL on non-Apple platforms.  OpenGL gives 
>> much better scaling than SDL.  Typically, and OpenGL app has very little 
>> platform specific code.  It would be nice if we could use similar code 
>> here.
>>     
>
> But SDL runs on many more platforms than those which have OpenGL.
>
> So if at all, this should be optional, and not replace SDL.
>   

Absolutely.  My thinking was just that if we're already going to have 
OpenGL code to support OS X (where SDL isn't an option), then we might 
as well make it so it's usable elsewhere.

Regards,

Anthony Liguori

> Ciao,
> Dscho
>
>   

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH] OpenGL for OS X
  2008-02-05 16:34       ` Anthony Liguori
@ 2008-02-05 16:45         ` Fabrice Bellard
  2008-02-06  6:00           ` Gwenole Beauchesne
  0 siblings, 1 reply; 9+ messages in thread
From: Fabrice Bellard @ 2008-02-05 16:45 UTC (permalink / raw)
  To: qemu-devel

Anthony Liguori wrote:
> Johannes Schindelin wrote:
>> Hi,
>>
>> On Tue, 5 Feb 2008, Anthony Liguori wrote:
>>
>>  
>>> I would really like to use OpenGL on non-Apple platforms.  OpenGL 
>>> gives much better scaling than SDL.  Typically, and OpenGL app has 
>>> very little platform specific code.  It would be nice if we could use 
>>> similar code here.
>>>     
>>
>> But SDL runs on many more platforms than those which have OpenGL.
>>
>> So if at all, this should be optional, and not replace SDL.
>>   
> 
> Absolutely.  My thinking was just that if we're already going to have 
> OpenGL code to support OS X (where SDL isn't an option), then we might 
> as well make it so it's usable elsewhere.

This is an SDL related issue (i.e. SDL may or may not use OpenGL to 
display graphics). Fixing SDL for Mac OS X would also be interesting.

Regards,

Fabrice.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH] OpenGL for OS X
  2008-02-05 16:45         ` Fabrice Bellard
@ 2008-02-06  6:00           ` Gwenole Beauchesne
  2008-02-06 12:39             ` Philip Boulain
  0 siblings, 1 reply; 9+ messages in thread
From: Gwenole Beauchesne @ 2008-02-06  6:00 UTC (permalink / raw)
  To: qemu-devel

Hi,

2008/2/5, Fabrice Bellard <fabrice@bellard.org>:

> This is an SDL related issue (i.e. SDL may or may not use OpenGL to
> display graphics). Fixing SDL for Mac OS X would also be interesting.

I think SDL trunk (1.3) supports OpenGL rendering more specifically
for various platforms.

Besides, on my MacBook, fullscreen SDL with a HW surface can indeed
perform much better (550 Mpixels/sec) than fullscreen GL (190
Mpixels/sec). With a SW surface, results are equivalent to GL though.

In windowed (800x600) mode, SDL performs at 28 Mpixels/sec and GL at
150 Mpixels/sec. So, SDL 1.2 for OSX (CG?) in windowed mode is indeed
sub-optimal. I have not tried with SDL trunk yet.

You can get my tests as svn co
http://svn.beauchesne.info/svn/gwenole/projects/blitter-tests/trunk
blitter-tests

Note: I am not sure if I am using GL/PBOs correctly though I followed
the specs. I mean the tests run e.g. on Linux but not on Windows with
the same level of drivers (nvidia 169.xx). In the latter case, the
program crashes in glUnmapBuffer()...

Regards,
Gwenolé.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH] OpenGL for OS X
  2008-02-06  6:00           ` Gwenole Beauchesne
@ 2008-02-06 12:39             ` Philip Boulain
  0 siblings, 0 replies; 9+ messages in thread
From: Philip Boulain @ 2008-02-06 12:39 UTC (permalink / raw)
  To: qemu-devel

On 6 Feb 2008, at 06:00, Gwenole Beauchesne wrote:
> 2008/2/5, Fabrice Bellard <fabrice@bellard.org>:
>> This is an SDL related issue (i.e. SDL may or may not use OpenGL to
>> display graphics). Fixing SDL for Mac OS X would also be interesting.
>
> I think SDL trunk (1.3) supports OpenGL rendering more specifically
> for various platforms.
>
> Besides, on my MacBook, fullscreen SDL with a HW surface can indeed
> perform much better (550 Mpixels/sec) than fullscreen GL (190
> Mpixels/sec). With a SW surface, results are equivalent to GL though.
>
> In windowed (800x600) mode, SDL performs at 28 Mpixels/sec and GL at
> 150 Mpixels/sec. So, SDL 1.2 for OSX (CG?) in windowed mode is indeed
> sub-optimal. I have not tried with SDL trunk yet.
>
> You can get my tests as svn co
> http://svn.beauchesne.info/svn/gwenole/projects/blitter-tests/trunk
> blitter-tests

After some more figures? Modern MacBook Pro (ATI Radeon X1600),  
just ./configure'd and make'd with defaults:

WINDOWED

X11 (Apple's server, circa OS X 10.4) best:
* Testing XShmPutImage()
   607 frames in 10.0 secs, 60.53 fps, 47.600 Mpixels/sec

SDL (1.2.12 stable release) best:
* Testing SDL_Blit() with RGB masks 00ff0000,0000ff00,000000ff
   600 frames in 10.0 secs, 59.86 fps, 47.078 Mpixels/sec

OpenGL (without pixel buffer objects; with was slower) best:
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_BGRA, type GL_UNSIGNED_INT_8_8_8_8_REV
   2628 frames in 10.0 secs, 262.67 fps, 206.571 Mpixels/sec

FULLSCREEN

X11 could only produce a screen-size window; it achieved 28.1 Mp/s  
for comparison.

* Testing SDL_Blit() with RGB masks 00ff0000,0000ff00,000000ff
   1379 frames in 10.0 secs, 137.78 fps, 178.558 Mpixels/sec

* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_BGRA, type GL_UNSIGNED_INT_8_8_8_8_REV
   1845 frames in 10.0 secs, 184.37 fps, 238.945 Mpixels/sec

So, yes, can confirm that stable SDL is currently slooow in windowed  
mode compared to OGL, and still slower in fullscreen. Interestingly,  
use of pixel buffer objects made things /slower/ here. I noted very  
heavy CPU activity for glperf for the GL_TEXTURE_2D, format GL_BGRA,  
type GL_UNSIGNED_BYTE case, too (also the fastest, RECTANGLE_ARB  
case, but this may have just been that it was shunting so much more  
data).

Full details below.

LionsPhil

--- WINDOWED ---

#
# Running program x11perf
#
Global test configuration:
   Per-test duration: 10 seconds
   Display size: 1024x768, 24 bpp, windowed mode
* Testing XPutImage()
   361 frames in 10.0 secs, 35.96 fps, 28.279 Mpixels/sec
* Testing XShmPutImage()
   607 frames in 10.0 secs, 60.53 fps, 47.600 Mpixels/sec

#
# Running program sdlperf
#
Test global configuration:
   Per-test duration: 10 seconds
   Display size: 1024x768, 32 bpp, windowed mode, SW surface
* Testing SDL_Blit() with RGB masks 00ff0000,0000ff00,000000ff
   600 frames in 10.0 secs, 59.86 fps, 47.078 Mpixels/sec
* Testing SDL_Blit() with RGB masks 000000ff,0000ff00,00ff0000
   303 frames in 10.1 secs, 30.11 fps, 23.677 Mpixels/sec

#
# Running program glperf
#
OpenGL version   : 2.0 ATI-1.4.56
OpenGL vendor    : ATI Technologies Inc.
OpenGL renderer  : ATI Radeon X1600 OpenGL Engine
OpenGL extensions:
   GL_APPLE_client_storage
   GL_APPLE_texture_range
   GL_APPLE_packed_pixels
   GL_EXT_abgr
   GL_EXT_bgra
   GL_ARB_shading_language_100
   GL_ARB_fragment_program
   GL_ARB_fragment_shader
   GL_ARB_pixel_buffer_object
   GL_EXT_framebuffer_object
   GL_EXT_texture_rectangle
   GL_ARB_texture_rectangle
   GL_ARB_texture_non_power_of_two
   GL_ARB_imaging
   GL_SGI_color_matrix
Global test configuration:
   Per-test duration: 10 seconds
   Display size: 1024x768, 32 bpp, windowed mode
   Use non-power-of-two textures           : yes
   Use pixel buffer objects                : no
   Use Apple client storage extension      : no
   Use Apple texture range extension       : no
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_RGB,  
type GL_UNSIGNED_BYTE
   257 frames in 10.0 secs, 25.58 fps, 20.115 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_RGBA,  
type GL_UNSIGNED_BYTE
   2397 frames in 10.0 secs, 239.56 fps, 188.395 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_BGRA,  
type GL_UNSIGNED_BYTE
   1034 frames in 10.0 secs, 103.21 fps, 81.171 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_BGRA,  
type GL_UNSIGNED_INT_8_8_8_8_REV
   2618 frames in 10.0 secs, 261.62 fps, 205.744 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_RGB, type GL_UNSIGNED_BYTE
   259 frames in 10.1 secs, 25.75 fps, 20.251 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_RGBA, type GL_UNSIGNED_BYTE
   2377 frames in 10.0 secs, 237.53 fps, 186.804 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_BGRA, type GL_UNSIGNED_BYTE
   1034 frames in 10.0 secs, 103.22 fps, 81.179 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_BGRA, type GL_UNSIGNED_INT_8_8_8_8_REV
   2628 frames in 10.0 secs, 262.67 fps, 206.571 Mpixels/sec

#
# Running program glperf --pbo
#
OpenGL version   : 2.0 ATI-1.4.56
OpenGL vendor    : ATI Technologies Inc.
OpenGL renderer  : ATI Radeon X1600 OpenGL Engine
OpenGL extensions:
   GL_APPLE_client_storage
   GL_APPLE_texture_range
   GL_APPLE_packed_pixels
   GL_EXT_abgr
   GL_EXT_bgra
   GL_ARB_shading_language_100
   GL_ARB_fragment_program
   GL_ARB_fragment_shader
   GL_ARB_pixel_buffer_object
   GL_EXT_framebuffer_object
   GL_EXT_texture_rectangle
   GL_ARB_texture_rectangle
   GL_ARB_texture_non_power_of_two
   GL_ARB_imaging
   GL_SGI_color_matrix
Global test configuration:
   Per-test duration: 10 seconds
   Display size: 1024x768, 32 bpp, windowed mode
   Use non-power-of-two textures           : yes
   Use pixel buffer objects                : yes, copy mode
   Use Apple client storage extension      : no
   Use Apple texture range extension       : no
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_RGB,  
type GL_UNSIGNED_BYTE
   250 frames in 10.1 secs, 24.80 fps, 19.507 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_RGBA,  
type GL_UNSIGNED_BYTE
   1579 frames in 10.0 secs, 157.79 fps, 124.091 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_BGRA,  
type GL_UNSIGNED_BYTE
   1580 frames in 10.0 secs, 157.83 fps, 124.120 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_BGRA,  
type GL_UNSIGNED_INT_8_8_8_8_REV
   1580 frames in 10.0 secs, 157.91 fps, 124.182 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_RGB, type GL_UNSIGNED_BYTE
   251 frames in 10.1 secs, 24.95 fps, 19.620 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_RGBA, type GL_UNSIGNED_BYTE
   1579 frames in 10.0 secs, 157.79 fps, 124.091 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_BGRA, type GL_UNSIGNED_BYTE
   1580 frames in 10.0 secs, 157.87 fps, 124.157 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_BGRA, type GL_UNSIGNED_INT_8_8_8_8_REV
   1579 frames in 10.0 secs, 157.79 fps, 124.091 Mpixels/sec

#
# Running program glperf --persistent-pbo
#
OpenGL version   : 2.0 ATI-1.4.56
OpenGL vendor    : ATI Technologies Inc.
OpenGL renderer  : ATI Radeon X1600 OpenGL Engine
OpenGL extensions:
   GL_APPLE_client_storage
   GL_APPLE_texture_range
   GL_APPLE_packed_pixels
   GL_EXT_abgr
   GL_EXT_bgra
   GL_ARB_shading_language_100
   GL_ARB_fragment_program
   GL_ARB_fragment_shader
   GL_ARB_pixel_buffer_object
   GL_EXT_framebuffer_object
   GL_EXT_texture_rectangle
   GL_ARB_texture_rectangle
   GL_ARB_texture_non_power_of_two
   GL_ARB_imaging
   GL_SGI_color_matrix
Global test configuration:
   Per-test duration: 10 seconds
   Display size: 1024x768, 32 bpp, windowed mode
   Use non-power-of-two textures           : yes
   Use pixel buffer objects                : yes, persistent mode
   Use Apple client storage extension      : no
   Use Apple texture range extension       : no
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_RGB,  
type GL_UNSIGNED_BYTE
   259 frames in 10.1 secs, 25.70 fps, 20.215 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_RGBA,  
type GL_UNSIGNED_BYTE
   1469 frames in 10.0 secs, 146.78 fps, 115.435 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_BGRA,  
type GL_UNSIGNED_BYTE
   1522 frames in 10.0 secs, 152.06 fps, 119.587 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_BGRA,  
type GL_UNSIGNED_INT_8_8_8_8_REV
   1522 frames in 10.0 secs, 152.06 fps, 119.587 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_RGB, type GL_UNSIGNED_BYTE
   260 frames in 10.0 secs, 25.87 fps, 20.348 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_RGBA, type GL_UNSIGNED_BYTE
   1516 frames in 10.0 secs, 151.45 fps, 119.104 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_BGRA, type GL_UNSIGNED_BYTE
   1521 frames in 10.0 secs, 151.96 fps, 119.509 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_BGRA, type GL_UNSIGNED_INT_8_8_8_8_REV
   1521 frames in 10.0 secs, 151.99 fps, 119.533 Mpixels/sec

--- FULLSCREEN ---

#
# Running program x11perf
#
Global test configuration:
   Per-test duration: 10 seconds
   Display size: 1440x900, 24 bpp, fullscreen mode
* Testing XPutImage()
   219 frames in 10.0 secs, 21.81 fps, 28.261 Mpixels/sec
* Testing XShmPutImage()
   X SHM extension returned an error, disabling
   218 frames in 10.1 secs, 21.68 fps, 28.100 Mpixels/sec

#
# Running program sdlperf
#
Test global configuration:
   Per-test duration: 10 seconds
   Display size: 1440x900, 32 bpp, fullscreen mode, SW surface
* Testing SDL_Blit() with RGB masks 00ff0000,0000ff00,000000ff
   1379 frames in 10.0 secs, 137.78 fps, 178.558 Mpixels/sec
* Testing SDL_Blit() with RGB masks 000000ff,0000ff00,00ff0000
   322 frames in 10.1 secs, 32.02 fps, 41.503 Mpixels/sec

#
# Running program glperf
#
OpenGL version   : 2.0 ATI-1.4.56
OpenGL vendor    : ATI Technologies Inc.
OpenGL renderer  : ATI Radeon X1600 OpenGL Engine
OpenGL extensions:
   GL_APPLE_client_storage
   GL_APPLE_texture_range
   GL_APPLE_packed_pixels
   GL_EXT_abgr
   GL_EXT_bgra
   GL_ARB_shading_language_100
   GL_ARB_fragment_program
   GL_ARB_fragment_shader
   GL_ARB_pixel_buffer_object
   GL_EXT_framebuffer_object
   GL_EXT_texture_rectangle
   GL_ARB_texture_rectangle
   GL_ARB_texture_non_power_of_two
   GL_ARB_imaging
   GL_SGI_color_matrix
Global test configuration:
   Per-test duration: 10 seconds
   Display size: 1440x900, 32 bpp, fullscreen mode
   Use non-power-of-two textures           : yes
   Use pixel buffer objects                : no
   Use Apple client storage extension      : no
   Use Apple texture range extension       : no
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_RGB,  
type GL_UNSIGNED_BYTE
   158 frames in 10.1 secs, 15.60 fps, 20.222 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_RGBA,  
type GL_UNSIGNED_BYTE
   1412 frames in 10.0 secs, 141.06 fps, 182.812 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_BGRA,  
type GL_UNSIGNED_BYTE
   669 frames in 10.0 secs, 66.71 fps, 86.460 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_BGRA,  
type GL_UNSIGNED_INT_8_8_8_8_REV
   1843 frames in 10.0 secs, 184.12 fps, 238.614 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_RGB, type GL_UNSIGNED_BYTE
   159 frames in 10.1 secs, 15.73 fps, 20.390 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_RGBA, type GL_UNSIGNED_BYTE
   1532 frames in 10.0 secs, 153.06 fps, 198.369 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_BGRA, type GL_UNSIGNED_BYTE
   668 frames in 10.0 secs, 66.67 fps, 86.409 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_BGRA, type GL_UNSIGNED_INT_8_8_8_8_REV
   1845 frames in 10.0 secs, 184.37 fps, 238.945 Mpixels/sec

#
# Running program glperf --pbo
#
OpenGL version   : 2.0 ATI-1.4.56
OpenGL vendor    : ATI Technologies Inc.
OpenGL renderer  : ATI Radeon X1600 OpenGL Engine
OpenGL extensions:
   GL_APPLE_client_storage
   GL_APPLE_texture_range
   GL_APPLE_packed_pixels
   GL_EXT_abgr
   GL_EXT_bgra
   GL_ARB_shading_language_100
   GL_ARB_fragment_program
   GL_ARB_fragment_shader
   GL_ARB_pixel_buffer_object
   GL_EXT_framebuffer_object
   GL_EXT_texture_rectangle
   GL_ARB_texture_rectangle
   GL_ARB_texture_non_power_of_two
   GL_ARB_imaging
   GL_SGI_color_matrix
Global test configuration:
   Per-test duration: 10 seconds
   Display size: 1440x900, 32 bpp, fullscreen mode
   Use non-power-of-two textures           : yes
   Use pixel buffer objects                : yes, copy mode
   Use Apple client storage extension      : no
   Use Apple texture range extension       : no
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_RGB,  
type GL_UNSIGNED_BYTE
   152 frames in 10.1 secs, 15.00 fps, 19.446 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_RGBA,  
type GL_UNSIGNED_BYTE
   1068 frames in 10.0 secs, 106.68 fps, 138.261 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_BGRA,  
type GL_UNSIGNED_BYTE
   1071 frames in 10.0 secs, 106.94 fps, 138.594 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_BGRA,  
type GL_UNSIGNED_INT_8_8_8_8_REV
   1071 frames in 10.0 secs, 106.96 fps, 138.621 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_RGB, type GL_UNSIGNED_BYTE
   152 frames in 10.1 secs, 15.10 fps, 19.566 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_RGBA, type GL_UNSIGNED_BYTE
   1072 frames in 10.0 secs, 107.05 fps, 138.737 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_BGRA, type GL_UNSIGNED_BYTE
   1072 frames in 10.0 secs, 107.10 fps, 138.806 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_BGRA, type GL_UNSIGNED_INT_8_8_8_8_REV
   1072 frames in 10.0 secs, 107.05 fps, 138.737 Mpixels/sec

#
# Running program glperf --persistent-pbo
#
OpenGL version   : 2.0 ATI-1.4.56
OpenGL vendor    : ATI Technologies Inc.
OpenGL renderer  : ATI Radeon X1600 OpenGL Engine
OpenGL extensions:
   GL_APPLE_client_storage
   GL_APPLE_texture_range
   GL_APPLE_packed_pixels
   GL_EXT_abgr
   GL_EXT_bgra
   GL_ARB_shading_language_100
   GL_ARB_fragment_program
   GL_ARB_fragment_shader
   GL_ARB_pixel_buffer_object
   GL_EXT_framebuffer_object
   GL_EXT_texture_rectangle
   GL_ARB_texture_rectangle
   GL_ARB_texture_non_power_of_two
   GL_ARB_imaging
   GL_SGI_color_matrix
Global test configuration:
   Per-test duration: 10 seconds
   Display size: 1440x900, 32 bpp, fullscreen mode
   Use non-power-of-two textures           : yes
   Use pixel buffer objects                : yes, persistent mode
   Use Apple client storage extension      : no
   Use Apple texture range extension       : no
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_RGB,  
type GL_UNSIGNED_BYTE
   158 frames in 10.1 secs, 15.64 fps, 20.270 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_RGBA,  
type GL_UNSIGNED_BYTE
   1038 frames in 10.0 secs, 103.63 fps, 134.310 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_BGRA,  
type GL_UNSIGNED_BYTE
   1038 frames in 10.0 secs, 103.64 fps, 134.323 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_2D, format GL_BGRA,  
type GL_UNSIGNED_INT_8_8_8_8_REV
   1039 frames in 10.0 secs, 103.77 fps, 134.480 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_RGB, type GL_UNSIGNED_BYTE
   158 frames in 10.1 secs, 15.70 fps, 20.349 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_RGBA, type GL_UNSIGNED_BYTE
   1015 frames in 10.0 secs, 101.39 fps, 131.399 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_BGRA, type GL_UNSIGNED_BYTE
   1039 frames in 10.0 secs, 103.74 fps, 134.453 Mpixels/sec
* Testing glTexSubImage2D with target GL_TEXTURE_RECTANGLE_ARB,  
format GL_BGRA, type GL_UNSIGNED_INT_8_8_8_8_REV
   1040 frames in 10.0 secs, 103.82 fps, 134.555 Mpixels/sec

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH] OpenGL for OS X
  2008-02-01 16:45 [Qemu-devel] [PATCH] OpenGL for OS X Mike Kronenberg
  2008-02-05  9:05 ` Alexander Graf
@ 2008-02-16  7:54 ` Mike Kronenberg
  1 sibling, 0 replies; 9+ messages in thread
From: Mike Kronenberg @ 2008-02-16  7:54 UTC (permalink / raw)
  To: qemu-devel

[-- Attachment #1: Type: text/plain, Size: 985 bytes --]

On 01.02.2008, at 17:45, Mike Kronenberg wrote:

> After a little discussion on the list, I made this patch for  
> cocoa.m, to replace CoreGraphic by OpenGL.
>
> It's way faster than CG, but it requires a Mac with OpenGL capable  
> Graphics Card and at least 8mb of VRAM.
> I think starting with G4 and Highend G3, this requirements are met.
>
> features:
> [new] draws dirty lines of the window as needed, implemented with  
> OpenGL (used the extensions as proposed by Pierre)
> [new] window can be resized
> [fix] conditional builds for Leopard, without linking to a specific  
> sdk
> [fix] lineflicker in fullscreen mode
>
> The Question is, where to draw the line - or - if it needs a switch  
> for CG/OpenGL support for cocoa.
>
> Please test and comment.
>
> Mike
>
> [1] http://www.kberg.ch/qemu/091patches/cocoa_m_OpenGL.diff.gz

Just wanted to ask, if this OpenGL patch for cocoa gets applied,
else I have to fix two minor issues with the my CoreGraphics for cocoa.

Mike

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 2111 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2008-02-16  7:54 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-01 16:45 [Qemu-devel] [PATCH] OpenGL for OS X Mike Kronenberg
2008-02-05  9:05 ` Alexander Graf
2008-02-05 16:06   ` Anthony Liguori
2008-02-05 16:29     ` Johannes Schindelin
2008-02-05 16:34       ` Anthony Liguori
2008-02-05 16:45         ` Fabrice Bellard
2008-02-06  6:00           ` Gwenole Beauchesne
2008-02-06 12:39             ` Philip Boulain
2008-02-16  7:54 ` Mike Kronenberg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).