blob: 81bc8d6c3dd53ca93bd24e29f8ac7a40253c59e9 [file] [log] [blame]
/*
* Copyright 2025 Intel Corporation
* SPDX-License-Identifier: MIT
*/
#include "test_helpers.h"
#include "brw_builder.h"
class algebraic_test : public brw_shader_pass_test {};
TEST_F(algebraic_test, imax_a_a)
{
brw_builder bld = make_shader(MESA_SHADER_FRAGMENT, 16);
brw_builder exp = make_shader(MESA_SHADER_FRAGMENT, 16);
brw_reg dst0 = vgrf(bld, exp, BRW_TYPE_D);
brw_reg src0 = vgrf(bld, exp, BRW_TYPE_D);
bld.emit_minmax(dst0, src0, src0, BRW_CONDITIONAL_GE);
EXPECT_PROGRESS(brw_opt_algebraic, bld);
exp.MOV(dst0, src0);
EXPECT_SHADERS_MATCH(bld, exp);
}
TEST_F(algebraic_test, sel_a_a)
{
brw_builder bld = make_shader(MESA_SHADER_FRAGMENT, 16);
brw_builder exp = make_shader(MESA_SHADER_FRAGMENT, 16);
brw_reg dst0 = vgrf(bld, exp, BRW_TYPE_D);
brw_reg src0 = vgrf(bld, exp, BRW_TYPE_D);
bld.SEL(dst0, src0, src0)
->predicate = BRW_PREDICATE_NORMAL;
EXPECT_PROGRESS(brw_opt_algebraic, bld);
exp.MOV(dst0, src0);
EXPECT_SHADERS_MATCH(bld, exp);
}
TEST_F(algebraic_test, fmax_a_a)
{
brw_builder bld = make_shader(MESA_SHADER_FRAGMENT, 16);
brw_reg dst0 = vgrf(bld, BRW_TYPE_F);
brw_reg src0 = vgrf(bld, BRW_TYPE_F);
bld.emit_minmax(dst0, src0, src0, BRW_CONDITIONAL_GE);
/* SEL.GE may flush denorms to zero. We don't have enough information at
* this point in compilation to know whether or not it is safe to remove
* that.
*/
EXPECT_NO_PROGRESS(brw_opt_algebraic, bld);
}