From 96b90fb003179aa91341192f12e94d96836c7a5c Mon Sep 17 00:00:00 2001 From: Jan Zerebecki Date: Mon, 6 Apr 2009 16:04:31 +0200 Subject: [PATCH] push 0bdbb9493a3f833df10c918231fa8ec20b56a418 --- dlls/comctl32/listview.c | 2 +- dlls/comctl32/tab.c | 5 +- dlls/gdi32/dc.c | 10 +- dlls/gdi32/font.c | 109 ++++---- dlls/gdi32/gdi_private.h | 1 + dlls/gdi32/tests/mapping.c | 29 ++ dlls/gdi32/tests/metafile.c | 191 +++++++++++++ dlls/mciqtz32/mciqtz.c | 2 +- dlls/msacm32/msacm.rc | 1 + dlls/msacm32/msacm_Lt.rc | 61 ++++ dlls/ntdll/tests/info.c | 2 +- dlls/ntdll/virtual.c | 8 + dlls/oleaut32/usrmarshal.c | 3 +- dlls/opengl32/opengl_ext.c | 434 +++++++++++++++++++++++++++-- dlls/quartz/tests/filtergraph.c | 5 +- dlls/shell32/pidl.h | 5 +- dlls/shell32/tests/shellpath.c | 7 +- dlls/shell32/tests/shlfolder.c | 85 ++++-- dlls/shlwapi/tests/ordinal.c | 2 +- dlls/urlmon/tests/misc.c | 5 +- dlls/wined3d/arb_program_shader.c | 26 +- dlls/wined3d/baseshader.c | 1 + dlls/wined3d/directx.c | 46 ++- dlls/wined3d/glsl_shader.c | 66 +++-- dlls/wined3d/wined3d_gl.h | 5 + dlls/wined3d/wined3d_private.h | 1 + dlls/winemp3.acm/mpegl3.c | 16 +- dlls/wininet/tests/internet.c | 10 +- dlls/wininet/urlcache.c | 6 +- programs/winemenubuilder/winemenubuilder.c | 56 ++++ programs/winhlp32/winhelp.c | 4 +- 31 files changed, 1042 insertions(+), 162 deletions(-) create mode 100644 dlls/msacm32/msacm_Lt.rc diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c index caf82b931b6..9d1b4ffcade 100644 --- a/dlls/comctl32/listview.c +++ b/dlls/comctl32/listview.c @@ -1547,7 +1547,7 @@ static INT LISTVIEW_ProcessLetterKeys(LISTVIEW_INFO *infoPtr, WPARAM charCode, L /* update the search parameters */ infoPtr->lastKeyPressTimestamp = GetTickCount(); if (infoPtr->lastKeyPressTimestamp - lastKeyPressTimestamp < KEY_DELAY) { - if (infoPtr->nSearchParamLength < MAX_PATH) + if (infoPtr->nSearchParamLength < MAX_PATH-1) infoPtr->szSearchParam[infoPtr->nSearchParamLength++]=charCode; if (infoPtr->charCode != charCode) infoPtr->charCode = charCode = 0; diff --git a/dlls/comctl32/tab.c b/dlls/comctl32/tab.c index 1830b2da0fb..a7e925f3d9b 100644 --- a/dlls/comctl32/tab.c +++ b/dlls/comctl32/tab.c @@ -1482,7 +1482,10 @@ TAB_EraseTabInterior(const TAB_INFO *infoPtr, HDC hdc, INT iItem, RECT *drawRect { FillRect(hdc, drawRect, hbr); if (iItem == infoPtr->iHotTracked) - DrawEdge(hdc, drawRect, EDGE_RAISED, BF_SOFT|BF_RECT); + { + DrawEdge(hdc, drawRect, EDGE_RAISED, BF_SOFT|BF_TOPLEFT); + DrawEdge(hdc, drawRect, EDGE_RAISED, BF_FLAT|BF_BOTTOMRIGHT); + } } else FillRect(hdc, &rTemp, hbr); diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c index 4d10f2205ad..fd28663a5a7 100644 --- a/dlls/gdi32/dc.c +++ b/dlls/gdi32/dc.c @@ -110,6 +110,7 @@ DC *alloc_dc_ptr( const DC_FUNCTIONS *funcs, WORD magic ) dc->hDevice = 0; dc->hPalette = GetStockObject( DEFAULT_PALETTE ); dc->gdiFont = 0; + dc->font_code_page = CP_ACP; dc->ROPmode = R2_COPYPEN; dc->polyFillMode = ALTERNATE; dc->stretchBltMode = BLACKONWHITE; @@ -1200,10 +1201,12 @@ BOOL WINAPI GetTransform( HDC hdc, DWORD unknown, LPXFORM xform ) BOOL WINAPI SetWorldTransform( HDC hdc, const XFORM *xform ) { BOOL ret = FALSE; - DC *dc = get_dc_ptr( hdc ); + DC *dc; + + if (!xform) return FALSE; + dc = get_dc_ptr( hdc ); if (!dc) return FALSE; - if (!xform) goto done; /* Check that graphics mode is GM_ADVANCED */ if (dc->GraphicsMode!=GM_ADVANCED) goto done; @@ -1211,6 +1214,9 @@ BOOL WINAPI SetWorldTransform( HDC hdc, const XFORM *xform ) TRACE("eM11 %f eM12 %f eM21 %f eM22 %f eDx %f eDy %f\n", xform->eM11, xform->eM12, xform->eM21, xform->eM22, xform->eDx, xform->eDy); + /* The transform must conform to (eM11 * eM22 != eM12 * eM21) requirement */ + if (xform->eM11 * xform->eM22 == xform->eM12 * xform->eM21) goto done; + if (dc->funcs->pSetWorldTransform) { ret = dc->funcs->pSetWorldTransform(dc->physDev, xform); diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c index 107536ea5bc..c81a9c82222 100644 --- a/dlls/gdi32/font.c +++ b/dlls/gdi32/font.c @@ -247,45 +247,13 @@ static void FONT_NewTextMetricExWToA(const NEWTEXTMETRICEXW *ptmW, NEWTEXTMETRIC DWORD WINAPI GdiGetCodePage( HDC hdc ) { UINT cp = CP_ACP; - CHARSETINFO csi; - int charset = GetTextCharset(hdc); - - /* Hmm, nicely designed api this one! */ - if(TranslateCharsetInfo(ULongToPtr(charset), &csi, TCI_SRCCHARSET)) - cp = csi.ciACP; - else { - switch(charset) { - case OEM_CHARSET: - cp = GetOEMCP(); - break; - case DEFAULT_CHARSET: - cp = GetACP(); - break; - - case VISCII_CHARSET: - case TCVN_CHARSET: - case KOI8_CHARSET: - case ISO3_CHARSET: - case ISO4_CHARSET: - case ISO10_CHARSET: - case CELTIC_CHARSET: - /* FIXME: These have no place here, but because x11drv - enumerates fonts with these (made up) charsets some apps - might use them and then the FIXME below would become - annoying. Now we could pick the intended codepage for - each of these, but since it's broken anyway we'll just - use CP_ACP and hope it'll go away... - */ - cp = CP_ACP; - break; + DC *dc = get_dc_ptr( hdc ); - default: - FIXME("Can't find codepage for charset %d\n", charset); - break; - } + if (dc) + { + cp = dc->font_code_page; + release_dc_ptr( dc ); } - - TRACE("charset %d => cp %d\n", charset, cp); return cp; } @@ -465,6 +433,52 @@ HFONT WINAPI CreateFontW( INT height, INT width, INT esc, return CreateFontIndirectW( &logfont ); } +static void update_font_code_page( DC *dc ) +{ + CHARSETINFO csi; + int charset = DEFAULT_CHARSET; + + if (dc->gdiFont) + charset = WineEngGetTextCharsetInfo( dc->gdiFont, NULL, 0 ); + + /* Hmm, nicely designed api this one! */ + if (TranslateCharsetInfo( ULongToPtr(charset), &csi, TCI_SRCCHARSET) ) + dc->font_code_page = csi.ciACP; + else { + switch(charset) { + case OEM_CHARSET: + dc->font_code_page = GetOEMCP(); + break; + case DEFAULT_CHARSET: + dc->font_code_page = GetACP(); + break; + + case VISCII_CHARSET: + case TCVN_CHARSET: + case KOI8_CHARSET: + case ISO3_CHARSET: + case ISO4_CHARSET: + case ISO10_CHARSET: + case CELTIC_CHARSET: + /* FIXME: These have no place here, but because x11drv + enumerates fonts with these (made up) charsets some apps + might use them and then the FIXME below would become + annoying. Now we could pick the intended codepage for + each of these, but since it's broken anyway we'll just + use CP_ACP and hope it'll go away... + */ + dc->font_code_page = CP_ACP; + break; + + default: + FIXME("Can't find codepage for charset %d\n", charset); + dc->font_code_page = CP_ACP; + break; + } + } + + TRACE("charset %d => cp %d\n", charset, dc->font_code_page); +} /*********************************************************************** * FONT_SelectObject @@ -506,6 +520,7 @@ static HGDIOBJ FONT_SelectObject( HGDIOBJ handle, HDC hdc ) { ret = dc->hFont; dc->hFont = handle; + update_font_code_page( dc ); GDI_dec_ref_count( ret ); } release_dc_ptr( dc ); @@ -2468,8 +2483,7 @@ BOOL WINAPI CreateScalableFontResourceW( DWORD fHidden, DWORD WINAPI GetKerningPairsA( HDC hDC, DWORD cPairs, LPKERNINGPAIR kern_pairA ) { - INT charset; - CHARSETINFO csi; + UINT cp; CPINFO cpi; DWORD i, total_kern_pairs, kern_pairs_copied = 0; KERNINGPAIR *kern_pairW; @@ -2480,22 +2494,17 @@ DWORD WINAPI GetKerningPairsA( HDC hDC, DWORD cPairs, return 0; } - charset = GetTextCharset(hDC); - if (!TranslateCharsetInfo(ULongToPtr(charset), &csi, TCI_SRCCHARSET)) - { - FIXME("Can't find codepage for charset %d\n", charset); - return 0; - } + cp = GdiGetCodePage(hDC); + /* GetCPInfo() will fail on CP_SYMBOL, and WideCharToMultiByte is supposed * to fail on an invalid character for CP_SYMBOL. */ cpi.DefaultChar[0] = 0; - if (csi.ciACP != CP_SYMBOL && !GetCPInfo(csi.ciACP, &cpi)) + if (cp != CP_SYMBOL && !GetCPInfo(cp, &cpi)) { - FIXME("Can't find codepage %u info\n", csi.ciACP); + FIXME("Can't find codepage %u info\n", cp); return 0; } - TRACE("charset %d => codepage %u\n", charset, csi.ciACP); total_kern_pairs = GetKerningPairsW(hDC, 0, NULL); if (!total_kern_pairs) return 0; @@ -2507,10 +2516,10 @@ DWORD WINAPI GetKerningPairsA( HDC hDC, DWORD cPairs, { char first, second; - if (!WideCharToMultiByte(csi.ciACP, 0, &kern_pairW[i].wFirst, 1, &first, 1, NULL, NULL)) + if (!WideCharToMultiByte(cp, 0, &kern_pairW[i].wFirst, 1, &first, 1, NULL, NULL)) continue; - if (!WideCharToMultiByte(csi.ciACP, 0, &kern_pairW[i].wSecond, 1, &second, 1, NULL, NULL)) + if (!WideCharToMultiByte(cp, 0, &kern_pairW[i].wSecond, 1, &second, 1, NULL, NULL)) continue; if (first == cpi.DefaultChar[0] || second == cpi.DefaultChar[0]) diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h index bc22741ad58..a21fc766bfa 100644 --- a/dlls/gdi32/gdi_private.h +++ b/dlls/gdi32/gdi_private.h @@ -281,6 +281,7 @@ typedef struct tagDC GdiFont *gdiFont; GdiPath path; + UINT font_code_page; WORD ROPmode; WORD polyFillMode; WORD stretchBltMode; diff --git a/dlls/gdi32/tests/mapping.c b/dlls/gdi32/tests/mapping.c index f3a92e5cab9..ffb92cbfe92 100644 --- a/dlls/gdi32/tests/mapping.c +++ b/dlls/gdi32/tests/mapping.c @@ -85,6 +85,15 @@ static void test_world_transform(void) hdc = CreateCompatibleDC(0); + xform.eM11 = 1.0f; + xform.eM12 = 0.0f; + xform.eM21 = 0.0f; + xform.eM22 = 1.0f; + xform.eDx = 0.0f; + xform.eDy = 0.0f; + ret = SetWorldTransform(hdc, &xform); + ok(!ret, "SetWorldTransform should fail in GM_COMPATIBLE mode\n"); + size_cx = GetDeviceCaps(hdc, HORZSIZE); size_cy = GetDeviceCaps(hdc, VERTSIZE); res_x = GetDeviceCaps(hdc, HORZRES); @@ -144,6 +153,16 @@ static void test_world_transform(void) expect_world_trasform(hdc, 1.0, 1.0); expect_LPtoDP(hdc, 1000, 1000); + /* The transform must conform to (eM11 * eM22 != eM12 * eM21) requirement */ + xform.eM11 = 1.0f; + xform.eM12 = 2.0f; + xform.eM21 = 1.0f; + xform.eM22 = 2.0f; + xform.eDx = 0.0f; + xform.eDy = 0.0f; + ret = SetWorldTransform(hdc, &xform); + ok(!ret, "SetWorldTransform should fail with an invalid xform\n"); + xform.eM11 = 20.0f; xform.eM12 = 0.0f; xform.eM21 = 0.0f; @@ -183,6 +202,16 @@ static void test_world_transform(void) expect_world_trasform(hdc, 20.0, 20.0); expect_LPtoDP(hdc, 20000, 20000); + ret = SetGraphicsMode(hdc, GM_COMPATIBLE); + ok(ret, "SetGraphicsMode(GM_COMPATIBLE) should not fail if DC has't an identity transform\n"); + ret = GetGraphicsMode(hdc); + ok(ret == GM_COMPATIBLE, "expected GM_COMPATIBLE, got %d\n", ret); + + expect_viewport_ext(hdc, 1, 1); + expect_window_ext(hdc, 1, 1); + expect_world_trasform(hdc, 20.0, 20.0); + expect_LPtoDP(hdc, 20000, 20000); + DeleteDC(hdc); } diff --git a/dlls/gdi32/tests/metafile.c b/dlls/gdi32/tests/metafile.c index cf889c19ba6..b6c0864dfc4 100644 --- a/dlls/gdi32/tests/metafile.c +++ b/dlls/gdi32/tests/metafile.c @@ -330,6 +330,7 @@ static int CALLBACK savedc_emf_enum_proc(HDC hdc, HANDLETABLE *handle_table, SIZE size; static int save_state; static int restore_no; + static int select_no; trace("hdc %p, emr->iType %d, emr->nSize %d, param %p\n", hdc, emr->iType, emr->nSize, (void *)param); @@ -375,6 +376,7 @@ static int CALLBACK savedc_emf_enum_proc(HDC hdc, HANDLETABLE *handle_table, save_state = 0; restore_no = 0; + select_no = 0; check_dc_state(hdc, restore_no, 0, 0, 1, 1, 0, 0, 1, 1); break; } @@ -438,8 +440,16 @@ static int CALLBACK savedc_emf_enum_proc(HDC hdc, HANDLETABLE *handle_table, save_state += restoredc->iRelative; break; } + case EMR_SELECTOBJECT: + { + const EMRSELECTOBJECT *selectobj = (const EMRSELECTOBJECT*)emr; + trace("EMR_SELECTOBJECT: %x\n",selectobj->ihObject); + select_no ++; + break; + } case EMR_EOF: ok(save_state == 0, "EOF save_state %d\n", save_state); + ok(select_no == 2, "Too many/few selects %i\n",select_no); break; } @@ -472,6 +482,9 @@ static void test_SaveDC(void) HENHMETAFILE hMetafile; HWND hwnd; int ret; + POINT pt; + SIZE size; + HFONT hFont,hFontOld,hFontCheck; static const RECT rc = { 0, 0, 150, 150 }; /* Win9x doesn't play EMFs on invisible windows */ @@ -498,6 +511,10 @@ static void test_SaveDC(void) /* Force Win9x to update DC state */ SetPixelV(hdcMetafile, 50, 50, 0); + ret = GetViewportOrgEx(hdcMetafile, &pt); + ok(pt.x == 0,"Extecting ViewportOrg x of 0, got %i\n",pt.x); + ret = GetViewportExtEx(hdcMetafile, &size); + ok(size.cx == 120,"Extecting ViewportExt cx of 120, got %i\n",size.cx); ret = SaveDC(hdcMetafile); ok(ret == 1, "ret = %d\n", ret); @@ -509,6 +526,10 @@ static void test_SaveDC(void) /* Force Win9x to update DC state */ SetPixelV(hdcMetafile, 50, 50, 0); + ret = GetViewportOrgEx(hdcMetafile, &pt); + ok(pt.x == 10,"Extecting ViewportOrg x of 10, got %i\n",pt.x); + ret = GetViewportExtEx(hdcMetafile, &size); + ok(size.cx == 200,"Extecting ViewportExt cx of 200, got %i\n",size.cx); ret = SaveDC(hdcMetafile); ok(ret == 2, "ret = %d\n", ret); @@ -520,6 +541,10 @@ static void test_SaveDC(void) /* Force Win9x to update DC state */ SetPixelV(hdcMetafile, 50, 50, 0); + ret = GetViewportOrgEx(hdcMetafile, &pt); + ok(pt.x == 20,"Extecting ViewportOrg x of 20, got %i\n",pt.x); + ret = GetViewportExtEx(hdcMetafile, &size); + ok(size.cx == 300,"Extecting ViewportExt cx of 300, got %i\n",size.cx); ret = SaveDC(hdcMetafile); ok(ret == 3, "ret = %d\n", ret); @@ -531,14 +556,30 @@ static void test_SaveDC(void) /* Force Win9x to update DC state */ SetPixelV(hdcMetafile, 50, 50, 0); + ret = GetViewportOrgEx(hdcMetafile, &pt); + ok(pt.x == 30,"Extecting ViewportOrg x of 30, got %i\n",pt.x); + ret = GetViewportExtEx(hdcMetafile, &size); + ok(size.cx == 400,"Extecting ViewportExt cx of 400, got %i\n",size.cx); ret = RestoreDC(hdcMetafile, -1); ok(ret, "ret = %d\n", ret); + ret = GetViewportOrgEx(hdcMetafile, &pt); + todo_wine ok(pt.x == 20,"Extecting ViewportOrg x of 20, got %i\n",pt.x); + ret = GetViewportExtEx(hdcMetafile, &size); + todo_wine ok(size.cx == 300,"Extecting ViewportExt cx of 300, got %i\n",size.cx); ret = SaveDC(hdcMetafile); ok(ret == 3, "ret = %d\n", ret); + ret = GetViewportOrgEx(hdcMetafile, &pt); + todo_wine ok(pt.x == 20,"Extecting ViewportOrg x of 20, got %i\n",pt.x); + ret = GetViewportExtEx(hdcMetafile, &size); + todo_wine ok(size.cx == 300,"Extecting ViewportExt cx of 300, got %i\n",size.cx); ret = RestoreDC(hdcMetafile, 1); ok(ret, "ret = %d\n", ret); + ret = GetViewportOrgEx(hdcMetafile, &pt); + todo_wine ok(pt.x == 0,"Extecting ViewportOrg x of 0, got %i\n",pt.x); + ret = GetViewportExtEx(hdcMetafile, &size); + todo_wine ok(size.cx == 120,"Extecting ViewportExt cx of 120, got %i\n",size.cx); SetWindowOrgEx(hdcMetafile, -4, -4, NULL); SetViewportOrgEx(hdcMetafile, 40, 40, NULL); @@ -548,18 +589,52 @@ static void test_SaveDC(void) /* Force Win9x to update DC state */ SetPixelV(hdcMetafile, 50, 50, 0); + ret = GetViewportOrgEx(hdcMetafile, &pt); + ok(pt.x == 40,"Extecting ViewportOrg x of 40, got %i\n",pt.x); + ret = GetViewportExtEx(hdcMetafile, &size); + ok(size.cx == 50,"Extecting ViewportExt cx of 50, got %i\n",size.cx); ret = SaveDC(hdcMetafile); ok(ret == 1, "ret = %d\n", ret); + ret = GetViewportOrgEx(hdcMetafile, &pt); + ok(pt.x == 40,"Extecting ViewportOrg x of 40, got %i\n",pt.x); + ret = GetViewportExtEx(hdcMetafile, &size); + ok(size.cx == 50,"Extecting ViewportExt cx of 50, got %i\n",size.cx); ret = SaveDC(hdcMetafile); ok(ret == 2, "ret = %d\n", ret); + memset(&orig_lf, 0, sizeof(orig_lf)); + orig_lf.lfCharSet = ANSI_CHARSET; + orig_lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; + orig_lf.lfWeight = FW_DONTCARE; + orig_lf.lfHeight = 7; + orig_lf.lfQuality = DEFAULT_QUALITY; + lstrcpyA(orig_lf.lfFaceName, "Arial"); + hFont = CreateFontIndirectA(&orig_lf); + ok(hFont != 0, "CreateFontIndirectA error %d\n", GetLastError()); + + hFontOld = SelectObject(hdcMetafile, hFont); + /* Force Win9x to update DC state */ + SetPixelV(hdcMetafile, 50, 50, 0); + + ret = RestoreDC(hdcMetafile, 1); + ok(ret, "ret = %d\n", ret); + ret = GetViewportOrgEx(hdcMetafile, &pt); + ok(pt.x == 40,"Extecting ViewportOrg x of 40, got %i\n",pt.x); + ret = GetViewportExtEx(hdcMetafile, &size); + ok(size.cx == 50,"Extecting ViewportExt cx of 50, got %i\n",size.cx); + + hFontCheck = SelectObject(hdcMetafile, hFontOld); + todo_wine ok(hFontOld == hFontCheck && hFontCheck != hFont, "Font not reverted with DC Restore\n"); + hMetafile = CloseEnhMetaFile(hdcMetafile); ok(hMetafile != 0, "CloseEnhMetaFile error %d\n", GetLastError()); ret = EnumEnhMetaFile(hdcDisplay, hMetafile, savedc_emf_enum_proc, 0, &rc); ok( ret == 1, "EnumEnhMetaFile rets %d\n", ret); + ret = DeleteObject(hFont); + ok( ret, "DeleteObject error %d\n", GetLastError()); ret = DeleteEnhMetaFile(hMetafile); ok( ret, "DeleteEnhMetaFile error %d\n", GetLastError()); ret = ReleaseDC(hwnd, hdcDisplay); @@ -567,6 +642,121 @@ static void test_SaveDC(void) DestroyWindow(hwnd); } +static void test_mf_SaveDC(void) +{ + HDC hdcMetafile; + HMETAFILE hMetafile; + int ret; + POINT pt; + SIZE size; + HFONT hFont,hFontOld,hFontCheck; + + hdcMetafile = CreateMetaFileA(NULL); + ok(hdcMetafile != 0, "CreateMetaFileA error %d\n", GetLastError()); + + ret = SetMapMode(hdcMetafile, MM_ANISOTROPIC); + ok (ret, "SetMapMode should not fail\n"); + + /* Need to write something to the emf, otherwise Windows won't play it back */ + LineTo(hdcMetafile, 150, 150); + + SetWindowOrgEx(hdcMetafile, 0, 0, NULL); + SetViewportOrgEx(hdcMetafile, 0, 0, NULL); + SetWindowExtEx(hdcMetafile, 110, 110, NULL ); + SetViewportExtEx(hdcMetafile, 120, 120, NULL ); + + /* Force Win9x to update DC state */ + SetPixelV(hdcMetafile, 50, 50, 0); + + ret = GetViewportOrgEx(hdcMetafile, &pt); + todo_wine ok (!ret, "GetViewportOrgEx should fail\n"); + ret = GetViewportExtEx(hdcMetafile, &size); + todo_wine ok (!ret, "GetViewportExtEx should fail\n"); + ret = SaveDC(hdcMetafile); + ok(ret == 1, "ret = %d\n", ret); + + SetWindowOrgEx(hdcMetafile, -1, -1, NULL); + SetViewportOrgEx(hdcMetafile, 10, 10, NULL); + SetWindowExtEx(hdcMetafile, 150, 150, NULL ); + SetViewportExtEx(hdcMetafile, 200, 200, NULL ); + + /* Force Win9x to update DC state */ + SetPixelV(hdcMetafile, 50, 50, 0); + + ret = SaveDC(hdcMetafile); + todo_wine ok(ret == 1, "ret = %d\n", ret); + + SetWindowOrgEx(hdcMetafile, -2, -2, NULL); + SetViewportOrgEx(hdcMetafile, 20, 20, NULL); + SetWindowExtEx(hdcMetafile, 120, 120, NULL ); + SetViewportExtEx(hdcMetafile, 300, 300, NULL ); + + /* Force Win9x to update DC state */ + SetPixelV(hdcMetafile, 50, 50, 0); + + ret = SaveDC(hdcMetafile); + todo_wine ok(ret == 1, "ret = %d\n", ret); + + SetWindowOrgEx(hdcMetafile, -3, -3, NULL); + SetViewportOrgEx(hdcMetafile, 30, 30, NULL); + SetWindowExtEx(hdcMetafile, 200, 200, NULL ); + SetViewportExtEx(hdcMetafile, 400, 400, NULL ); + + /* Force Win9x to update DC state */ + SetPixelV(hdcMetafile, 50, 50, 0); + + ret = RestoreDC(hdcMetafile, -1); + ok(ret, "ret = %d\n", ret); + + ret = SaveDC(hdcMetafile); + todo_wine ok(ret == 1, "ret = %d\n", ret); + + ret = RestoreDC(hdcMetafile, 1); + todo_wine ok(ret, "ret = %d\n", ret); + + SetWindowOrgEx(hdcMetafile, -4, -4, NULL); + SetViewportOrgEx(hdcMetafile, 40, 40, NULL); + SetWindowExtEx(hdcMetafile, 500, 500, NULL ); + SetViewportExtEx(hdcMetafile, 50, 50, NULL ); + + /* Force Win9x to update DC state */ + SetPixelV(hdcMetafile, 50, 50, 0); + + ret = SaveDC(hdcMetafile); + todo_wine ok(ret == 1, "ret = %d\n", ret); + + ret = SaveDC(hdcMetafile); + todo_wine ok(ret == 1, "ret = %d\n", ret); + + memset(&orig_lf, 0, sizeof(orig_lf)); + orig_lf.lfCharSet = ANSI_CHARSET; + orig_lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; + orig_lf.lfWeight = FW_DONTCARE; + orig_lf.lfHeight = 7; + orig_lf.lfQuality = DEFAULT_QUALITY; + lstrcpyA(orig_lf.lfFaceName, "Arial"); + hFont = CreateFontIndirectA(&orig_lf); + ok(hFont != 0, "CreateFontIndirectA error %d\n", GetLastError()); + + hFontOld = SelectObject(hdcMetafile, hFont); + /* Force Win9x to update DC state */ + SetPixelV(hdcMetafile, 50, 50, 0); + + ret = RestoreDC(hdcMetafile, 1); + + hFontCheck = SelectObject(hdcMetafile, hFontOld); + ok(hFontOld != hFontCheck && hFontCheck == hFont, "Font incorrectly reverted with DC Restore\n"); + + hMetafile = CloseMetaFile(hdcMetafile); + ok(hMetafile != 0, "CloseEnhMetaFile error %d\n", GetLastError()); + + ret = DeleteMetaFile(hMetafile); + ok( ret, "DeleteMetaFile error %d\n", GetLastError()); + ret = DeleteObject(hFont); + ok( ret, "DeleteObject error %d\n", GetLastError()); +} + + /* Win-format metafile (mfdrv) tests */ /* These tests compare the generated metafiles byte-by-byte */ /* with the nominal results. */ @@ -2137,6 +2327,7 @@ START_TEST(metafile) test_SaveDC(); /* For win-format metafiles (mfdrv) */ + test_mf_SaveDC(); test_mf_Blank(); test_mf_Graphics(); test_mf_PatternBrush(); diff --git a/dlls/mciqtz32/mciqtz.c b/dlls/mciqtz32/mciqtz.c index 507956cd6bb..874b876e405 100644 --- a/dlls/mciqtz32/mciqtz.c +++ b/dlls/mciqtz32/mciqtz.c @@ -172,7 +172,7 @@ static DWORD MCIQTZ_mciOpen(UINT wDevID, DWORD dwFlags, goto err; } - if (!lpOpenParms->lpstrElementName && !lstrlenW(lpOpenParms->lpstrElementName)) { + if (!lpOpenParms->lpstrElementName || !lpOpenParms->lpstrElementName[0]) { TRACE("Invalid filename specified\n"); goto err; } diff --git a/dlls/msacm32/msacm.rc b/dlls/msacm32/msacm.rc index a0ea53c06c7..ffc14854308 100644 --- a/dlls/msacm32/msacm.rc +++ b/dlls/msacm32/msacm.rc @@ -33,6 +33,7 @@ #include "msacm_It.rc" #include "msacm_Ja.rc" #include "msacm_Ko.rc" +#include "msacm_Lt.rc" #include "msacm_Nl.rc" #include "msacm_No.rc" #include "msacm_Pl.rc" diff --git a/dlls/msacm32/msacm_Lt.rc b/dlls/msacm32/msacm_Lt.rc new file mode 100644 index 00000000000..8decd59d02b --- /dev/null +++ b/dlls/msacm32/msacm_Lt.rc @@ -0,0 +1,61 @@ +/* + * Lithuanian resource file for MS ACM + * + * Copyright 2009 Aurimas Fišeras + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL + +DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Garso parinkimas" +FONT 8, "MS Shell Dlg" +BEGIN + + LTEXT "&Pavadinimas:", -1, 5, 5, 115, 8, NOT WS_GROUP + + COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 100, 60, + CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + + PUSHBUTTON "Išsaugoti k&aip...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 110, 14, 60, 14 + PUSHBUTTON "Pa&šalinti", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14 + + LTEXT "&Formatas:", -1, 5, 41, 44, 8, NOT WS_GROUP + + COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60, + CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + + LTEXT "A&tributai:", -1, 5, 59, 44, 8, NOT WS_GROUP + +#if 0 + COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60, + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | + CBS_OWNERDRAWFIXED | CBS_HASSTRINGS +#else + COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60, + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +#endif + DEFPUSHBUTTON "Gerai", IDOK, 48, 80, 40, 14 + PUSHBUTTON "Atsisakyti", IDCANCEL, 92, 80, 40, 14 + PUSHBUTTON "&Žinynas", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14 + +END + +#pragma code_page(default) diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c index 22284a4ea71..80270657564 100644 --- a/dlls/ntdll/tests/info.c +++ b/dlls/ntdll/tests/info.c @@ -818,7 +818,7 @@ static void test_query_process_image_file_name(void) file_nameA[len] = '\0'; HeapFree(GetProcessHeap(), 0, buffer); trace("process image file name: %s\n", file_nameA); - todo_wine ok(strncmp(file_nameA, "\\Device\\", 8) == 0, "Process image name should be an NT path beginning with \\Device\\ (is %s)", file_nameA); + todo_wine ok(strncmp(file_nameA, "\\Device\\", 8) == 0, "Process image name should be an NT path beginning with \\Device\\ (is %s)\n", file_nameA); HeapFree(GetProcessHeap(), 0, file_nameA); } diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c index 90eabc5036f..9d46764ddfd 100644 --- a/dlls/ntdll/virtual.c +++ b/dlls/ntdll/virtual.c @@ -2089,10 +2089,18 @@ NTSTATUS WINAPI NtQueryVirtualMemory( HANDLE process, LPCVOID addr, if (!wine_mmap_enum_reserved_areas( get_free_mem_state_callback, info, 0 )) { /* not in a reserved area at all, pretend it's allocated */ +#ifdef __i386__ info->State = MEM_RESERVE; info->Protect = PAGE_NOACCESS; info->AllocationProtect = PAGE_NOACCESS; info->Type = MEM_PRIVATE; +#else + info->State = MEM_FREE; + info->Protect = PAGE_NOACCESS; + info->AllocationBase = 0; + info->AllocationProtect = 0; + info->Type = 0; +#endif } } else diff --git a/dlls/oleaut32/usrmarshal.c b/dlls/oleaut32/usrmarshal.c index a119c282701..14c655c71b0 100644 --- a/dlls/oleaut32/usrmarshal.c +++ b/dlls/oleaut32/usrmarshal.c @@ -2041,7 +2041,8 @@ HRESULT CALLBACK IPropertyBag_Read_Proxy( FIXME("Safearray support not yet implemented.\n"); return E_NOTIMPL; default: - break; + FIXME("Unknown V_VT %d - support not yet implemented.\n", V_VT(pVar)); + return E_NOTIMPL; } return IPropertyBag_RemoteRead_Proxy(This, pszPropName, pVar, pErrorLog, diff --git a/dlls/opengl32/opengl_ext.c b/dlls/opengl32/opengl_ext.c index 7e7755e54ed..ae12241aa7a 100644 --- a/dlls/opengl32/opengl_ext.c +++ b/dlls/opengl32/opengl_ext.c @@ -28,6 +28,7 @@ enum extensions EXT_glBeginConditionalRenderNV, EXT_glBeginFragmentShaderATI, EXT_glBeginOcclusionQueryNV, + EXT_glBeginPerfMonitorAMD, EXT_glBeginQuery, EXT_glBeginQueryARB, EXT_glBeginTransformFeedback, @@ -62,6 +63,7 @@ enum extensions EXT_glBindTexGenParameterEXT, EXT_glBindTextureEXT, EXT_glBindTextureUnitParameterEXT, + EXT_glBindTransformFeedbackNV, EXT_glBindVertexArray, EXT_glBindVertexArrayAPPLE, EXT_glBindVertexShaderEXT, @@ -171,6 +173,7 @@ enum extensions EXT_glConvolutionParameterfvEXT, EXT_glConvolutionParameteriEXT, EXT_glConvolutionParameterivEXT, + EXT_glCopyBufferSubData, EXT_glCopyColorSubTableEXT, EXT_glCopyColorTableSGI, EXT_glCopyConvolutionFilter1DEXT, @@ -212,6 +215,7 @@ enum extensions EXT_glDeleteObjectARB, EXT_glDeleteObjectBufferATI, EXT_glDeleteOcclusionQueriesNV, + EXT_glDeletePerfMonitorsAMD, EXT_glDeleteProgram, EXT_glDeleteProgramsARB, EXT_glDeleteProgramsNV, @@ -221,6 +225,7 @@ enum extensions EXT_glDeleteRenderbuffersEXT, EXT_glDeleteShader, EXT_glDeleteTexturesEXT, + EXT_glDeleteTransformFeedbacksNV, EXT_glDeleteVertexArrays, EXT_glDeleteVertexArraysAPPLE, EXT_glDeleteVertexShaderEXT, @@ -251,6 +256,7 @@ enum extensions EXT_glDrawRangeElementArrayAPPLE, EXT_glDrawRangeElementArrayATI, EXT_glDrawRangeElementsEXT, + EXT_glDrawTransformFeedbackNV, EXT_glEdgeFlagPointerEXT, EXT_glEdgeFlagPointerListIBM, EXT_glElementPointerAPPLE, @@ -265,6 +271,7 @@ enum extensions EXT_glEndConditionalRenderNV, EXT_glEndFragmentShaderATI, EXT_glEndOcclusionQueryNV, + EXT_glEndPerfMonitorAMD, EXT_glEndQuery, EXT_glEndQueryARB, EXT_glEndTransformFeedback, @@ -343,6 +350,7 @@ enum extensions EXT_glGenFramebuffers, EXT_glGenFramebuffersEXT, EXT_glGenOcclusionQueriesNV, + EXT_glGenPerfMonitorsAMD, EXT_glGenProgramsARB, EXT_glGenProgramsNV, EXT_glGenQueries, @@ -351,6 +359,7 @@ enum extensions EXT_glGenRenderbuffersEXT, EXT_glGenSymbolsEXT, EXT_glGenTexturesEXT, + EXT_glGenTransformFeedbacksNV, EXT_glGenVertexArrays, EXT_glGenVertexArraysAPPLE, EXT_glGenVertexShadersEXT, @@ -362,6 +371,10 @@ enum extensions EXT_glGetActiveAttribARB, EXT_glGetActiveUniform, EXT_glGetActiveUniformARB, + EXT_glGetActiveUniformBlockName, + EXT_glGetActiveUniformBlockiv, + EXT_glGetActiveUniformName, + EXT_glGetActiveUniformsiv, EXT_glGetActiveVaryingNV, EXT_glGetArrayObjectfvATI, EXT_glGetArrayObjectivATI, @@ -449,6 +462,7 @@ enum extensions EXT_glGetMultiTexParameterIuivEXT, EXT_glGetMultiTexParameterfvEXT, EXT_glGetMultiTexParameterivEXT, + EXT_glGetMultisamplefvNV, EXT_glGetNamedBufferParameterivEXT, EXT_glGetNamedBufferPointervEXT, EXT_glGetNamedBufferSubDataEXT, @@ -466,6 +480,12 @@ enum extensions EXT_glGetObjectParameterivARB, EXT_glGetOcclusionQueryivNV, EXT_glGetOcclusionQueryuivNV, + EXT_glGetPerfMonitorCounterDataAMD, + EXT_glGetPerfMonitorCounterInfoAMD, + EXT_glGetPerfMonitorCounterStringAMD, + EXT_glGetPerfMonitorCountersAMD, + EXT_glGetPerfMonitorGroupStringAMD, + EXT_glGetPerfMonitorGroupsAMD, EXT_glGetPixelTexGenParameterfvSGIS, EXT_glGetPixelTexGenParameterivSGIS, EXT_glGetPointerIndexedvEXT, @@ -523,7 +543,9 @@ enum extensions EXT_glGetTransformFeedbackVarying, EXT_glGetTransformFeedbackVaryingEXT, EXT_glGetTransformFeedbackVaryingNV, + EXT_glGetUniformBlockIndex, EXT_glGetUniformBufferSizeEXT, + EXT_glGetUniformIndices, EXT_glGetUniformLocation, EXT_glGetUniformLocationARB, EXT_glGetUniformOffsetEXT, @@ -558,6 +580,10 @@ enum extensions EXT_glGetVertexAttribiv, EXT_glGetVertexAttribivARB, EXT_glGetVertexAttribivNV, + EXT_glGetVideoi64vNV, + EXT_glGetVideoivNV, + EXT_glGetVideoui64vNV, + EXT_glGetVideouivNV, EXT_glGlobalAlphaFactorbSUN, EXT_glGlobalAlphaFactordSUN, EXT_glGlobalAlphaFactorfSUN, @@ -599,6 +625,7 @@ enum extensions EXT_glIsRenderbufferEXT, EXT_glIsShader, EXT_glIsTextureEXT, + EXT_glIsTransformFeedbackNV, EXT_glIsVariantEnabledEXT, EXT_glIsVertexArray, EXT_glIsVertexArrayAPPLE, @@ -838,6 +865,7 @@ enum extensions EXT_glPNTrianglesfATI, EXT_glPNTrianglesiATI, EXT_glPassTexCoordATI, + EXT_glPauseTransformFeedbackNV, EXT_glPixelDataRangeNV, EXT_glPixelTexGenParameterfSGIS, EXT_glPixelTexGenParameterfvSGIS, @@ -863,6 +891,8 @@ enum extensions EXT_glPollAsyncSGIX, EXT_glPollInstrumentsSGIX, EXT_glPolygonOffsetEXT, + EXT_glPresentFrameDualFillNV, + EXT_glPresentFrameKeyedNV, EXT_glPrimitiveRestartIndexNV, EXT_glPrimitiveRestartNV, EXT_glPrioritizeTexturesEXT, @@ -938,6 +968,7 @@ enum extensions EXT_glProgramUniformMatrix4x2fvEXT, EXT_glProgramUniformMatrix4x3fvEXT, EXT_glProgramVertexLimitNV, + EXT_glProvokingVertexEXT, EXT_glPushClientAttribDefaultEXT, EXT_glReadBufferRegion, EXT_glReadInstrumentsSGIX, @@ -974,10 +1005,12 @@ enum extensions EXT_glResetHistogramEXT, EXT_glResetMinmaxEXT, EXT_glResizeBuffersMESA, + EXT_glResumeTransformFeedbackNV, EXT_glSampleCoverage, EXT_glSampleCoverageARB, EXT_glSampleMapATI, EXT_glSampleMaskEXT, + EXT_glSampleMaskIndexedNV, EXT_glSampleMaskSGIS, EXT_glSamplePatternEXT, EXT_glSamplePatternSGIS, @@ -1018,6 +1051,7 @@ enum extensions EXT_glSecondaryColorPointer, EXT_glSecondaryColorPointerEXT, EXT_glSecondaryColorPointerListIBM, + EXT_glSelectPerfMonitorCountersAMD, EXT_glSelectTextureCoordSetSGIS, EXT_glSelectTextureSGIS, EXT_glSeparableFilter2DEXT, @@ -1059,6 +1093,8 @@ enum extensions EXT_glTangent3svEXT, EXT_glTangentPointerEXT, EXT_glTbufferMask3DFX, + EXT_glTessellationFactorAMD, + EXT_glTessellationModeAMD, EXT_glTestFenceAPPLE, EXT_glTestFenceNV, EXT_glTestObjectAPPLE, @@ -1098,6 +1134,7 @@ enum extensions EXT_glTexParameterIivEXT, EXT_glTexParameterIuiv, EXT_glTexParameterIuivEXT, + EXT_glTexRenderbufferNV, EXT_glTexSubImage1DEXT, EXT_glTexSubImage2DEXT, EXT_glTexSubImage3DEXT, @@ -1173,6 +1210,7 @@ enum extensions EXT_glUniform4uiEXT, EXT_glUniform4uiv, EXT_glUniform4uivEXT, + EXT_glUniformBlockBinding, EXT_glUniformBufferEXT, EXT_glUniformMatrix2fv, EXT_glUniformMatrix2fvARB, @@ -1428,6 +1466,7 @@ enum extensions EXT_glVertexWeightfvEXT, EXT_glVertexWeighthNV, EXT_glVertexWeighthvNV, + EXT_glVideoParameterivNV, EXT_glWeightPointerARB, EXT_glWeightbvARB, EXT_glWeightdvARB, @@ -1657,6 +1696,14 @@ static void WINAPI wine_glBeginOcclusionQueryNV( GLuint id ) { LEAVE_GL(); } +static void WINAPI wine_glBeginPerfMonitorAMD( GLuint monitor ) { + void (*func_glBeginPerfMonitorAMD)( GLuint ) = extension_funcs[EXT_glBeginPerfMonitorAMD]; + TRACE("(%d)\n", monitor ); + ENTER_GL(); + func_glBeginPerfMonitorAMD( monitor ); + LEAVE_GL(); +} + static void WINAPI wine_glBeginQuery( GLenum target, GLuint id ) { void (*func_glBeginQuery)( GLenum, GLuint ) = extension_funcs[EXT_glBeginQuery]; TRACE("(%d, %d)\n", target, id ); @@ -1939,6 +1986,14 @@ static GLuint WINAPI wine_glBindTextureUnitParameterEXT( GLenum unit, GLenum val return ret_value; } +static void WINAPI wine_glBindTransformFeedbackNV( GLenum target, GLuint id ) { + void (*func_glBindTransformFeedbackNV)( GLenum, GLuint ) = extension_funcs[EXT_glBindTransformFeedbackNV]; + TRACE("(%d, %d)\n", target, id ); + ENTER_GL(); + func_glBindTransformFeedbackNV( target, id ); + LEAVE_GL(); +} + static void WINAPI wine_glBindVertexArray( GLuint array ) { void (*func_glBindVertexArray)( GLuint ) = extension_funcs[EXT_glBindVertexArray]; TRACE("(%d)\n", array ); @@ -2819,6 +2874,14 @@ static void WINAPI wine_glConvolutionParameterivEXT( GLenum target, GLenum pname LEAVE_GL(); } +static void WINAPI wine_glCopyBufferSubData( GLenum readTarget, GLenum writeTarget, INT_PTR readOffset, INT_PTR writeOffset, INT_PTR size ) { + void (*func_glCopyBufferSubData)( GLenum, GLenum, INT_PTR, INT_PTR, INT_PTR ) = extension_funcs[EXT_glCopyBufferSubData]; + TRACE("(%d, %d, %ld, %ld, %ld)\n", readTarget, writeTarget, readOffset, writeOffset, size ); + ENTER_GL(); + func_glCopyBufferSubData( readTarget, writeTarget, readOffset, writeOffset, size ); + LEAVE_GL(); +} + static void WINAPI wine_glCopyColorSubTableEXT( GLenum target, GLsizei start, GLint x, GLint y, GLsizei width ) { void (*func_glCopyColorSubTableEXT)( GLenum, GLsizei, GLint, GLint, GLsizei ) = extension_funcs[EXT_glCopyColorSubTableEXT]; TRACE("(%d, %d, %d, %d, %d)\n", target, start, x, y, width ); @@ -3155,6 +3218,14 @@ static void WINAPI wine_glDeleteOcclusionQueriesNV( GLsizei n, GLuint* ids ) { LEAVE_GL(); } +static void WINAPI wine_glDeletePerfMonitorsAMD( GLsizei n, GLuint* monitors ) { + void (*func_glDeletePerfMonitorsAMD)( GLsizei, GLuint* ) = extension_funcs[EXT_glDeletePerfMonitorsAMD]; + TRACE("(%d, %p)\n", n, monitors ); + ENTER_GL(); + func_glDeletePerfMonitorsAMD( n, monitors ); + LEAVE_GL(); +} + static void WINAPI wine_glDeleteProgram( GLuint program ) { void (*func_glDeleteProgram)( GLuint ) = extension_funcs[EXT_glDeleteProgram]; TRACE("(%d)\n", program ); @@ -3227,6 +3298,14 @@ static void WINAPI wine_glDeleteTexturesEXT( GLsizei n, GLuint* textures ) { LEAVE_GL(); } +static void WINAPI wine_glDeleteTransformFeedbacksNV( GLsizei n, GLuint* ids ) { + void (*func_glDeleteTransformFeedbacksNV)( GLsizei, GLuint* ) = extension_funcs[EXT_glDeleteTransformFeedbacksNV]; + TRACE("(%d, %p)\n", n, ids ); + ENTER_GL(); + func_glDeleteTransformFeedbacksNV( n, ids ); + LEAVE_GL(); +} + static void WINAPI wine_glDeleteVertexArrays( GLsizei n, GLuint* arrays ) { void (*func_glDeleteVertexArrays)( GLsizei, GLuint* ) = extension_funcs[EXT_glDeleteVertexArrays]; TRACE("(%d, %p)\n", n, arrays ); @@ -3467,6 +3546,14 @@ static void WINAPI wine_glDrawRangeElementsEXT( GLenum mode, GLuint start, GLuin LEAVE_GL(); } +static void WINAPI wine_glDrawTransformFeedbackNV( GLenum mode, GLuint id ) { + void (*func_glDrawTransformFeedbackNV)( GLenum, GLuint ) = extension_funcs[EXT_glDrawTransformFeedbackNV]; + TRACE("(%d, %d)\n", mode, id ); + ENTER_GL(); + func_glDrawTransformFeedbackNV( mode, id ); + LEAVE_GL(); +} + static void WINAPI wine_glEdgeFlagPointerEXT( GLsizei stride, GLsizei count, GLboolean* pointer ) { void (*func_glEdgeFlagPointerEXT)( GLsizei, GLsizei, GLboolean* ) = extension_funcs[EXT_glEdgeFlagPointerEXT]; TRACE("(%d, %d, %p)\n", stride, count, pointer ); @@ -3579,6 +3666,14 @@ static void WINAPI wine_glEndOcclusionQueryNV( void ) { LEAVE_GL(); } +static void WINAPI wine_glEndPerfMonitorAMD( GLuint monitor ) { + void (*func_glEndPerfMonitorAMD)( GLuint ) = extension_funcs[EXT_glEndPerfMonitorAMD]; + TRACE("(%d)\n", monitor ); + ENTER_GL(); + func_glEndPerfMonitorAMD( monitor ); + LEAVE_GL(); +} + static void WINAPI wine_glEndQuery( GLenum target ) { void (*func_glEndQuery)( GLenum ) = extension_funcs[EXT_glEndQuery]; TRACE("(%d)\n", target ); @@ -4209,6 +4304,14 @@ static void WINAPI wine_glGenOcclusionQueriesNV( GLsizei n, GLuint* ids ) { LEAVE_GL(); } +static void WINAPI wine_glGenPerfMonitorsAMD( GLsizei n, GLuint* monitors ) { + void (*func_glGenPerfMonitorsAMD)( GLsizei, GLuint* ) = extension_funcs[EXT_glGenPerfMonitorsAMD]; + TRACE("(%d, %p)\n", n, monitors ); + ENTER_GL(); + func_glGenPerfMonitorsAMD( n, monitors ); + LEAVE_GL(); +} + static void WINAPI wine_glGenProgramsARB( GLsizei n, GLuint* programs ) { void (*func_glGenProgramsARB)( GLsizei, GLuint* ) = extension_funcs[EXT_glGenProgramsARB]; TRACE("(%d, %p)\n", n, programs ); @@ -4275,6 +4378,14 @@ static void WINAPI wine_glGenTexturesEXT( GLsizei n, GLuint* textures ) { LEAVE_GL(); } +static void WINAPI wine_glGenTransformFeedbacksNV( GLsizei n, GLuint* ids ) { + void (*func_glGenTransformFeedbacksNV)( GLsizei, GLuint* ) = extension_funcs[EXT_glGenTransformFeedbacksNV]; + TRACE("(%d, %p)\n", n, ids ); + ENTER_GL(); + func_glGenTransformFeedbacksNV( n, ids ); + LEAVE_GL(); +} + static void WINAPI wine_glGenVertexArrays( GLsizei n, GLuint* arrays ) { void (*func_glGenVertexArrays)( GLsizei, GLuint* ) = extension_funcs[EXT_glGenVertexArrays]; TRACE("(%d, %p)\n", n, arrays ); @@ -4365,6 +4476,38 @@ static void WINAPI wine_glGetActiveUniformARB( unsigned int programObj, GLuint i LEAVE_GL(); } +static void WINAPI wine_glGetActiveUniformBlockName( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, char* uniformBlockName ) { + void (*func_glGetActiveUniformBlockName)( GLuint, GLuint, GLsizei, GLsizei*, char* ) = extension_funcs[EXT_glGetActiveUniformBlockName]; + TRACE("(%d, %d, %d, %p, %p)\n", program, uniformBlockIndex, bufSize, length, uniformBlockName ); + ENTER_GL(); + func_glGetActiveUniformBlockName( program, uniformBlockIndex, bufSize, length, uniformBlockName ); + LEAVE_GL(); +} + +static void WINAPI wine_glGetActiveUniformBlockiv( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params ) { + void (*func_glGetActiveUniformBlockiv)( GLuint, GLuint, GLenum, GLint* ) = extension_funcs[EXT_glGetActiveUniformBlockiv]; + TRACE("(%d, %d, %d, %p)\n", program, uniformBlockIndex, pname, params ); + ENTER_GL(); + func_glGetActiveUniformBlockiv( program, uniformBlockIndex, pname, params ); + LEAVE_GL(); +} + +static void WINAPI wine_glGetActiveUniformName( GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, char* uniformName ) { + void (*func_glGetActiveUniformName)( GLuint, GLuint, GLsizei, GLsizei*, char* ) = extension_funcs[EXT_glGetActiveUniformName]; + TRACE("(%d, %d, %d, %p, %p)\n", program, uniformIndex, bufSize, length, uniformName ); + ENTER_GL(); + func_glGetActiveUniformName( program, uniformIndex, bufSize, length, uniformName ); + LEAVE_GL(); +} + +static void WINAPI wine_glGetActiveUniformsiv( GLuint program, GLsizei uniformCount, GLuint* uniformIndices, GLenum pname, GLint* params ) { + void (*func_glGetActiveUniformsiv)( GLuint, GLsizei, GLuint*, GLenum, GLint* ) = extension_funcs[EXT_glGetActiveUniformsiv]; + TRACE("(%d, %d, %p, %d, %p)\n", program, uniformCount, uniformIndices, pname, params ); + ENTER_GL(); + func_glGetActiveUniformsiv( program, uniformCount, uniformIndices, pname, params ); + LEAVE_GL(); +} + static void WINAPI wine_glGetActiveVaryingNV( GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, char* name ) { void (*func_glGetActiveVaryingNV)( GLuint, GLuint, GLsizei, GLsizei*, GLsizei*, GLenum*, char* ) = extension_funcs[EXT_glGetActiveVaryingNV]; TRACE("(%d, %d, %d, %p, %p, %p, %p)\n", program, index, bufSize, length, size, type, name ); @@ -5073,6 +5216,14 @@ static void WINAPI wine_glGetMultiTexParameterivEXT( GLenum texunit, GLenum targ LEAVE_GL(); } +static void WINAPI wine_glGetMultisamplefvNV( GLenum pname, GLuint index, GLfloat* val ) { + void (*func_glGetMultisamplefvNV)( GLenum, GLuint, GLfloat* ) = extension_funcs[EXT_glGetMultisamplefvNV]; + TRACE("(%d, %d, %p)\n", pname, index, val ); + ENTER_GL(); + func_glGetMultisamplefvNV( pname, index, val ); + LEAVE_GL(); +} + static void WINAPI wine_glGetNamedBufferParameterivEXT( GLuint buffer, GLenum pname, GLint* params ) { void (*func_glGetNamedBufferParameterivEXT)( GLuint, GLenum, GLint* ) = extension_funcs[EXT_glGetNamedBufferParameterivEXT]; TRACE("(%d, %d, %p)\n", buffer, pname, params ); @@ -5209,6 +5360,54 @@ static void WINAPI wine_glGetOcclusionQueryuivNV( GLuint id, GLenum pname, GLuin LEAVE_GL(); } +static void WINAPI wine_glGetPerfMonitorCounterDataAMD( GLuint monitor, GLenum pname, GLsizei dataSize, GLuint* data, GLint* bytesWritten ) { + void (*func_glGetPerfMonitorCounterDataAMD)( GLuint, GLenum, GLsizei, GLuint*, GLint* ) = extension_funcs[EXT_glGetPerfMonitorCounterDataAMD]; + TRACE("(%d, %d, %d, %p, %p)\n", monitor, pname, dataSize, data, bytesWritten ); + ENTER_GL(); + func_glGetPerfMonitorCounterDataAMD( monitor, pname, dataSize, data, bytesWritten ); + LEAVE_GL(); +} + +static void WINAPI wine_glGetPerfMonitorCounterInfoAMD( GLuint group, GLuint counter, GLenum pname, void* data ) { + void (*func_glGetPerfMonitorCounterInfoAMD)( GLuint, GLuint, GLenum, void* ) = extension_funcs[EXT_glGetPerfMonitorCounterInfoAMD]; + TRACE("(%d, %d, %d, %p)\n", group, counter, pname, data ); + ENTER_GL(); + func_glGetPerfMonitorCounterInfoAMD( group, counter, pname, data ); + LEAVE_GL(); +} + +static void WINAPI wine_glGetPerfMonitorCounterStringAMD( GLuint group, GLuint counter, GLsizei bufSize, GLsizei* length, char* counterString ) { + void (*func_glGetPerfMonitorCounterStringAMD)( GLuint, GLuint, GLsizei, GLsizei*, char* ) = extension_funcs[EXT_glGetPerfMonitorCounterStringAMD]; + TRACE("(%d, %d, %d, %p, %p)\n", group, counter, bufSize, length, counterString ); + ENTER_GL(); + func_glGetPerfMonitorCounterStringAMD( group, counter, bufSize, length, counterString ); + LEAVE_GL(); +} + +static void WINAPI wine_glGetPerfMonitorCountersAMD( GLuint group, GLint* numCounters, GLint* maxActiveCounters, GLsizei counterSize, GLuint* counters ) { + void (*func_glGetPerfMonitorCountersAMD)( GLuint, GLint*, GLint*, GLsizei, GLuint* ) = extension_funcs[EXT_glGetPerfMonitorCountersAMD]; + TRACE("(%d, %p, %p, %d, %p)\n", group, numCounters, maxActiveCounters, counterSize, counters ); + ENTER_GL(); + func_glGetPerfMonitorCountersAMD( group, numCounters, maxActiveCounters, counterSize, counters ); + LEAVE_GL(); +} + +static void WINAPI wine_glGetPerfMonitorGroupStringAMD( GLuint group, GLsizei bufSize, GLsizei* length, char* groupString ) { + void (*func_glGetPerfMonitorGroupStringAMD)( GLuint, GLsizei, GLsizei*, char* ) = extension_funcs[EXT_glGetPerfMonitorGroupStringAMD]; + TRACE("(%d, %d, %p, %p)\n", group, bufSize, length, groupString ); + ENTER_GL(); + func_glGetPerfMonitorGroupStringAMD( group, bufSize, length, groupString ); + LEAVE_GL(); +} + +static void WINAPI wine_glGetPerfMonitorGroupsAMD( GLint* numGroups, GLsizei groupsSize, GLuint* groups ) { + void (*func_glGetPerfMonitorGroupsAMD)( GLint*, GLsizei, GLuint* ) = extension_funcs[EXT_glGetPerfMonitorGroupsAMD]; + TRACE("(%p, %d, %p)\n", numGroups, groupsSize, groups ); + ENTER_GL(); + func_glGetPerfMonitorGroupsAMD( numGroups, groupsSize, groups ); + LEAVE_GL(); +} + static void WINAPI wine_glGetPixelTexGenParameterfvSGIS( GLenum pname, GLfloat* params ) { void (*func_glGetPixelTexGenParameterfvSGIS)( GLenum, GLfloat* ) = extension_funcs[EXT_glGetPixelTexGenParameterfvSGIS]; TRACE("(%d, %p)\n", pname, params ); @@ -5643,19 +5842,19 @@ static void WINAPI wine_glGetTrackMatrixivNV( GLenum target, GLuint address, GLe LEAVE_GL(); } -static void WINAPI wine_glGetTransformFeedbackVarying( GLuint program, GLuint index, GLint* location ) { - void (*func_glGetTransformFeedbackVarying)( GLuint, GLuint, GLint* ) = extension_funcs[EXT_glGetTransformFeedbackVarying]; - TRACE("(%d, %d, %p)\n", program, index, location ); +static void WINAPI wine_glGetTransformFeedbackVarying( GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, char* name ) { + void (*func_glGetTransformFeedbackVarying)( GLuint, GLuint, GLsizei, GLsizei*, GLsizei*, GLenum*, char* ) = extension_funcs[EXT_glGetTransformFeedbackVarying]; + TRACE("(%d, %d, %d, %p, %p, %p, %p)\n", program, index, bufSize, length, size, type, name ); ENTER_GL(); - func_glGetTransformFeedbackVarying( program, index, location ); + func_glGetTransformFeedbackVarying( program, index, bufSize, length, size, type, name ); LEAVE_GL(); } -static void WINAPI wine_glGetTransformFeedbackVaryingEXT( GLuint program, GLuint index, GLint* location ) { - void (*func_glGetTransformFeedbackVaryingEXT)( GLuint, GLuint, GLint* ) = extension_funcs[EXT_glGetTransformFeedbackVaryingEXT]; - TRACE("(%d, %d, %p)\n", program, index, location ); +static void WINAPI wine_glGetTransformFeedbackVaryingEXT( GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, char* name ) { + void (*func_glGetTransformFeedbackVaryingEXT)( GLuint, GLuint, GLsizei, GLsizei*, GLsizei*, GLenum*, char* ) = extension_funcs[EXT_glGetTransformFeedbackVaryingEXT]; + TRACE("(%d, %d, %d, %p, %p, %p, %p)\n", program, index, bufSize, length, size, type, name ); ENTER_GL(); - func_glGetTransformFeedbackVaryingEXT( program, index, location ); + func_glGetTransformFeedbackVaryingEXT( program, index, bufSize, length, size, type, name ); LEAVE_GL(); } @@ -5667,6 +5866,16 @@ static void WINAPI wine_glGetTransformFeedbackVaryingNV( GLuint program, GLuint LEAVE_GL(); } +static GLuint WINAPI wine_glGetUniformBlockIndex( GLuint program, char* uniformBlockName ) { + GLuint ret_value; + GLuint (*func_glGetUniformBlockIndex)( GLuint, char* ) = extension_funcs[EXT_glGetUniformBlockIndex]; + TRACE("(%d, %p)\n", program, uniformBlockName ); + ENTER_GL(); + ret_value = func_glGetUniformBlockIndex( program, uniformBlockName ); + LEAVE_GL(); + return ret_value; +} + static GLint WINAPI wine_glGetUniformBufferSizeEXT( GLuint program, GLint location ) { GLint ret_value; GLint (*func_glGetUniformBufferSizeEXT)( GLuint, GLint ) = extension_funcs[EXT_glGetUniformBufferSizeEXT]; @@ -5677,6 +5886,14 @@ static GLint WINAPI wine_glGetUniformBufferSizeEXT( GLuint program, GLint locati return ret_value; } +static void WINAPI wine_glGetUniformIndices( GLuint program, GLsizei uniformCount, char** uniformNames, GLuint* uniformIndices ) { + void (*func_glGetUniformIndices)( GLuint, GLsizei, char**, GLuint* ) = extension_funcs[EXT_glGetUniformIndices]; + TRACE("(%d, %d, %p, %p)\n", program, uniformCount, uniformNames, uniformIndices ); + ENTER_GL(); + func_glGetUniformIndices( program, uniformCount, uniformNames, uniformIndices ); + LEAVE_GL(); +} + static GLint WINAPI wine_glGetUniformLocation( GLuint program, char* name ) { GLint ret_value; GLint (*func_glGetUniformLocation)( GLuint, char* ) = extension_funcs[EXT_glGetUniformLocation]; @@ -5957,6 +6174,38 @@ static void WINAPI wine_glGetVertexAttribivNV( GLuint index, GLenum pname, GLint LEAVE_GL(); } +static void WINAPI wine_glGetVideoi64vNV( GLuint video_slot, GLenum pname, INT64* params ) { + void (*func_glGetVideoi64vNV)( GLuint, GLenum, INT64* ) = extension_funcs[EXT_glGetVideoi64vNV]; + TRACE("(%d, %d, %p)\n", video_slot, pname, params ); + ENTER_GL(); + func_glGetVideoi64vNV( video_slot, pname, params ); + LEAVE_GL(); +} + +static void WINAPI wine_glGetVideoivNV( GLuint video_slot, GLenum pname, GLint* params ) { + void (*func_glGetVideoivNV)( GLuint, GLenum, GLint* ) = extension_funcs[EXT_glGetVideoivNV]; + TRACE("(%d, %d, %p)\n", video_slot, pname, params ); + ENTER_GL(); + func_glGetVideoivNV( video_slot, pname, params ); + LEAVE_GL(); +} + +static void WINAPI wine_glGetVideoui64vNV( GLuint video_slot, GLenum pname, UINT64* params ) { + void (*func_glGetVideoui64vNV)( GLuint, GLenum, UINT64* ) = extension_funcs[EXT_glGetVideoui64vNV]; + TRACE("(%d, %d, %p)\n", video_slot, pname, params ); + ENTER_GL(); + func_glGetVideoui64vNV( video_slot, pname, params ); + LEAVE_GL(); +} + +static void WINAPI wine_glGetVideouivNV( GLuint video_slot, GLenum pname, GLuint* params ) { + void (*func_glGetVideouivNV)( GLuint, GLenum, GLuint* ) = extension_funcs[EXT_glGetVideouivNV]; + TRACE("(%d, %d, %p)\n", video_slot, pname, params ); + ENTER_GL(); + func_glGetVideouivNV( video_slot, pname, params ); + LEAVE_GL(); +} + static void WINAPI wine_glGlobalAlphaFactorbSUN( GLbyte factor ) { void (*func_glGlobalAlphaFactorbSUN)( GLbyte ) = extension_funcs[EXT_glGlobalAlphaFactorbSUN]; TRACE("(%d)\n", factor ); @@ -6325,6 +6574,16 @@ static GLboolean WINAPI wine_glIsTextureEXT( GLuint texture ) { return ret_value; } +static GLboolean WINAPI wine_glIsTransformFeedbackNV( GLuint id ) { + GLboolean ret_value; + GLboolean (*func_glIsTransformFeedbackNV)( GLuint ) = extension_funcs[EXT_glIsTransformFeedbackNV]; + TRACE("(%d)\n", id ); + ENTER_GL(); + ret_value = func_glIsTransformFeedbackNV( id ); + LEAVE_GL(); + return ret_value; +} + static GLboolean WINAPI wine_glIsVariantEnabledEXT( GLuint id, GLenum cap ) { GLboolean ret_value; GLboolean (*func_glIsVariantEnabledEXT)( GLuint, GLenum ) = extension_funcs[EXT_glIsVariantEnabledEXT]; @@ -6503,12 +6762,14 @@ static GLvoid* WINAPI wine_glMapBufferARB( GLenum target, GLenum access ) { return ret_value; } -static void WINAPI wine_glMapBufferRange( GLenum target, INT_PTR offset, INT_PTR length, GLbitfield access ) { - void (*func_glMapBufferRange)( GLenum, INT_PTR, INT_PTR, GLbitfield ) = extension_funcs[EXT_glMapBufferRange]; +static GLvoid* WINAPI wine_glMapBufferRange( GLenum target, INT_PTR offset, INT_PTR length, GLbitfield access ) { + GLvoid* ret_value; + GLvoid* (*func_glMapBufferRange)( GLenum, INT_PTR, INT_PTR, GLbitfield ) = extension_funcs[EXT_glMapBufferRange]; TRACE("(%d, %ld, %ld, %d)\n", target, offset, length, access ); ENTER_GL(); - func_glMapBufferRange( target, offset, length, access ); + ret_value = func_glMapBufferRange( target, offset, length, access ); LEAVE_GL(); + return ret_value; } static void WINAPI wine_glMapControlPointsNV( GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, GLvoid* points ) { @@ -8255,6 +8516,14 @@ static void WINAPI wine_glPassTexCoordATI( GLuint dst, GLuint coord, GLenum swiz LEAVE_GL(); } +static void WINAPI wine_glPauseTransformFeedbackNV( void ) { + void (*func_glPauseTransformFeedbackNV)( void ) = extension_funcs[EXT_glPauseTransformFeedbackNV]; + TRACE("()\n"); + ENTER_GL(); + func_glPauseTransformFeedbackNV( ); + LEAVE_GL(); +} + static void WINAPI wine_glPixelDataRangeNV( GLenum target, GLsizei length, GLvoid* pointer ) { void (*func_glPixelDataRangeNV)( GLenum, GLsizei, GLvoid* ) = extension_funcs[EXT_glPixelDataRangeNV]; TRACE("(%d, %d, %p)\n", target, length, pointer ); @@ -8459,6 +8728,22 @@ static void WINAPI wine_glPolygonOffsetEXT( GLfloat factor, GLfloat bias ) { LEAVE_GL(); } +static void WINAPI wine_glPresentFrameDualFillNV( GLuint video_slot, UINT64 minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3 ) { + void (*func_glPresentFrameDualFillNV)( GLuint, UINT64, GLuint, GLuint, GLenum, GLenum, GLuint, GLenum, GLuint, GLenum, GLuint, GLenum, GLuint ) = extension_funcs[EXT_glPresentFrameDualFillNV]; + TRACE("(%d, %lld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)\n", video_slot, minPresentTime, beginPresentTimeId, presentDurationId, type, target0, fill0, target1, fill1, target2, fill2, target3, fill3 ); + ENTER_GL(); + func_glPresentFrameDualFillNV( video_slot, minPresentTime, beginPresentTimeId, presentDurationId, type, target0, fill0, target1, fill1, target2, fill2, target3, fill3 ); + LEAVE_GL(); +} + +static void WINAPI wine_glPresentFrameKeyedNV( GLuint video_slot, UINT64 minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1 ) { + void (*func_glPresentFrameKeyedNV)( GLuint, UINT64, GLuint, GLuint, GLenum, GLenum, GLuint, GLuint, GLenum, GLuint, GLuint ) = extension_funcs[EXT_glPresentFrameKeyedNV]; + TRACE("(%d, %lld, %d, %d, %d, %d, %d, %d, %d, %d, %d)\n", video_slot, minPresentTime, beginPresentTimeId, presentDurationId, type, target0, fill0, key0, target1, fill1, key1 ); + ENTER_GL(); + func_glPresentFrameKeyedNV( video_slot, minPresentTime, beginPresentTimeId, presentDurationId, type, target0, fill0, key0, target1, fill1, key1 ); + LEAVE_GL(); +} + static void WINAPI wine_glPrimitiveRestartIndexNV( GLuint index ) { void (*func_glPrimitiveRestartIndexNV)( GLuint ) = extension_funcs[EXT_glPrimitiveRestartIndexNV]; TRACE("(%d)\n", index ); @@ -9059,6 +9344,14 @@ static void WINAPI wine_glProgramVertexLimitNV( GLenum target, GLint limit ) { LEAVE_GL(); } +static void WINAPI wine_glProvokingVertexEXT( GLenum mode ) { + void (*func_glProvokingVertexEXT)( GLenum ) = extension_funcs[EXT_glProvokingVertexEXT]; + TRACE("(%d)\n", mode ); + ENTER_GL(); + func_glProvokingVertexEXT( mode ); + LEAVE_GL(); +} + static void WINAPI wine_glPushClientAttribDefaultEXT( GLbitfield mask ) { void (*func_glPushClientAttribDefaultEXT)( GLbitfield ) = extension_funcs[EXT_glPushClientAttribDefaultEXT]; TRACE("(%d)\n", mask ); @@ -9347,6 +9640,14 @@ static void WINAPI wine_glResizeBuffersMESA( void ) { LEAVE_GL(); } +static void WINAPI wine_glResumeTransformFeedbackNV( void ) { + void (*func_glResumeTransformFeedbackNV)( void ) = extension_funcs[EXT_glResumeTransformFeedbackNV]; + TRACE("()\n"); + ENTER_GL(); + func_glResumeTransformFeedbackNV( ); + LEAVE_GL(); +} + static void WINAPI wine_glSampleCoverage( GLclampf value, GLboolean invert ) { void (*func_glSampleCoverage)( GLclampf, GLboolean ) = extension_funcs[EXT_glSampleCoverage]; TRACE("(%f, %d)\n", value, invert ); @@ -9379,6 +9680,14 @@ static void WINAPI wine_glSampleMaskEXT( GLclampf value, GLboolean invert ) { LEAVE_GL(); } +static void WINAPI wine_glSampleMaskIndexedNV( GLuint index, GLbitfield mask ) { + void (*func_glSampleMaskIndexedNV)( GLuint, GLbitfield ) = extension_funcs[EXT_glSampleMaskIndexedNV]; + TRACE("(%d, %d)\n", index, mask ); + ENTER_GL(); + func_glSampleMaskIndexedNV( index, mask ); + LEAVE_GL(); +} + static void WINAPI wine_glSampleMaskSGIS( GLclampf value, GLboolean invert ) { void (*func_glSampleMaskSGIS)( GLclampf, GLboolean ) = extension_funcs[EXT_glSampleMaskSGIS]; TRACE("(%f, %d)\n", value, invert ); @@ -9699,6 +10008,14 @@ static void WINAPI wine_glSecondaryColorPointerListIBM( GLint size, GLenum type, LEAVE_GL(); } +static void WINAPI wine_glSelectPerfMonitorCountersAMD( GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint* counterList ) { + void (*func_glSelectPerfMonitorCountersAMD)( GLuint, GLboolean, GLuint, GLint, GLuint* ) = extension_funcs[EXT_glSelectPerfMonitorCountersAMD]; + TRACE("(%d, %d, %d, %d, %p)\n", monitor, enable, group, numCounters, counterList ); + ENTER_GL(); + func_glSelectPerfMonitorCountersAMD( monitor, enable, group, numCounters, counterList ); + LEAVE_GL(); +} + static void WINAPI wine_glSelectTextureCoordSetSGIS( GLenum target ) { void (*func_glSelectTextureCoordSetSGIS)( GLenum ) = extension_funcs[EXT_glSelectTextureCoordSetSGIS]; TRACE("(%d)\n", target ); @@ -10027,6 +10344,22 @@ static void WINAPI wine_glTbufferMask3DFX( GLuint mask ) { LEAVE_GL(); } +static void WINAPI wine_glTessellationFactorAMD( GLfloat factor ) { + void (*func_glTessellationFactorAMD)( GLfloat ) = extension_funcs[EXT_glTessellationFactorAMD]; + TRACE("(%f)\n", factor ); + ENTER_GL(); + func_glTessellationFactorAMD( factor ); + LEAVE_GL(); +} + +static void WINAPI wine_glTessellationModeAMD( GLenum mode ) { + void (*func_glTessellationModeAMD)( GLenum ) = extension_funcs[EXT_glTessellationModeAMD]; + TRACE("(%d)\n", mode ); + ENTER_GL(); + func_glTessellationModeAMD( mode ); + LEAVE_GL(); +} + static GLboolean WINAPI wine_glTestFenceAPPLE( GLuint fence ) { GLboolean ret_value; GLboolean (*func_glTestFenceAPPLE)( GLuint ) = extension_funcs[EXT_glTestFenceAPPLE]; @@ -10345,6 +10678,14 @@ static void WINAPI wine_glTexParameterIuivEXT( GLenum target, GLenum pname, GLui LEAVE_GL(); } +static void WINAPI wine_glTexRenderbufferNV( GLenum target, GLuint renderbuffer ) { + void (*func_glTexRenderbufferNV)( GLenum, GLuint ) = extension_funcs[EXT_glTexRenderbufferNV]; + TRACE("(%d, %d)\n", target, renderbuffer ); + ENTER_GL(); + func_glTexRenderbufferNV( target, renderbuffer ); + LEAVE_GL(); +} + static void WINAPI wine_glTexSubImage1DEXT( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, GLvoid* pixels ) { void (*func_glTexSubImage1DEXT)( GLenum, GLint, GLint, GLsizei, GLenum, GLenum, GLvoid* ) = extension_funcs[EXT_glTexSubImage1DEXT]; TRACE("(%d, %d, %d, %d, %d, %d, %p)\n", target, level, xoffset, width, format, type, pixels ); @@ -10537,19 +10878,19 @@ static void WINAPI wine_glTransformFeedbackAttribsNV( GLuint count, GLint* attri LEAVE_GL(); } -static void WINAPI wine_glTransformFeedbackVaryings( GLuint program, GLsizei count, GLint* locations, GLenum bufferMode ) { - void (*func_glTransformFeedbackVaryings)( GLuint, GLsizei, GLint*, GLenum ) = extension_funcs[EXT_glTransformFeedbackVaryings]; - TRACE("(%d, %d, %p, %d)\n", program, count, locations, bufferMode ); +static void WINAPI wine_glTransformFeedbackVaryings( GLuint program, GLsizei count, char** varyings, GLenum bufferMode ) { + void (*func_glTransformFeedbackVaryings)( GLuint, GLsizei, char**, GLenum ) = extension_funcs[EXT_glTransformFeedbackVaryings]; + TRACE("(%d, %d, %p, %d)\n", program, count, varyings, bufferMode ); ENTER_GL(); - func_glTransformFeedbackVaryings( program, count, locations, bufferMode ); + func_glTransformFeedbackVaryings( program, count, varyings, bufferMode ); LEAVE_GL(); } -static void WINAPI wine_glTransformFeedbackVaryingsEXT( GLuint program, GLsizei count, GLint* locations, GLenum bufferMode ) { - void (*func_glTransformFeedbackVaryingsEXT)( GLuint, GLsizei, GLint*, GLenum ) = extension_funcs[EXT_glTransformFeedbackVaryingsEXT]; - TRACE("(%d, %d, %p, %d)\n", program, count, locations, bufferMode ); +static void WINAPI wine_glTransformFeedbackVaryingsEXT( GLuint program, GLsizei count, char** varyings, GLenum bufferMode ) { + void (*func_glTransformFeedbackVaryingsEXT)( GLuint, GLsizei, char**, GLenum ) = extension_funcs[EXT_glTransformFeedbackVaryingsEXT]; + TRACE("(%d, %d, %p, %d)\n", program, count, varyings, bufferMode ); ENTER_GL(); - func_glTransformFeedbackVaryingsEXT( program, count, locations, bufferMode ); + func_glTransformFeedbackVaryingsEXT( program, count, varyings, bufferMode ); LEAVE_GL(); } @@ -10945,6 +11286,14 @@ static void WINAPI wine_glUniform4uivEXT( GLint location, GLsizei count, GLuint* LEAVE_GL(); } +static void WINAPI wine_glUniformBlockBinding( GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding ) { + void (*func_glUniformBlockBinding)( GLuint, GLuint, GLuint ) = extension_funcs[EXT_glUniformBlockBinding]; + TRACE("(%d, %d, %d)\n", program, uniformBlockIndex, uniformBlockBinding ); + ENTER_GL(); + func_glUniformBlockBinding( program, uniformBlockIndex, uniformBlockBinding ); + LEAVE_GL(); +} + static void WINAPI wine_glUniformBufferEXT( GLuint program, GLint location, GLuint buffer ) { void (*func_glUniformBufferEXT)( GLuint, GLint, GLuint ) = extension_funcs[EXT_glUniformBufferEXT]; TRACE("(%d, %d, %d)\n", program, location, buffer ); @@ -12991,6 +13340,14 @@ static void WINAPI wine_glVertexWeighthvNV( unsigned short* weight ) { LEAVE_GL(); } +static void WINAPI wine_glVideoParameterivNV( GLuint video_slot, GLenum pname, GLint* params ) { + void (*func_glVideoParameterivNV)( GLuint, GLenum, GLint* ) = extension_funcs[EXT_glVideoParameterivNV]; + TRACE("(%d, %d, %p)\n", video_slot, pname, params ); + ENTER_GL(); + func_glVideoParameterivNV( video_slot, pname, params ); + LEAVE_GL(); +} + static void WINAPI wine_glWeightPointerARB( GLint size, GLenum type, GLsizei stride, GLvoid* pointer ) { void (*func_glWeightPointerARB)( GLint, GLenum, GLsizei, GLvoid* ) = extension_funcs[EXT_glWeightPointerARB]; TRACE("(%d, %d, %d, %p)\n", size, type, stride, pointer ); @@ -13541,6 +13898,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glBeginConditionalRenderNV", "GL_NV_conditional_render", wine_glBeginConditionalRenderNV }, { "glBeginFragmentShaderATI", "GL_ATI_fragment_shader", wine_glBeginFragmentShaderATI }, { "glBeginOcclusionQueryNV", "GL_NV_occlusion_query", wine_glBeginOcclusionQueryNV }, + { "glBeginPerfMonitorAMD", "GL_AMD_performance_monitor", wine_glBeginPerfMonitorAMD }, { "glBeginQuery", "GL_VERSION_1_5", wine_glBeginQuery }, { "glBeginQueryARB", "GL_ARB_occlusion_query", wine_glBeginQueryARB }, { "glBeginTransformFeedback", "GL_VERSION_3_0", wine_glBeginTransformFeedback }, @@ -13575,6 +13933,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glBindTexGenParameterEXT", "GL_EXT_vertex_shader", wine_glBindTexGenParameterEXT }, { "glBindTextureEXT", "GL_EXT_texture_object", wine_glBindTextureEXT }, { "glBindTextureUnitParameterEXT", "GL_EXT_vertex_shader", wine_glBindTextureUnitParameterEXT }, + { "glBindTransformFeedbackNV", "GL_NV_transform_feedback2", wine_glBindTransformFeedbackNV }, { "glBindVertexArray", "GL_ARB_vertex_array_object", wine_glBindVertexArray }, { "glBindVertexArrayAPPLE", "GL_APPLE_vertex_array_object", wine_glBindVertexArrayAPPLE }, { "glBindVertexShaderEXT", "GL_EXT_vertex_shader", wine_glBindVertexShaderEXT }, @@ -13684,6 +14043,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glConvolutionParameterfvEXT", "GL_EXT_convolution", wine_glConvolutionParameterfvEXT }, { "glConvolutionParameteriEXT", "GL_EXT_convolution", wine_glConvolutionParameteriEXT }, { "glConvolutionParameterivEXT", "GL_EXT_convolution", wine_glConvolutionParameterivEXT }, + { "glCopyBufferSubData", "GL_ARB_copy_buffer", wine_glCopyBufferSubData }, { "glCopyColorSubTableEXT", "GL_EXT_color_subtable", wine_glCopyColorSubTableEXT }, { "glCopyColorTableSGI", "GL_SGI_color_table", wine_glCopyColorTableSGI }, { "glCopyConvolutionFilter1DEXT", "GL_EXT_convolution", wine_glCopyConvolutionFilter1DEXT }, @@ -13725,6 +14085,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glDeleteObjectARB", "GL_ARB_shader_objects", wine_glDeleteObjectARB }, { "glDeleteObjectBufferATI", "GL_ATI_vertex_array_object", wine_glDeleteObjectBufferATI }, { "glDeleteOcclusionQueriesNV", "GL_NV_occlusion_query", wine_glDeleteOcclusionQueriesNV }, + { "glDeletePerfMonitorsAMD", "GL_AMD_performance_monitor", wine_glDeletePerfMonitorsAMD }, { "glDeleteProgram", "GL_VERSION_2_0", wine_glDeleteProgram }, { "glDeleteProgramsARB", "GL_ARB_vertex_program", wine_glDeleteProgramsARB }, { "glDeleteProgramsNV", "GL_NV_vertex_program", wine_glDeleteProgramsNV }, @@ -13734,6 +14095,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glDeleteRenderbuffersEXT", "GL_EXT_framebuffer_object", wine_glDeleteRenderbuffersEXT }, { "glDeleteShader", "GL_VERSION_2_0", wine_glDeleteShader }, { "glDeleteTexturesEXT", "GL_EXT_texture_object", wine_glDeleteTexturesEXT }, + { "glDeleteTransformFeedbacksNV", "GL_NV_transform_feedback2", wine_glDeleteTransformFeedbacksNV }, { "glDeleteVertexArrays", "GL_ARB_vertex_array_object", wine_glDeleteVertexArrays }, { "glDeleteVertexArraysAPPLE", "GL_APPLE_vertex_array_object", wine_glDeleteVertexArraysAPPLE }, { "glDeleteVertexShaderEXT", "GL_EXT_vertex_shader", wine_glDeleteVertexShaderEXT }, @@ -13764,6 +14126,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glDrawRangeElementArrayAPPLE", "GL_APPLE_element_array", wine_glDrawRangeElementArrayAPPLE }, { "glDrawRangeElementArrayATI", "GL_ATI_element_array", wine_glDrawRangeElementArrayATI }, { "glDrawRangeElementsEXT", "GL_EXT_draw_range_elements", wine_glDrawRangeElementsEXT }, + { "glDrawTransformFeedbackNV", "GL_NV_transform_feedback2", wine_glDrawTransformFeedbackNV }, { "glEdgeFlagPointerEXT", "GL_EXT_vertex_array", wine_glEdgeFlagPointerEXT }, { "glEdgeFlagPointerListIBM", "GL_IBM_vertex_array_lists", wine_glEdgeFlagPointerListIBM }, { "glElementPointerAPPLE", "GL_APPLE_element_array", wine_glElementPointerAPPLE }, @@ -13778,6 +14141,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glEndConditionalRenderNV", "GL_NV_conditional_render", wine_glEndConditionalRenderNV }, { "glEndFragmentShaderATI", "GL_ATI_fragment_shader", wine_glEndFragmentShaderATI }, { "glEndOcclusionQueryNV", "GL_NV_occlusion_query", wine_glEndOcclusionQueryNV }, + { "glEndPerfMonitorAMD", "GL_AMD_performance_monitor", wine_glEndPerfMonitorAMD }, { "glEndQuery", "GL_VERSION_1_5", wine_glEndQuery }, { "glEndQueryARB", "GL_ARB_occlusion_query", wine_glEndQueryARB }, { "glEndTransformFeedback", "GL_VERSION_3_0", wine_glEndTransformFeedback }, @@ -13856,6 +14220,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glGenFramebuffers", "GL_ARB_framebuffer_object", wine_glGenFramebuffers }, { "glGenFramebuffersEXT", "GL_EXT_framebuffer_object", wine_glGenFramebuffersEXT }, { "glGenOcclusionQueriesNV", "GL_NV_occlusion_query", wine_glGenOcclusionQueriesNV }, + { "glGenPerfMonitorsAMD", "GL_AMD_performance_monitor", wine_glGenPerfMonitorsAMD }, { "glGenProgramsARB", "GL_ARB_vertex_program", wine_glGenProgramsARB }, { "glGenProgramsNV", "GL_NV_vertex_program", wine_glGenProgramsNV }, { "glGenQueries", "GL_VERSION_1_5", wine_glGenQueries }, @@ -13864,6 +14229,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glGenRenderbuffersEXT", "GL_EXT_framebuffer_object", wine_glGenRenderbuffersEXT }, { "glGenSymbolsEXT", "GL_EXT_vertex_shader", wine_glGenSymbolsEXT }, { "glGenTexturesEXT", "GL_EXT_texture_object", wine_glGenTexturesEXT }, + { "glGenTransformFeedbacksNV", "GL_NV_transform_feedback2", wine_glGenTransformFeedbacksNV }, { "glGenVertexArrays", "GL_ARB_vertex_array_object", wine_glGenVertexArrays }, { "glGenVertexArraysAPPLE", "GL_APPLE_vertex_array_object", wine_glGenVertexArraysAPPLE }, { "glGenVertexShadersEXT", "GL_EXT_vertex_shader", wine_glGenVertexShadersEXT }, @@ -13875,6 +14241,10 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glGetActiveAttribARB", "GL_ARB_vertex_shader", wine_glGetActiveAttribARB }, { "glGetActiveUniform", "GL_VERSION_2_0", wine_glGetActiveUniform }, { "glGetActiveUniformARB", "GL_ARB_shader_objects", wine_glGetActiveUniformARB }, + { "glGetActiveUniformBlockName", "GL_ARB_uniform_buffer_object", wine_glGetActiveUniformBlockName }, + { "glGetActiveUniformBlockiv", "GL_ARB_uniform_buffer_object", wine_glGetActiveUniformBlockiv }, + { "glGetActiveUniformName", "GL_ARB_uniform_buffer_object", wine_glGetActiveUniformName }, + { "glGetActiveUniformsiv", "GL_ARB_uniform_buffer_object", wine_glGetActiveUniformsiv }, { "glGetActiveVaryingNV", "GL_NV_transform_feedback", wine_glGetActiveVaryingNV }, { "glGetArrayObjectfvATI", "GL_ATI_vertex_array_object", wine_glGetArrayObjectfvATI }, { "glGetArrayObjectivATI", "GL_ATI_vertex_array_object", wine_glGetArrayObjectivATI }, @@ -13962,6 +14332,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glGetMultiTexParameterIuivEXT", "GL_EXT_direct_state_access", wine_glGetMultiTexParameterIuivEXT }, { "glGetMultiTexParameterfvEXT", "GL_EXT_direct_state_access", wine_glGetMultiTexParameterfvEXT }, { "glGetMultiTexParameterivEXT", "GL_EXT_direct_state_access", wine_glGetMultiTexParameterivEXT }, + { "glGetMultisamplefvNV", "GL_NV_explicit_multisample", wine_glGetMultisamplefvNV }, { "glGetNamedBufferParameterivEXT", "GL_EXT_direct_state_access", wine_glGetNamedBufferParameterivEXT }, { "glGetNamedBufferPointervEXT", "GL_EXT_direct_state_access", wine_glGetNamedBufferPointervEXT }, { "glGetNamedBufferSubDataEXT", "GL_EXT_direct_state_access", wine_glGetNamedBufferSubDataEXT }, @@ -13979,6 +14350,12 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glGetObjectParameterivARB", "GL_ARB_shader_objects", wine_glGetObjectParameterivARB }, { "glGetOcclusionQueryivNV", "GL_NV_occlusion_query", wine_glGetOcclusionQueryivNV }, { "glGetOcclusionQueryuivNV", "GL_NV_occlusion_query", wine_glGetOcclusionQueryuivNV }, + { "glGetPerfMonitorCounterDataAMD", "GL_AMD_performance_monitor", wine_glGetPerfMonitorCounterDataAMD }, + { "glGetPerfMonitorCounterInfoAMD", "GL_AMD_performance_monitor", wine_glGetPerfMonitorCounterInfoAMD }, + { "glGetPerfMonitorCounterStringAMD", "GL_AMD_performance_monitor", wine_glGetPerfMonitorCounterStringAMD }, + { "glGetPerfMonitorCountersAMD", "GL_AMD_performance_monitor", wine_glGetPerfMonitorCountersAMD }, + { "glGetPerfMonitorGroupStringAMD", "GL_AMD_performance_monitor", wine_glGetPerfMonitorGroupStringAMD }, + { "glGetPerfMonitorGroupsAMD", "GL_AMD_performance_monitor", wine_glGetPerfMonitorGroupsAMD }, { "glGetPixelTexGenParameterfvSGIS", "GL_SGIS_pixel_texture", wine_glGetPixelTexGenParameterfvSGIS }, { "glGetPixelTexGenParameterivSGIS", "GL_SGIS_pixel_texture", wine_glGetPixelTexGenParameterivSGIS }, { "glGetPointerIndexedvEXT", "GL_EXT_direct_state_access", wine_glGetPointerIndexedvEXT }, @@ -14036,7 +14413,9 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glGetTransformFeedbackVarying", "GL_VERSION_3_0", wine_glGetTransformFeedbackVarying }, { "glGetTransformFeedbackVaryingEXT", "GL_EXT_transform_feedback", wine_glGetTransformFeedbackVaryingEXT }, { "glGetTransformFeedbackVaryingNV", "GL_NV_transform_feedback", wine_glGetTransformFeedbackVaryingNV }, + { "glGetUniformBlockIndex", "GL_ARB_uniform_buffer_object", wine_glGetUniformBlockIndex }, { "glGetUniformBufferSizeEXT", "GL_EXT_bindable_uniform", wine_glGetUniformBufferSizeEXT }, + { "glGetUniformIndices", "GL_ARB_uniform_buffer_object", wine_glGetUniformIndices }, { "glGetUniformLocation", "GL_VERSION_2_0", wine_glGetUniformLocation }, { "glGetUniformLocationARB", "GL_ARB_shader_objects", wine_glGetUniformLocationARB }, { "glGetUniformOffsetEXT", "GL_EXT_bindable_uniform", wine_glGetUniformOffsetEXT }, @@ -14071,6 +14450,10 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glGetVertexAttribiv", "GL_VERSION_2_0", wine_glGetVertexAttribiv }, { "glGetVertexAttribivARB", "GL_ARB_vertex_program", wine_glGetVertexAttribivARB }, { "glGetVertexAttribivNV", "GL_NV_vertex_program", wine_glGetVertexAttribivNV }, + { "glGetVideoi64vNV", "GL_NV_present_video", wine_glGetVideoi64vNV }, + { "glGetVideoivNV", "GL_NV_present_video", wine_glGetVideoivNV }, + { "glGetVideoui64vNV", "GL_NV_present_video", wine_glGetVideoui64vNV }, + { "glGetVideouivNV", "GL_NV_present_video", wine_glGetVideouivNV }, { "glGlobalAlphaFactorbSUN", "GL_SUN_global_alpha", wine_glGlobalAlphaFactorbSUN }, { "glGlobalAlphaFactordSUN", "GL_SUN_global_alpha", wine_glGlobalAlphaFactordSUN }, { "glGlobalAlphaFactorfSUN", "GL_SUN_global_alpha", wine_glGlobalAlphaFactorfSUN }, @@ -14112,6 +14495,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glIsRenderbufferEXT", "GL_EXT_framebuffer_object", wine_glIsRenderbufferEXT }, { "glIsShader", "GL_VERSION_2_0", wine_glIsShader }, { "glIsTextureEXT", "GL_EXT_texture_object", wine_glIsTextureEXT }, + { "glIsTransformFeedbackNV", "GL_NV_transform_feedback2", wine_glIsTransformFeedbackNV }, { "glIsVariantEnabledEXT", "GL_EXT_vertex_shader", wine_glIsVariantEnabledEXT }, { "glIsVertexArray", "GL_ARB_vertex_array_object", wine_glIsVertexArray }, { "glIsVertexArrayAPPLE", "GL_APPLE_vertex_array_object", wine_glIsVertexArrayAPPLE }, @@ -14351,6 +14735,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glPNTrianglesfATI", "GL_ATI_pn_triangles", wine_glPNTrianglesfATI }, { "glPNTrianglesiATI", "GL_ATI_pn_triangles", wine_glPNTrianglesiATI }, { "glPassTexCoordATI", "GL_ATI_fragment_shader", wine_glPassTexCoordATI }, + { "glPauseTransformFeedbackNV", "GL_NV_transform_feedback2", wine_glPauseTransformFeedbackNV }, { "glPixelDataRangeNV", "GL_NV_pixel_data_range", wine_glPixelDataRangeNV }, { "glPixelTexGenParameterfSGIS", "GL_SGIS_pixel_texture", wine_glPixelTexGenParameterfSGIS }, { "glPixelTexGenParameterfvSGIS", "GL_SGIS_pixel_texture", wine_glPixelTexGenParameterfvSGIS }, @@ -14376,6 +14761,8 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glPollAsyncSGIX", "GL_SGIX_async", wine_glPollAsyncSGIX }, { "glPollInstrumentsSGIX", "GL_SGIX_instruments", wine_glPollInstrumentsSGIX }, { "glPolygonOffsetEXT", "GL_EXT_polygon_offset", wine_glPolygonOffsetEXT }, + { "glPresentFrameDualFillNV", "GL_NV_present_video", wine_glPresentFrameDualFillNV }, + { "glPresentFrameKeyedNV", "GL_NV_present_video", wine_glPresentFrameKeyedNV }, { "glPrimitiveRestartIndexNV", "GL_NV_primitive_restart", wine_glPrimitiveRestartIndexNV }, { "glPrimitiveRestartNV", "GL_NV_primitive_restart", wine_glPrimitiveRestartNV }, { "glPrioritizeTexturesEXT", "GL_EXT_texture_object", wine_glPrioritizeTexturesEXT }, @@ -14451,6 +14838,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glProgramUniformMatrix4x2fvEXT", "GL_EXT_direct_state_access", wine_glProgramUniformMatrix4x2fvEXT }, { "glProgramUniformMatrix4x3fvEXT", "GL_EXT_direct_state_access", wine_glProgramUniformMatrix4x3fvEXT }, { "glProgramVertexLimitNV", "GL_NV_geometry_program4", wine_glProgramVertexLimitNV }, + { "glProvokingVertexEXT", "GL_EXT_provoking_vertex", wine_glProvokingVertexEXT }, { "glPushClientAttribDefaultEXT", "GL_EXT_direct_state_access", wine_glPushClientAttribDefaultEXT }, { "glReadBufferRegion", "GL_KTX_buffer_region", wine_glReadBufferRegion }, { "glReadInstrumentsSGIX", "GL_SGIX_instruments", wine_glReadInstrumentsSGIX }, @@ -14487,10 +14875,12 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glResetHistogramEXT", "GL_EXT_histogram", wine_glResetHistogramEXT }, { "glResetMinmaxEXT", "GL_EXT_histogram", wine_glResetMinmaxEXT }, { "glResizeBuffersMESA", "GL_MESA_resize_buffers", wine_glResizeBuffersMESA }, + { "glResumeTransformFeedbackNV", "GL_NV_transform_feedback2", wine_glResumeTransformFeedbackNV }, { "glSampleCoverage", "GL_VERSION_1_3", wine_glSampleCoverage }, { "glSampleCoverageARB", "GL_ARB_multisample", wine_glSampleCoverageARB }, { "glSampleMapATI", "GL_ATI_fragment_shader", wine_glSampleMapATI }, { "glSampleMaskEXT", "GL_EXT_multisample", wine_glSampleMaskEXT }, + { "glSampleMaskIndexedNV", "GL_NV_explicit_multisample", wine_glSampleMaskIndexedNV }, { "glSampleMaskSGIS", "GL_SGIS_multisample", wine_glSampleMaskSGIS }, { "glSamplePatternEXT", "GL_EXT_multisample", wine_glSamplePatternEXT }, { "glSamplePatternSGIS", "GL_SGIS_multisample", wine_glSamplePatternSGIS }, @@ -14531,6 +14921,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glSecondaryColorPointer", "GL_VERSION_1_4", wine_glSecondaryColorPointer }, { "glSecondaryColorPointerEXT", "GL_EXT_secondary_color", wine_glSecondaryColorPointerEXT }, { "glSecondaryColorPointerListIBM", "GL_IBM_vertex_array_lists", wine_glSecondaryColorPointerListIBM }, + { "glSelectPerfMonitorCountersAMD", "GL_AMD_performance_monitor", wine_glSelectPerfMonitorCountersAMD }, { "glSelectTextureCoordSetSGIS", "GL_SGIS_multitexture", wine_glSelectTextureCoordSetSGIS }, { "glSelectTextureSGIS", "GL_SGIS_multitexture", wine_glSelectTextureSGIS }, { "glSeparableFilter2DEXT", "GL_EXT_convolution", wine_glSeparableFilter2DEXT }, @@ -14572,6 +14963,8 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glTangent3svEXT", "GL_EXT_coordinate_frame", wine_glTangent3svEXT }, { "glTangentPointerEXT", "GL_EXT_coordinate_frame", wine_glTangentPointerEXT }, { "glTbufferMask3DFX", "GL_3DFX_tbuffer", wine_glTbufferMask3DFX }, + { "glTessellationFactorAMD", "GL_AMD_vertex_shader_tesselator", wine_glTessellationFactorAMD }, + { "glTessellationModeAMD", "GL_AMD_vertex_shader_tesselator", wine_glTessellationModeAMD }, { "glTestFenceAPPLE", "GL_APPLE_fence", wine_glTestFenceAPPLE }, { "glTestFenceNV", "GL_NV_fence", wine_glTestFenceNV }, { "glTestObjectAPPLE", "GL_APPLE_fence", wine_glTestObjectAPPLE }, @@ -14611,6 +15004,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glTexParameterIivEXT", "GL_EXT_texture_integer", wine_glTexParameterIivEXT }, { "glTexParameterIuiv", "GL_VERSION_3_0", wine_glTexParameterIuiv }, { "glTexParameterIuivEXT", "GL_EXT_texture_integer", wine_glTexParameterIuivEXT }, + { "glTexRenderbufferNV", "GL_NV_explicit_multisample", wine_glTexRenderbufferNV }, { "glTexSubImage1DEXT", "GL_EXT_subtexture", wine_glTexSubImage1DEXT }, { "glTexSubImage2DEXT", "GL_EXT_subtexture", wine_glTexSubImage2DEXT }, { "glTexSubImage3DEXT", "GL_EXT_texture3D", wine_glTexSubImage3DEXT }, @@ -14686,6 +15080,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glUniform4uiEXT", "GL_EXT_gpu_shader4", wine_glUniform4uiEXT }, { "glUniform4uiv", "GL_VERSION_3_0", wine_glUniform4uiv }, { "glUniform4uivEXT", "GL_EXT_gpu_shader4", wine_glUniform4uivEXT }, + { "glUniformBlockBinding", "GL_ARB_uniform_buffer_object", wine_glUniformBlockBinding }, { "glUniformBufferEXT", "GL_EXT_bindable_uniform", wine_glUniformBufferEXT }, { "glUniformMatrix2fv", "GL_VERSION_2_0", wine_glUniformMatrix2fv }, { "glUniformMatrix2fvARB", "GL_ARB_shader_objects", wine_glUniformMatrix2fvARB }, @@ -14941,6 +15336,7 @@ const OpenGL_extension extension_registry[NB_EXTENSIONS] = { { "glVertexWeightfvEXT", "GL_EXT_vertex_weighting", wine_glVertexWeightfvEXT }, { "glVertexWeighthNV", "GL_NV_half_float", wine_glVertexWeighthNV }, { "glVertexWeighthvNV", "GL_NV_half_float", wine_glVertexWeighthvNV }, + { "glVideoParameterivNV", "GL_NV_present_video", wine_glVideoParameterivNV }, { "glWeightPointerARB", "GL_ARB_vertex_blend", wine_glWeightPointerARB }, { "glWeightbvARB", "GL_ARB_vertex_blend", wine_glWeightbvARB }, { "glWeightdvARB", "GL_ARB_vertex_blend", wine_glWeightdvARB }, diff --git a/dlls/quartz/tests/filtergraph.c b/dlls/quartz/tests/filtergraph.c index f6d61cd919e..26a72beef8d 100644 --- a/dlls/quartz/tests/filtergraph.c +++ b/dlls/quartz/tests/filtergraph.c @@ -1460,7 +1460,7 @@ static HRESULT get_connected_filter_name(TestFilterImpl *pFilter, char *FilterNa static void test_render_filter_priority(void) { /* Tests filter choice priorities in Render(). */ - DWORD cookie1, cookie2, cookie3; + DWORD cookie1 = 0, cookie2 = 0, cookie3 = 0; HRESULT hr; IFilterGraph2* pgraph2 = NULL; IFilterMapper2 *pMapper2 = NULL; @@ -1758,12 +1758,15 @@ static void test_render_filter_priority(void) hr = CoRegisterClassObject(Filter1ClassFactory.clsid, (IUnknown *)&Filter1ClassFactory, CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &cookie1); ok(hr == S_OK, "CoRegisterClassObject failed with %08x\n", hr); + if (FAILED(hr)) goto out; hr = CoRegisterClassObject(Filter2ClassFactory.clsid, (IUnknown *)&Filter2ClassFactory, CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &cookie2); ok(hr == S_OK, "CoRegisterClassObject failed with %08x\n", hr); + if (FAILED(hr)) goto out; hr = CoRegisterClassObject(Filter3ClassFactory.clsid, (IUnknown *)&Filter3ClassFactory, CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &cookie3); ok(hr == S_OK, "CoRegisterClassObject failed with %08x\n", hr); + if (FAILED(hr)) goto out; rgf2.dwVersion = 2; rgf2.dwMerit = MERIT_UNLIKELY; diff --git a/dlls/shell32/pidl.h b/dlls/shell32/pidl.h index 78a9bc35d9c..73bc3fbb253 100644 --- a/dlls/shell32/pidl.h +++ b/dlls/shell32/pidl.h @@ -97,10 +97,11 @@ #define PT_FOLDER1 0x30 #define PT_FOLDER 0x31 #define PT_VALUE 0x32 -#define PT_VALUEW 0x34 +#define PT_VALUEW 0x34 +#define PT_FOLDERW 0x35 #define PT_WORKGRP 0x41 #define PT_COMP 0x42 -#define PT_NETPROVIDER 0x46 +#define PT_NETPROVIDER 0x46 #define PT_NETWORK 0x47 #define PT_IESPECIAL1 0x61 #define PT_YAGUID 0x70 /* yet another guid.. */ diff --git a/dlls/shell32/tests/shellpath.c b/dlls/shell32/tests/shellpath.c index 302448e0d1b..4cacb087bb9 100644 --- a/dlls/shell32/tests/shellpath.c +++ b/dlls/shell32/tests/shellpath.c @@ -58,6 +58,9 @@ #ifndef PT_FOLDER #define PT_FOLDER 0x31 /* has path */ #endif +#ifndef PT_FOLDERW +#define PT_FOLDERW 0x35 /* has path */ +#endif #ifndef PT_WORKGRP #define PT_WORKGRP 0x41 /* no path */ #endif @@ -90,8 +93,8 @@ static DLLVERSIONINFO shellVersion = { 0 }; static LPMALLOC pMalloc; static const BYTE guidType[] = { PT_GUID }; static const BYTE controlPanelType[] = { PT_SHELLEXT, PT_GUID }; -static const BYTE folderType[] = { PT_FOLDER }; -static const BYTE favoritesType[] = { PT_FOLDER, 0, PT_IESPECIAL2 /* Win98 */ }; +static const BYTE folderType[] = { PT_FOLDER, PT_FOLDERW }; +static const BYTE favoritesType[] = { PT_FOLDER, PT_FOLDERW, 0, PT_IESPECIAL2 /* Win98 */ }; static const BYTE folderOrSpecialType[] = { PT_FOLDER, PT_IESPECIAL2 }; static const BYTE personalType[] = { PT_FOLDER, PT_GUID, PT_DRIVE, 0xff /* Win9x */, PT_IESPECIAL2 /* Win98 */, 0 /* Vista */ }; diff --git a/dlls/shell32/tests/shlfolder.c b/dlls/shell32/tests/shlfolder.c index 7c33867646e..8c5f1dcf5dc 100644 --- a/dlls/shell32/tests/shlfolder.c +++ b/dlls/shell32/tests/shlfolder.c @@ -695,12 +695,31 @@ static void test_GetAttributesOf(void) LPCITEMIDLIST pidlEmpty = (LPCITEMIDLIST)&emptyitem; LPITEMIDLIST pidlMyComputer; DWORD dwFlags; - static const DWORD dwDesktopFlags = /* As observed on WinXP SP2 */ - SFGAO_STORAGE | SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR | - SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER; - static const DWORD dwMyComputerFlags = /* As observed on WinXP SP2 */ - SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | - SFGAO_DROPTARGET | SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER; + static const DWORD desktopFlags[] = { + /* WinXP */ + SFGAO_STORAGE | SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR | SFGAO_FILESYSANCESTOR | + SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER, + /* Win2k */ + SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_STREAM | SFGAO_FILESYSANCESTOR | + SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER, + /* WinMe, Win9x, WinNT*/ + SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_FILESYSANCESTOR | + SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER + }; + static const DWORD myComputerFlags[] = { + /* WinXP */ + SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | + SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER, + /* Win2k */ + SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | SFGAO_STREAM | + SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER, + /* WinMe, Win9x, WinNT */ + SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | SFGAO_FILESYSANCESTOR | + SFGAO_FOLDER | SFGAO_HASSUBFOLDER, + /* Win95, WinNT when queried directly */ + SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | SFGAO_FILESYSANCESTOR | + SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER + }; WCHAR wszMyComputer[] = { ':',':','{','2','0','D','0','4','F','E','0','-','3','A','E','A','-','1','0','6','9','-', 'A','2','D','8','-','0','8','0','0','2','B','3','0','3','0','9','D','}',0 }; @@ -709,7 +728,8 @@ static void test_GetAttributesOf(void) static WCHAR cTestDirW[] = {'t','e','s','t','d','i','r',0}; IShellFolder *IDesktopFolder, *testIShellFolder; ITEMIDLIST *newPIDL; - int len; + int len, i; + BOOL foundFlagsMatch; hr = SHGetDesktopFolder(&psfDesktop); ok (SUCCEEDED(hr), "SHGetDesktopFolder failed! hr = %08x\n", hr); @@ -719,15 +739,25 @@ static void test_GetAttributesOf(void) dwFlags = 0xffffffff; hr = IShellFolder_GetAttributesOf(psfDesktop, 1, &pidlEmpty, &dwFlags); ok (SUCCEEDED(hr), "Desktop->GetAttributesOf(empty pidl) failed! hr = %08x\n", hr); - ok (dwFlags == dwDesktopFlags, "Wrong Desktop attributes: %08x, expected: %08x\n", - dwFlags, dwDesktopFlags); + for (i = 0, foundFlagsMatch = FALSE; !foundFlagsMatch && + i < sizeof(desktopFlags) / sizeof(desktopFlags[0]); i++) + { + if (desktopFlags[i] == dwFlags) + foundFlagsMatch = TRUE; + } + ok (foundFlagsMatch, "Wrong Desktop attributes: %08x\n", dwFlags); /* .. or with no itemidlist at all. */ dwFlags = 0xffffffff; hr = IShellFolder_GetAttributesOf(psfDesktop, 0, NULL, &dwFlags); ok (SUCCEEDED(hr), "Desktop->GetAttributesOf(NULL) failed! hr = %08x\n", hr); - ok (dwFlags == dwDesktopFlags, "Wrong Desktop attributes: %08x, expected: %08x\n", - dwFlags, dwDesktopFlags); + for (i = 0, foundFlagsMatch = FALSE; !foundFlagsMatch && + i < sizeof(desktopFlags) / sizeof(desktopFlags[0]); i++) + { + if (desktopFlags[i] == dwFlags) + foundFlagsMatch = TRUE; + } + ok (foundFlagsMatch, "Wrong Desktop attributes: %08x\n", dwFlags); /* Testing the attributes of the MyComputer shellfolder */ hr = IShellFolder_ParseDisplayName(psfDesktop, NULL, NULL, wszMyComputer, NULL, &pidlMyComputer, NULL); @@ -737,7 +767,7 @@ static void test_GetAttributesOf(void) return; } - /* WinXP SP2 sets the SFGAO_CANLINK flag, when MyComputer is queried via the Desktop + /* Windows sets the SFGAO_CANLINK flag, when MyComputer is queried via the Desktop * folder object. It doesn't do this, if MyComputer is queried directly (see below). * SFGAO_CANLINK is the same as DROPEFFECT_LINK, which MSDN says means: "Drag source * should create a link to the original data". You can't create links on MyComputer on @@ -747,8 +777,13 @@ static void test_GetAttributesOf(void) dwFlags = 0xffffffff; hr = IShellFolder_GetAttributesOf(psfDesktop, 1, (LPCITEMIDLIST*)&pidlMyComputer, &dwFlags); ok (SUCCEEDED(hr), "Desktop->GetAttributesOf(MyComputer) failed! hr = %08x\n", hr); - ok ((dwFlags & ~(DWORD)SFGAO_CANLINK) == dwMyComputerFlags, - "Wrong MyComputer attributes: %08x, expected: %08x\n", dwFlags, dwMyComputerFlags); + for (i = 0, foundFlagsMatch = FALSE; !foundFlagsMatch && + i < sizeof(myComputerFlags) / sizeof(myComputerFlags[0]); i++) + { + if (myComputerFlags[i] == (dwFlags & ~(DWORD)SFGAO_CANLINK)) + foundFlagsMatch = TRUE; + } + ok (foundFlagsMatch, "Wrong MyComputer attributes: %08x\n", dwFlags); hr = IShellFolder_BindToObject(psfDesktop, pidlMyComputer, NULL, &IID_IShellFolder, (LPVOID*)&psfMyComputer); ok (SUCCEEDED(hr), "Desktop failed to bind to MyComputer object! hr = %08x\n", hr); @@ -765,8 +800,14 @@ static void test_GetAttributesOf(void) dwFlags = 0xffffffff; hr = IShellFolder_GetAttributesOf(psfMyComputer, 0, NULL, &dwFlags); ok (SUCCEEDED(hr), "MyComputer->GetAttributesOf(NULL) failed! hr = %08x\n", hr); - todo_wine { ok (dwFlags == dwMyComputerFlags, - "Wrong MyComputer attributes: %08x, expected: %08x\n", dwFlags, dwMyComputerFlags); } + for (i = 0, foundFlagsMatch = FALSE; !foundFlagsMatch && + i < sizeof(myComputerFlags) / sizeof(myComputerFlags[0]); i++) + { + if (myComputerFlags[i] == dwFlags) + foundFlagsMatch = TRUE; + } + todo_wine + ok (foundFlagsMatch, "Wrong MyComputer attributes: %08x\n", dwFlags); IShellFolder_Release(psfMyComputer); @@ -774,11 +815,11 @@ static void test_GetAttributesOf(void) len = lstrlenA(cCurrDirA); if (len == 0) { - win_skip("GetCurrentDirectoryA returned empty string. Skipping test_GetAttributesOf\n"); - return; + win_skip("GetCurrentDirectoryA returned empty string. Skipping test_GetAttributesOf\n"); + return; } - if(cCurrDirA[len-1] == '\\') - cCurrDirA[len-1] = 0; + if (len > 3 && cCurrDirA[len-1] == '\\') + cCurrDirA[len-1] = 0; /* create test directory */ CreateFilesFolders(); @@ -821,7 +862,7 @@ static void test_GetAttributesOf(void) hr = IShellFolder_GetAttributesOf(IDesktopFolder, 1, (LPCITEMIDLIST*)&newPIDL, &dwFlags); ok (SUCCEEDED(hr), "Desktop->GetAttributesOf() failed! hr = %08x\n", hr); ok ((dwFlags&SFGAO_FOLDER), "Wrong directory attribute for absolute PIDL: %08x\n", dwFlags); - + /* free memory */ IMalloc_Free(ppM, newPIDL); @@ -830,7 +871,7 @@ static void test_GetAttributesOf(void) Cleanup(); IShellFolder_Release(IDesktopFolder); -} +} static void test_SHGetPathFromIDList(void) { diff --git a/dlls/shlwapi/tests/ordinal.c b/dlls/shlwapi/tests/ordinal.c index 3e371211d90..3a50219278e 100644 --- a/dlls/shlwapi/tests/ordinal.c +++ b/dlls/shlwapi/tests/ordinal.c @@ -482,7 +482,7 @@ static void test_SHPackDispParams(void) ok(params.rgdispidNamedArgs == NULL, "params.rgdispidNamedArgs = %p\n", params.rgdispidNamedArgs); ok(params.rgvarg == vars, "params.rgvarg = %p\n", params.rgvarg); ok(V_VT(vars) == VT_I4, "V_VT(var) = %d\n", V_VT(vars)); - ok(V_DISPATCH(vars) == (void*)0xdeadbeef, "failed\n"); + ok(V_I4(vars) == 0xdeadbeef, "failed %x\n", V_I4(vars)); memset(¶ms, 0xc0, sizeof(params)); hres = pSHPackDispParams(¶ms, NULL, 0, 0); diff --git a/dlls/urlmon/tests/misc.c b/dlls/urlmon/tests/misc.c index 7702e1e167f..64ed9377675 100644 --- a/dlls/urlmon/tests/misc.c +++ b/dlls/urlmon/tests/misc.c @@ -851,7 +851,10 @@ static void test_url_action(IInternetSecurityManager *secmgr, IInternetZoneManag HKEY hkey; HRESULT hres; - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, + /* FIXME: HKEY_CURRENT_USER is most of the time the default but this can be changed on a system. + * The test should be changed to cope with that, if need be. + */ + res = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3", &hkey); if(res != ERROR_SUCCESS) { ok(0, "Could not open zone key\n"); diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index bca567d562c..794f1e32353 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -814,7 +814,7 @@ static void pshader_hw_cnd(const struct wined3d_shader_instruction *ins) char dst_wmask[20]; char dst_name[50]; char src_name[3][50]; - BOOL sat = (ins->dst[0].token & WINED3DSP_DSTMOD_MASK) & WINED3DSPDM_SATURATE; + BOOL sat = ins->dst[0].modifiers & WINED3DSPDM_SATURATE; DWORD shift = (ins->dst[0].token & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; /* FIXME: support output modifiers */ @@ -848,7 +848,7 @@ static void pshader_hw_cmp(const struct wined3d_shader_instruction *ins) char dst_name[50]; char src_name[3][50]; DWORD shift = (ins->dst[0].token & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; - BOOL sat = (ins->dst[0].token & WINED3DSP_DSTMOD_MASK) & WINED3DSPDM_SATURATE; + BOOL sat = ins->dst[0].modifiers & WINED3DSPDM_SATURATE; /* FIXME: support output modifiers */ @@ -877,7 +877,7 @@ static void pshader_hw_dp2add(const struct wined3d_shader_instruction *ins) char dst_name[50]; char src_name[3][50]; DWORD shift = (ins->dst[0].token & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; - BOOL sat = (ins->dst[0].token & WINED3DSP_DSTMOD_MASK) & WINED3DSPDM_SATURATE; + BOOL sat = ins->dst[0].modifiers & WINED3DSPDM_SATURATE; pshader_get_register_name(ins->shader, ins->dst[0].token, dst_name); shader_arb_get_write_mask(ins, ins->dst[0].token, dst_wmask); @@ -900,7 +900,6 @@ static void pshader_hw_dp2add(const struct wined3d_shader_instruction *ins) static void shader_hw_map2gl(const struct wined3d_shader_instruction *ins) { SHADER_BUFFER *buffer = ins->buffer; - DWORD dst = ins->dst[0].token; const DWORD *src = ins->src; const char *instruction; char arguments[256]; @@ -939,6 +938,7 @@ static void shader_hw_map2gl(const struct wined3d_shader_instruction *ins) if (shader_is_pshader_version(ins->reg_maps->shader_version)) { /* Output token related */ + const struct wined3d_shader_dst_param *dst; char output_rname[256]; char output_wmask[20]; char operands[4][100]; @@ -953,11 +953,12 @@ static void shader_hw_map2gl(const struct wined3d_shader_instruction *ins) ERR("Opcode \"%#x\" has no parameters\n", ins->handler_idx); return; } + dst = &ins->dst[0]; /* Process modifiers */ - if (dst & WINED3DSP_DSTMOD_MASK) + if (dst->modifiers) { - DWORD mask = dst & WINED3DSP_DSTMOD_MASK; + DWORD mask = dst->modifiers; saturate = mask & WINED3DSPDM_SATURATE; centroid = mask & WINED3DSPDM_MSAMPCENTROID; @@ -969,7 +970,7 @@ static void shader_hw_map2gl(const struct wined3d_shader_instruction *ins) if (centroid) FIXME("Unhandled modifier(%#x)\n", mask >> WINED3DSP_DSTMOD_SHIFT); } - shift = (dst & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; + shift = (dst->token & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; modifier = (saturate && !shift) ? "_SAT" : ""; /* Generate input register names (with modifiers) */ @@ -979,9 +980,9 @@ static void shader_hw_map2gl(const struct wined3d_shader_instruction *ins) } /* Handle output register */ - pshader_get_register_name(ins->shader, dst, output_rname); + pshader_get_register_name(ins->shader, dst->token, output_rname); strcpy(operands[0], output_rname); - shader_arb_get_write_mask(ins, dst, output_wmask); + shader_arb_get_write_mask(ins, dst->token, output_wmask); strcat(operands[0], output_wmask); arguments[0] = '\0'; @@ -1001,7 +1002,7 @@ static void shader_hw_map2gl(const struct wined3d_shader_instruction *ins) arguments[0] = '\0'; if (ins->dst_count) { - vshader_program_add_param(ins, dst, FALSE, arguments); + vshader_program_add_param(ins, ins->dst[0].token, FALSE, arguments); for (i = 0; i < ins->src_count; ++i) { strcat(arguments, ","); @@ -1585,6 +1586,7 @@ static void shader_hw_mnxn(const struct wined3d_shader_instruction *ins) for (i = 0; i < nComponents; i++) { tmp_dst.register_idx = ins->dst[0].register_idx; + tmp_dst.modifiers = ins->dst[0].modifiers; tmp_dst.token = ((ins->dst[0].token) & ~WINED3DSP_WRITEMASK_ALL) | (WINED3DSP_WRITEMASK_0 << i); tmp_ins.src[1] = ins->src[1]+i; shader_hw_map2gl(&tmp_ins); @@ -1631,7 +1633,7 @@ static void shader_hw_nrm(const struct wined3d_shader_instruction *ins) char src_name[50]; char dst_wmask[20]; DWORD shift = (ins->dst[0].token & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; - BOOL sat = (ins->dst[0].token & WINED3DSP_DSTMOD_MASK) & WINED3DSPDM_SATURATE; + BOOL sat = ins->dst[0].modifiers & WINED3DSPDM_SATURATE; pshader_get_register_name(ins->shader, ins->dst[0].token, dst_name); shader_arb_get_write_mask(ins, ins->dst[0].token, dst_wmask); @@ -1658,7 +1660,7 @@ static void shader_hw_sincos(const struct wined3d_shader_instruction *ins) char src_name[50]; char dst_wmask[20]; DWORD shift = (ins->dst[0].token & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; - BOOL sat = (ins->dst[0].token & WINED3DSP_DSTMOD_MASK) & WINED3DSPDM_SATURATE; + BOOL sat = ins->dst[0].modifiers & WINED3DSPDM_SATURATE; pshader_get_register_name(ins->shader, ins->dst[0].token, dst_name); shader_arb_get_write_mask(ins, ins->dst[0].token, dst_wmask); diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c index 39120d40767..ed6c069456e 100644 --- a/dlls/wined3d/baseshader.c +++ b/dlls/wined3d/baseshader.c @@ -851,6 +851,7 @@ void shader_generate_main(IWineD3DBaseShader *iface, SHADER_BUFFER* buffer, dst_param.addr_token = 0; pToken += shader_get_param(pToken, shader_version, &dst_param.token, &dst_param.addr_token); dst_param.register_idx = dst_param.token & WINED3DSP_REGNUM_MASK; + dst_param.modifiers = dst_param.token & WINED3DSP_DSTMOD_MASK; } /* Predication token */ diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 3294fff0d9e..70322e63be0 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -1088,13 +1088,29 @@ static BOOL IWineD3DImpl_FillGLCaps(WineD3D_GL_Info *gl_info) { * shader capabilities, so we use the shader capabilities to distinguish between FX and 6xxx/7xxx. */ if(WINE_D3D9_CAPABLE(gl_info) && (gl_info->vs_nv_version == VS_VERSION_30)) { - /* Geforce GTX - highend */ - if(strstr(gl_info->gl_renderer, "GTX 280")) { + /* Geforce 200 - highend */ + if(strstr(gl_info->gl_renderer, "GTX 280") || + strstr(gl_info->gl_renderer, "GTX 285") || + strstr(gl_info->gl_renderer, "GTX 295")) + { gl_info->gl_card = CARD_NVIDIA_GEFORCE_GTX280; vidmem = 1024; } - /* Geforce9 - highend */ - else if(strstr(gl_info->gl_renderer, "9800")) { + /* Geforce 200 - midend high */ + if(strstr(gl_info->gl_renderer, "GTX 275")) { + gl_info->gl_card = CARD_NVIDIA_GEFORCE_GTX275; + vidmem = 896; + } + /* Geforce 200 - midend */ + if(strstr(gl_info->gl_renderer, "GTX 260")) { + gl_info->gl_card = CARD_NVIDIA_GEFORCE_GTX260; + vidmem = 1024; + } + /* Geforce9 - highend / Geforce 200 - midend (GTS 150/250 are based on the same core) */ + else if(strstr(gl_info->gl_renderer, "9800") || + strstr(gl_info->gl_renderer, "GTS 150") || + strstr(gl_info->gl_renderer, "GTS 250")) + { gl_info->gl_card = CARD_NVIDIA_GEFORCE_9800GT; vidmem = 512; } @@ -1103,6 +1119,28 @@ static BOOL IWineD3DImpl_FillGLCaps(WineD3D_GL_Info *gl_info) { gl_info->gl_card = CARD_NVIDIA_GEFORCE_9600GT; vidmem = 384; /* The 9600GSO has 384MB, the 9600GT has 512-1024MB */ } + /* Geforce9 - midend low / Geforce 200 - low*/ + else if(strstr(gl_info->gl_renderer, "9500") || + strstr(gl_info->gl_renderer, "GT 120") || + strstr(gl_info->gl_renderer, "GT 130")) + { + gl_info->gl_card = CARD_NVIDIA_GEFORCE_9500GT; + vidmem = 256; /* The 9500GT has 256-1024MB */ + } + /* Geforce9 - lowend */ + else if(strstr(gl_info->gl_renderer, "9400")) { + gl_info->gl_card = CARD_NVIDIA_GEFORCE_9400GT; + vidmem = 256; /* The 9400GT has 256-1024MB */ + } + /* Geforce9 - lowend low */ + else if(strstr(gl_info->gl_renderer, "9100") || + strstr(gl_info->gl_renderer, "9200") || + strstr(gl_info->gl_renderer, "9300") || + strstr(gl_info->gl_renderer, "G 100")) + { + gl_info->gl_card = CARD_NVIDIA_GEFORCE_9200; + vidmem = 256; /* The 9100-9300 cards have 256MB */ + } /* Geforce8 - highend */ else if (strstr(gl_info->gl_renderer, "8800")) { gl_info->gl_card = CARD_NVIDIA_GEFORCE_8800GTS; diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 9ea193ec4bb..e18224dea5d 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -1253,30 +1253,30 @@ static void shader_glsl_add_src_param(const struct wined3d_shader_instruction *i * Also, return the actual register name and swizzle in case the * caller needs this information as well. */ static DWORD shader_glsl_add_dst_param(const struct wined3d_shader_instruction *ins, - const DWORD param, const DWORD addr_token, glsl_dst_param_t *dst_param) + const struct wined3d_shader_dst_param *wined3d_dst, glsl_dst_param_t *glsl_dst) { BOOL is_color = FALSE; - dst_param->mask_str[0] = '\0'; - dst_param->reg_name[0] = '\0'; + glsl_dst->mask_str[0] = '\0'; + glsl_dst->reg_name[0] = '\0'; - shader_glsl_get_register_name(param, addr_token, dst_param->reg_name, &is_color, ins); - return shader_glsl_get_write_mask(param, dst_param->mask_str); + shader_glsl_get_register_name(wined3d_dst->token, wined3d_dst->addr_token, glsl_dst->reg_name, &is_color, ins); + return shader_glsl_get_write_mask(wined3d_dst->token, glsl_dst->mask_str); } /* Append the destination part of the instruction to the buffer, return the effective write mask */ static DWORD shader_glsl_append_dst_ext(SHADER_BUFFER *buffer, - const struct wined3d_shader_instruction *ins, const DWORD param) + const struct wined3d_shader_instruction *ins, const struct wined3d_shader_dst_param *dst) { - glsl_dst_param_t dst_param; + glsl_dst_param_t glsl_dst; DWORD mask; int shift; - mask = shader_glsl_add_dst_param(ins, param, ins->dst[0].addr_token, &dst_param); - - if(mask) { - shift = (param & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; - shader_addline(buffer, "%s%s = %s(", dst_param.reg_name, dst_param.mask_str, shift_glsl_tab[shift]); + mask = shader_glsl_add_dst_param(ins, dst, &glsl_dst); + if (mask) + { + shift = (dst->token & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; + shader_addline(buffer, "%s%s = %s(", glsl_dst.reg_name, glsl_dst.mask_str, shift_glsl_tab[shift]); } return mask; @@ -1285,35 +1285,35 @@ static DWORD shader_glsl_append_dst_ext(SHADER_BUFFER *buffer, /* Append the destination part of the instruction to the buffer, return the effective write mask */ static DWORD shader_glsl_append_dst(SHADER_BUFFER *buffer, const struct wined3d_shader_instruction *ins) { - return shader_glsl_append_dst_ext(buffer, ins, ins->dst[0].token); + return shader_glsl_append_dst_ext(buffer, ins, &ins->dst[0]); } /** Process GLSL instruction modifiers */ void shader_glsl_add_instruction_modifiers(const struct wined3d_shader_instruction *ins) { glsl_dst_param_t dst_param; - DWORD mask; + DWORD modifiers; if (!ins->dst_count) return; - mask = ins->dst[0].token & WINED3DSP_DSTMOD_MASK; - if (!mask) return; + modifiers = ins->dst[0].modifiers; + if (!modifiers) return; - shader_glsl_add_dst_param(ins, ins->dst[0].token, 0, &dst_param); + shader_glsl_add_dst_param(ins, &ins->dst[0], &dst_param); - if (mask & WINED3DSPDM_SATURATE) + if (modifiers & WINED3DSPDM_SATURATE) { /* _SAT means to clamp the value of the register to between 0 and 1 */ shader_addline(ins->buffer, "%s%s = clamp(%s%s, 0.0, 1.0);\n", dst_param.reg_name, dst_param.mask_str, dst_param.reg_name, dst_param.mask_str); } - if (mask & WINED3DSPDM_MSAMPCENTROID) + if (modifiers & WINED3DSPDM_MSAMPCENTROID) { FIXME("_centroid modifier not handled\n"); } - if (mask & WINED3DSPDM_PARTIALPRECISION) + if (modifiers & WINED3DSPDM_PARTIALPRECISION) { /* MSDN says this modifier can be safely ignored, so that's what we'll do. */ } @@ -1940,14 +1940,15 @@ static void shader_glsl_cmp(const struct wined3d_shader_instruction *ins) (src1reg == dstreg && src1regtype == dstregtype) || (src2reg == dstreg && src2regtype == dstregtype)) { - write_mask = shader_glsl_get_write_mask(ins->dst[0].token & (~WINED3DSP_SWIZZLE_MASK | write_mask), + write_mask = shader_glsl_get_write_mask(ins->dst[0].token & (~WINED3DSP_WRITEMASK_ALL | write_mask), mask_char); if (!write_mask) continue; shader_addline(ins->buffer, "tmp0%s = (", mask_char); temp_destination = TRUE; } else { - write_mask = shader_glsl_append_dst_ext(ins->buffer, ins, - ins->dst[0].token & (~WINED3DSP_SWIZZLE_MASK | write_mask)); + struct wined3d_shader_dst_param dst = ins->dst[0]; + dst.token &= ~WINED3DSP_WRITEMASK_ALL | write_mask; + write_mask = shader_glsl_append_dst_ext(ins->buffer, ins, &dst); if (!write_mask) continue; } @@ -1961,7 +1962,7 @@ static void shader_glsl_cmp(const struct wined3d_shader_instruction *ins) if(temp_destination) { shader_glsl_get_write_mask(ins->dst[0].token, mask_char); - shader_glsl_append_dst_ext(ins->buffer, ins, ins->dst[0].token); + shader_glsl_append_dst(ins->buffer, ins); shader_addline(ins->buffer, "tmp0%s);\n", mask_char); } } @@ -1998,6 +1999,7 @@ static void shader_glsl_cnd(const struct wined3d_shader_instruction *ins) } /* Cycle through all source0 channels */ for (i=0; i<4; i++) { + struct wined3d_shader_dst_param dst; write_mask = 0; /* Find the destination channels which use the current source0 channel */ for (j=0; j<4; j++) { @@ -2007,8 +2009,9 @@ static void shader_glsl_cnd(const struct wined3d_shader_instruction *ins) cmp_channel = WINED3DSP_WRITEMASK_0 << j; } } - write_mask = shader_glsl_append_dst_ext(ins->buffer, ins, - ins->dst[0].token & (~WINED3DSP_SWIZZLE_MASK | write_mask)); + dst = ins->dst[0]; + dst.token &= ~WINED3DSP_WRITEMASK_ALL | write_mask; + write_mask = shader_glsl_append_dst_ext(ins->buffer, ins, &dst); if (!write_mask) continue; shader_glsl_add_src_param(ins, ins->src[0], ins->src_addr[0], cmp_channel, &src0_param); @@ -2087,6 +2090,7 @@ static void shader_glsl_mnxn(const struct wined3d_shader_instruction *ins) for (i = 0; i < nComponents; ++i) { tmp_dst.register_idx = ins->dst[0].register_idx; + tmp_dst.modifiers = ins->dst[0].modifiers; tmp_dst.token = ((ins->dst[0].token) & ~WINED3DSP_WRITEMASK_ALL) | (WINED3DSP_WRITEMASK_0 << i); tmp_ins.src[1] = ins->src[1] + i; shader_glsl_dot(&tmp_ins); @@ -2621,7 +2625,7 @@ static void pshader_glsl_texdepth(const struct wined3d_shader_instruction *ins) { glsl_dst_param_t dst_param; - shader_glsl_add_dst_param(ins, ins->dst[0].token, 0, &dst_param); + shader_glsl_add_dst_param(ins, &ins->dst[0], &dst_param); /* Tests show that texdepth never returns anything below 0.0, and that r5.y is clamped to 1.0. * Negative input is accepted, -0.25 / -0.5 returns 0.5. GL should clamp gl_FragDepth to [0;1], but @@ -2860,7 +2864,7 @@ static void pshader_glsl_texbem(const struct wined3d_shader_instruction *ins) glsl_dst_param_t dst_param; shader_glsl_add_src_param(ins, ins->src[0], ins->src_addr[0], WINED3DSP_WRITEMASK_2, &luminance_param); - shader_glsl_add_dst_param(ins, ins->dst[0].token, ins->dst[0].addr_token, &dst_param); + shader_glsl_add_dst_param(ins, &ins->dst[0], &dst_param); shader_addline(ins->buffer, "%s%s *= (%s * luminancescale%d + luminanceoffset%d);\n", dst_param.reg_name, dst_param.mask_str, @@ -2939,7 +2943,7 @@ static void pshader_glsl_texkill(const struct wined3d_shader_instruction *ins) glsl_dst_param_t dst_param; /* The argument is a destination parameter, and no writemasks are allowed */ - shader_glsl_add_dst_param(ins, ins->dst[0].token, 0, &dst_param); + shader_glsl_add_dst_param(ins, &ins->dst[0], &dst_param); if ((ins->reg_maps->shader_version >= WINED3DPS_VERSION(2,0))) { /* 2.0 shaders compare all 4 components in texkill */ @@ -3766,9 +3770,13 @@ static void shader_glsl_destroy(IWineD3DBaseShader *iface) { if(pshader) { ps = (IWineD3DPixelShaderImpl *) This; if(ps->num_gl_shaders == 0) return; + if (priv->glsl_program && (IWineD3DBaseShader *)priv->glsl_program->pshader == iface) + shader_glsl_select(This->baseShader.device, FALSE, FALSE); } else { vs = (IWineD3DVertexShaderImpl *) This; if(vs->num_gl_shaders == 0) return; + if (priv->glsl_program && (IWineD3DBaseShader *)priv->glsl_program->vshader == iface) + shader_glsl_select(This->baseShader.device, FALSE, FALSE); } linked_programs = &This->baseShader.linked_programs; diff --git a/dlls/wined3d/wined3d_gl.h b/dlls/wined3d/wined3d_gl.h index 2b5cbab87bb..6fc02ddd47b 100644 --- a/dlls/wined3d/wined3d_gl.h +++ b/dlls/wined3d/wined3d_gl.h @@ -3320,8 +3320,13 @@ typedef enum _GL_Cards { CARD_NVIDIA_GEFORCE_8600GT = 0x0402, CARD_NVIDIA_GEFORCE_8600MGT = 0x0407, CARD_NVIDIA_GEFORCE_8800GTS = 0x0193, + CARD_NVIDIA_GEFORCE_9200 = 0x086d, + CARD_NVIDIA_GEFORCE_9400GT = 0x042c, + CARD_NVIDIA_GEFORCE_9500GT = 0x0640, CARD_NVIDIA_GEFORCE_9600GT = 0x0622, CARD_NVIDIA_GEFORCE_9800GT = 0x0614, + CARD_NVIDIA_GEFORCE_GTX260 = 0x05e2, + CARD_NVIDIA_GEFORCE_GTX275 = 0x05e6, CARD_NVIDIA_GEFORCE_GTX280 = 0x05e1, CARD_INTEL_845G = 0x2562, diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 9319aa90bae..ff03d3d788e 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -453,6 +453,7 @@ typedef struct SHADER_OPCODE struct wined3d_shader_dst_param { UINT register_idx; + DWORD modifiers; DWORD token; DWORD addr_token; }; diff --git a/dlls/winemp3.acm/mpegl3.c b/dlls/winemp3.acm/mpegl3.c index 3ebd94c1f99..f30bfef7cfd 100644 --- a/dlls/winemp3.acm/mpegl3.c +++ b/dlls/winemp3.acm/mpegl3.c @@ -490,8 +490,7 @@ static LRESULT MPEG3_StreamSize(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMSIZE ad if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM && adsi->pwfxDst->wFormatTag == WAVE_FORMAT_MPEGLAYER3) { - nblocks = (adsi->pwfxDst->nAvgBytesPerSec * 8 * 144 / adsi->pwfxDst->nSamplesPerSec); - nblocks = (adss->cbDstLength - 3002 - nblocks) / nblocks; + nblocks = (adss->cbDstLength - 3000) / (DWORD)(adsi->pwfxDst->nAvgBytesPerSec * 1152 / adsi->pwfxDst->nSamplesPerSec + 0.5); if (nblocks == 0) return ACMERR_NOTPOSSIBLE; adss->cbSrcLength = nblocks * 1152 * adsi->pwfxSrc->nBlockAlign; @@ -502,7 +501,7 @@ static LRESULT MPEG3_StreamSize(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMSIZE ad nblocks = adss->cbDstLength / (adsi->pwfxDst->nBlockAlign * 1152); if (nblocks == 0) return ACMERR_NOTPOSSIBLE; - adss->cbSrcLength = nblocks * (DWORD)(adsi->pwfxSrc->nAvgBytesPerSec * 8 * 144 / adsi->pwfxSrc->nSamplesPerSec); + adss->cbSrcLength = nblocks * (DWORD)(adsi->pwfxSrc->nAvgBytesPerSec * 1152 / adsi->pwfxSrc->nSamplesPerSec); } else { @@ -517,15 +516,20 @@ static LRESULT MPEG3_StreamSize(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMSIZE ad nblocks = adss->cbSrcLength / (adsi->pwfxSrc->nBlockAlign * 1152); if (nblocks == 0) return ACMERR_NOTPOSSIBLE; - adss->cbDstLength = nblocks * (DWORD)(adsi->pwfxDst->nAvgBytesPerSec * 8 * 144 / adsi->pwfxDst->nSamplesPerSec); + if (adss->cbSrcLength % (DWORD)(adsi->pwfxSrc->nBlockAlign * 1152)) + /* Round block count up. */ + nblocks++; + adss->cbDstLength = 3000 + nblocks * (DWORD)(adsi->pwfxDst->nAvgBytesPerSec * 1152 / adsi->pwfxDst->nSamplesPerSec + 0.5); } else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_MPEGLAYER3 && adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM) { - nblocks = (adsi->pwfxSrc->nAvgBytesPerSec * 8 * 144 / adsi->pwfxSrc->nSamplesPerSec); - nblocks = (adss->cbSrcLength - 3002 - nblocks) / nblocks; + nblocks = adss->cbSrcLength / (DWORD)(adsi->pwfxSrc->nAvgBytesPerSec * 1152 / adsi->pwfxSrc->nSamplesPerSec); if (nblocks == 0) return ACMERR_NOTPOSSIBLE; + if (adss->cbSrcLength % (DWORD)(adsi->pwfxSrc->nAvgBytesPerSec * 1152 / adsi->pwfxSrc->nSamplesPerSec)) + /* Round block count up. */ + nblocks++; adss->cbDstLength = nblocks * 1152 * adsi->pwfxDst->nBlockAlign; } else diff --git a/dlls/wininet/tests/internet.c b/dlls/wininet/tests/internet.c index 8fa482327a8..0ec7242ba17 100644 --- a/dlls/wininet/tests/internet.c +++ b/dlls/wininet/tests/internet.c @@ -732,7 +732,9 @@ static void test_IsDomainLegalCookieDomainW(void) ret = pIsDomainLegalCookieDomainW(com, gmail_com); error = GetLastError(); ok(!ret, "IsDomainLegalCookieDomainW succeeded\n"); - ok(error == 0xdeadbeef, "got %u expected 0xdeadbeef\n", error); + ok(error == ERROR_SXS_KEY_NOT_FOUND || + error == 0xdeadbeef, /* up to IE7 */ + "got %u expected ERROR_SXS_KEY_NOT_FOUND or 0xdeadbeef\n", error); ret = pIsDomainLegalCookieDomainW(gmail_com, gmail_com); ok(ret, "IsDomainLegalCookieDomainW failed\n"); @@ -741,7 +743,11 @@ static void test_IsDomainLegalCookieDomainW(void) ret = pIsDomainLegalCookieDomainW(gmail_co_uk, co_uk); error = GetLastError(); ok(!ret, "IsDomainLegalCookieDomainW succeeded\n"); - ok(error == 0xdeadbeef, "got %u expected 0xdeadbeef\n", error); + ok(error == ERROR_SXS_KEY_NOT_FOUND || /* IE8 on XP */ + error == ERROR_FILE_NOT_FOUND || /* IE8 on Vista */ + error == 0xdeadbeef, /* up to IE7 */ + "got %u expected ERROR_SXS_KEY_NOT_FOUND, ERROR_FILE_NOT_FOUND or " + "0xdeadbeef\n", error); ret = pIsDomainLegalCookieDomainW(uk, co_uk); ok(!ret, "IsDomainLegalCookieDomainW succeeded\n"); diff --git a/dlls/wininet/urlcache.c b/dlls/wininet/urlcache.c index bf67fecec03..b4feba3260c 100644 --- a/dlls/wininet/urlcache.c +++ b/dlls/wininet/urlcache.c @@ -995,11 +995,13 @@ static DWORD URLCache_CopyEntry( /* FIXME: is source url optional? */ if (*lpdwBufferSize >= dwRequiredSize) { - lpCacheEntryInfo->lpszSourceUrlName = (LPSTR)lpCacheEntryInfo + dwRequiredSize - lenUrl - 1; + DWORD lenUrlBytes = (lenUrl+1) * (bUnicode ? sizeof(WCHAR) : sizeof(CHAR)); + + lpCacheEntryInfo->lpszSourceUrlName = (LPSTR)lpCacheEntryInfo + dwRequiredSize - lenUrlBytes; if (bUnicode) MultiByteToWideChar(CP_ACP, 0, (LPSTR)pUrlEntry + pUrlEntry->dwOffsetUrl, -1, (LPWSTR)lpCacheEntryInfo->lpszSourceUrlName, lenUrl + 1); else - memcpy(lpCacheEntryInfo->lpszSourceUrlName, (LPSTR)pUrlEntry + pUrlEntry->dwOffsetUrl, (lenUrl + 1) * sizeof(CHAR)); + memcpy(lpCacheEntryInfo->lpszSourceUrlName, (LPSTR)pUrlEntry + pUrlEntry->dwOffsetUrl, lenUrlBytes); } if ((dwRequiredSize % 4) && (dwRequiredSize < *lpdwBufferSize)) diff --git a/programs/winemenubuilder/winemenubuilder.c b/programs/winemenubuilder/winemenubuilder.c index 96d3c0f25c1..9dafc16a13d 100644 --- a/programs/winemenubuilder/winemenubuilder.c +++ b/programs/winemenubuilder/winemenubuilder.c @@ -1668,6 +1668,57 @@ static BOOL Process_URL( LPCWSTR urlname, BOOL bWait ) return !r; } +static void RefreshFileTypeAssociations(void) +{ + HANDLE hSem = NULL; + char *mime_dir = NULL; + char *packages_dir = NULL; + char *applications_dir = NULL; + + hSem = CreateSemaphoreA( NULL, 1, 1, "winemenubuilder_semaphore"); + if( WAIT_OBJECT_0 != MsgWaitForMultipleObjects( 1, &hSem, FALSE, INFINITE, QS_ALLINPUT ) ) + { + WINE_ERR("failed wait for semaphore\n"); + CloseHandle(hSem); + hSem = NULL; + goto end; + } + + mime_dir = heap_printf("%s/mime", xdg_data_dir); + if (mime_dir == NULL) + { + WINE_ERR("out of memory\n"); + goto end; + } + create_directories(mime_dir); + + packages_dir = heap_printf("%s/packages", mime_dir); + if (packages_dir == NULL) + { + WINE_ERR("out of memory\n"); + goto end; + } + create_directories(packages_dir); + + applications_dir = heap_printf("%s/applications", xdg_data_dir); + if (applications_dir == NULL) + { + WINE_ERR("out of memory\n"); + goto end; + } + create_directories(applications_dir); + +end: + if (hSem) + { + ReleaseSemaphore(hSem, 1, NULL); + CloseHandle(hSem); + } + HeapFree(GetProcessHeap(), 0, mime_dir); + HeapFree(GetProcessHeap(), 0, packages_dir); + HeapFree(GetProcessHeap(), 0, applications_dir); +} + static CHAR *next_token( LPSTR *p ) { LPSTR token = NULL, t = *p; @@ -1764,6 +1815,11 @@ int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE prev, LPSTR cmdline, int show token = next_token( &p ); if( !token ) break; + if( !lstrcmpA( token, "-a" ) ) + { + RefreshFileTypeAssociations(); + break; + } if( !lstrcmpA( token, "-w" ) ) bWait = TRUE; else if ( !lstrcmpA( token, "-u" ) ) diff --git a/programs/winhlp32/winhelp.c b/programs/winhlp32/winhelp.c index bac416e6c3b..ddd58ada0f3 100644 --- a/programs/winhlp32/winhelp.c +++ b/programs/winhlp32/winhelp.c @@ -353,7 +353,7 @@ static LRESULT WINHELP_HandleCommand(HWND hSrcWnd, LPARAM lParam) return 0; } - wh = (WINHELP*)cds->lpData; + wh = cds->lpData; if (wh) { @@ -1154,7 +1154,7 @@ static LRESULT CALLBACK WINHELP_ShadowWndProc(HWND hWnd, UINT msg, WPARAM wParam */ static void cb_KWBTree(void *p, void **next, void *cookie) { - HWND hListWnd = (HWND)cookie; + HWND hListWnd = cookie; int count; WINE_TRACE("Adding '%s' to search list\n", (char *)p); -- 2.11.4.GIT