UBO loads can be boolean-valued expressions, too, so we need to handle
them in emit_bool_to_cond_code() and emit_if_gen6().
However, unlike most expressions, it doesn't make sense to evaluate
their operands, then do something with the results. We just want to
evaluate the UBO load as a whole---which performs the read from
memory---then load the boolean result into the flag register.
Instead of adding code to handle it, we can simply bypass the
ir_expression handling, and fall through to the default code, which will
do exactly that.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=83468
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Cc: mesa-stable@lists.freedesktop.org
{
ir_expression *expr = ir->as_expression();
- if (!expr) {
+ if (!expr || expr->operation == ir_binop_ubo_load) {
ir->accept(this);
fs_inst *inst = emit(AND(reg_null_d, this->result, fs_reg(1)));
{
ir_expression *expr = ir->condition->as_expression();
- if (expr) {
+ if (expr && expr->operation != ir_binop_ubo_load) {
fs_reg op[3];
fs_inst *inst;
fs_reg temp;
*predicate = BRW_PREDICATE_NORMAL;
- if (expr) {
+ if (expr && expr->operation != ir_binop_ubo_load) {
src_reg op[3];
vec4_instruction *inst;
{
ir_expression *expr = ir->condition->as_expression();
- if (expr) {
+ if (expr && expr->operation != ir_binop_ubo_load) {
src_reg op[3];
dst_reg temp;