Zebediah Figura : vkd3d-shader: Use a table to initialize predefined effect types.
Alexandre Julliard
julliard at winehq.org
Wed Feb 10 15:32:47 CST 2021
Module: vkd3d
Branch: master
Commit: af47cc5b5371fbcebff8740b79e73585533d9382
URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=af47cc5b5371fbcebff8740b79e73585533d9382
Author: Zebediah Figura <zfigura at codeweavers.com>
Date: Thu Feb 4 16:33:51 2021 -0600
vkd3d-shader: Use a table to initialize predefined effect types.
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
libs/vkd3d-shader/hlsl.c | 45 +++++++++++++++++++++++++++------------------
1 file changed, 27 insertions(+), 18 deletions(-)
diff --git a/libs/vkd3d-shader/hlsl.c b/libs/vkd3d-shader/hlsl.c
index e3d1110..43072c2 100644
--- a/libs/vkd3d-shader/hlsl.c
+++ b/libs/vkd3d-shader/hlsl.c
@@ -1378,8 +1378,9 @@ static int compare_function_rb(const void *key, const struct rb_entry *entry)
static void declare_predefined_types(struct hlsl_scope *scope)
{
+ unsigned int x, y, bt, i;
struct hlsl_type *type;
- unsigned int x, y, bt;
+
static const char * const names[] =
{
"float",
@@ -1400,6 +1401,25 @@ static void declare_predefined_types(struct hlsl_scope *scope)
"samplerCUBE"
};
+ static const struct
+ {
+ char name[13];
+ enum hlsl_type_class class;
+ enum hlsl_base_type base_type;
+ unsigned int dimx, dimy;
+ }
+ effect_types[] =
+ {
+ {"DWORD", HLSL_CLASS_SCALAR, HLSL_TYPE_INT, 1, 1},
+ {"FLOAT", HLSL_CLASS_SCALAR, HLSL_TYPE_FLOAT, 1, 1},
+ {"VECTOR", HLSL_CLASS_VECTOR, HLSL_TYPE_FLOAT, 4, 1},
+ {"MATRIX", HLSL_CLASS_MATRIX, HLSL_TYPE_FLOAT, 4, 4},
+ {"STRING", HLSL_CLASS_OBJECT, HLSL_TYPE_STRING, 1, 1},
+ {"TEXTURE", HLSL_CLASS_OBJECT, HLSL_TYPE_TEXTURE, 1, 1},
+ {"PIXELSHADER", HLSL_CLASS_OBJECT, HLSL_TYPE_PIXELSHADER, 1, 1},
+ {"VERTEXSHADER", HLSL_CLASS_OBJECT, HLSL_TYPE_VERTEXSHADER, 1, 1},
+ };
+
for (bt = 0; bt <= HLSL_TYPE_LAST_SCALAR; ++bt)
{
for (y = 1; y <= 4; ++y)
@@ -1438,23 +1458,12 @@ static void declare_predefined_types(struct hlsl_scope *scope)
hlsl_ctx.builtin_types.Void = hlsl_new_type(vkd3d_strdup("void"), HLSL_CLASS_OBJECT, HLSL_TYPE_VOID, 1, 1);
- /* DX8 effects predefined types */
- type = hlsl_new_type(vkd3d_strdup("DWORD"), HLSL_CLASS_SCALAR, HLSL_TYPE_INT, 1, 1);
- hlsl_scope_add_type(scope, type);
- type = hlsl_new_type(vkd3d_strdup("FLOAT"), HLSL_CLASS_SCALAR, HLSL_TYPE_FLOAT, 1, 1);
- hlsl_scope_add_type(scope, type);
- type = hlsl_new_type(vkd3d_strdup("VECTOR"), HLSL_CLASS_VECTOR, HLSL_TYPE_FLOAT, 4, 1);
- hlsl_scope_add_type(scope, type);
- type = hlsl_new_type(vkd3d_strdup("MATRIX"), HLSL_CLASS_MATRIX, HLSL_TYPE_FLOAT, 4, 4);
- hlsl_scope_add_type(scope, type);
- type = hlsl_new_type(vkd3d_strdup("STRING"), HLSL_CLASS_OBJECT, HLSL_TYPE_STRING, 1, 1);
- hlsl_scope_add_type(scope, type);
- type = hlsl_new_type(vkd3d_strdup("TEXTURE"), HLSL_CLASS_OBJECT, HLSL_TYPE_TEXTURE, 1, 1);
- hlsl_scope_add_type(scope, type);
- type = hlsl_new_type(vkd3d_strdup("PIXELSHADER"), HLSL_CLASS_OBJECT, HLSL_TYPE_PIXELSHADER, 1, 1);
- hlsl_scope_add_type(scope, type);
- type = hlsl_new_type(vkd3d_strdup("VERTEXSHADER"), HLSL_CLASS_OBJECT, HLSL_TYPE_VERTEXSHADER, 1, 1);
- hlsl_scope_add_type(scope, type);
+ for (i = 0; i < ARRAY_SIZE(effect_types); ++i)
+ {
+ type = hlsl_new_type(vkd3d_strdup(effect_types[i].name), effect_types[i].class,
+ effect_types[i].base_type, effect_types[i].dimx, effect_types[i].dimy);
+ hlsl_scope_add_type(scope, type);
+ }
}
static bool hlsl_ctx_init(struct hlsl_parse_ctx *ctx, struct vkd3d_shader_message_context *message_context)
More information about the wine-cvs
mailing list