vkd3d-shader: Add helpers to deal with sparse instruction results.

OpImageSparse* operations return a struct containing a status value
and the sampled value, so we need to take it apart when storing results.

Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
This commit is contained in:
Philip Rebohle 2020-05-09 12:53:41 +02:00 committed by Hans-Kristian Arntzen
parent 26f6e59f3e
commit 277f731bd7
1 changed files with 16 additions and 0 deletions

View File

@ -1693,6 +1693,22 @@ static uint32_t vkd3d_spirv_get_type_id(struct vkd3d_spirv_builder *builder,
}
}
static uint32_t vkd3d_spirv_get_sparse_result_type(struct vkd3d_spirv_builder *builder, uint32_t sampled_type_id)
{
uint32_t members[2];
members[0] = vkd3d_spirv_get_type_id(builder, VKD3D_TYPE_UINT, 1);
members[1] = sampled_type_id;
return vkd3d_spirv_get_op_type_struct(builder, members, ARRAY_SIZE(members));
}
static void vkd3d_spirv_decompose_sparse_result(struct vkd3d_spirv_builder *builder,
uint32_t result_type, uint32_t val_id, uint32_t *result_id, uint32_t *status_id)
{
uint32_t uint_type_id = vkd3d_spirv_get_type_id(builder, VKD3D_TYPE_UINT, 1);
*status_id = vkd3d_spirv_build_op_composite_extract1(builder, uint_type_id, val_id, 0);
*result_id = vkd3d_spirv_build_op_composite_extract1(builder, result_type, val_id, 1);
}
static void vkd3d_spirv_builder_init(struct vkd3d_spirv_builder *builder)
{
vkd3d_spirv_stream_init(&builder->debug_stream);