Jan Sikorski (@jsikorski) commented about dlls/d3d9/d3d9on12.c:
> + d3d9on12_ReturnUnderlyingResource,
> +};
> +
> +BOOL d3d9on12_init( struct d3d9on12 **d3d9on12, D3D9ON12_ARGS *override_list, UINT override_entries )
> +{
> + struct d3d9on12 *object;
> +
> + if (!override_list || !override_list->Enable9On12 || !override_entries)
> + {
> + *d3d9on12 = NULL;
> + return TRUE;
> + }
> +
> + if (!(object = calloc( 1, sizeof(*object) )))
> + return FALSE;
> + if (!(object->override_list = calloc( 1, sizeof(D3D9ON12_ARGS) )))
That's a bit odd: if we only care about the first entry, why not just store it in a static member? Or if we don't care about it, don't store it at all? To me, use of `calloc` here indicates an intention that I'm missing.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4915#note_64355
Jan Sikorski (@jsikorski) commented about dlls/d3d9/d3d9on12.c:
> +{
> + /* IUnknown */
> + d3d9on12_QueryInterface,
> + d3d9on12_AddRef,
> + d3d9on12_Release,
> + /* IDirect3DDevice9On12 */
> + d3d9on12_GetD3D12Device,
> + d3d9on12_UnwrapUnderlyingResource,
> + d3d9on12_ReturnUnderlyingResource,
> +};
> +
> +BOOL d3d9on12_init( struct d3d9on12 **d3d9on12, D3D9ON12_ARGS *override_list, UINT override_entries )
> +{
> + struct d3d9on12 *object;
> +
> + if (!override_list || !override_list->Enable9On12 || !override_entries)
Do we want to dereference the list before checking `override_entries`? I see that was changed previously, I'm not sure why, to me the current version is confusing and I don't see a test that justifies it.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4915#note_64353
Goes atop !681. The last 8 commits belong here.
--
v3: vkd3d-shader/spirv: Emit a warning if atomic RMW flags are unhandled.
vkd3d-shader/dxil: Implement the DXIL ATOMICRMW instruction.
vkd3d-shader/dxil: Implement DX instructions ThreadId, GroupId, ThreadIdInGroup and FlattenedThreadIdInGroup.
tests/shader-runner: Add TGSM tests.
vkd3d-shader/dxil: Emit an error if a constant code is unhandled.
vkd3d-shader/spirv: Support 64-bit register info component type in spirv_compiler_emit_load_reg().
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/707
Goes atop !681. The last 7 commits belong here.
--
v2: vkd3d-shader/spirv: Emit a warning if atomic RMW flags are unhandled.
vkd3d-shader/dxil: Implement the DXIL ATOMICRMW instruction.
vkd3d-shader/dxil: Implement DX instructions ThreadId, GroupId, ThreadIdInGroup and FlattenedThreadIdInGroup.
tests/shader-runner: Add TGSM tests.
vkd3d-shader/dxil: Emit an error if a constant code is unhandled.
vkd3d-shader/spirv: Do not assert if a TGSM store data register is not UINT.
vkd3d-shader/spirv: Do not assert if a TGSM load dst register is not UINT.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/707
~~This applies on top of !672, the last three commits belong here.~~
Here we compute additional "synthetic" loops that will be used to implement non-trivial forward edges using (possibly conditional) `break` instructions.
--
v3: vkd3d-shader/ir: Sort loop intervals.
vkd3d-shader/ir: Generate synthetic intervals for forward edges.
vkd3d-shader/ir: Compute loop as intervals of the block order.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/698