Commit 6ff0ba17 authored by Vitaly Lipatov's avatar Vitaly Lipatov

commit 14.1.10 upon wine-1.7.25

parent 5b5cfda7
......@@ -1263,6 +1263,7 @@ enable_winecoreaudio_drv
enable_wined3d
enable_winegstreamer
enable_winejoystick_drv
enable_winejoystick_osx_drv
enable_winemac_drv
enable_winemapi
enable_winemp3_acm
......@@ -13577,6 +13578,7 @@ test -n "$ALSA_LIBS" || enable_winealsa_drv=${enable_winealsa_drv:-no}
test -n "$COREAUDIO_LIBS" || enable_winecoreaudio_drv=${enable_winecoreaudio_drv:-no}
test "x$ac_cv_member_oss_sysinfo_numaudioengines" = xyes || enable_wineoss_drv=${enable_wineoss_drv:-no}
test "$ac_cv_header_linux_joystick_h" = "yes" || enable_winejoystick_drv=${enable_winejoystick_drv:-no}
test "$ac_cv_header_IOKit_hid_IOHIDLib_h" = "yes" || enable_winejoystick_osx_drv=${enable_winejoystick_osx_drv:-no}
if test "x$ALSA_LIBS$COREAUDIO_LIBS" = "x" -a \
"x$ac_cv_member_oss_sysinfo_numaudioengines" != xyes -a \
......@@ -17421,6 +17423,7 @@ wine_fn_config_lib winecrt0
wine_fn_config_dll wined3d enable_wined3d implib
wine_fn_config_dll winegstreamer enable_winegstreamer
wine_fn_config_dll winejoystick.drv enable_winejoystick_drv
wine_fn_config_dll winejoystick_osx.drv enable_winejoystick_osx_drv
wine_fn_config_dll winemac.drv enable_winemac_drv
wine_fn_config_dll winemapi enable_winemapi
wine_fn_config_dll winemp3.acm enable_winemp3_acm
......
......@@ -1765,6 +1765,7 @@ test -n "$ALSA_LIBS" || enable_winealsa_drv=${enable_winealsa_drv:-no}
test -n "$COREAUDIO_LIBS" || enable_winecoreaudio_drv=${enable_winecoreaudio_drv:-no}
test "x$ac_cv_member_oss_sysinfo_numaudioengines" = xyes || enable_wineoss_drv=${enable_wineoss_drv:-no}
test "$ac_cv_header_linux_joystick_h" = "yes" || enable_winejoystick_drv=${enable_winejoystick_drv:-no}
test "$ac_cv_header_IOKit_hid_IOHIDLib_h" = "yes" || enable_winejoystick_osx_drv=${enable_winejoystick_osx_drv:-no}
dnl **** Check for any sound system ****
if test "x$ALSA_LIBS$COREAUDIO_LIBS" = "x" -a \
......@@ -3263,6 +3264,7 @@ WINE_CONFIG_LIB(winecrt0)
WINE_CONFIG_DLL(wined3d,,[implib])
WINE_CONFIG_DLL(winegstreamer)
WINE_CONFIG_DLL(winejoystick.drv)
WINE_CONFIG_DLL(winejoystick_osx.drv)
WINE_CONFIG_DLL(winemac.drv)
WINE_CONFIG_DLL(winemapi)
WINE_CONFIG_DLL(winemp3.acm)
......
......@@ -375,7 +375,7 @@
@ stub I_ScSetServiceBitsA
# @ stub I_ScSetServiceBitsW
# @ stub IdentifyCodeAuthzLevelW
# @ stub ImpersonateAnonymousToken
@ stdcall ImpersonateAnonymousToken(long)
@ stdcall ImpersonateLoggedOnUser(long)
@ stdcall ImpersonateNamedPipeClient(long)
@ stdcall ImpersonateSelf(long)
......
......@@ -2541,6 +2541,15 @@ BOOL WINAPI ImpersonateLoggedOnUser(HANDLE hToken)
}
/******************************************************************************
* ImpersonateAnonymousToken [ADVAPI32.@]
*/
BOOL WINAPI ImpersonateAnonymousToken( HANDLE thread )
{
TRACE("(%p)\n", thread);
return set_ntstatus( NtImpersonateAnonymousToken( thread ) );
}
/******************************************************************************
* AccessCheck [ADVAPI32.@]
*/
BOOL WINAPI
......
......@@ -45,7 +45,7 @@
@ stub RaiseFailFastException
@ stdcall RegisterWaitForSingleObject(ptr long ptr ptr long long) kernel32.RegisterWaitForSingleObject
@ stdcall SetConsoleTitleA(str) kernel32.SetConsoleTitleA
@ stub SetFileCompletionNotificationModes
@ stdcall SetFileCompletionNotificationModes(long long) kernel32.SetFileCompletionNotificationModes
@ stdcall SetHandleCount(long) kernel32.SetHandleCount
@ stdcall SetMailslotInfo(long long) kernel32.SetMailslotInfo
@ stdcall SetVolumeLabelW(wstr wstr) kernel32.SetVolumeLabelW
......
......@@ -58,7 +58,7 @@
@ stdcall GetSidSubAuthorityCount(ptr) advapi32.GetSidSubAuthorityCount
@ stdcall GetTokenInformation(long long ptr long ptr) advapi32.GetTokenInformation
@ stub GetWindowsAccountDomainSid
@ stub ImpersonateAnonymousToken
@ stdcall ImpersonateAnonymousToken(long) advapi32.ImpersonateAnonymousToken
@ stdcall ImpersonateLoggedOnUser(long) advapi32.ImpersonateLoggedOnUser
@ stdcall ImpersonateSelf(long) advapi32.ImpersonateSelf
@ stdcall InitializeAcl(ptr long long) advapi32.InitializeAcl
......
......@@ -64,7 +64,7 @@
@ stdcall GetSidSubAuthorityCount(ptr) advapi32.GetSidSubAuthorityCount
@ stdcall GetTokenInformation(long long ptr long ptr) advapi32.GetTokenInformation
@ stub GetWindowsAccountDomainSid
@ stub ImpersonateAnonymousToken
@ stdcall ImpersonateAnonymousToken(long) advapi32.ImpersonateAnonymousToken
@ stdcall ImpersonateLoggedOnUser(long) advapi32.ImpersonateLoggedOnUser
@ stdcall ImpersonateSelf(long) advapi32.ImpersonateSelf
@ stdcall InitializeAcl(ptr long long) advapi32.InitializeAcl
......
......@@ -673,8 +673,9 @@ ULONG DirectSoundDevice_Release(DirectSoundDevice * device)
SetEvent(device->sleepev);
if (device->thread) {
WaitForSingleObject(device->thread, INFINITE);
WaitForSingleObject(device->thread_finished, INFINITE);
CloseHandle(device->thread);
CloseHandle(device->thread_finished);
}
CloseHandle(device->sleepev);
......@@ -846,6 +847,7 @@ HRESULT DirectSoundDevice_Initialize(DirectSoundDevice ** ppDevice, LPCGUID lpcG
hr = DSOUND_PrimaryCreate(device);
if (hr == DS_OK) {
device->thread_finished = CreateEventW(0, 0, 0, 0);
device->thread = CreateThread(0, 0, DSOUND_mixthread, device, 0, 0);
SetThreadPriority(device->thread, THREAD_PRIORITY_TIME_CRITICAL);
} else
......
......@@ -98,6 +98,7 @@ struct DirectSoundDevice
IAudioRenderClient *render;
HANDLE sleepev, thread;
HANDLE thread_finished;
struct list entry;
};
......
......@@ -868,5 +868,6 @@ DWORD CALLBACK DSOUND_mixthread(void *p)
DSOUND_PerformMix(dev);
RtlReleaseResource(&(dev->buffer_list_lock));
}
SetEvent(dev->thread_finished);
return 0;
}
......@@ -1030,6 +1030,16 @@ BOOL WINAPI SetEndOfFile( HANDLE hFile )
return FALSE;
}
/**************************************************************************
* SetFileCompletionNotificationModes (KERNEL32.@)
*/
BOOL WINAPI SetFileCompletionNotificationModes( HANDLE handle, UCHAR flags )
{
FIXME("%p %x - stub\n", handle, flags);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
BOOL WINAPI SetFileInformationByHandle( HANDLE file, FILE_INFO_BY_HANDLE_CLASS class, VOID *info, DWORD size )
{
FIXME("%p %u %p %u - stub\n", file, class, info, size);
......
......@@ -1136,6 +1136,7 @@
@ stdcall SetFileApisToOEM()
@ stdcall SetFileAttributesA(str long)
@ stdcall SetFileAttributesW(wstr long)
@ stdcall SetFileCompletionNotificationModes(long long)
@ stdcall SetFileInformationByHandle(long long ptr long)
@ stdcall SetFilePointer(long long ptr long)
@ stdcall SetFilePointerEx(long int64 ptr long)
......
......@@ -1832,13 +1832,41 @@ static HRESULT InstallerImpl_SummaryInformation(WORD wFlags,
EXCEPINFO* pExcepInfo,
UINT* puArgErr)
{
if (!(wFlags & DISPATCH_METHOD))
UINT ret;
HRESULT hr;
MSIHANDLE hsuminfo;
IDispatch *dispatch;
VARIANTARG varg0, varg1;
if (!(wFlags & DISPATCH_PROPERTYGET))
return DISP_E_MEMBERNOTFOUND;
FIXME("\n");
VariantInit(&varg0);
hr = DispGetParam(pDispParams, 0, VT_BSTR, &varg0, puArgErr);
if (FAILED(hr))
return hr;
VariantInit(pVarResult);
return S_OK;
VariantInit(&varg1);
hr = DispGetParam(pDispParams, 1, VT_I4, &varg1, puArgErr);
if (FAILED(hr))
return hr;
V_VT(pVarResult) = VT_DISPATCH;
ret = MsiGetSummaryInformationW(0, V_BSTR(&varg0), V_I4(&varg1), &hsuminfo);
if (ret != ERROR_SUCCESS)
{
hr = DISP_E_EXCEPTION;
goto done;
}
hr = create_summaryinfo(hsuminfo, &dispatch);
if (SUCCEEDED(hr))
V_DISPATCH(pVarResult) = dispatch;
done:
VariantClear(&varg0);
return hr;
}
static HRESULT InstallerImpl_UILevel(WORD wFlags,
......
......@@ -1128,6 +1128,25 @@ static HRESULT Installer_UILevelPut(int level)
return invoke(pInstaller, "UILevel", DISPATCH_PROPERTYPUT, &dispparams, &varresult, VT_EMPTY);
}
static HRESULT Installer_SummaryInformation(BSTR PackagePath, int UpdateCount, IDispatch **pSumInfo)
{
VARIANT varresult;
VARIANTARG vararg[2];
DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0};
HRESULT hr;
VariantInit(&vararg[1]);
V_VT(&vararg[1]) = VT_BSTR;
V_BSTR(&vararg[1]) = SysAllocString(PackagePath);
VariantInit(&vararg[0]);
V_VT(&vararg[0]) = VT_I4;
V_I4(&vararg[0]) = UpdateCount;
hr = invoke(pInstaller, "SummaryInformation", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_DISPATCH);
*pSumInfo = V_DISPATCH(&varresult);
return hr;
}
static HRESULT Session_Installer(IDispatch *pSession, IDispatch **pInst)
{
VARIANT varresult;
......@@ -2602,7 +2621,7 @@ static void test_Installer(void)
static const WCHAR szIntegerDataException[] = { 'I','n','t','e','g','e','r','D','a','t','a',',','F','i','e','l','d',0 };
WCHAR szPath[MAX_PATH];
HRESULT hr;
IDispatch *pSession = NULL, *pDatabase = NULL, *pRecord = NULL, *pStringList = NULL;
IDispatch *pSession = NULL, *pDatabase = NULL, *pRecord = NULL, *pStringList = NULL, *pSumInfo = NULL;
int iValue, iCount;
if (!pInstaller) return;
......@@ -2678,6 +2697,18 @@ static void test_Installer(void)
IDispatch_Release(pDatabase);
}
/* Installer::SummaryInformation */
hr = Installer_SummaryInformation(szPath, 0, &pSumInfo);
ok(hr == S_OK, "Installer_SummaryInformation failed, hresult 0x%08x\n", hr);
if (hr == S_OK)
{
test_SummaryInfo(pSumInfo, summary_info, sizeof(summary_info)/sizeof(msi_summary_info), TRUE);
IDispatch_Release(pSumInfo);
}
hr = Installer_SummaryInformation(NULL, 0, &pSumInfo);
ok(hr == DISP_E_EXCEPTION, "Installer_SummaryInformation failed, hresult 0x%08x\n", hr);
/* Installer::RegistryValue */
test_Installer_RegistryValue();
......
......@@ -182,7 +182,7 @@
@ stub NtGetPlugPlayEvent
@ stdcall NtGetTickCount()
@ stdcall NtGetWriteWatch(long long ptr long ptr ptr ptr)
@ stub NtImpersonateAnonymousToken
@ stdcall NtImpersonateAnonymousToken(long)
@ stub NtImpersonateClientOfPort
@ stub NtImpersonateThread
@ stub NtInitializeRegistry
......
......@@ -1521,6 +1521,16 @@ RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
}
/******************************************************************************
* NtImpersonateAnonymousToken [NTDLL.@]
*/
NTSTATUS WINAPI
NtImpersonateAnonymousToken(HANDLE thread)
{
FIXME("(%p): stub\n", thread);
return STATUS_NOT_IMPLEMENTED;
}
/******************************************************************************
* NtAccessCheck [NTDLL.@]
* ZwAccessCheck [NTDLL.@]
*
......
......@@ -38,6 +38,8 @@
#include "rpc.h"
#include "wine/debug.h"
#include "wine/exception.h"
#include "compobj_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(ole);
......@@ -251,7 +253,18 @@ static void stub_manager_delete(struct stub_manager *m)
IExternalConnection_Release(m->extern_conn);
CoTaskMemFree(m->oxid_info.psa);
IUnknown_Release(m->object);
/* Some broken apps crash in object destructors. We have a test showing
* that on winxp+ those crashes are caught and ignored. */
__TRY
{
IUnknown_Release(m->object);
}
__EXCEPT_PAGE_FAULT
{
ERR("Got page fault when releasing stub!\n");
}
__ENDTRY
DEBUG_CLEAR_CRITSEC_NAME(&m->lock);
DeleteCriticalSection(&m->lock);
......
......@@ -195,6 +195,24 @@ static const IUnknownVtbl TestUnknown_Vtbl =
static IUnknown Test_Unknown = { &TestUnknown_Vtbl };
static ULONG WINAPI TestCrash_IUnknown_Release(LPUNKNOWN iface)
{
UnlockModule();
if(!cLocks) {
trace("crashing...\n");
*(int**)0xc = 0;
}
return 1; /* non-heap-based object */
}
static const IUnknownVtbl TestCrashUnknown_Vtbl =
{
Test_IUnknown_QueryInterface,
Test_IUnknown_AddRef,
TestCrash_IUnknown_Release,
};
static IUnknown TestCrash_Unknown = { &TestCrashUnknown_Vtbl };
static HRESULT WINAPI Test_IClassFactory_QueryInterface(
LPCLASSFACTORY iface,
......@@ -1082,6 +1100,63 @@ static void test_no_couninitialize_client(void)
end_host_object(host_tid, host_thread);
}
static BOOL crash_thread_success;
static DWORD CALLBACK crash_couninitialize_proc(void *p)
{
IStream *stream;
HRESULT hr;
cLocks = 0;
CoInitialize(NULL);
hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
ok_ole_success(hr, CreateStreamOnHGlobal);
hr = CoMarshalInterface(stream, &IID_IUnknown, &TestCrash_Unknown, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL);
ok_ole_success(hr, CoMarshalInterface);
IStream_Seek(stream, ullZero, STREAM_SEEK_SET, NULL);
hr = CoReleaseMarshalData(stream);
ok_ole_success(hr, CoReleaseMarshalData);
ok_no_locks();
hr = CoMarshalInterface(stream, &IID_IUnknown, &TestCrash_Unknown, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL);
ok_ole_success(hr, CoMarshalInterface);
ok_more_than_one_lock();
trace("CoUninitialize >>>\n");
CoUninitialize();
trace("CoUninitialize <<<\n");
ok_no_locks();
IStream_Release(stream);
crash_thread_success = TRUE;
return 0;
}
static void test_crash_couninitialize(void)
{
HANDLE thread;
DWORD tid;
if(!GetProcAddress(GetModuleHandleA("kernel32.dll"), "CreateActCtxW")) {
win_skip("Skipping crash tests on win2k.\n");
return;
}
crash_thread_success = FALSE;
thread = CreateThread(NULL, 0, crash_couninitialize_proc, NULL, 0, &tid);
ok(!WaitForSingleObject(thread, 10000), "wait timed out\n");
CloseHandle(thread);
ok(crash_thread_success, "Crash thread failed\n");
}
/* tests success case of a same-thread table-weak marshal, unmarshal, unmarshal */
static void test_tableweak_marshal_and_unmarshal_twice(void)
{
......@@ -3549,6 +3624,7 @@ START_TEST(marshal)
test_globalinterfacetable();
test_manualresetevent();
test_crash_couninitialize();
/* must be last test as channel hooks can't be unregistered */
test_channel_hook();
......
......@@ -479,7 +479,9 @@ BOOL schan_imp_init(void)
if (1) { /* CROSSOVER HACK - bug 10151 */
const char *libgnutls_name_candidates[] = {SONAME_LIBGNUTLS,
"libgnutls.so.30",
"libgnutls.so.28",
"libgnutls-deb0.so.28",
"libgnutls.so.26",
NULL};
int i;
......
......@@ -341,13 +341,6 @@ FONT 8, "MS Shell Dlg"
PUSHBUTTON "&Browse...", IDC_RUNDLG_BROWSE, 180, 63, 50, 14, WS_TABSTOP
}
STRINGTABLE
{
WINE_IDS_PICTURES "Pictures"
WINE_IDS_MUSIC "Music"
WINE_IDS_MOVIES "Movies"
}
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
/* @makedep: shell32.rgs */
......
......@@ -149,10 +149,6 @@
#define IDM_RECYCLEBIN_RESTORE 301
#define IDM_RECYCLEBIN_ERASE 302
#define WINE_IDS_PICTURES 1000
#define WINE_IDS_MUSIC 1001
#define WINE_IDS_MOVIES 1002
/* Note: this string is referenced from the registry*/
#define IDS_RECYCLEBIN_FOLDER_NAME 8964
......
......@@ -174,4 +174,21 @@ Call ok(x.IgnoreCase = false, "RegExp.IgnoreCase = " & x.IgnoreCase)
Call ok(x.Global = false, "RegExp.Global = " & x.Global)
Call ok(x.Multiline = false, "RegExp.Multiline = " & x.Multiline)
set matches = x.execute("test")
Call ok(matches.Count = 1, "matches.Count = " & matches.Count)
x.pattern = ""
set matches = x.execute("test")
Call ok(matches.Count = 1, "matches.Count = " & matches.Count)
set match = matches.item(0)
Call ok(match.Value = "", "match.Value = " & match.Value)
x.global = true
set matches = x.execute("test")
Call ok(matches.Count = 5, "matches.Count = " & matches.Count)
set match = matches.item(0)
Call ok(match.Value = "", "match.Value = " & match.Value)
set match = matches.item(4)
Call ok(match.Value = "", "match.Value = " & match.Value)
matches = x.test("test")
Call ok(matches = true, "matches = " & matches)
Call reportSuccess()
......@@ -1189,29 +1189,23 @@ static HRESULT WINAPI RegExp2_get_Pattern(IRegExp2 *iface, BSTR *pPattern)
static HRESULT WINAPI RegExp2_put_Pattern(IRegExp2 *iface, BSTR pattern)
{
RegExp2 *This = impl_from_IRegExp2(iface);
WCHAR *p;
DWORD size;
WCHAR *new_pattern;
TRACE("(%p)->(%s)\n", This, wine_dbgstr_w(pattern));
if(!pattern) {
heap_free(This->pattern);
if(This->regexp) {
regexp_destroy(This->regexp);
This->regexp = NULL;
}
This->pattern = NULL;
return S_OK;
if(pattern && *pattern) {
SIZE_T size = (SysStringLen(pattern)+1) * sizeof(WCHAR);
new_pattern = heap_alloc(size);
if(!new_pattern)
return E_OUTOFMEMORY;
memcpy(new_pattern, pattern, size);
}else {
new_pattern = NULL;
}
size = (SysStringLen(pattern)+1) * sizeof(WCHAR);
p = heap_alloc(size);
if(!p)
return E_OUTOFMEMORY;
heap_free(This->pattern);
This->pattern = p;
memcpy(p, pattern, size);
This->pattern = new_pattern;
if(This->regexp) {
regexp_destroy(This->regexp);
This->regexp = NULL;
......
......@@ -872,6 +872,101 @@ static BOOL match_fglrx(const struct wined3d_gl_info *gl_info, const char *gl_re
return gl_vendor == GL_VENDOR_FGLRX;
}
static BOOL match_broken_round(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
{
const char *shader =
"#version 120\n"
"#extension GL_EXT_gpu_shader4 : enable\n"
"void main()\n"
"{\n"
" vec4 color;\n"
" vec4 rounded = round(gl_MultiTexCoord0.yxzw);\n"
" /* all(rounded == gl_MultiTexCoord1) fails for some reason */\n"
" if (all(equal(rounded, gl_MultiTexCoord1)))\n"
" {\n"
" color = vec4(0.0, 1.0, 0.0, 0.0);\n"
" }\n"
" else\n"
" {\n"
" color = vec4(1.0, 0.0, 0.0, 0.0);\n"
" }\n"
" gl_FrontColor = color;\n"
" gl_Position = gl_Vertex;\n"
"}\n";
GLuint tex, fbo;
GLuint prog, vs;
GLenum status;
DWORD check;
unsigned char red, green, blue;
if (!gl_info->supported[EXT_GPU_SHADER4]) return FALSE;
if (wined3d_settings.offscreen_rendering_mode != ORM_FBO)
{
WARN("FBOs not available, guessing broken glsl round from driver info\n");
return gl_vendor == GL_VENDOR_APPLE && card_vendor == HW_VENDOR_AMD;
}
gl_info->gl_ops.gl.p_glGenTextures(1, &tex);
gl_info->gl_ops.gl.p_glBindTexture(GL_TEXTURE_2D, tex);
gl_info->gl_ops.gl.p_glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
gl_info->gl_ops.gl.p_glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
gl_info->gl_ops.gl.p_glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 1, 1, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, NULL);
checkGLcall("glTexImage2D");
gl_info->gl_ops.gl.p_glBindTexture(GL_TEXTURE_2D, 0);
gl_info->fbo_ops.glGenFramebuffers(1, &fbo);
gl_info->fbo_ops.glBindFramebuffer(GL_FRAMEBUFFER, fbo);
gl_info->fbo_ops.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0);
checkGLcall("glFramebufferTexture2D");
status = gl_info->fbo_ops.glCheckFramebufferStatus(GL_FRAMEBUFFER);
if (status != GL_FRAMEBUFFER_COMPLETE) ERR("FBO status %#x\n", status);
checkGLcall("glCheckFramebufferStatus");
vs = GL_EXTCALL(glCreateShaderObjectARB(GL_VERTEX_SHADER));
GL_EXTCALL(glShaderSourceARB(vs, 1, &shader, 0));
GL_EXTCALL(glCompileShaderARB(vs));
prog = GL_EXTCALL(glCreateProgramObjectARB());
GL_EXTCALL(glAttachObjectARB(prog, vs));
GL_EXTCALL(glLinkProgramARB(prog));
GL_EXTCALL(glDeleteObjectARB(vs));
GL_EXTCALL(glUseProgramObjectARB(prog));
checkGLcall("round test shader setup");
gl_info->gl_ops.gl.p_glBegin(GL_QUADS);
GL_EXTCALL(glMultiTexCoord4fARB(0, 1.0, 2.0, 3.0, 4.0));
/* Note that the result is swizzled */
GL_EXTCALL(glMultiTexCoord4fARB(1, 2.0, 1.0, 3.0, 4.0));
gl_info->gl_ops.gl.p_glVertex3f(-1.0, -1.0, -0.5);
gl_info->gl_ops.gl.p_glVertex3f(-1.0, 1.0, -0.5);
gl_info->gl_ops.gl.p_glVertex3f( 1.0, 1.0, -0.5);
gl_info->gl_ops.gl.p_glVertex3f( 1.0, -1.0, -0.5);
gl_info->gl_ops.gl.p_glEnd();
checkGLcall("round test draw");
gl_info->gl_ops.gl.p_glBindTexture(GL_TEXTURE_2D, tex);
gl_info->gl_ops.gl.p_glGetTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, &check);
GL_EXTCALL(glUseProgramObjectARB(0));
GL_EXTCALL(glDeleteObjectARB(prog));
gl_info->fbo_ops.glBindFramebuffer(GL_FRAMEBUFFER, 0);
gl_info->fbo_ops.glDeleteFramebuffers(1, &fbo);
gl_info->gl_ops.gl.p_glBindTexture(GL_TEXTURE_2D, 0);
gl_info->gl_ops.gl.p_glDeleteTextures(1, &tex);
checkGLcall("round test teardown");
TRACE("GLSL round test color: %08x\n", check);
red = (check & 0x00ff0000) >> 16;
green = (check & 0x0000ff00) >> 8;
blue = (check & 0x000000ff);
/* If round behaves correctly green is returned. Return FALSE in this
* case(don't enable quirk). For any other color return TRUE */
return (red > 0x10) || (green < 0xf0) || (blue > 0x10);
}
static void quirk_arb_constants(struct wined3d_gl_info *gl_info)
{
TRACE("Using ARB vs constant limit(=%u) for GLSL.\n", gl_info->limits.arb_vs_native_constants);
......@@ -1157,6 +1252,11 @@ static void quirk_limited_tex_filtering(struct wined3d_gl_info *gl_info)
gl_info->quirks |= WINED3D_QUIRK_LIMITED_TEX_FILTERING;
}
static void broken_round_quirk(struct wined3d_gl_info *gl_info)
{
gl_info->quirks |= WINED3D_CX_QUIRK_BROKEN_ROUND;
}
static void quirk_apple_double_buffer(struct wined3d_gl_info *gl_info)
{
gl_info->quirks |= WINED3D_CX_QUIRK_APPLE_DOUBLE_BUFFER;
......@@ -1310,6 +1410,11 @@ static const struct driver_quirk quirk_table[] =
"Render to FBO quirk"
},
{
match_broken_round,
broken_round_quirk,
"Broken GLSL round"
},
{
match_apple,
quirk_apple_double_buffer,
"Apple double buffered context bug (9330)"
......@@ -1465,6 +1570,7 @@ static const struct gpu_description gpu_description_table[] =
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7400, "NVIDIA GeForce Go 7400", DRIVER_NVIDIA_GEFORCE6, 256 },
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7600, "NVIDIA GeForce 7600 GT", DRIVER_NVIDIA_GEFORCE6, 256 },
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7800GT, "NVIDIA GeForce 7800 GT", DRIVER_NVIDIA_GEFORCE6, 256 },
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8200, "NVIDIA GeForce 8200", DRIVER_NVIDIA_GEFORCE8, 512 },
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8300GS, "NVIDIA GeForce 8300 GS", DRIVER_NVIDIA_GEFORCE8, 128 },
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8400GS, "NVIDIA GeForce 8400 GS", DRIVER_NVIDIA_GEFORCE8, 128 },
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8600GT, "NVIDIA GeForce 8600 GT", DRIVER_NVIDIA_GEFORCE8, 256 },
......@@ -1521,6 +1627,7 @@ static const struct gpu_description gpu_description_table[] =
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX670, "NVIDIA GeForce GTX 670", DRIVER_NVIDIA_GEFORCE8, 2048},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX670MX, "NVIDIA GeForce GTX 670MX", DRIVER_NVIDIA_GEFORCE8, 3072},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX680, "NVIDIA GeForce GTX 680", DRIVER_NVIDIA_GEFORCE8, 2048},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT750M, "NVIDIA GeForce GT 750M", DRIVER_NVIDIA_GEFORCE8, 1024},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX750, "NVIDIA GeForce GTX 750", DRIVER_NVIDIA_GEFORCE8, 1024},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX750TI, "NVIDIA GeForce GTX 750 Ti", DRIVER_NVIDIA_GEFORCE8, 2048},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX760, "NVIDIA Geforce GTX 760", DRIVER_NVIDIA_GEFORCE8, 2048},
......@@ -1529,6 +1636,7 @@ static const struct gpu_description gpu_description_table[] =
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX770, "NVIDIA GeForce GTX 770", DRIVER_NVIDIA_GEFORCE8, 2048},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX780, "NVIDIA GeForce GTX 780", DRIVER_NVIDIA_GEFORCE8, 3072},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX780TI, "NVIDIA GeForce GTX 780 Ti", DRIVER_NVIDIA_GEFORCE8, 3072},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX970, "NVIDIA GeForce GTX 970", DRIVER_NVIDIA_GEFORCE8, 4096},
/* AMD cards */
{HW_VENDOR_AMD, CARD_AMD_RAGE_128PRO, "ATI Rage Fury", DRIVER_AMD_RAGE_128PRO, 16 },
......@@ -1992,6 +2100,7 @@ static const struct wined3d_renderer_table
cards_nvidia_binary[] =
{
/* Direct 3D 11 */
{"GTX 970", CARD_NVIDIA_GEFORCE_GTX970}, /* GeForce 900 - highend */
{"GTX 780 Ti", CARD_NVIDIA_GEFORCE_GTX780TI}, /* Geforce 700 - highend */
{"GTX 780", CARD_NVIDIA_GEFORCE_GTX780}, /* Geforce 700 - highend */
{"GTX 770M", CARD_NVIDIA_GEFORCE_GTX770M}, /* Geforce 700 - midend high mobile */
......@@ -2000,6 +2109,7 @@ cards_nvidia_binary[] =
{"GTX 760", CARD_NVIDIA_GEFORCE_GTX760}, /* Geforce 700 - midend high */
{"GTX 750 Ti", CARD_NVIDIA_GEFORCE_GTX750TI}, /* Geforce 700 - midend */
{"GTX 750", CARD_NVIDIA_GEFORCE_GTX750}, /* Geforce 700 - midend */
{"GT 750M", CARD_NVIDIA_GEFORCE_GT750M}, /* Geforce 700 - midend mobile */
{"GTX 680", CARD_NVIDIA_GEFORCE_GTX680}, /* Geforce 600 - highend */
{"GTX 670MX", CARD_NVIDIA_GEFORCE_GTX670MX}, /* Geforce 600 - highend */
{"GTX 670", CARD_NVIDIA_GEFORCE_GTX670}, /* Geforce 600 - midend high */
......@@ -2345,6 +2455,7 @@ cards_amd_mesa[] =
cards_nvidia_mesa[] =
{
/* Maxwell */
{"NV124", CARD_NVIDIA_GEFORCE_GTX970},
{"NV117", CARD_NVIDIA_GEFORCE_GTX750},
/* Kepler */
{"NVF1", CARD_NVIDIA_GEFORCE_GTX780TI},
......@@ -2363,7 +2474,7 @@ cards_nvidia_mesa[] =
/* Tesla */
{"NVAF", CARD_NVIDIA_GEFORCE_GT320M},
{"NVAC", CARD_NVIDIA_GEFORCE_8200},
{"NVAA", CARD_NVIDIA_GEFORCE_8200},
{"NVAA", CARD_NVIDIA_GEFORCE_8200}, /* 8100 */
{"NVA8", CARD_NVIDIA_GEFORCE_210},
{"NVA5", CARD_NVIDIA_GEFORCE_GT220},
{"NVA3", CARD_NVIDIA_GEFORCE_GT240},
......
......@@ -2508,7 +2508,7 @@ static void shader_glsl_mov(const struct wined3d_shader_instruction *ins)
/* We need to *round* to the nearest int here. */
unsigned int mask_size = shader_glsl_get_write_mask_size(write_mask);
if (gl_info->supported[EXT_GPU_SHADER4])
if (gl_info->supported[EXT_GPU_SHADER4] && !(gl_info->quirks & WINED3D_CX_QUIRK_BROKEN_ROUND))
{
if (mask_size > 1)
shader_addline(buffer, "ivec%d(round(%s)));\n", mask_size, src0_param.param_str);
......
......@@ -5320,7 +5320,10 @@ release:
if (dst_surface->container->swapchain
&& dst_surface->container == dst_surface->container->swapchain->front_buffer)
{
dst_surface->lockedRect = *dst_rect;
dst_surface->surface_ops->surface_frontbuffer_updated(dst_surface);
}
}
if (src_surface && src_surface != dst_surface && src_data)
wined3d_resource_release_map_ptr(&src_surface->resource, context);
......
......@@ -72,6 +72,7 @@
#define WINED3D_CX_QUIRK_BROKEN_ARA 0x00100000
#define WINED3D_CX_QUIRK_BLIT 0x00200000
#define WINED3D_CX_QUIRK_RENDER_TO_FBO 0x00800000
#define WINED3D_CX_QUIRK_BROKEN_ROUND 0x01000000
/* Texture format fixups */
......@@ -1582,6 +1583,7 @@ enum wined3d_pci_device
CARD_NVIDIA_GEFORCE_GTX670 = 0x1189,
CARD_NVIDIA_GEFORCE_GTX670MX = 0x11a1,
CARD_NVIDIA_GEFORCE_GTX680 = 0x1180,
CARD_NVIDIA_GEFORCE_GT750M = 0x0fe9,
CARD_NVIDIA_GEFORCE_GTX750 = 0x1381,
CARD_NVIDIA_GEFORCE_GTX750TI = 0x1380,
CARD_NVIDIA_GEFORCE_GTX760 = 0x1187,
......@@ -1590,6 +1592,7 @@ enum wined3d_pci_device
CARD_NVIDIA_GEFORCE_GTX770 = 0x1184,
CARD_NVIDIA_GEFORCE_GTX780 = 0x1004,
CARD_NVIDIA_GEFORCE_GTX780TI = 0x100a,
CARD_NVIDIA_GEFORCE_GTX970 = 0x13c2,
CARD_VMWARE_SVGA3D = 0x0405,
......
MODULE = winejoystick_osx.drv
IMPORTS = winmm user32
EXTRALIBS = $(IOKIT_LIBS)
C_SRCS = \
joystick.c
@ stdcall -private DriverProc(long long long long long) DriverProc
......@@ -1138,6 +1138,8 @@ static HRESULT WINAPI QTInPin_ReceiveConnection(IPin *iface, IPin *pReceivePin,
hr = QT_Process_Movie(impl_from_IBaseFilter(This->pin.pinInfo.pFilter));
if (FAILED(hr))
{
IAsyncReader_Release(This->pReader);
This->pReader = NULL;
LeaveCriticalSection(&impl_from_IBaseFilter(This->pin.pinInfo.pFilter)->filter.csFilter);
TRACE("Unable to process movie\n");
return hr;
......
......@@ -131,6 +131,7 @@ static Cursor create_cursor( HANDLE handle );
#ifdef HAVE_X11_EXTENSIONS_XINPUT2_H
static BOOL xinput2_available;
static BOOL broken_rawevents;
#define MAKE_FUNCPTR(f) static typeof(f) * p##f
MAKE_FUNCPTR(XIFreeDeviceInfo);
MAKE_FUNCPTR(XIQueryDevice);
......@@ -1579,7 +1580,15 @@ void X11DRV_MotionNotify( HWND hwnd, XEvent *xev )
if (!hwnd)
{
struct x11drv_thread_data *thread_data = x11drv_thread_data();
if (thread_data->warp_serial && (long)(event->serial - thread_data->warp_serial) < 0) return;
if (thread_data->warp_serial)
{
if ((long)(event->serial - thread_data->warp_serial) < 0)
{
TRACE( "pos %d,%d old serial %lu, ignoring\n", input.u.mi.dx, input.u.mi.dy, event->serial );
return;
}
thread_data->warp_serial = 0; /* we caught up now */
}
}
send_mouse_input( hwnd, event->window, event->state, &input );
......@@ -1669,7 +1678,7 @@ static void X11DRV_RawMotion( XGenericEventCookie *xev )
break;
}
if (thread_data->warp_serial)
if (broken_rawevents && thread_data->warp_serial)
{
if ((long)(xev->serial - thread_data->warp_serial) < 0)
{
......@@ -1716,6 +1725,12 @@ void X11DRV_XInput2_Init(void)
#undef LOAD_FUNCPTR
xinput2_available = XQueryExtension( gdi_display, "XInputExtension", &xinput2_opcode, &event, &error );
/* Until version 1.10.4 rawinput was broken in XOrg, see
* https://bugs.freedesktop.org/show_bug.cgi?id=30068 */
broken_rawevents = strstr(XServerVendor( gdi_display ), "X.Org") &&
XVendorRelease( gdi_display ) < 11004000;
#else
TRACE( "X Input 2 support not compiled in.\n" );
#endif
......
......@@ -1330,9 +1330,8 @@ HINTERNET WINAPI InternetConnectW(HINTERNET hInternet,
HINTERNET rc = NULL;
DWORD res = ERROR_SUCCESS;
TRACE("(%p, %s, %i, %s, %s, %i, %x, %lx)\n", hInternet, debugstr_w(lpszServerName),
nServerPort, debugstr_w(lpszUserName), debugstr_w(lpszPassword),
dwService, dwFlags, dwContext);
TRACE("(%p, %s, %u, %s, %p, %u, %x, %lx)\n", hInternet, debugstr_w(lpszServerName),
nServerPort, debugstr_w(lpszUserName), lpszPassword, dwService, dwFlags, dwContext);
if (!lpszServerName)
{
......
......@@ -74,6 +74,8 @@ static BOOL JOY_LoadDriver(DWORD dwJoyID)
return TRUE;
JOY_Sticks[dwJoyID].hDriver = OpenDriverA("winejoystick.drv", 0, dwJoyID);
if (!JOY_Sticks[dwJoyID].hDriver)
JOY_Sticks[dwJoyID].hDriver = OpenDriverA("winejoystick_osx.drv", 0, dwJoyID);
return (JOY_Sticks[dwJoyID].hDriver != 0);
}
......
......@@ -565,7 +565,7 @@ BOOL WINAPI PlaySoundW(LPCWSTR pszSoundW, HMODULE hmod, DWORD fdwSound)
*/
BOOL WINAPI sndPlaySoundA(LPCSTR pszSoundA, UINT uFlags)
{
uFlags &= SND_ALIAS_ID|SND_FILENAME|SND_ASYNC|SND_LOOP|SND_MEMORY|SND_NODEFAULT|SND_NOSTOP|SND_SYNC;
uFlags &= SND_RESOURCE|SND_ALIAS_ID|SND_FILENAME|SND_ASYNC|SND_LOOP|SND_MEMORY|SND_NODEFAULT|SND_NOSTOP|SND_SYNC;
return MULTIMEDIA_PlaySound(pszSoundA, 0, uFlags, FALSE);
}
......@@ -574,7 +574,7 @@ BOOL WINAPI sndPlaySoundA(LPCSTR pszSoundA, UINT uFlags)
*/
BOOL WINAPI sndPlaySoundW(LPCWSTR pszSound, UINT uFlags)
{
uFlags &= SND_ALIAS_ID|SND_FILENAME|SND_ASYNC|SND_LOOP|SND_MEMORY|SND_NODEFAULT|SND_NOSTOP|SND_SYNC;
uFlags &= SND_RESOURCE|SND_ALIAS_ID|SND_FILENAME|SND_ASYNC|SND_LOOP|SND_MEMORY|SND_NODEFAULT|SND_NOSTOP|SND_SYNC;
return MULTIMEDIA_PlaySound(pszSound, 0, uFlags, TRUE);
}
......
......@@ -2328,6 +2328,7 @@ WINBASEAPI VOID WINAPI SetFileApisToOEM(void);
WINBASEAPI BOOL WINAPI SetFileAttributesA(LPCSTR,DWORD);
WINBASEAPI BOOL WINAPI SetFileAttributesW(LPCWSTR,DWORD);
#define SetFileAttributes WINELIB_NAME_AW(SetFileAttributes)
WINBASEAPI BOOL WINAPI SetFileCompletionNotificationModes(HANDLE,UCHAR);
WINBASEAPI DWORD WINAPI SetFilePointer(HANDLE,LONG,LPLONG,DWORD);
WINBASEAPI BOOL WINAPI SetFilePointerEx(HANDLE,LARGE_INTEGER,LARGE_INTEGER*,DWORD);
WINADVAPI BOOL WINAPI SetFileSecurityA(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment