VirtualBox

Changeset 33280 in vbox


Ignore:
Timestamp:
Oct 21, 2010 3:48:26 AM (14 years ago)
Author:
vboxsync
Message:

crOpenGL/wddm: disable partial blits for hd4800 only

Location:
trunk/src/VBox
Files:
7 edited

Legend:

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

    r32622 r33280  
    868868}
    869869
     870static BOOL match_ati_hd4800(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
     871        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
     872{
     873    if (card_vendor != HW_VENDOR_ATI) return FALSE;
     874    if (device == CARD_ATI_RADEON_HD4800) return TRUE;
     875    return FALSE;
     876}
     877
     878static void quirk_fullsize_blit(struct wined3d_gl_info *gl_info)
     879{
     880    gl_info->quirks |= WINED3D_QUIRK_FULLSIZE_BLIT;
     881}
     882
    870883struct driver_quirk
    871884{
     
    951964        quirk_fbo_tex_update,
    952965        "FBO rebind for attachment updates"
     966    },
     967    {
     968        match_ati_hd4800,
     969        quirk_fullsize_blit,
     970        "Fullsize blit"
    953971    },
    954972};
     
    12611279        const char *gl_renderer, unsigned int *vidmem)
    12621280{
     1281#ifndef VBOX_WITH_WDDM
    12631282    if (WINE_D3D10_CAPABLE(gl_info))
     1283#endif
    12641284    {
    12651285        /* Geforce 200 - highend */
     
    15161536     * Beware: renderer string do not match exact card model,
    15171537     * eg HD 4800 is returned for multiple cards, even for RV790 based ones. */
     1538#ifndef VBOX_WITH_WDDM
    15181539    if (WINE_D3D10_CAPABLE(gl_info))
     1540#endif
    15191541    {
    15201542        /* Radeon EG CYPRESS XT / PRO HD5800 - highend */
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/surface.c

    r33147 r33280  
    36523652                               &src_rect, Src->resource.usage, Src->resource.pool, Src->resource.format_desc,
    36533653                               &dst_rect, This->resource.usage, This->resource.pool, This->resource.format_desc)
    3654             && (myDevice->adapter->driver_info.vendor==HW_VENDOR_NVIDIA
     3654            && (!(myDevice->adapter->gl_info.quirks & WINED3D_QUIRK_FULLSIZE_BLIT)
    36553655                || (dst_rect.right==This->currentDesc.Width && dst_rect.bottom==This->currentDesc.Height
    36563656                    && dst_rect.left==0 && dst_rect.top==0)
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/wined3d_private.h

    r33046 r33280  
    6565#define WINED3D_QUIRK_NV_CLIP_BROKEN            0x00000010
    6666#define WINED3D_QUIRK_FBO_TEX_UPDATE            0x00000020
     67#define WINED3D_QUIRK_FULLSIZE_BLIT             0x00000040
    6768
    6869/* Texture format fixups */
  • trunk/src/VBox/GuestHost/OpenGL/include/cr_pixeldata.h

    r32240 r33280  
    4343                                                                         const GLubyte *srcPtr, const CRPixelPackState *srcPacking );
    4444
     45DECLEXPORT(void) crDumpNamedTGA(const char *fname, GLint w, GLint h, GLvoid *data);
    4546DECLEXPORT(void) crDumpTGA(GLint w, GLint h, GLvoid *data);
    4647#ifdef __cplusplus
  • trunk/src/VBox/GuestHost/OpenGL/util/pixel.c

    r32240 r33280  
    18021802{
    18031803    char fname[200];
     1804
     1805    if (!w || !h) return;
     1806
     1807    sprintf(fname, "tex%i.tga", _tnum++);
     1808    crDumpNamedTGA(fname, w, h, data);
     1809}
     1810
     1811void crDumpNamedTGA(const char* fname, GLint w, GLint h, GLvoid *data)
     1812{
    18041813    tgaheader_t header;
    18051814    FILE *out;
    18061815
    1807     if (!w || !h) return;
    1808 
    1809     sprintf(fname, "tex%i.tga", _tnum++);
    18101816    out = fopen(fname, "w");
    18111817    if (!out) crError("can't create %s!", fname);
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_misc.c

    r33093 r33280  
    270270}
    271271
     272/*#define CR_DUMP_BLITS*/
     273
     274#ifdef CR_DUMP_BLITS
     275static int blitnum=0;
     276static int copynum=0;
     277#endif
     278
    272279void SERVER_DISPATCH_APIENTRY
    273280crServerDispatchCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
     
    280287    {
    281288        cr_server.head_spu->dispatch_table.CopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
     289
     290#ifdef CR_DUMP_BLITS
     291        {
     292            SPUDispatchTable *gl = &cr_server.head_spu->dispatch_table;
     293            void *img;
     294            GLint w, h;
     295            char fname[200];
     296
     297            copynum++;
     298
     299            gl->GetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w);
     300            gl->GetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &h);
     301
     302            img = crAlloc(w*h*4);
     303            CRASSERT(img);
     304
     305            gl->GetTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_BYTE, img);
     306            sprintf(fname, "copy_blit%i_copy_%i.tga", blitnum, copynum);
     307            crDumpNamedTGA(fname, w, h, img);
     308            crFree(img);
     309        }
     310#endif
    282311    }
    283312    else /* negative height, means we have to Yinvert the source pixels while copying */
     
    471500    }
    472501}
     502
     503void SERVER_DISPATCH_APIENTRY
     504crServerDispatchBlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
     505                                   GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
     506                                   GLbitfield mask, GLenum filter)
     507{
     508#ifdef CR_DUMP_BLITS
     509    SPUDispatchTable *gl = &cr_server.head_spu->dispatch_table;
     510    GLint rfb=0, dfb=0, dtex=0, dlev=-1, rb=0, db=0, ppb=0, pub=0, vp[4], otex, dstw, dsth;
     511    GLenum status;
     512    char fname[200];
     513    void *img;
     514
     515    blitnum++;
     516
     517    crDebug("[%i]BlitFramebufferEXT(%i, %i, %i, %i, %i, %i, %i, %i, %x, %x)", blitnum, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
     518    crDebug("%i, %i <-> %i, %i", srcX1-srcX0, srcY1-srcY0, dstX1-dstX0, dstY1-dstY0);
     519
     520    gl->GetIntegerv(GL_READ_FRAMEBUFFER_BINDING_EXT, &rfb);
     521    gl->GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING_EXT, &dfb);
     522    gl->GetIntegerv(GL_READ_BUFFER, &rb);
     523    gl->GetIntegerv(GL_DRAW_BUFFER, &db);
     524
     525    gl->GetIntegerv(GL_PIXEL_PACK_BUFFER_BINDING, &ppb);
     526    gl->GetIntegerv(GL_PIXEL_UNPACK_BUFFER_BINDING, &pub);
     527
     528    gl->GetIntegerv(GL_VIEWPORT, &vp[0]);
     529
     530    gl->GetIntegerv(GL_TEXTURE_BINDING_2D, &otex);
     531
     532    CRASSERT(!rfb && dfb);
     533    gl->GetFramebufferAttachmentParameterivEXT(GL_DRAW_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT, &dtex);
     534    gl->GetFramebufferAttachmentParameterivEXT(GL_DRAW_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT, &dlev);
     535    status = gl->CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT);
     536
     537    CRASSERT(status==GL_FRAMEBUFFER_COMPLETE_EXT
     538             && db==GL_COLOR_ATTACHMENT0_EXT
     539             && (rb==GL_FRONT || rb==GL_BACK)
     540             && !rfb && dfb && dtex && !dlev
     541             && !ppb && !pub);
     542
     543    crDebug("Src[rb 0x%x, fbo %i] Dst[db 0x%x, fbo %i(0x%x), tex %i.%i]", rb, rfb, db, dfb, status, dtex, dlev);
     544    crDebug("Viewport [%i, %i, %i, %i]", vp[0], vp[1], vp[2], vp[3]);
     545
     546    gl->PixelStorei(GL_PACK_ROW_LENGTH, 0);
     547    gl->PixelStorei(GL_PACK_ALIGNMENT, 1);
     548    gl->PixelStorei(GL_PACK_SKIP_PIXELS, 0);
     549    gl->PixelStorei(GL_PACK_SKIP_ROWS, 0);
     550
     551    gl->PixelStorei(GL_UNPACK_ROW_LENGTH, 0);
     552    gl->PixelStorei(GL_UNPACK_ALIGNMENT, 1);
     553    gl->PixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
     554    gl->PixelStorei(GL_UNPACK_SKIP_ROWS, 0);
     555
     556    gl->BindTexture(GL_TEXTURE_2D, dtex);
     557    gl->GetTexLevelParameteriv(GL_TEXTURE_2D, dlev, GL_TEXTURE_WIDTH, &dstw);
     558    gl->GetTexLevelParameteriv(GL_TEXTURE_2D, dlev, GL_TEXTURE_HEIGHT, &dsth);
     559    gl->BindTexture(GL_TEXTURE_2D, otex);
     560    crDebug("Dst is %i, %i", dstw, dsth);
     561
     562    CRASSERT(vp[2]>=dstw && vp[3]>=dsth);
     563    img = crAlloc(vp[2]*vp[3]*4);
     564    CRASSERT(img);
     565
     566    gl->ReadPixels(0, 0, vp[2], vp[3], GL_BGRA, GL_UNSIGNED_BYTE, img);
     567    sprintf(fname, "blit%iA_src.tga", blitnum);
     568    crDumpNamedTGA(fname, vp[2], vp[3], img);
     569
     570    gl->BindTexture(GL_TEXTURE_2D, dtex);
     571    gl->GetTexImage(GL_TEXTURE_2D, dlev, GL_BGRA, GL_UNSIGNED_BYTE, img);
     572    sprintf(fname, "blit%iB_dst.tga", blitnum);
     573    crDumpNamedTGA(fname, dstw, dsth, img);
     574    gl->BindTexture(GL_TEXTURE_2D, otex);
     575#endif
     576
     577    cr_server.head_spu->dispatch_table.BlitFramebufferEXT(srcX0, srcY0, srcX1, srcY1,
     578                                                          dstX0, dstY0, dstX1, dstY1,
     579                                                          mask, filter);
     580
     581#ifdef CR_DUMP_BLITS
     582    gl->BindTexture(GL_TEXTURE_2D, dtex);
     583    gl->GetTexImage(GL_TEXTURE_2D, dlev, GL_BGRA, GL_UNSIGNED_BYTE, img);
     584    sprintf(fname, "blit%iC_res.tga", blitnum);
     585    crDumpNamedTGA(fname, dstw, dsth, img);
     586    gl->BindTexture(GL_TEXTURE_2D, otex);
     587    crFree(img);
     588#endif
     589}
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_special

    r33045 r33280  
    245245GetObjectParameterivARB
    246246GetObjectParameterfvARB
     247BlitFramebufferEXT
Note: See TracChangeset for help on using the changeset viewer.

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