mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-15 01:02:17 +00:00
d3dcompiler: Allow hlsl_ir_constant to contain only scalar and vector constants.
We only emit scalar constants at parse time, and while there's certainly an advantage to vectorizing constant instructions, there's not much point in having hlsl_ir_constant hold matrices. Matrices should be lowered to vector operations first. Signed-off-by: Zebediah Figura <zfigura@codeweavers.com> Signed-off-by: Matteo Bruni <mbruni@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
6bae008f55
commit
2ccf1db285
|
@ -874,11 +874,11 @@ struct hlsl_ir_constant
|
||||||
struct hlsl_ir_node node;
|
struct hlsl_ir_node node;
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
unsigned u[16];
|
unsigned u[4];
|
||||||
int i[16];
|
int i[4];
|
||||||
float f[16];
|
float f[4];
|
||||||
double d[16];
|
double d[4];
|
||||||
BOOL b[16];
|
BOOL b[4];
|
||||||
} value;
|
} value;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1823,41 +1823,34 @@ static void debug_dump_deref(const struct hlsl_deref *deref)
|
||||||
static void debug_dump_ir_constant(const struct hlsl_ir_constant *constant)
|
static void debug_dump_ir_constant(const struct hlsl_ir_constant *constant)
|
||||||
{
|
{
|
||||||
struct hlsl_type *type = constant->node.data_type;
|
struct hlsl_type *type = constant->node.data_type;
|
||||||
unsigned int x, y;
|
unsigned int x;
|
||||||
|
|
||||||
if (type->dimy != 1)
|
if (type->dimx != 1)
|
||||||
wine_dbg_printf("{");
|
wine_dbg_printf("{");
|
||||||
for (y = 0; y < type->dimy; ++y)
|
for (x = 0; x < type->dimx; ++x)
|
||||||
{
|
{
|
||||||
if (type->dimx != 1)
|
switch (type->base_type)
|
||||||
wine_dbg_printf("{");
|
|
||||||
for (x = 0; x < type->dimx; ++x)
|
|
||||||
{
|
{
|
||||||
switch (type->base_type)
|
case HLSL_TYPE_FLOAT:
|
||||||
{
|
wine_dbg_printf("%.8e ", constant->value.f[x]);
|
||||||
case HLSL_TYPE_FLOAT:
|
break;
|
||||||
wine_dbg_printf("%.8e ", constant->value.f[y * type->dimx + x]);
|
case HLSL_TYPE_DOUBLE:
|
||||||
break;
|
wine_dbg_printf("%.16e ", constant->value.d[x]);
|
||||||
case HLSL_TYPE_DOUBLE:
|
break;
|
||||||
wine_dbg_printf("%.16e ", constant->value.d[y * type->dimx + x]);
|
case HLSL_TYPE_INT:
|
||||||
break;
|
wine_dbg_printf("%d ", constant->value.i[x]);
|
||||||
case HLSL_TYPE_INT:
|
break;
|
||||||
wine_dbg_printf("%d ", constant->value.i[y * type->dimx + x]);
|
case HLSL_TYPE_UINT:
|
||||||
break;
|
wine_dbg_printf("%u ", constant->value.u[x]);
|
||||||
case HLSL_TYPE_UINT:
|
break;
|
||||||
wine_dbg_printf("%u ", constant->value.u[y * type->dimx + x]);
|
case HLSL_TYPE_BOOL:
|
||||||
break;
|
wine_dbg_printf("%s ", constant->value.b[x] ? "true" : "false");
|
||||||
case HLSL_TYPE_BOOL:
|
break;
|
||||||
wine_dbg_printf("%s ", constant->value.b[y * type->dimx + x] == FALSE ? "false" : "true");
|
default:
|
||||||
break;
|
wine_dbg_printf("Constants of type %s not supported\n", debug_base_type(type));
|
||||||
default:
|
|
||||||
wine_dbg_printf("Constants of type %s not supported\n", debug_base_type(type));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (type->dimx != 1)
|
|
||||||
wine_dbg_printf("}");
|
|
||||||
}
|
}
|
||||||
if (type->dimy != 1)
|
if (type->dimx != 1)
|
||||||
wine_dbg_printf("}");
|
wine_dbg_printf("}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue