Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
October 2018
- 60 participants
- 1315 messages
[PATCH 1/5] wined3d: Expose viewport array index capability in wined3d_caps.
by Józef Kucia
For viewport array indices in shader stages other than geometry.
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
dlls/wined3d/adapter_gl.c | 2 ++
dlls/wined3d/directx.c | 1 +
dlls/wined3d/wined3d_private.h | 1 +
include/wine/wined3d.h | 1 +
4 files changed, 5 insertions(+)
diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c
index b794415fb3d6..2f2d09db794b 100644
--- a/dlls/wined3d/adapter_gl.c
+++ b/dlls/wined3d/adapter_gl.c
@@ -3676,6 +3676,8 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter,
d3d_info->limits.varying_count = shader_caps.varying_count;
d3d_info->shader_double_precision = !!(shader_caps.wined3d_caps & WINED3D_SHADER_CAP_DOUBLE_PRECISION);
+ d3d_info->viewport_array_index_any_shader = !!gl_info->supported[ARB_SHADER_VIEWPORT_LAYER_ARRAY];
+
adapter->vertex_pipe->vp_get_caps(gl_info, &vertex_caps);
d3d_info->xyzrhw = vertex_caps.xyzrhw;
d3d_info->ffp_generic_attributes = vertex_caps.ffp_generic_attributes;
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index a6184862d1d9..fb67fe4a5128 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -2406,6 +2406,7 @@ HRESULT CDECL wined3d_get_device_caps(const struct wined3d *wined3d, UINT adapte
}
caps->shader_double_precision = d3d_info->shader_double_precision;
+ caps->viewport_array_index_any_shader = d3d_info->viewport_array_index_any_shader;
caps->max_feature_level = d3d_info->feature_level;
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 8cfa4c37ef8b..9135189d026c 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -197,6 +197,7 @@ struct wined3d_d3d_info
unsigned int vs_clipping : 1;
unsigned int shader_color_key : 1;
unsigned int shader_double_precision : 1;
+ unsigned int viewport_array_index_any_shader : 1;
unsigned int texture_npot : 1;
unsigned int texture_npot_conditional : 1;
enum wined3d_feature_level feature_level;
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index e2e6a72c8466..cf44ca64a409 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -1980,6 +1980,7 @@ struct wined3d_caps
struct wined3d_ddraw_caps ddraw_caps;
BOOL shader_double_precision;
+ BOOL viewport_array_index_any_shader;
enum wined3d_feature_level max_feature_level;
};
--
2.16.4
Oct. 1, 2018
[PATCH 2/2] msi: Add support for control event DirectoryListNew.
by Hans Leidekker
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=25687
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/msi/dialog.c | 164 ++++++++++++++++++++++++++++++++++++++--------------
dlls/msi/msi.rc | 1 +
dlls/msi/resource.h | 2 +
3 files changed, 123 insertions(+), 44 deletions(-)
diff --git a/dlls/msi/dialog.c b/dlls/msi/dialog.c
index 68e8ab2258..b01374f5e1 100644
--- a/dlls/msi/dialog.c
+++ b/dlls/msi/dialog.c
@@ -2151,23 +2151,27 @@ struct msi_pathedit_info
WNDPROC oldproc;
};
+static WCHAR *get_path_property( msi_dialog *dialog, msi_control *control )
+{
+ WCHAR *prop, *path;
+ BOOL indirect = control->attributes & msidbControlAttributesIndirect;
+ if (!(prop = msi_dialog_dup_property( dialog, control->property, indirect ))) return NULL;
+ path = msi_dialog_dup_property( dialog, prop, TRUE );
+ msi_free( prop );
+ return path;
+}
+
static void msi_dialog_update_pathedit( msi_dialog *dialog, msi_control *control )
{
- LPWSTR prop, path;
- BOOL indirect;
+ WCHAR *path;
if (!control && !(control = msi_dialog_find_control_by_type( dialog, szPathEdit )))
return;
- indirect = control->attributes & msidbControlAttributesIndirect;
- prop = msi_dialog_dup_property( dialog, control->property, indirect );
- path = msi_dialog_dup_property( dialog, prop, TRUE );
-
+ if (!(path = get_path_property( dialog, control ))) return;
SetWindowTextW( control->hwnd, path );
SendMessageW( control->hwnd, EM_SETSEL, 0, -1 );
-
msi_free( path );
- msi_free( prop );
}
/* FIXME: test when this should fail */
@@ -2921,16 +2925,12 @@ static UINT msi_dialog_list_box( msi_dialog *dialog, MSIRECORD *rec )
static void msi_dialog_update_directory_combo( msi_dialog *dialog, msi_control *control )
{
- LPWSTR prop, path;
- BOOL indirect;
+ WCHAR *path;
if (!control && !(control = msi_dialog_find_control_by_type( dialog, szDirectoryCombo )))
return;
- indirect = control->attributes & msidbControlAttributesIndirect;
- prop = msi_dialog_dup_property( dialog, control->property, indirect );
- path = msi_dialog_dup_property( dialog, prop, TRUE );
-
+ if (!(path = get_path_property( dialog, control ))) return;
PathStripPathW( path );
PathRemoveBackslashW( path );
@@ -2938,7 +2938,6 @@ static void msi_dialog_update_directory_combo( msi_dialog *dialog, msi_control *
SendMessageW( control->hwnd, CB_SETCURSEL, 0, 0 );
msi_free( path );
- msi_free( prop );
}
static UINT msi_dialog_directory_combo( msi_dialog *dialog, MSIRECORD *rec )
@@ -2967,31 +2966,28 @@ static UINT msi_dialog_directory_combo( msi_dialog *dialog, MSIRECORD *rec )
static void msi_dialog_update_directory_list( msi_dialog *dialog, msi_control *control )
{
- WCHAR dir_spec[MAX_PATH];
+ static const WCHAR asterisk[] = {'*',0};
+ WCHAR dir_spec[MAX_PATH], *path;
WIN32_FIND_DATAW wfd;
- LPWSTR prop, path;
- BOOL indirect;
LVITEMW item;
HANDLE file;
- static const WCHAR asterisk[] = {'*',0};
-
if (!control && !(control = msi_dialog_find_control_by_type( dialog, szDirectoryList )))
return;
/* clear the list-view */
SendMessageW( control->hwnd, LVM_DELETEALLITEMS, 0, 0 );
- indirect = control->attributes & msidbControlAttributesIndirect;
- prop = msi_dialog_dup_property( dialog, control->property, indirect );
- path = msi_dialog_dup_property( dialog, prop, TRUE );
-
+ if (!(path = get_path_property( dialog, control ))) return;
lstrcpyW( dir_spec, path );
lstrcatW( dir_spec, asterisk );
file = FindFirstFileW( dir_spec, &wfd );
- if ( file == INVALID_HANDLE_VALUE )
+ if (file == INVALID_HANDLE_VALUE)
+ {
+ msi_free( path );
return;
+ }
do
{
@@ -3010,7 +3006,6 @@ static void msi_dialog_update_directory_list( msi_dialog *dialog, msi_control *c
SendMessageW( control->hwnd, LVM_INSERTITEMW, 0, (LPARAM)&item );
} while ( FindNextFileW( file, &wfd ) );
- msi_free( prop );
msi_free( path );
FindClose( file );
}
@@ -3043,38 +3038,110 @@ static UINT msi_dialog_directorylist_up( msi_dialog *dialog )
return ERROR_SUCCESS;
}
-static UINT msi_dialog_dirlist_handler( msi_dialog *dialog,
- msi_control *control, WPARAM param )
+static WCHAR *get_unique_folder_name( const WCHAR *root, int *ret_len )
{
- LPNMHDR nmhdr = (LPNMHDR)param;
- WCHAR new_path[MAX_PATH];
- WCHAR text[MAX_PATH];
- LPWSTR path, prop;
- BOOL indirect;
+ static const WCHAR fmtW[] = {'%','s','%','s',' ','%','u',0};
+ WCHAR newfolder[MAX_PATH], *path, *ptr;
+ int len, count = 2;
+
+ len = LoadStringW( msi_hInstance, IDS_NEWFOLDER, newfolder, ARRAY_SIZE(newfolder) );
+ len += strlenW(root) + 1;
+ if (!(path = msi_alloc( (len + 4) * sizeof(WCHAR) ))) return NULL;
+ strcpyW( path, root );
+ strcatW( path, newfolder );
+
+ for (;;)
+ {
+ if (GetFileAttributesW( path ) == INVALID_FILE_ATTRIBUTES) break;
+ if (count > 99)
+ {
+ msi_free( path );
+ return NULL;
+ }
+ len = sprintfW( path, fmtW, root, newfolder, count++ ) + 1;
+ }
+
+ ptr = strrchrW( path, '\\' ) + 1;
+ *ret_len = len - (ptr - path);
+ memmove( path, ptr, *ret_len * sizeof(WCHAR) );
+ return path;
+}
+
+static UINT msi_dialog_directorylist_new( msi_dialog *dialog )
+{
+ msi_control *control;
+ WCHAR *path;
LVITEMW item;
int index;
- if (nmhdr->code != LVN_ITEMACTIVATE)
- return ERROR_SUCCESS;
+ control = msi_dialog_find_control_by_type( dialog, szDirectoryList );
+
+ if (!(path = get_path_property( dialog, control ))) return ERROR_OUTOFMEMORY;
+
+ item.mask = LVIF_TEXT;
+ item.iItem = 0;
+ item.iSubItem = 0;
+ item.pszText = get_unique_folder_name( path, &item.cchTextMax );
- index = SendMessageW( control->hwnd, LVM_GETNEXTITEM, -1, LVNI_SELECTED );
- if ( index < 0 )
+ index = SendMessageW( control->hwnd, LVM_INSERTITEMW, 0, (LPARAM)&item );
+ SendMessageW( control->hwnd, LVM_ENSUREVISIBLE, index, 0 );
+ SendMessageW( control->hwnd, LVM_EDITLABELW, index, -1 );
+
+ msi_free( path );
+ msi_free( item.pszText );
+ return ERROR_SUCCESS;
+}
+
+static UINT msi_dialog_dirlist_handler( msi_dialog *dialog, msi_control *control, WPARAM param )
+{
+ NMHDR *nmhdr = (NMHDR *)param;
+ WCHAR text[MAX_PATH], *new_path, *path, *prop;
+ BOOL indirect;
+
+ switch (nmhdr->code)
{
- ERR("No list-view item selected!\n");
- return ERROR_FUNCTION_FAILED;
+ case LVN_ENDLABELEDITW:
+ {
+ NMLVDISPINFOW *info = (NMLVDISPINFOW *)param;
+ if (!info->item.pszText) return ERROR_SUCCESS;
+ lstrcpynW( text, info->item.pszText, ARRAY_SIZE(text) );
+ text[ARRAY_SIZE(text) - 1] = 0;
+ break;
}
+ case LVN_ITEMACTIVATE:
+ {
+ LVITEMW item;
+ int index = SendMessageW( control->hwnd, LVM_GETNEXTITEM, -1, LVNI_SELECTED );
+ if (index < 0)
+ {
+ ERR("no list-view item selected\n");
+ return ERROR_FUNCTION_FAILED;
+ }
- item.iSubItem = 0;
- item.pszText = text;
- item.cchTextMax = MAX_PATH;
- SendMessageW( control->hwnd, LVM_GETITEMTEXTW, index, (LPARAM)&item );
+ item.iSubItem = 0;
+ item.pszText = text;
+ item.cchTextMax = MAX_PATH;
+ SendMessageW( control->hwnd, LVM_GETITEMTEXTW, index, (LPARAM)&item );
+ text[ARRAY_SIZE(text) - 1] = 0;
+ break;
+ }
+ default:
+ return ERROR_SUCCESS;
+ }
indirect = control->attributes & msidbControlAttributesIndirect;
prop = msi_dialog_dup_property( dialog, control->property, indirect );
path = msi_dialog_dup_property( dialog, prop, TRUE );
+ if (!(new_path = msi_alloc( (strlenW(path) + strlenW(text) + 2) * sizeof(WCHAR) )))
+ {
+ msi_free( prop );
+ msi_free( path );
+ return ERROR_OUTOFMEMORY;
+ }
lstrcpyW( new_path, path );
lstrcatW( new_path, text );
+ if (nmhdr->code == LVN_ENDLABELEDITW) CreateDirectoryW( new_path, NULL );
lstrcatW( new_path, szBackSlash );
msi_dialog_set_property( dialog->package, prop, new_path );
@@ -3085,6 +3152,8 @@ static UINT msi_dialog_dirlist_handler( msi_dialog *dialog,
msi_free( prop );
msi_free( path );
+ msi_free( new_path );
+
return ERROR_SUCCESS;
}
@@ -3094,7 +3163,7 @@ static UINT msi_dialog_directory_list( msi_dialog *dialog, MSIRECORD *rec )
LPCWSTR prop;
DWORD style;
- style = LVS_LIST | WS_VSCROLL | LVS_SHAREIMAGELISTS |
+ style = LVS_LIST | WS_VSCROLL | LVS_SHAREIMAGELISTS | LVS_EDITLABELS |
LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER |
LVS_SORTASCENDING | WS_CHILD | WS_GROUP | WS_TABSTOP;
control = msi_dialog_add_control( dialog, rec, WC_LISTVIEWW, style );
@@ -4516,6 +4585,11 @@ static UINT event_directory_list_up( msi_dialog *dialog, const WCHAR *argument )
return msi_dialog_directorylist_up( dialog );
}
+static UINT event_directory_list_new( msi_dialog *dialog, const WCHAR *argument )
+{
+ return msi_dialog_directorylist_new( dialog );
+}
+
static UINT event_reinstall_mode( msi_dialog *dialog, const WCHAR *argument )
{
return msi_set_property( dialog->package->db, szReinstallMode, argument, -1 );
@@ -4543,6 +4617,7 @@ static const WCHAR set_target_pathW[] = {'S','e','t','T','a','r','g','e','t','P'
static const WCHAR resetW[] = {'R','e','s','e','t',0};
static const WCHAR set_install_levelW[] = {'S','e','t','I','n','s','t','a','l','l','L','e','v','e','l',0};
static const WCHAR directory_list_upW[] = {'D','i','r','e','c','t','o','r','y','L','i','s','t','U','p',0};
+static const WCHAR directory_list_newW[] = {'D','i','r','e','c','t','o','r','y','L','i','s','t','N','e','w',0};
static const WCHAR selection_browseW[] = {'S','e','l','e','c','t','i','o','n','B','r','o','w','s','e',0};
static const WCHAR reinstall_modeW[] = {'R','e','i','n','s','t','a','l','l','M','o','d','e',0};
static const WCHAR reinstallW[] = {'R','e','i','n','s','t','a','l','l',0};
@@ -4562,6 +4637,7 @@ static const struct control_event control_events[] =
{ resetW, event_reset },
{ set_install_levelW, event_set_install_level },
{ directory_list_upW, event_directory_list_up },
+ { directory_list_newW, event_directory_list_new },
{ selection_browseW, event_spawn_dialog },
{ reinstall_modeW, event_reinstall_mode },
{ reinstallW, event_reinstall },
diff --git a/dlls/msi/msi.rc b/dlls/msi/msi.rc
index 14f98667d5..7b0b57e291 100644
--- a/dlls/msi/msi.rc
+++ b/dlls/msi/msi.rc
@@ -62,6 +62,7 @@ STRINGTABLE
13 "network drive for feature missing"
14 "feature from:"
15 "choose which folder contains %s"
+ 100 "New Folder"
}
/* Error messages */
diff --git a/dlls/msi/resource.h b/dlls/msi/resource.h
index 045aa209c9..c63266e7d0 100644
--- a/dlls/msi/resource.h
+++ b/dlls/msi/resource.h
@@ -23,6 +23,8 @@
#define MSIERR_INFO_ACTIONSTART 14
#define MSIERR_INFO_ACTIONENDED 15
+#define IDS_NEWFOLDER 100
+
#define MSIERR_INSERTDISK 1302
#define MSIERR_CABNOTFOUND 1311
--
2.11.0
Oct. 1, 2018
[PATCH 1/2] msi: Fix a couple of memory leaks (Valgrind).
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/msi/install.c | 7 ++++---
dlls/msi/package.c | 4 ++++
dlls/msi/streams.c | 2 +-
3 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/dlls/msi/install.c b/dlls/msi/install.c
index ce36bd3335..2cdebd2ad3 100644
--- a/dlls/msi/install.c
+++ b/dlls/msi/install.c
@@ -411,8 +411,7 @@ WCHAR *msi_resolve_source_folder( MSIPACKAGE *package, const WCHAR *name, MSIFOL
UINT WINAPI MsiGetSourcePathA(MSIHANDLE hinst, const char *folder, char *buf, DWORD *sz)
{
MSIPACKAGE *package;
- const WCHAR *path;
- WCHAR *folderW;
+ WCHAR *path, *folderW;
UINT r;
TRACE("%s %p %p\n", debugstr_a(folder), buf, sz);
@@ -459,6 +458,7 @@ UINT WINAPI MsiGetSourcePathA(MSIHANDLE hinst, const char *folder, char *buf, DW
else
r = ERROR_DIRECTORY;
+ heap_free(path);
heap_free(folderW);
msiobj_release(&package->hdr);
return r;
@@ -470,7 +470,7 @@ UINT WINAPI MsiGetSourcePathA(MSIHANDLE hinst, const char *folder, char *buf, DW
UINT WINAPI MsiGetSourcePathW(MSIHANDLE hinst, const WCHAR *folder, WCHAR *buf, DWORD *sz)
{
MSIPACKAGE *package;
- const WCHAR *path;
+ WCHAR *path;
UINT r;
TRACE("%s %p %p\n", debugstr_w(folder), buf, sz);
@@ -510,6 +510,7 @@ UINT WINAPI MsiGetSourcePathW(MSIHANDLE hinst, const WCHAR *folder, WCHAR *buf,
else
r = ERROR_DIRECTORY;
+ heap_free(path);
msiobj_release(&package->hdr);
return r;
}
diff --git a/dlls/msi/package.c b/dlls/msi/package.c
index 8e9ae6dd90..39a0a939b7 100644
--- a/dlls/msi/package.c
+++ b/dlls/msi/package.c
@@ -2125,6 +2125,7 @@ INT WINAPI MsiProcessMessage( MSIHANDLE hInstall, INSTALLMESSAGE eMessageType,
ret = MSI_ProcessMessage( package, eMessageType, record );
+ msiobj_release( &record->hdr );
msiobj_release( &package->hdr );
return ret;
}
@@ -2689,7 +2690,10 @@ UINT __cdecl s_remote_FormatRecord(MSIHANDLE hinst, struct wire_record *remote_r
{
*value = midl_user_allocate(++size * sizeof(WCHAR));
if (!*value)
+ {
+ MsiCloseHandle(rec);
return ERROR_OUTOFMEMORY;
+ }
r = MsiFormatRecordW(hinst, rec, *value, &size);
}
diff --git a/dlls/msi/streams.c b/dlls/msi/streams.c
index 7f9582cd4b..74ef899c1b 100644
--- a/dlls/msi/streams.c
+++ b/dlls/msi/streams.c
@@ -141,9 +141,9 @@ static UINT STREAMS_set_row(struct tagMSIVIEW *view, UINT row, MSIRECORD *rec, U
old = sv->db->streams[row].stream;
hr = IStream_QueryInterface( new, &IID_IStream, (void **)&sv->db->streams[row].stream );
+ IStream_Release( new );
if (FAILED( hr ))
{
- IStream_Release( new );
return ERROR_FUNCTION_FAILED;
}
if (old) IStream_Release( old );
--
2.11.0
Oct. 1, 2018
[PATCH vkd3d 5/5] vkd3d: Do not enable shaderTessellationAndGeometryPointSize feature.
by Józef Kucia
From: Józef Kucia <jkucia(a)codeweavers.com>
We don't want to write PointSize in tessellation and geometry shaders.
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
libs/vkd3d/device.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
index 673c54a889cf..f91c0d96bf96 100644
--- a/libs/vkd3d/device.c
+++ b/libs/vkd3d/device.c
@@ -1015,6 +1015,8 @@ static HRESULT vkd3d_create_vk_device(struct d3d12_device *device,
&& FAILED(hr = vkd3d_select_physical_device(device->vkd3d_instance, &physical_device)))
return hr;
+ device->vk_physical_device = physical_device;
+
/* Create command queues */
VK_CALL(vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &queue_family_count, NULL));
if (!(queue_properties = vkd3d_calloc(queue_family_count, sizeof(*queue_properties))))
@@ -1083,10 +1085,11 @@ static HRESULT vkd3d_create_vk_device(struct d3d12_device *device,
VK_CALL(vkGetPhysicalDeviceMemoryProperties(physical_device, &device->memory_properties));
VK_CALL(vkGetPhysicalDeviceFeatures(physical_device, &device_features));
- device->vk_physical_device = physical_device;
if (FAILED(hr = vkd3d_init_device_caps(device, create_info, &device_features, &extension_count)))
goto done;
+ device_features.shaderTessellationAndGeometryPointSize = VK_FALSE;
+
if (!(extensions = vkd3d_calloc(extension_count, sizeof(*extensions))))
{
hr = E_OUTOFMEMORY;
--
2.16.4
Oct. 1, 2018
[PATCH vkd3d 4/5] tests: Fix unsupported formats tests on WARP.
by Józef Kucia
From: Józef Kucia <jkucia(a)codeweavers.com>
A recent version of WARP supports B8G8R8A8 UAVs even on
D3D_FEATURE_LEVEL_11_0.
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
include/private/vkd3d_test.h | 6 ++++++
tests/d3d12.c | 39 ++++++++++++++++++++++++++-------------
2 files changed, 32 insertions(+), 13 deletions(-)
diff --git a/include/private/vkd3d_test.h b/include/private/vkd3d_test.h
index 8e657ac02c49..fd3ed1572da6 100644
--- a/include/private/vkd3d_test.h
+++ b/include/private/vkd3d_test.h
@@ -90,6 +90,12 @@ vkd3d_test_platform_is_windows(void)
return !strcmp(vkd3d_test_platform, "windows");
}
+static inline bool
+broken(bool condition)
+{
+ return condition && vkd3d_test_platform_is_windows();
+}
+
static void
vkd3d_test_check_ok(unsigned int line, bool result, const char *fmt, va_list args)
{
diff --git a/tests/d3d12.c b/tests/d3d12.c
index cff43974697b..dd842bc461ae 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -869,6 +869,11 @@ static ID3D12Device *create_device(void)
return device;
}
+static bool broken_on_warp(bool condition)
+{
+ return broken(use_warp_device && condition);
+}
+
static bool is_min_max_filtering_supported(ID3D12Device *device)
{
D3D12_FEATURE_DATA_D3D12_OPTIONS options;
@@ -1307,12 +1312,18 @@ static void test_format_support(void)
unsigned int i;
HRESULT hr;
- static const D3D12_FEATURE_DATA_FORMAT_SUPPORT unsupported_format_features[] =
+ static const struct
{
- {DXGI_FORMAT_B8G8R8A8_TYPELESS, D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW,
- D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD | D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE},
- {DXGI_FORMAT_B8G8R8A8_UNORM, D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW,
- D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD | D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE},
+ D3D12_FEATURE_DATA_FORMAT_SUPPORT f;
+ bool broken;
+ }
+ unsupported_format_features[] =
+ {
+ /* A recent version of WARP suppots B8G8R8A8 UAVs even on D3D_FEATURE_LEVEL_11_0. */
+ {{DXGI_FORMAT_B8G8R8A8_TYPELESS, D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW,
+ D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD | D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE}, true},
+ {{DXGI_FORMAT_B8G8R8A8_UNORM, D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW,
+ D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD | D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE}, true},
};
if (!(device = create_device()))
@@ -1333,16 +1344,18 @@ static void test_format_support(void)
for (i = 0; i < ARRAY_SIZE(unsupported_format_features); ++i)
{
memset(&format_support, 0, sizeof(format_support));
- format_support.Format = unsupported_format_features[i].Format;
+ format_support.Format = unsupported_format_features[i].f.Format;
hr = ID3D12Device_CheckFeatureSupport(device, D3D12_FEATURE_FORMAT_SUPPORT,
&format_support, sizeof(format_support));
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
- ok(!(format_support.Support1 & unsupported_format_features[i].Support1),
- "Format %#x supports %#x.\n", unsupported_format_features[i].Format,
- format_support.Support1 & unsupported_format_features[i].Support1);
- ok(!(format_support.Support2 & unsupported_format_features[i].Support2),
- "Format %#x supports %#x.\n", unsupported_format_features[i].Format,
- format_support.Support2 & unsupported_format_features[i].Support2);
+ ok(!(format_support.Support1 & unsupported_format_features[i].f.Support1)
+ || broken_on_warp(unsupported_format_features[i].broken),
+ "Format %#x supports %#x.\n", unsupported_format_features[i].f.Format,
+ format_support.Support1 & unsupported_format_features[i].f.Support1);
+ ok(!(format_support.Support2 & unsupported_format_features[i].f.Support2)
+ || broken_on_warp(unsupported_format_features[i].broken),
+ "Format %#x supports %#x.\n", unsupported_format_features[i].f.Format,
+ format_support.Support2 & unsupported_format_features[i].f.Support2);
}
refcount = ID3D12Device_Release(device);
@@ -1709,7 +1722,7 @@ static void test_create_committed_resource(void)
hr = ID3D12Device_CreateCommittedResource(device, &heap_properties, D3D12_HEAP_FLAG_NONE,
&resource_desc, D3D12_RESOURCE_STATE_RENDER_TARGET, NULL,
&IID_ID3D12Resource, (void **)&resource);
- todo(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+ todo(hr == E_INVALIDARG || broken_on_warp(true), "Got unexpected hr %#x.\n", hr);
if (SUCCEEDED(hr))
ID3D12Resource_Release(resource);
--
2.16.4
Oct. 1, 2018
[PATCH vkd3d 3/5] tests: Add simple test for creating placed resources.
by Józef Kucia
From: Józef Kucia <jkucia(a)codeweavers.com>
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
tests/d3d12.c | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 87 insertions(+)
diff --git a/tests/d3d12.c b/tests/d3d12.c
index c7f4977aa300..cff43974697b 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -1921,6 +1921,92 @@ done:
ok(!refcount, "ID3D12Device has %u references left.\n", (unsigned int)refcount);
}
+static void test_create_placed_resource(void)
+{
+ D3D12_GPU_VIRTUAL_ADDRESS gpu_address;
+ D3D12_RESOURCE_DESC resource_desc;
+ ID3D12Device *device, *tmp_device;
+ D3D12_CLEAR_VALUE clear_value;
+ D3D12_HEAP_DESC heap_desc;
+ ID3D12Resource *resource;
+ ID3D12Heap *heap;
+ ULONG refcount;
+ HRESULT hr;
+
+ if (!(device = create_device()))
+ {
+ skip("Failed to create device.\n");
+ return;
+ }
+
+ heap_desc.SizeInBytes = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT;
+ memset(&heap_desc.Properties, 0, sizeof(heap_desc.Properties));
+ heap_desc.Properties.Type = D3D12_HEAP_TYPE_DEFAULT;
+ heap_desc.Alignment = 0;
+ heap_desc.Flags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;
+ hr = ID3D12Device_CreateHeap(device, &heap_desc, &IID_ID3D12Heap, (void **)&heap);
+ ok(hr == S_OK, "Failed to create heap, hr %#x.\n", hr);
+
+ resource_desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;
+ resource_desc.Alignment = 0;
+ resource_desc.Width = 32;
+ resource_desc.Height = 1;
+ resource_desc.DepthOrArraySize = 1;
+ resource_desc.MipLevels = 1;
+ resource_desc.Format = DXGI_FORMAT_UNKNOWN;
+ resource_desc.SampleDesc.Count = 1;
+ resource_desc.SampleDesc.Quality = 0;
+ resource_desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;
+ resource_desc.Flags = 0;
+
+ clear_value.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
+ clear_value.Color[0] = 1.0f;
+ clear_value.Color[1] = 0.0f;
+ clear_value.Color[2] = 0.0f;
+ clear_value.Color[3] = 1.0f;
+
+ refcount = get_refcount(heap);
+ ok(refcount == 1, "Got unexpected refcount %u.\n", (unsigned int)refcount);
+
+ hr = ID3D12Device_CreatePlacedResource(device, heap, 0,
+ &resource_desc, D3D12_RESOURCE_STATE_COMMON, NULL,
+ &IID_ID3D12Resource, (void **)&resource);
+ ok(hr == S_OK, "Failed to create placed resource, hr %#x.\n", hr);
+
+ refcount = get_refcount(heap);
+ ok(refcount == 1, "Got unexpected refcount %u.\n", (unsigned int)refcount);
+
+ refcount = get_refcount(device);
+ ok(refcount == 3, "Got unexpected refcount %u.\n", (unsigned int)refcount);
+ hr = ID3D12Resource_GetDevice(resource, &IID_ID3D12Device, (void **)&tmp_device);
+ ok(hr == S_OK, "Failed to get device, hr %#x.\n", hr);
+ refcount = get_refcount(device);
+ ok(refcount == 4, "Got unexpected refcount %u.\n", (unsigned int)refcount);
+ refcount = ID3D12Device_Release(tmp_device);
+ ok(refcount == 3, "Got unexpected refcount %u.\n", (unsigned int)refcount);
+
+ check_interface(resource, &IID_ID3D12Object, TRUE);
+ check_interface(resource, &IID_ID3D12DeviceChild, TRUE);
+ check_interface(resource, &IID_ID3D12Pageable, TRUE);
+ check_interface(resource, &IID_ID3D12Resource, TRUE);
+
+ gpu_address = ID3D12Resource_GetGPUVirtualAddress(resource);
+ ok(gpu_address, "Got unexpected GPU virtual address %#"PRIx64".\n", gpu_address);
+
+ refcount = ID3D12Resource_Release(resource);
+ ok(!refcount, "ID3D12Resource has %u references left.\n", (unsigned int)refcount);
+
+ /* The clear value must be NULL for buffers. */
+ hr = ID3D12Device_CreatePlacedResource(device, heap, 0,
+ &resource_desc, D3D12_RESOURCE_STATE_COMMON, &clear_value,
+ &IID_ID3D12Resource, (void **)&resource);
+ ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+
+ ID3D12Heap_Release(heap);
+ refcount = ID3D12Device_Release(device);
+ ok(!refcount, "ID3D12Device has %u references left.\n", (unsigned int)refcount);
+}
+
static void test_create_descriptor_heap(void)
{
D3D12_DESCRIPTOR_HEAP_DESC heap_desc;
@@ -20415,6 +20501,7 @@ START_TEST(d3d12)
run_test(test_create_command_queue);
run_test(test_create_committed_resource);
run_test(test_create_heap);
+ run_test(test_create_placed_resource);
run_test(test_create_descriptor_heap);
run_test(test_create_sampler);
run_test(test_create_unordered_access_view);
--
2.16.4
Oct. 1, 2018
[PATCH vkd3d 2/5] vkd3d: Allocate memory for resource if heap memory cannot be used.
by Józef Kucia
From: Józef Kucia <jkucia(a)codeweavers.com>
Anvil has additional restrictions for index and vertex buffers.
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
Index and vertex buffers can be allocated only from the 32-bit heap in
Anvil because of a Vertex Fetch cache bug.
---
libs/vkd3d/resource.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c
index d6330941127a..68c189ad5bd4 100644
--- a/libs/vkd3d/resource.c
+++ b/libs/vkd3d/resource.c
@@ -1121,9 +1121,10 @@ static HRESULT vkd3d_bind_heap_memory(struct d3d12_device *device,
if (!(requirements.memoryTypeBits & (1u << heap->vk_memory_type)))
{
- FIXME("Memory type %u cannot be bound to resource %p (allowed types %#x).\n",
+ FIXME("Memory type %u cannot be bound to resource %p (allowed types %#x), "
+ "allocating device memory.\n",
heap->vk_memory_type, resource, requirements.memoryTypeBits);
- return E_NOTIMPL;
+ return vkd3d_allocate_resource_memory(device, resource, &heap->desc.Properties, heap->desc.Flags);
}
if (d3d12_resource_is_buffer(resource))
--
2.16.4
Oct. 1, 2018
[PATCH vkd3d 1/5] tests: Add tests for atomic_iadd on TGSM.
by Józef Kucia
From: Józef Kucia <jkucia(a)codeweavers.com>
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
tests/d3d12.c | 187 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 187 insertions(+)
diff --git a/tests/d3d12.c b/tests/d3d12.c
index c40ce12719b6..c7f4977aa300 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -7656,6 +7656,192 @@ static void test_shader_instructions(void)
destroy_test_context(&context);
}
+static void test_compute_shader_instructions(void)
+{
+ D3D12_ROOT_SIGNATURE_DESC root_signature_desc;
+ const D3D12_SHADER_BYTECODE *current_cs;
+ ID3D12GraphicsCommandList *command_list;
+ D3D12_ROOT_PARAMETER root_parameters[2];
+ struct resource_readback rb;
+ struct test_context context;
+ ID3D12CommandQueue *queue;
+ ID3D12Resource *buffer;
+ ID3D12Device *device;
+ unsigned int i, j;
+ uint32_t value;
+ HRESULT hr;
+
+ static const DWORD cs_atomic_iadd_tgsm_raw_code[] =
+ {
+#if 0
+ RWByteAddressBuffer buffer;
+
+ groupshared uint m0;
+ groupshared uint m1;
+
+ uint4 u;
+ int4 s;
+
+ [numthreads(1, 1, 1)]
+ void main()
+ {
+ m0 = buffer.Load(0 * 4);
+ m1 = buffer.Load(1 * 4);
+
+ InterlockedAdd(m0, u.x);
+ InterlockedAdd(m1, s.x);
+
+ GroupMemoryBarrierWithGroupSync();
+
+ buffer.Store(0 * 4, m0);
+ buffer.Store(1 * 4, m1);
+ }
+#endif
+ 0x43425844, 0xcd7bfbec, 0x273e77a4, 0x49b75eb9, 0xe7d291f4, 0x00000001, 0x000001d0, 0x00000003,
+ 0x0000002c, 0x0000003c, 0x0000004c, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f,
+ 0x00000008, 0x00000000, 0x00000008, 0x58454853, 0x0000017c, 0x00050050, 0x0000005f, 0x0100086a,
+ 0x04000059, 0x00208e46, 0x00000000, 0x00000002, 0x0300009d, 0x0011e000, 0x00000000, 0x02000068,
+ 0x00000001, 0x0400009f, 0x0011f000, 0x00000000, 0x00000004, 0x0400009f, 0x0011f000, 0x00000001,
+ 0x00000004, 0x0400009b, 0x00000001, 0x00000001, 0x00000001, 0x890000a5, 0x800002c2, 0x00199983,
+ 0x00100012, 0x00000000, 0x00004001, 0x00000000, 0x0011e006, 0x00000000, 0x070000a6, 0x0011f012,
+ 0x00000000, 0x00004001, 0x00000000, 0x0010000a, 0x00000000, 0x080000ad, 0x0011f000, 0x00000000,
+ 0x00004001, 0x00000000, 0x0020800a, 0x00000000, 0x00000000, 0x890000a5, 0x800002c2, 0x00199983,
+ 0x00100012, 0x00000000, 0x00004001, 0x00000004, 0x0011e006, 0x00000000, 0x070000a6, 0x0011f012,
+ 0x00000001, 0x00004001, 0x00000000, 0x0010000a, 0x00000000, 0x080000ad, 0x0011f000, 0x00000001,
+ 0x00004001, 0x00000000, 0x0020800a, 0x00000000, 0x00000001, 0x010018be, 0x070000a5, 0x00100022,
+ 0x00000000, 0x00004001, 0x00000000, 0x0011f006, 0x00000001, 0x070000a5, 0x00100012, 0x00000000,
+ 0x00004001, 0x00000000, 0x0011f006, 0x00000000, 0x070000a6, 0x0011e032, 0x00000000, 0x00004001,
+ 0x00000000, 0x00100046, 0x00000000, 0x0100003e,
+ };
+ static D3D12_SHADER_BYTECODE cs_atomic_iadd_tgsm_raw
+ = {cs_atomic_iadd_tgsm_raw_code, sizeof(cs_atomic_iadd_tgsm_raw_code)};
+ static const DWORD cs_atomic_iadd_const_code[] =
+ {
+#if 0
+ RWByteAddressBuffer buffer;
+
+ groupshared uint m;
+
+ [numthreads(1, 1, 1)]
+ void main()
+ {
+ m = buffer.Load(0 * 4);
+
+ InterlockedAdd(m, -1);
+ buffer.InterlockedAdd(1 * 4, -1);
+
+ GroupMemoryBarrierWithGroupSync();
+
+ buffer.Store(0 * 4, m);
+ }
+#endif
+ 0x43425844, 0x85f9168a, 0x5fe0c4d5, 0x5989b572, 0xecb6ce3c, 0x00000001, 0x0000014c, 0x00000003,
+ 0x0000002c, 0x0000003c, 0x0000004c, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f,
+ 0x00000008, 0x00000000, 0x00000008, 0x58454853, 0x000000f8, 0x00050050, 0x0000003e, 0x0100086a,
+ 0x0300009d, 0x0011e000, 0x00000000, 0x02000068, 0x00000001, 0x0400009f, 0x0011f000, 0x00000000,
+ 0x00000004, 0x0400009b, 0x00000001, 0x00000001, 0x00000001, 0x890000a5, 0x800002c2, 0x00199983,
+ 0x00100012, 0x00000000, 0x00004001, 0x00000000, 0x0011e006, 0x00000000, 0x070000a6, 0x0011f012,
+ 0x00000000, 0x00004001, 0x00000000, 0x0010000a, 0x00000000, 0x070000ad, 0x0011f000, 0x00000000,
+ 0x00004001, 0x00000000, 0x00004001, 0xffffffff, 0x070000ad, 0x0011e000, 0x00000000, 0x00004001,
+ 0x00000004, 0x00004001, 0xffffffff, 0x010018be, 0x070000a5, 0x00100012, 0x00000000, 0x00004001,
+ 0x00000000, 0x0011f006, 0x00000000, 0x070000a6, 0x0011e012, 0x00000000, 0x00004001, 0x00000000,
+ 0x0010000a, 0x00000000, 0x0100003e,
+ };
+ static const D3D12_SHADER_BYTECODE cs_atomic_iadd_const
+ = {cs_atomic_iadd_const_code, sizeof(cs_atomic_iadd_const_code)};
+ static const struct
+ {
+ const D3D12_SHADER_BYTECODE *cs;
+ struct uvec4 u;
+ struct ivec4 s;
+ uint32_t input_data[10];
+ uint32_t expected_data[10];
+ }
+ tests[] =
+ {
+ {&cs_atomic_iadd_tgsm_raw, { 0}, { 0}, {0, 0}, {0, 0}},
+ {&cs_atomic_iadd_tgsm_raw, { 0}, { 0}, {1, 1}, {1, 1}},
+ {&cs_atomic_iadd_tgsm_raw, { 1}, { 1}, {0, 0}, {1, 1}},
+ {&cs_atomic_iadd_tgsm_raw, {0xffffffff}, {-1}, {1, 1}, {0, 0}},
+ {&cs_atomic_iadd_tgsm_raw, {0xffffffff}, {-1}, {4, 4}, {3, 3}},
+
+ {&cs_atomic_iadd_const, {}, {}, {0x00000000, 0x00000000}, {0xffffffff, 0xffffffff}},
+ {&cs_atomic_iadd_const, {}, {}, {0x00000001, 0x00000001}, {0x00000000, 0x00000000}},
+ {&cs_atomic_iadd_const, {}, {}, {0xffffffff, 0xffffffff}, {0xfffffffe, 0xfffffffe}},
+ };
+
+ if (!init_compute_test_context(&context))
+ return;
+ device = context.device;
+ command_list = context.list;
+ queue = context.queue;
+
+ root_parameters[0].ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV;
+ root_parameters[0].Descriptor.ShaderRegister = 0;
+ root_parameters[0].Descriptor.RegisterSpace = 0;
+ root_parameters[0].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;
+ root_parameters[1].ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS;
+ root_parameters[1].Constants.ShaderRegister = 0;
+ root_parameters[1].Constants.RegisterSpace = 0;
+ root_parameters[1].Constants.Num32BitValues = 8;
+ root_parameters[1].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;
+ root_signature_desc.NumParameters = ARRAY_SIZE(root_parameters);
+ root_signature_desc.pParameters = root_parameters;
+ root_signature_desc.NumStaticSamplers = 0;
+ root_signature_desc.pStaticSamplers = NULL;
+ root_signature_desc.Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE;
+ hr = create_root_signature(device, &root_signature_desc, &context.root_signature);
+ ok(SUCCEEDED(hr), "Failed to create root signature, hr %#x.\n", hr);
+
+ buffer = create_default_buffer(device, 512,
+ D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_DEST);
+
+ current_cs = NULL;
+ for (i = 0; i < ARRAY_SIZE(tests); ++i)
+ {
+ if (current_cs != tests[i].cs)
+ {
+ if (context.pipeline_state)
+ ID3D12PipelineState_Release(context.pipeline_state);
+ current_cs = tests[i].cs;
+ context.pipeline_state = create_compute_pipeline_state(device,
+ context.root_signature, *current_cs);
+ }
+
+ upload_buffer_data(buffer, 0, sizeof(tests[i].input_data), tests[i].input_data,
+ queue, command_list);
+ reset_command_list(command_list, context.allocator);
+ transition_resource_state(command_list, buffer,
+ D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_UNORDERED_ACCESS);
+
+ ID3D12GraphicsCommandList_SetComputeRootSignature(command_list, context.root_signature);
+ ID3D12GraphicsCommandList_SetComputeRootUnorderedAccessView(command_list,
+ 0, ID3D12Resource_GetGPUVirtualAddress(buffer));
+ ID3D12GraphicsCommandList_SetComputeRoot32BitConstants(command_list, 1, 4, &tests[i].u, 0);
+ ID3D12GraphicsCommandList_SetComputeRoot32BitConstants(command_list, 1, 4, &tests[i].s, 4);
+
+ ID3D12GraphicsCommandList_SetPipelineState(command_list, context.pipeline_state);
+ ID3D12GraphicsCommandList_Dispatch(command_list, 1, 1, 1);
+
+ transition_resource_state(command_list, buffer,
+ D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
+ get_buffer_readback_with_command_list(buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
+ for (j = 0; j < ARRAY_SIZE(tests[i].expected_data); ++j)
+ {
+ value = get_readback_uint(&rb, j, 0, 0);
+ ok(value == tests[i].expected_data[j], "Test %u: Got 0x%08x, expected 0x%08x at %u.\n",
+ i, value, tests[i].expected_data[j], j);
+ }
+ release_resource_readback(&rb);
+ reset_command_list(command_list, context.allocator);
+ transition_resource_state(command_list, buffer,
+ D3D12_RESOURCE_STATE_COPY_SOURCE, D3D12_RESOURCE_STATE_COPY_DEST);
+ }
+
+ ID3D12Resource_Release(buffer);
+ destroy_test_context(&context);
+}
+
static void test_discard_instruction(void)
{
ID3D12PipelineState *pso_discard_nz, *pso_discard_z;
@@ -20261,6 +20447,7 @@ START_TEST(d3d12)
run_test(test_map_resource);
run_test(test_bundle_state_inheritance);
run_test(test_shader_instructions);
+ run_test(test_compute_shader_instructions);
run_test(test_discard_instruction);
run_test(test_shader_interstage_interface);
run_test(test_incompletely_initialized_shader_outputs);
--
2.16.4
Oct. 1, 2018
Re: [PATCH 1/3] user32/tests: Add a test for custom dialog control data.
by Dmitry Timoshkov
Marvin <testbot(a)winehq.org> wrote:
> === build (build log) ===
>
> Makefile:805: recipe for target 'user32_test.exe' failed
> Makefile:7471: recipe for target 'dlls/user32/tests' failed
> Task: The exe32 Wine crossbuild failed
>
> === debian9 (build log) ===
That's exactly what I meant with upgrading binutils.
--
Dmitry.
Oct. 1, 2018
Re: [PATCH 3/3] user32: Fix the pointer to custom dialog control data.
by Marvin
Hi,
While running your changed tests on Windows, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=42736
Your paranoid android.
=== build (build log) ===
Makefile:805: recipe for target 'user32_test.exe' failed
Makefile:7471: recipe for target 'dlls/user32/tests' failed
Task: The exe32 Wine crossbuild failed
Oct. 1, 2018