diff options
author | marha <marha@users.sourceforge.net> | 2011-07-01 16:49:54 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2011-07-01 16:49:54 +0200 |
commit | 3bbcbc59b6d98f09b26f39d6208faec76cc6aa3e (patch) | |
tree | 3e798726828ac0fa7153e841f77f8d4cf52855db /mesalib/src/glsl/ast_function.cpp | |
parent | 83cb62fe8002927ba95861a4fd21cc44c48bfcf7 (diff) | |
parent | d9f970a847e1af706f07560ef163b229bb592307 (diff) | |
download | vcxsrv-3bbcbc59b6d98f09b26f39d6208faec76cc6aa3e.tar.gz vcxsrv-3bbcbc59b6d98f09b26f39d6208faec76cc6aa3e.tar.bz2 vcxsrv-3bbcbc59b6d98f09b26f39d6208faec76cc6aa3e.zip |
Merge remote-tracking branch 'origin/released'
Conflicts:
apps/xwininfo/configure.ac
libX11/configure.ac
mesalib/src/glsl/ast_function.cpp
mesalib/src/glsl/ast_to_hir.cpp
mesalib/src/glsl/glsl_parser_extras.cpp
mesalib/src/glsl/glsl_parser_extras.h
mesalib/src/glsl/ir.cpp
mesalib/src/glsl/ir.h
mesalib/src/glsl/ir_constant_expression.cpp
mesalib/src/glsl/ir_validate.cpp
mesalib/src/glsl/lower_mat_op_to_vec.cpp
mesalib/src/mesa/program/ir_to_mesa.cpp
mesalib/src/mesa/state_tracker/st_cb_drawpixels.c
mesalib/src/mesa/state_tracker/st_cb_texture.c
mesalib/src/mesa/state_tracker/st_context.h
mesalib/src/mesa/state_tracker/st_format.h
mkfontscale/configure.ac
xorg-server/Xext/xvmc.c
xorg-server/configure.ac
xorg-server/dix/Makefile.am
xorg-server/fb/fbarc.c
xorg-server/fb/fbgc.c
xorg-server/glx/glapi_gentable.c
xorg-server/glx/glxdri2.c
xorg-server/glx/glxscreens.c
xorg-server/hw/xfree86/Makefile.am
xorg-server/hw/xfree86/loader/Makefile.am
xorg-server/hw/xquartz/X11Application.m
xorg-server/hw/xquartz/mach-startup/Makefile.am
xorg-server/hw/xwin/XWin.rc
xorg-server/hw/xwin/winmultiwindowwindow.c
xorg-server/hw/xwin/winmultiwindowwndproc.c
xorg-server/os/Makefile.am
xorg-server/test/Makefile.am
xorg-server/xfixes/region.c
xorg-server/xkeyboard-config/symbols/ma
Diffstat (limited to 'mesalib/src/glsl/ast_function.cpp')
-rw-r--r-- | mesalib/src/glsl/ast_function.cpp | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/mesalib/src/glsl/ast_function.cpp b/mesalib/src/glsl/ast_function.cpp index fbda41294..c35e06089 100644 --- a/mesalib/src/glsl/ast_function.cpp +++ b/mesalib/src/glsl/ast_function.cpp @@ -271,17 +271,36 @@ convert_component(ir_rvalue *src, const glsl_type *desired_type) assert(a <= GLSL_TYPE_BOOL);
assert(b <= GLSL_TYPE_BOOL);
- if ((a == b) || (src->type->is_integer() && desired_type->is_integer()))
+ if (a == b)
return src;
switch (a) {
case GLSL_TYPE_UINT:
+ switch (b) {
+ case GLSL_TYPE_INT:
+ result = new(ctx) ir_expression(ir_unop_i2u, src);
+ break;
+ case GLSL_TYPE_FLOAT:
+ result = new(ctx) ir_expression(ir_unop_i2u,
+ new(ctx) ir_expression(ir_unop_f2i, src));
+ break;
+ case GLSL_TYPE_BOOL:
+ result = new(ctx) ir_expression(ir_unop_i2u,
+ new(ctx) ir_expression(ir_unop_b2i, src));
+ break;
+ }
+ break;
case GLSL_TYPE_INT:
- if (b == GLSL_TYPE_FLOAT)
- result = new(ctx) ir_expression(ir_unop_f2i, desired_type, src, NULL);
- else {
- assert(b == GLSL_TYPE_BOOL);
- result = new(ctx) ir_expression(ir_unop_b2i, desired_type, src, NULL);
+ switch (b) {
+ case GLSL_TYPE_UINT:
+ result = new(ctx) ir_expression(ir_unop_u2i, src);
+ break;
+ case GLSL_TYPE_FLOAT:
+ result = new(ctx) ir_expression(ir_unop_f2i, src);
+ break;
+ case GLSL_TYPE_BOOL:
+ result = new(ctx) ir_expression(ir_unop_b2i, src);
+ break;
}
break;
case GLSL_TYPE_FLOAT:
@@ -300,6 +319,9 @@ convert_component(ir_rvalue *src, const glsl_type *desired_type) case GLSL_TYPE_BOOL:
switch (b) {
case GLSL_TYPE_UINT:
+ result = new(ctx) ir_expression(ir_unop_i2b,
+ new(ctx) ir_expression(ir_unop_u2i, src));
+ break;
case GLSL_TYPE_INT:
result = new(ctx) ir_expression(ir_unop_i2b, desired_type, src, NULL);
break;
@@ -311,6 +333,7 @@ convert_component(ir_rvalue *src, const glsl_type *desired_type) }
assert(result != NULL);
+ assert(result->type == desired_type);
/* Try constant folding; it may fold in the conversion we just added. */
ir_constant *const constant = result->constant_expression_value();
|