[PATCH vkd3d 2/5] vkd3d-shader: Report descriptor resource types in vkd3d_shader_scan_dxbc().
Henri Verbeet
hverbeet at codeweavers.com
Thu Jun 25 01:18:25 CDT 2020
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
include/vkd3d_shader.h | 30 +++++++++++++++++++++
libs/vkd3d-shader/vkd3d_shader_main.c | 45 ++++++++++++++++++++++++++------
libs/vkd3d-shader/vkd3d_shader_private.h | 15 -----------
3 files changed, 67 insertions(+), 23 deletions(-)
diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h
index b2fa499..ea1944e 100644
--- a/include/vkd3d_shader.h
+++ b/include/vkd3d_shader.h
@@ -585,11 +585,41 @@ struct vkd3d_versioned_root_signature_desc
/* FIXME: Add support for 64 UAV bind slots. */
#define VKD3D_SHADER_MAX_UNORDERED_ACCESS_VIEWS 8
+enum vkd3d_shader_resource_type
+{
+ VKD3D_SHADER_RESOURCE_NONE = 0x0,
+ VKD3D_SHADER_RESOURCE_BUFFER = 0x1,
+ VKD3D_SHADER_RESOURCE_TEXTURE_1D = 0x2,
+ VKD3D_SHADER_RESOURCE_TEXTURE_2D = 0x3,
+ VKD3D_SHADER_RESOURCE_TEXTURE_2DMS = 0x4,
+ VKD3D_SHADER_RESOURCE_TEXTURE_3D = 0x5,
+ VKD3D_SHADER_RESOURCE_TEXTURE_CUBE = 0x6,
+ VKD3D_SHADER_RESOURCE_TEXTURE_1DARRAY = 0x7,
+ VKD3D_SHADER_RESOURCE_TEXTURE_2DARRAY = 0x8,
+ VKD3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY = 0x9,
+ VKD3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY = 0xa,
+
+ VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_RESOURCE_TYPE),
+};
+
+enum vkd3d_shader_resource_data_type
+{
+ VKD3D_SHADER_RESOURCE_DATA_UNORM = 0x1,
+ VKD3D_SHADER_RESOURCE_DATA_SNORM = 0x2,
+ VKD3D_SHADER_RESOURCE_DATA_INT = 0x3,
+ VKD3D_SHADER_RESOURCE_DATA_UINT = 0x4,
+ VKD3D_SHADER_RESOURCE_DATA_FLOAT = 0x5,
+
+ VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_RESOURCE_DATA_TYPE),
+};
+
struct vkd3d_shader_descriptor_info
{
enum vkd3d_shader_descriptor_type type;
unsigned int register_space;
unsigned int register_index;
+ enum vkd3d_shader_resource_type resource_type;
+ enum vkd3d_shader_resource_data_type resource_data_type;
unsigned int count;
};
diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c
index 45a7a80..aa401d0 100644
--- a/libs/vkd3d-shader/vkd3d_shader_main.c
+++ b/libs/vkd3d-shader/vkd3d_shader_main.c
@@ -229,7 +229,8 @@ static void vkd3d_shader_scan_record_uav_counter(struct vkd3d_shader_scan_info *
}
static bool vkd3d_shader_scan_add_descriptor(struct vkd3d_shader_scan_context *context,
- enum vkd3d_shader_descriptor_type type, unsigned int register_space, unsigned int register_index)
+ enum vkd3d_shader_descriptor_type type, unsigned int register_space, unsigned int register_index,
+ enum vkd3d_shader_resource_type resource_type, enum vkd3d_shader_resource_data_type resource_data_type)
{
struct vkd3d_shader_scan_info *scan_info = context->scan_info;
struct vkd3d_shader_descriptor_info *d;
@@ -245,6 +246,8 @@ static bool vkd3d_shader_scan_add_descriptor(struct vkd3d_shader_scan_context *c
d->type = type;
d->register_space = register_space;
d->register_index = register_index;
+ d->resource_type = resource_type;
+ d->resource_data_type = resource_data_type;
d->count = 1;
++scan_info->descriptor_count;
@@ -256,8 +259,8 @@ static void vkd3d_shader_scan_constant_buffer_declaration(struct vkd3d_shader_sc
{
const struct vkd3d_shader_constant_buffer *cb = &instruction->declaration.cb;
- vkd3d_shader_scan_add_descriptor(context, VKD3D_SHADER_DESCRIPTOR_TYPE_CBV,
- cb->register_space, cb->register_index);
+ vkd3d_shader_scan_add_descriptor(context, VKD3D_SHADER_DESCRIPTOR_TYPE_CBV, cb->register_space,
+ cb->register_index, VKD3D_SHADER_RESOURCE_BUFFER, VKD3D_SHADER_RESOURCE_DATA_UINT);
}
static void vkd3d_shader_scan_input_declaration(struct vkd3d_shader_scan_info *scan_info,
@@ -282,21 +285,45 @@ static void vkd3d_shader_scan_sampler_declaration(struct vkd3d_shader_scan_conte
scan_info->sampler_comparison_mode_mask |= 1u << sampler_index;
}
- vkd3d_shader_scan_add_descriptor(context, VKD3D_SHADER_DESCRIPTOR_TYPE_SAMPLER,
- sampler->register_space, sampler->register_index);
+ vkd3d_shader_scan_add_descriptor(context, VKD3D_SHADER_DESCRIPTOR_TYPE_SAMPLER, sampler->register_space,
+ sampler->register_index, VKD3D_SHADER_RESOURCE_NONE, VKD3D_SHADER_RESOURCE_DATA_UINT);
}
static void vkd3d_shader_scan_resource_declaration(struct vkd3d_shader_scan_context *context,
const struct vkd3d_shader_instruction *instruction)
{
const struct vkd3d_shader_semantic *semantic = &instruction->declaration.semantic;
+ enum vkd3d_shader_resource_data_type resource_data_type;
enum vkd3d_shader_descriptor_type type;
if (semantic->reg.reg.type == VKD3DSPR_UAV)
type = VKD3D_SHADER_DESCRIPTOR_TYPE_UAV;
else
type = VKD3D_SHADER_DESCRIPTOR_TYPE_SRV;
- vkd3d_shader_scan_add_descriptor(context, type, semantic->register_space, semantic->register_index);
+ switch (semantic->resource_data_type)
+ {
+ case VKD3D_DATA_UNORM:
+ resource_data_type = VKD3D_SHADER_RESOURCE_DATA_UNORM;
+ break;
+ case VKD3D_DATA_SNORM:
+ resource_data_type = VKD3D_SHADER_RESOURCE_DATA_SNORM;
+ break;
+ case VKD3D_DATA_INT:
+ resource_data_type = VKD3D_SHADER_RESOURCE_DATA_INT;
+ break;
+ case VKD3D_DATA_UINT:
+ resource_data_type = VKD3D_SHADER_RESOURCE_DATA_UINT;
+ break;
+ case VKD3D_DATA_FLOAT:
+ resource_data_type = VKD3D_SHADER_RESOURCE_DATA_FLOAT;
+ break;
+ default:
+ ERR("Invalid resource data type %#x.\n", semantic->resource_data_type);
+ resource_data_type = VKD3D_SHADER_RESOURCE_DATA_FLOAT;
+ break;
+ }
+ vkd3d_shader_scan_add_descriptor(context, type, semantic->register_space,
+ semantic->register_index, semantic->resource_type, resource_data_type);
}
static void vkd3d_shader_scan_resource_declaration_raw(struct vkd3d_shader_scan_context *context,
@@ -309,7 +336,8 @@ static void vkd3d_shader_scan_resource_declaration_raw(struct vkd3d_shader_scan_
type = VKD3D_SHADER_DESCRIPTOR_TYPE_UAV;
else
type = VKD3D_SHADER_DESCRIPTOR_TYPE_SRV;
- vkd3d_shader_scan_add_descriptor(context, type, resource->register_space, resource->register_index);
+ vkd3d_shader_scan_add_descriptor(context, type, resource->register_space,
+ resource->register_index, VKD3D_SHADER_RESOURCE_BUFFER, VKD3D_SHADER_RESOURCE_DATA_UINT);
}
static void vkd3d_shader_scan_resource_declaration_structured(struct vkd3d_shader_scan_context *context,
@@ -322,7 +350,8 @@ static void vkd3d_shader_scan_resource_declaration_structured(struct vkd3d_shade
type = VKD3D_SHADER_DESCRIPTOR_TYPE_UAV;
else
type = VKD3D_SHADER_DESCRIPTOR_TYPE_SRV;
- vkd3d_shader_scan_add_descriptor(context, type, resource->register_space, resource->register_index);
+ vkd3d_shader_scan_add_descriptor(context, type, resource->register_space,
+ resource->register_index, VKD3D_SHADER_RESOURCE_BUFFER, VKD3D_SHADER_RESOURCE_DATA_UINT);
}
static void vkd3d_shader_scan_instruction(struct vkd3d_shader_scan_context *context,
diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
index dfbbdfd..a9a0c52 100644
--- a/libs/vkd3d-shader/vkd3d_shader_private.h
+++ b/libs/vkd3d-shader/vkd3d_shader_private.h
@@ -361,21 +361,6 @@ enum vkd3d_shader_register_type
VKD3DSPR_INVALID = ~0u,
};
-enum vkd3d_shader_resource_type
-{
- VKD3D_SHADER_RESOURCE_NONE,
- VKD3D_SHADER_RESOURCE_BUFFER,
- VKD3D_SHADER_RESOURCE_TEXTURE_1D,
- VKD3D_SHADER_RESOURCE_TEXTURE_2D,
- VKD3D_SHADER_RESOURCE_TEXTURE_2DMS,
- VKD3D_SHADER_RESOURCE_TEXTURE_3D,
- VKD3D_SHADER_RESOURCE_TEXTURE_CUBE,
- VKD3D_SHADER_RESOURCE_TEXTURE_1DARRAY,
- VKD3D_SHADER_RESOURCE_TEXTURE_2DARRAY,
- VKD3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY,
- VKD3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY,
-};
-
enum vkd3d_data_type
{
VKD3D_DATA_FLOAT,
--
2.11.0
More information about the wine-devel
mailing list