mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
vkd3d: Append CopyTileMappings() commands to the command queue op array.
This commit is contained in:
parent
3935e8647f
commit
3aa83e877d
Notes:
Alexandre Julliard
2023-06-27 23:33:57 +02:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/216
@ -6298,10 +6298,34 @@ static void STDMETHODCALLTYPE d3d12_command_queue_CopyTileMappings(ID3D12Command
|
|||||||
const D3D12_TILE_REGION_SIZE *region_size,
|
const D3D12_TILE_REGION_SIZE *region_size,
|
||||||
D3D12_TILE_MAPPING_FLAGS flags)
|
D3D12_TILE_MAPPING_FLAGS flags)
|
||||||
{
|
{
|
||||||
FIXME("iface %p, dst_resource %p, dst_region_start_coordinate %p, "
|
struct d3d12_resource *dst_resource_impl = impl_from_ID3D12Resource(dst_resource);
|
||||||
"src_resource %p, src_region_start_coordinate %p, region_size %p, flags %#x stub!\n",
|
struct d3d12_resource *src_resource_impl = impl_from_ID3D12Resource(src_resource);
|
||||||
|
struct d3d12_command_queue *command_queue = impl_from_ID3D12CommandQueue(iface);
|
||||||
|
struct vkd3d_cs_op_data *op;
|
||||||
|
|
||||||
|
TRACE("iface %p, dst_resource %p, dst_region_start_coordinate %p, "
|
||||||
|
"src_resource %p, src_region_start_coordinate %p, region_size %p, flags %#x.\n",
|
||||||
iface, dst_resource, dst_region_start_coordinate, src_resource,
|
iface, dst_resource, dst_region_start_coordinate, src_resource,
|
||||||
src_region_start_coordinate, region_size, flags);
|
src_region_start_coordinate, region_size, flags);
|
||||||
|
|
||||||
|
vkd3d_mutex_lock(&command_queue->op_mutex);
|
||||||
|
|
||||||
|
if (!(op = d3d12_command_queue_op_array_require_space(&command_queue->op_queue)))
|
||||||
|
{
|
||||||
|
ERR("Failed to add op.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
op->opcode = VKD3D_CS_OP_COPY_MAPPINGS;
|
||||||
|
op->u.copy_mappings.dst_resource = dst_resource_impl;
|
||||||
|
op->u.copy_mappings.src_resource = src_resource_impl;
|
||||||
|
op->u.copy_mappings.dst_region_start_coordinate = *dst_region_start_coordinate;
|
||||||
|
op->u.copy_mappings.src_region_start_coordinate = *src_region_start_coordinate;
|
||||||
|
op->u.copy_mappings.region_size = *region_size;
|
||||||
|
op->u.copy_mappings.flags = flags;
|
||||||
|
|
||||||
|
d3d12_command_queue_submit_locked(command_queue);
|
||||||
|
|
||||||
|
vkd3d_mutex_unlock(&command_queue->op_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void d3d12_command_queue_execute(struct d3d12_command_queue *command_queue,
|
static void d3d12_command_queue_execute(struct d3d12_command_queue *command_queue,
|
||||||
@ -7054,6 +7078,10 @@ static HRESULT d3d12_command_queue_flush_ops_locked(struct d3d12_command_queue *
|
|||||||
update_mappings_cleanup(&op->u.update_mappings);
|
update_mappings_cleanup(&op->u.update_mappings);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case VKD3D_CS_OP_COPY_MAPPINGS:
|
||||||
|
FIXME("Tiled resource mapping copying is not supported yet.\n");
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
vkd3d_unreachable();
|
vkd3d_unreachable();
|
||||||
}
|
}
|
||||||
|
@ -1063,11 +1063,6 @@ static void d3d12_resource_init_tiles(struct d3d12_resource *resource)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ID3D12Resource */
|
/* ID3D12Resource */
|
||||||
static inline struct d3d12_resource *impl_from_ID3D12Resource(ID3D12Resource *iface)
|
|
||||||
{
|
|
||||||
return CONTAINING_RECORD(iface, struct d3d12_resource, ID3D12Resource_iface);
|
|
||||||
}
|
|
||||||
|
|
||||||
static HRESULT STDMETHODCALLTYPE d3d12_resource_QueryInterface(ID3D12Resource *iface,
|
static HRESULT STDMETHODCALLTYPE d3d12_resource_QueryInterface(ID3D12Resource *iface,
|
||||||
REFIID riid, void **object)
|
REFIID riid, void **object)
|
||||||
{
|
{
|
||||||
|
@ -711,6 +711,11 @@ struct d3d12_resource
|
|||||||
struct vkd3d_private_store private_store;
|
struct vkd3d_private_store private_store;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline struct d3d12_resource *impl_from_ID3D12Resource(ID3D12Resource *iface)
|
||||||
|
{
|
||||||
|
return CONTAINING_RECORD(iface, struct d3d12_resource, ID3D12Resource_iface);
|
||||||
|
}
|
||||||
|
|
||||||
static inline bool d3d12_resource_is_buffer(const struct d3d12_resource *resource)
|
static inline bool d3d12_resource_is_buffer(const struct d3d12_resource *resource)
|
||||||
{
|
{
|
||||||
return resource->desc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER;
|
return resource->desc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER;
|
||||||
@ -1465,6 +1470,7 @@ enum vkd3d_cs_op
|
|||||||
VKD3D_CS_OP_SIGNAL,
|
VKD3D_CS_OP_SIGNAL,
|
||||||
VKD3D_CS_OP_EXECUTE,
|
VKD3D_CS_OP_EXECUTE,
|
||||||
VKD3D_CS_OP_UPDATE_MAPPINGS,
|
VKD3D_CS_OP_UPDATE_MAPPINGS,
|
||||||
|
VKD3D_CS_OP_COPY_MAPPINGS,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct vkd3d_cs_wait
|
struct vkd3d_cs_wait
|
||||||
@ -1499,6 +1505,16 @@ struct vkd3d_cs_update_mappings
|
|||||||
D3D12_TILE_MAPPING_FLAGS flags;
|
D3D12_TILE_MAPPING_FLAGS flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct vkd3d_cs_copy_mappings
|
||||||
|
{
|
||||||
|
struct d3d12_resource *dst_resource;
|
||||||
|
struct d3d12_resource *src_resource;
|
||||||
|
D3D12_TILED_RESOURCE_COORDINATE dst_region_start_coordinate;
|
||||||
|
D3D12_TILED_RESOURCE_COORDINATE src_region_start_coordinate;
|
||||||
|
D3D12_TILE_REGION_SIZE region_size;
|
||||||
|
D3D12_TILE_MAPPING_FLAGS flags;
|
||||||
|
};
|
||||||
|
|
||||||
struct vkd3d_cs_op_data
|
struct vkd3d_cs_op_data
|
||||||
{
|
{
|
||||||
enum vkd3d_cs_op opcode;
|
enum vkd3d_cs_op opcode;
|
||||||
@ -1508,6 +1524,7 @@ struct vkd3d_cs_op_data
|
|||||||
struct vkd3d_cs_signal signal;
|
struct vkd3d_cs_signal signal;
|
||||||
struct vkd3d_cs_execute execute;
|
struct vkd3d_cs_execute execute;
|
||||||
struct vkd3d_cs_update_mappings update_mappings;
|
struct vkd3d_cs_update_mappings update_mappings;
|
||||||
|
struct vkd3d_cs_copy_mappings copy_mappings;
|
||||||
} u;
|
} u;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user