2025-03-10 11:24:18 -07:00
|
|
|
/*
|
|
|
|
|
* 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);
|
|
|
|
|
}
|
2025-03-10 11:37:50 -07:00
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|