Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wined3d/stateblock.c | 20 ++++++++++++++++++++ dlls/wined3d/wined3d.spec | 1 + include/wine/wined3d.h | 2 ++ 3 files changed, 23 insertions(+)
diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c index 97ef422f5ae..e056ace2132 100644 --- a/dlls/wined3d/stateblock.c +++ b/dlls/wined3d/stateblock.c @@ -1288,6 +1288,26 @@ HRESULT CDECL wined3d_stateblock_set_vs_consts_f(struct wined3d_stateblock *stat return WINED3D_OK; }
+HRESULT CDECL wined3d_stateblock_set_vs_consts_i(struct wined3d_stateblock *stateblock, + unsigned int start_idx, unsigned int count, const struct wined3d_ivec4 *constants) +{ + unsigned int i; + + TRACE("stateblock %p, start_idx %u, count %u, constants %p.\n", + stateblock, start_idx, count, constants); + + if (!constants || start_idx >= WINED3D_MAX_CONSTS_I) + return WINED3DERR_INVALIDCALL; + + if (count > WINED3D_MAX_CONSTS_I - start_idx) + count = WINED3D_MAX_CONSTS_I - start_idx; + + memcpy(&stateblock->stateblock_state.vs_consts_i[start_idx], constants, count * sizeof(*constants)); + for (i = start_idx; i < count + start_idx; ++i) + stateblock->changed.vertexShaderConstantsI |= (1u << i); + return WINED3D_OK; +} + static void init_default_render_states(DWORD rs[WINEHIGHEST_RENDER_STATE + 1], const struct wined3d_d3d_info *d3d_info) { union diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index a0d9864018e..abfbaa7e408 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -259,6 +259,7 @@ @ cdecl wined3d_stateblock_decref(ptr) @ cdecl wined3d_stateblock_incref(ptr) @ cdecl wined3d_stateblock_set_vs_consts_f(ptr long long ptr) +@ cdecl wined3d_stateblock_set_vs_consts_i(ptr long long ptr)
@ cdecl wined3d_swapchain_create(ptr ptr ptr ptr ptr) @ cdecl wined3d_swapchain_decref(ptr) diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 4543b882ace..2ad28a3345a 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2662,6 +2662,8 @@ ULONG __cdecl wined3d_stateblock_decref(struct wined3d_stateblock *stateblock); ULONG __cdecl wined3d_stateblock_incref(struct wined3d_stateblock *stateblock); HRESULT __cdecl wined3d_stateblock_set_vs_consts_f(struct wined3d_stateblock *stateblock, unsigned int start_idx, unsigned int count, const struct wined3d_vec4 *constants); +HRESULT __cdecl wined3d_stateblock_set_vs_consts_i(struct wined3d_stateblock *stateblock, + unsigned int start_idx, unsigned int count, const struct wined3d_ivec4 *constants);
HRESULT __cdecl wined3d_swapchain_create(struct wined3d_device *device, struct wined3d_swapchain_desc *desc, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_swapchain **swapchain);
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/d3d9/device.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c index 8436967ddd3..8228d07ab35 100644 --- a/dlls/d3d9/device.c +++ b/dlls/d3d9/device.c @@ -3515,8 +3515,11 @@ static HRESULT WINAPI d3d9_device_SetVertexShaderConstantI(IDirect3DDevice9Ex *i TRACE("iface %p, reg_idx %u, data %p, count %u.\n", iface, reg_idx, data, count);
wined3d_mutex_lock(); - hr = wined3d_device_set_vs_consts_i(device->wined3d_device, + hr = wined3d_stateblock_set_vs_consts_i(device->update_state, reg_idx, count, (const struct wined3d_ivec4 *)data); + if (SUCCEEDED(hr) && !device->recording) + hr = wined3d_device_set_vs_consts_i(device->wined3d_device, + reg_idx, count, (const struct wined3d_ivec4 *)data); wined3d_mutex_unlock();
return hr;
Hi,
While running your changed tests, 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=57017
Your paranoid android.
=== debian10 (32 bit report) ===
Report errors: d3d9:d3d9ex has unaccounted for skip messages
=== debian10 (build log) ===
X Error of failed request: BadMatch (invalid parameter attributes) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 7 (RRSetScreenSize) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode)
=== debian10 (32 bit WoW report) ===
Report errors: d3d9:d3d9ex has unaccounted for skip messages
=== debian10 (build log) ===
X Error of failed request: BadMatch (invalid parameter attributes) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 7 (RRSetScreenSize) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode)
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wined3d/stateblock.c | 20 ++++++++++++++++++++ dlls/wined3d/wined3d.spec | 1 + include/wine/wined3d.h | 2 ++ 3 files changed, 23 insertions(+)
diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c index e056ace2132..dfe6ab47c76 100644 --- a/dlls/wined3d/stateblock.c +++ b/dlls/wined3d/stateblock.c @@ -1308,6 +1308,26 @@ HRESULT CDECL wined3d_stateblock_set_vs_consts_i(struct wined3d_stateblock *stat return WINED3D_OK; }
+HRESULT CDECL wined3d_stateblock_set_vs_consts_b(struct wined3d_stateblock *stateblock, + unsigned int start_idx, unsigned int count, const BOOL *constants) +{ + unsigned int i; + + TRACE("stateblock %p, start_idx %u, count %u, constants %p.\n", + stateblock, start_idx, count, constants); + + if (!constants || start_idx >= WINED3D_MAX_CONSTS_B) + return WINED3DERR_INVALIDCALL; + + if (count > WINED3D_MAX_CONSTS_B - start_idx) + count = WINED3D_MAX_CONSTS_B - start_idx; + + memcpy(&stateblock->stateblock_state.vs_consts_b[start_idx], constants, count * sizeof(*constants)); + for (i = start_idx; i < count + start_idx; ++i) + stateblock->changed.vertexShaderConstantsB |= (1u << i); + return WINED3D_OK; +} + static void init_default_render_states(DWORD rs[WINEHIGHEST_RENDER_STATE + 1], const struct wined3d_d3d_info *d3d_info) { union diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index abfbaa7e408..f88da75306a 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -258,6 +258,7 @@ @ cdecl wined3d_stateblock_create(ptr long ptr) @ cdecl wined3d_stateblock_decref(ptr) @ cdecl wined3d_stateblock_incref(ptr) +@ cdecl wined3d_stateblock_set_vs_consts_b(ptr long long ptr) @ cdecl wined3d_stateblock_set_vs_consts_f(ptr long long ptr) @ cdecl wined3d_stateblock_set_vs_consts_i(ptr long long ptr)
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 2ad28a3345a..3a06f650aac 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2660,6 +2660,8 @@ HRESULT __cdecl wined3d_stateblock_create(struct wined3d_device *device, enum wined3d_stateblock_type type, struct wined3d_stateblock **stateblock); ULONG __cdecl wined3d_stateblock_decref(struct wined3d_stateblock *stateblock); ULONG __cdecl wined3d_stateblock_incref(struct wined3d_stateblock *stateblock); +HRESULT __cdecl wined3d_stateblock_set_vs_consts_b(struct wined3d_stateblock *stateblock, + unsigned int start_idx, unsigned int count, const BOOL *constants); HRESULT __cdecl wined3d_stateblock_set_vs_consts_f(struct wined3d_stateblock *stateblock, unsigned int start_idx, unsigned int count, const struct wined3d_vec4 *constants); HRESULT __cdecl wined3d_stateblock_set_vs_consts_i(struct wined3d_stateblock *stateblock,
Hi,
While running your changed tests, 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=57018
Your paranoid android.
=== debian10 (32 bit report) ===
Report errors: d3d9:d3d9ex has unaccounted for skip messages
=== debian10 (build log) ===
X Error of failed request: BadMatch (invalid parameter attributes) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 7 (RRSetScreenSize) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode)
=== debian10 (32 bit WoW report) ===
Report errors: d3d9:d3d9ex has unaccounted for skip messages
=== debian10 (build log) ===
X Error of failed request: BadMatch (invalid parameter attributes) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 7 (RRSetScreenSize) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode)
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/d3d9/device.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c index 8228d07ab35..faf4cb7ea6d 100644 --- a/dlls/d3d9/device.c +++ b/dlls/d3d9/device.c @@ -3550,7 +3550,9 @@ static HRESULT WINAPI d3d9_device_SetVertexShaderConstantB(IDirect3DDevice9Ex *i TRACE("iface %p, reg_idx %u, data %p, count %u.\n", iface, reg_idx, data, count);
wined3d_mutex_lock(); - hr = wined3d_device_set_vs_consts_b(device->wined3d_device, reg_idx, count, data); + hr = wined3d_stateblock_set_vs_consts_b(device->update_state, reg_idx, count, data); + if (SUCCEEDED(hr) && !device->recording) + hr = wined3d_device_set_vs_consts_b(device->wined3d_device, reg_idx, count, data); wined3d_mutex_unlock();
return hr;
Hi,
While running your changed tests, 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=57019
Your paranoid android.
=== debian10 (32 bit report) ===
Report errors: d3d9:d3d9ex has unaccounted for skip messages
=== debian10 (build log) ===
X Error of failed request: BadMatch (invalid parameter attributes) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 7 (RRSetScreenSize) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode)
=== debian10 (32 bit WoW report) ===
Report errors: d3d9:d3d9ex has unaccounted for skip messages
=== debian10 (build log) ===
X Error of failed request: BadMatch (invalid parameter attributes) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 7 (RRSetScreenSize) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 151 (XFree86-VidModeExtension) Minor opcode of failed request: 10 (XF86VidModeSwitchToMode)
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com