vkd3d: Simplify meta operation API a bit.

Passing the main struct to the public functions allows us
to share common data between multiple types of operations.

Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
This commit is contained in:
Philip Rebohle 2020-04-21 15:15:16 +02:00 committed by Hans-Kristian Arntzen
parent 082999fd71
commit e74a48cdc6
3 changed files with 23 additions and 21 deletions

View File

@ -5083,10 +5083,10 @@ static void d3d12_command_list_clear_uav(struct d3d12_command_list *list,
layer_count = view->info.texture.vk_view_type == VK_IMAGE_VIEW_TYPE_3D
? d3d12_resource_desc_get_depth(&resource->desc, miplevel_idx)
: view->info.texture.layer_count;
pipeline = vkd3d_clear_uav_ops_get_clear_image_pipeline(
&list->device->meta_ops.clear_uav, view->info.texture.vk_view_type,
pipeline = vkd3d_meta_get_clear_image_uav_pipeline(
&list->device->meta_ops, view->info.texture.vk_view_type,
view->format->type == VKD3D_FORMAT_TYPE_UINT);
workgroup_size = vkd3d_get_clear_image_uav_workgroup_size(view->info.texture.vk_view_type);
workgroup_size = vkd3d_meta_get_clear_image_uav_workgroup_size(view->info.texture.vk_view_type);
}
else
{
@ -5097,10 +5097,9 @@ static void d3d12_command_list_clear_uav(struct d3d12_command_list *list,
miplevel_idx = 0;
layer_count = 1;
pipeline = vkd3d_clear_uav_ops_get_clear_buffer_pipeline(
&list->device->meta_ops.clear_uav,
view->format->type == VKD3D_FORMAT_TYPE_UINT);
workgroup_size = vkd3d_get_clear_buffer_uav_workgroup_size();
pipeline = vkd3d_meta_get_clear_buffer_uav_pipeline(
&list->device->meta_ops, view->format->type == VKD3D_FORMAT_TYPE_UINT);
workgroup_size = vkd3d_meta_get_clear_buffer_uav_workgroup_size();
}
if (!(write_set.dstSet = d3d12_command_allocator_allocate_descriptor_set(

View File

@ -255,9 +255,10 @@ void vkd3d_clear_uav_ops_cleanup(struct vkd3d_clear_uav_ops *meta_clear_uav_ops,
}
}
struct vkd3d_clear_uav_pipeline vkd3d_clear_uav_ops_get_clear_buffer_pipeline(const struct vkd3d_clear_uav_ops *meta_clear_uav_ops,
struct vkd3d_clear_uav_pipeline vkd3d_meta_get_clear_buffer_uav_pipeline(struct vkd3d_meta_ops *meta_ops,
bool as_uint)
{
struct vkd3d_clear_uav_ops *meta_clear_uav_ops = &meta_ops->clear_uav;
struct vkd3d_clear_uav_pipeline info;
const struct vkd3d_clear_uav_pipelines *pipelines = as_uint
@ -270,9 +271,10 @@ struct vkd3d_clear_uav_pipeline vkd3d_clear_uav_ops_get_clear_buffer_pipeline(co
return info;
}
struct vkd3d_clear_uav_pipeline vkd3d_clear_uav_ops_get_clear_image_pipeline(const struct vkd3d_clear_uav_ops *meta_clear_uav_ops,
struct vkd3d_clear_uav_pipeline vkd3d_meta_get_clear_image_uav_pipeline(struct vkd3d_meta_ops *meta_ops,
VkImageViewType image_view_type, bool as_uint)
{
struct vkd3d_clear_uav_ops *meta_clear_uav_ops = &meta_ops->clear_uav;
struct vkd3d_clear_uav_pipeline info;
const struct vkd3d_clear_uav_pipelines *pipelines = as_uint
@ -307,7 +309,7 @@ struct vkd3d_clear_uav_pipeline vkd3d_clear_uav_ops_get_clear_image_pipeline(con
return info;
}
VkExtent3D vkd3d_get_clear_image_uav_workgroup_size(VkImageViewType view_type)
VkExtent3D vkd3d_meta_get_clear_image_uav_workgroup_size(VkImageViewType view_type)
{
switch (view_type)
{

View File

@ -1391,17 +1391,6 @@ HRESULT vkd3d_clear_uav_ops_init(struct vkd3d_clear_uav_ops *meta_clear_uav_ops,
struct d3d12_device *device) DECLSPEC_HIDDEN;
void vkd3d_clear_uav_ops_cleanup(struct vkd3d_clear_uav_ops *meta_clear_uav_ops,
struct d3d12_device *device) DECLSPEC_HIDDEN;
struct vkd3d_clear_uav_pipeline vkd3d_clear_uav_ops_get_clear_buffer_pipeline(const struct vkd3d_clear_uav_ops *meta_clear_uav_ops,
bool as_uint) DECLSPEC_HIDDEN;
struct vkd3d_clear_uav_pipeline vkd3d_clear_uav_ops_get_clear_image_pipeline(const struct vkd3d_clear_uav_ops *meta_clear_uav_ops,
VkImageViewType image_view_type, bool as_uint) DECLSPEC_HIDDEN;
VkExtent3D vkd3d_get_clear_image_uav_workgroup_size(VkImageViewType view_type) DECLSPEC_HIDDEN;
static inline VkExtent3D vkd3d_get_clear_buffer_uav_workgroup_size()
{
VkExtent3D result = { 128, 1, 1 };
return result;
}
struct vkd3d_meta_ops
{
@ -1411,6 +1400,18 @@ struct vkd3d_meta_ops
HRESULT vkd3d_meta_ops_init(struct vkd3d_meta_ops *meta_ops, struct d3d12_device *device) DECLSPEC_HIDDEN;
HRESULT vkd3d_meta_ops_cleanup(struct vkd3d_meta_ops *meta_ops, struct d3d12_device *device) DECLSPEC_HIDDEN;
struct vkd3d_clear_uav_pipeline vkd3d_meta_get_clear_buffer_uav_pipeline(struct vkd3d_meta_ops *meta_ops,
bool as_uint) DECLSPEC_HIDDEN;
struct vkd3d_clear_uav_pipeline vkd3d_meta_get_clear_image_uav_pipeline(struct vkd3d_meta_ops *meta_ops,
VkImageViewType image_view_type, bool as_uint) DECLSPEC_HIDDEN;
VkExtent3D vkd3d_meta_get_clear_image_uav_workgroup_size(VkImageViewType view_type) DECLSPEC_HIDDEN;
inline VkExtent3D vkd3d_meta_get_clear_buffer_uav_workgroup_size()
{
VkExtent3D result = { 128, 1, 1 };
return result;
}
struct vkd3d_physical_device_info
{
/* properties */