VirtualBox

Changeset 33093 in vbox for trunk/src


Ignore:
Timestamp:
Oct 13, 2010 10:29:43 AM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
66622
Message:

crOpenGL/wddm: huge aero speedup with GL_EXT_framebuffer_blit, working but more cases to check/fix

Location:
trunk/src/VBox
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/basetexture.c

    r33046 r33093  
    6868    texture->baseTexture.pow2Matrix_identity = TRUE;
    6969#if defined(VBOX_WITH_WDDM) && defined(DEBUG_leo)
    70     texture->baseTexture.t_mirror = TRUE;
     70    texture->baseTexture.t_mirror = FALSE;
    7171#else
    7272    texture->baseTexture.t_mirror = FALSE;
  • TabularUnified trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/device.c

    r32622 r33093  
    58005800            RECT windowsize;
    58015801            UINT h;
     5802           
    58025803            ClientToScreen(context->win_handle, &offset);
    58035804            GetClientRect(context->win_handle, &windowsize);
    58045805            h = windowsize.bottom - windowsize.top;
     5806#ifdef DEBUG_leo
     5807            if (offset.x!=0 || offset.y!=0 || h!=((IWineD3DSurfaceImpl *)src_surface)->currentDesc.Height)
     5808            {
     5809                DebugBreak();
     5810            }
     5811#endif
    58055812            src_rect.left -= offset.x; src_rect.right -=offset.x;
    58065813            src_rect.top =  offset.y + h - src_rect.top;
     
    58395846            GetClientRect(context->win_handle, &windowsize);
    58405847            h = windowsize.bottom - windowsize.top;
     5848#ifdef DEBUG_leo
     5849            if (offset.x!=0 || offset.y!=0 || h!=((IWineD3DSurfaceImpl *)src_surface)->currentDesc.Height)
     5850            {
     5851                DebugBreak();
     5852            }
     5853#endif
    58415854            dst_rect.left -= offset.x; dst_rect.right -=offset.x;
    58425855            dst_rect.top =  offset.y + h - dst_rect.top;
  • TabularUnified trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/state.c

    r33046 r33093  
    45364536            device->posFixup[1] = context->render_offscreen ? -1.0f : 1.0f;
    45374537#else
    4538             device->posFixup[1] = context->render_offscreen ? 1.0f : -1.0f;
     4538            device->posFixup[1] = context->render_offscreen ? -1.0f : 1.0f;
    45394539#endif
    45404540            device->posFixup[3] = device->posFixup[1] * yoffset;
  • TabularUnified trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/surface.c

    r32622 r33093  
    30543054 */
    30553055static inline void fb_copy_to_texture_direct(IWineD3DSurfaceImpl *This, IWineD3DSurface *SrcSurface,
    3056         const RECT *src_rect, const RECT *dst_rect_in, WINED3DTEXTUREFILTERTYPE Filter)
     3056        const RECT *src_rect, const RECT *dst_rect_in, WINED3DTEXTUREFILTERTYPE Filter, BOOL doit)
    30573057{
    30583058    IWineD3DDeviceImpl *myDevice = This->resource.device;
     
    31333133            /* No stretching involved, so just pass negative height and let host side take care of inverting */
    31343134
    3135             glCopyTexSubImage2D(This->texture_target, This->texture_level,
    3136                 dst_rect.left /*xoffset */, dst_rect.top /* y offset */,
    3137                 src_rect->left, Src->currentDesc.Height - src_rect->bottom,
    3138                 dst_rect.right - dst_rect.left, -(dst_rect.bottom-dst_rect.top));
     3135            if (doit)
     3136            {
     3137                glCopyTexSubImage2D(This->texture_target, This->texture_level,
     3138                    dst_rect.left /*xoffset */, dst_rect.top /* y offset */,
     3139                    src_rect->left, Src->currentDesc.Height - src_rect->bottom,
     3140                    dst_rect.right - dst_rect.left, -(dst_rect.bottom-dst_rect.top));
     3141            }
    31393142        }
    31403143        else
     
    36483651        if (fbo_blit_supported(&myDevice->adapter->gl_info, BLIT_OP_BLIT,
    36493652                               &src_rect, Src->resource.usage, Src->resource.pool, Src->resource.format_desc,
    3650                                &dst_rect, This->resource.usage, This->resource.pool, This->resource.format_desc))
     3653                               &dst_rect, This->resource.usage, This->resource.pool, This->resource.format_desc)
     3654            && ((!stretchx) || dst_rect.right - dst_rect.left > Src->currentDesc.Width
     3655                || dst_rect.bottom - dst_rect.top > Src->currentDesc.Height)
     3656            && (dst_rect.right==This->currentDesc.Width)
     3657            && (dst_rect.bottom==This->currentDesc.Height)
     3658            && (dst_rect.left==0)
     3659            && (dst_rect.top==0)
     3660           )
    36513661        {
    36523662            stretch_rect_fbo((IWineD3DDevice *)myDevice, SrcSurface, &src_rect,
     
    36553665                                    dst_rect.bottom - dst_rect.top > Src->currentDesc.Height) {
    36563666            TRACE("No stretching in x direction, using direct framebuffer -> texture copy\n");
    3657             fb_copy_to_texture_direct(This, SrcSurface, &src_rect, &dst_rect, Filter);
     3667            fb_copy_to_texture_direct(This, SrcSurface, &src_rect, &dst_rect, Filter, TRUE);
    36583668        } else {
    36593669            TRACE("Using hardware stretching to flip / stretch the texture\n");
     
    36813691            && fbo_blit_supported(&myDevice->adapter->gl_info, BLIT_OP_BLIT,
    36823692                                  &src_rect, Src->resource.usage, Src->resource.pool, Src->resource.format_desc,
    3683                                   &dst_rect, This->resource.usage, This->resource.pool, This->resource.format_desc))
     3693                                  &dst_rect, This->resource.usage, This->resource.pool, This->resource.format_desc)
     3694            && 0)
    36843695        {
    36853696            TRACE("Using stretch_rect_fbo\n");
  • TabularUnified trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/swapchain.c

    r32622 r33093  
    135135        gl_filter = GL_LINEAR;
    136136
    137     if (gl_info->fbo_ops.glBlitFramebuffer && is_identity_fixup(backbuffer->resource.format_desc->color_fixup))
     137    if (0 && gl_info->fbo_ops.glBlitFramebuffer && is_identity_fixup(backbuffer->resource.format_desc->color_fixup))
    138138    {
    139139        ENTER_GL();
  • TabularUnified trunk/src/VBox/GuestHost/OpenGL/glapi_parser/APIspec.txt

    r30440 r33093  
    1012410124return      void
    1012510125param       target          GLenum
    10126 paramprop   target          GL_FRAMEBUFFER_EXT
     10126paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
    1012710127param       framebuffer     GLuint
    1012810128category    GL_EXT_framebuffer_object
     
    1014710147return      GLenum
    1014810148param       target          GLenum
    10149 paramprop   target          GL_FRAMEBUFFER_EXT
     10149paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
    1015010150category    GL_EXT_framebuffer_object
    1015110151props       get
     
    1015510155return      void
    1015610156param       target          GLenum
    10157 paramprop   target          GL_FRAMEBUFFER_EXT
     10157paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
    1015810158param       attachment      GLenum
    1015910159paramprop   attachment      GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT GL_COLOR_ATTACHMENT2_EXT GL_COLOR_ATTACHMENT3_EXT GL_COLOR_ATTACHMENT4_EXT GL_COLOR_ATTACHMENT5_EXT GL_COLOR_ATTACHMENT6_EXT GL_COLOR_ATTACHMENT7_EXT GL_COLOR_ATTACHMENT8_EXT GL_COLOR_ATTACHMENT9_EXT GL_COLOR_ATTACHMENT10_EXT GL_COLOR_ATTACHMENT11_EXT GL_COLOR_ATTACHMENT12_EXT GL_COLOR_ATTACHMENT13_EXT GL_COLOR_ATTACHMENT14_EXT GL_COLOR_ATTACHMENT15_EXT GL_DEPTH_ATTACHMENT_EXT GL_STENCIL_ATTACHMENT_EXT
     
    1016810168return      void
    1016910169param       target          GLenum
    10170 paramprop   target          GL_FRAMEBUFFER_EXT
     10170paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
    1017110171param       attachment      GLenum
    1017210172paramprop   attachment      GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT GL_COLOR_ATTACHMENT2_EXT GL_COLOR_ATTACHMENT3_EXT GL_COLOR_ATTACHMENT4_EXT GL_COLOR_ATTACHMENT5_EXT GL_COLOR_ATTACHMENT6_EXT GL_COLOR_ATTACHMENT7_EXT GL_COLOR_ATTACHMENT8_EXT GL_COLOR_ATTACHMENT9_EXT GL_COLOR_ATTACHMENT10_EXT GL_COLOR_ATTACHMENT11_EXT GL_COLOR_ATTACHMENT12_EXT GL_COLOR_ATTACHMENT13_EXT GL_COLOR_ATTACHMENT14_EXT GL_COLOR_ATTACHMENT15_EXT GL_DEPTH_ATTACHMENT_EXT GL_STENCIL_ATTACHMENT_EXT
     
    1018110181return      void
    1018210182param       target          GLenum
    10183 paramprop   target          GL_FRAMEBUFFER_EXT
     10183paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
    1018410184param       attachment      GLenum
    1018510185paramprop   attachment      GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT GL_COLOR_ATTACHMENT2_EXT GL_COLOR_ATTACHMENT3_EXT GL_COLOR_ATTACHMENT4_EXT GL_COLOR_ATTACHMENT5_EXT GL_COLOR_ATTACHMENT6_EXT GL_COLOR_ATTACHMENT7_EXT GL_COLOR_ATTACHMENT8_EXT GL_COLOR_ATTACHMENT9_EXT GL_COLOR_ATTACHMENT10_EXT GL_COLOR_ATTACHMENT11_EXT GL_COLOR_ATTACHMENT12_EXT GL_COLOR_ATTACHMENT13_EXT GL_COLOR_ATTACHMENT14_EXT GL_COLOR_ATTACHMENT15_EXT GL_DEPTH_ATTACHMENT_EXT GL_STENCIL_ATTACHMENT_EXT
     
    1019510195return      void
    1019610196param       target          GLenum
     10197paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
    1019710198param       attachment      GLenum
    1019810199paramprop   attachment      GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT GL_COLOR_ATTACHMENT2_EXT GL_COLOR_ATTACHMENT3_EXT GL_COLOR_ATTACHMENT4_EXT GL_COLOR_ATTACHMENT5_EXT GL_COLOR_ATTACHMENT6_EXT GL_COLOR_ATTACHMENT7_EXT GL_COLOR_ATTACHMENT8_EXT GL_COLOR_ATTACHMENT9_EXT GL_COLOR_ATTACHMENT10_EXT GL_COLOR_ATTACHMENT11_EXT GL_COLOR_ATTACHMENT12_EXT GL_COLOR_ATTACHMENT13_EXT GL_COLOR_ATTACHMENT14_EXT GL_COLOR_ATTACHMENT15_EXT GL_DEPTH_ATTACHMENT_EXT GL_STENCIL_ATTACHMENT_EXT
     
    1020510206return      void
    1020610207param       target          GLenum
    10207 paramprop   target          GL_FRAMEBUFFER_EXT
     10208paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
    1020810209param       attachment      GLenum
    1020910210paramprop   attachment      GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT GL_COLOR_ATTACHMENT2_EXT GL_COLOR_ATTACHMENT3_EXT GL_COLOR_ATTACHMENT4_EXT GL_COLOR_ATTACHMENT5_EXT GL_COLOR_ATTACHMENT6_EXT GL_COLOR_ATTACHMENT7_EXT GL_COLOR_ATTACHMENT8_EXT GL_COLOR_ATTACHMENT9_EXT GL_COLOR_ATTACHMENT10_EXT GL_COLOR_ATTACHMENT11_EXT GL_COLOR_ATTACHMENT12_EXT GL_COLOR_ATTACHMENT13_EXT GL_COLOR_ATTACHMENT14_EXT GL_COLOR_ATTACHMENT15_EXT GL_DEPTH_ATTACHMENT_EXT GL_STENCIL_ATTACHMENT_EXT
     
    1030110302chromium    extpack
    1030210303
     10304# GL_EXT_framebuffer_blit
     10305name        BlitFramebufferEXT
     10306return      void
     10307param       srcX0       GLint
     10308param       srcY0       GLint
     10309param       srcX1       GLint
     10310param       srcY1       GLint
     10311param       dstX0       GLint
     10312param       dstY0       GLint
     10313param       dstX1       GLint
     10314param       dstY1       GLint
     10315param       mask        GLbitfield
     10316param       filter      GLenum
     10317paramprop   filter      GL_LINEAR GL_NEAREST
     10318category    GL_EXT_framebuffer_blit
     10319chromium    extpack
     10320
    1030310321# end of file sentinel
    1030410322
  • TabularUnified trunk/src/VBox/GuestHost/OpenGL/include/cr_extstring.h

    r30452 r33093  
    214214    "GL_EXT_texture_sRGB "
    215215#endif
     216#ifdef CR_EXT_framebuffer_blit
     217    "GL_EXT_framebuffer_blit "
     218#endif
    216219        "";
    217220
  • TabularUnified trunk/src/VBox/GuestHost/OpenGL/include/cr_protocol.h

    r27244 r33093  
    1616/*For now guest is allowed to connect host opengl service if protocol version matches exactly*/
    1717/*Note: that after any change to this file, or glapi_parser\apispec.txt version should be changed*/
    18 #define CR_PROTOCOL_VERSION_MAJOR 7
     18#define CR_PROTOCOL_VERSION_MAJOR 8
    1919#define CR_PROTOCOL_VERSION_MINOR 1
    2020
  • TabularUnified trunk/src/VBox/GuestHost/OpenGL/include/cr_version.h

    r27396 r33093  
    128128#define CR_EXT_texture_sRGB 1
    129129
     130#define CR_EXT_framebuffer_blit 1
     131
    130132#endif /* CR_VERSION_H */
  • TabularUnified trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_misc.c

    r32247 r33093  
    299299        if (siHavePBO==0 && siHaveFBO==0)
    300300        {
     301#if 1
    301302            GLint dRow, sRow;
    302303            for (dRow=yoffset, sRow=y-height-1; dRow<yoffset-height; dRow++, sRow--)
     
    304305                gl->CopyTexSubImage2D(target, level, xoffset, dRow, x, sRow, width, 1);
    305306            }
     307#else
     308            {
     309                GLint w, h, i;
     310                char *img1, *img2, *sPtr, *dPtr;
     311                CRContext *ctx = crStateGetCurrent();
     312
     313                w = ctx->texture.unit[ctx->texture.curTextureUnit].currentTexture2D->level[0][level].width;
     314                h = ctx->texture.unit[ctx->texture.curTextureUnit].currentTexture2D->level[0][level].height;
     315
     316                img1 = crAlloc(4*w*h);
     317                img2 = crAlloc(4*width*(-height));
     318                CRASSERT(img1 && img2);
     319
     320                gl->CopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, -height);
     321                gl->GetTexImage(target, level, GL_RGBA, GL_UNSIGNED_BYTE, img1);
     322
     323                sPtr=img1+4*xoffset+4*w*yoffset;
     324                dPtr=img2+4*width*(-height-1);
     325
     326                for (i=0; i<-height; ++i)
     327                {
     328                    crMemcpy(dPtr, sPtr, 4*width);
     329                    sPtr += 4*w;
     330                    dPtr -= 4*width;
     331                }
     332
     333                gl->TexSubImage2D(target, level, xoffset, yoffset, width, -height, GL_RGBA, GL_UNSIGNED_BYTE, img2);
     334
     335                crFree(img1);
     336                crFree(img2);
     337            }
     338#endif
    306339        }
    307340        else if (siHaveFBO==1) /*@todo more states to set and restore here*/
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette