X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fi965%2Ftest_vec4_register_coalesce.cpp;h=1873d9ca16e158ebace09aa7495f8dbd24ca75e8;hb=ad42ab473cb327e9f0498bda9d92cccc4279a0e8;hp=c5a3cfc56bb5b45dbf67e9da9e7ea39595190810;hpb=34cba13ef822faebbb1f10f1400f87fa9bf70d60;p=mesa.git diff --git a/src/mesa/drivers/dri/i965/test_vec4_register_coalesce.cpp b/src/mesa/drivers/dri/i965/test_vec4_register_coalesce.cpp index c5a3cfc56bb..1873d9ca16e 100644 --- a/src/mesa/drivers/dri/i965/test_vec4_register_coalesce.cpp +++ b/src/mesa/drivers/dri/i965/test_vec4_register_coalesce.cpp @@ -24,21 +24,24 @@ #include #include "brw_vec4.h" #include "brw_vs.h" +#include "program/program.h" using namespace brw; int ret = 0; -#define register_coalesce(v) _register_coalesce(v, __FUNCTION__) +#define register_coalesce(v) _register_coalesce(v, __func__) class register_coalesce_test : public ::testing::Test { virtual void SetUp(); public: - struct brw_context *brw; + struct brw_compiler *compiler; + struct brw_device_info *devinfo; struct gl_context *ctx; struct gl_shader_program *shader_prog; struct brw_vertex_program *vp; + struct brw_vue_prog_data *prog_data; vec4_visitor *v; }; @@ -46,66 +49,65 @@ public: class register_coalesce_vec4_visitor : public vec4_visitor { public: - register_coalesce_vec4_visitor(struct brw_context *brw, - struct gl_shader_program *shader_prog) - : vec4_visitor(brw, NULL, NULL, NULL, NULL, shader_prog, NULL, NULL, - false, false /* no_spills */) + register_coalesce_vec4_visitor(struct brw_compiler *compiler, + nir_shader *shader, + struct brw_vue_prog_data *prog_data) + : vec4_visitor(compiler, NULL, NULL, prog_data, shader, NULL, + false /* no_spills */, -1) { + prog_data->dispatch_mode = DISPATCH_MODE_4X2_DUAL_OBJECT; } protected: - virtual dst_reg *make_reg_for_system_value(ir_variable *ir) + virtual dst_reg *make_reg_for_system_value(int location) { - assert(!"Not reached"); - return NULL; + unreachable("Not reached"); } virtual void setup_payload() { - assert(!"Not reached"); + unreachable("Not reached"); } virtual void emit_prolog() { - assert(!"Not reached"); - } - - virtual void emit_program_code() - { - assert(!"Not reached"); + unreachable("Not reached"); } virtual void emit_thread_end() { - assert(!"Not reached"); + unreachable("Not reached"); } virtual void emit_urb_write_header(int mrf) { - assert(!"Not reached"); + unreachable("Not reached"); } virtual vec4_instruction *emit_urb_write_opcode(bool complete) { - assert(!"Not reached"); + unreachable("Not reached"); } }; void register_coalesce_test::SetUp() { - brw = (struct brw_context *)calloc(1, sizeof(*brw)); - ctx = &brw->ctx; + ctx = (struct gl_context *)calloc(1, sizeof(*ctx)); + compiler = (struct brw_compiler *)calloc(1, sizeof(*compiler)); + devinfo = (struct brw_device_info *)calloc(1, sizeof(*devinfo)); + prog_data = (struct brw_vue_prog_data *)calloc(1, sizeof(*prog_data)); + compiler->devinfo = devinfo; vp = ralloc(NULL, struct brw_vertex_program); - shader_prog = ralloc(NULL, struct gl_shader_program); + nir_shader *shader = nir_shader_create(NULL, MESA_SHADER_VERTEX, NULL); - v = new register_coalesce_vec4_visitor(brw, shader_prog); + v = new register_coalesce_vec4_visitor(compiler, shader, prog_data); - _mesa_init_vertex_program(ctx, &vp->program, GL_VERTEX_SHADER, 0); + _mesa_init_gl_program(&vp->program.Base, GL_VERTEX_SHADER, 0); - brw->gen = 4; + devinfo->gen = 4; } static void @@ -118,6 +120,7 @@ _register_coalesce(vec4_visitor *v, const char *func) v->dump_instructions(); } + v->calculate_cfg(); v->opt_register_coalesce(); if (print) { @@ -136,7 +139,7 @@ TEST_F(register_coalesce_test, test_compute_to_mrf) m0.writemask = WRITEMASK_X; m0.type = BRW_REGISTER_TYPE_F; - vec4_instruction *mul = v->emit(v->MUL(temp, something, src_reg(1.0f))); + vec4_instruction *mul = v->emit(v->MUL(temp, something, brw_imm_f(1.0f))); v->emit(v->MOV(m0, src_reg(temp))); register_coalesce(v); @@ -160,7 +163,7 @@ TEST_F(register_coalesce_test, test_multiple_use) m1.type = BRW_REGISTER_TYPE_F; src_reg src = src_reg(temp); - vec4_instruction *mul = v->emit(v->MUL(temp, something, src_reg(1.0f))); + vec4_instruction *mul = v->emit(v->MUL(temp, something, brw_imm_f(1.0f))); src.swizzle = BRW_SWIZZLE_XXXX; v->emit(v->MOV(m0, src)); src.swizzle = BRW_SWIZZLE_XYZW; @@ -214,7 +217,7 @@ TEST_F(register_coalesce_test, test_dp4_grf) register_coalesce(v); - EXPECT_EQ(dp4->dst.reg, to.reg); + EXPECT_EQ(dp4->dst.nr, to.nr); EXPECT_EQ(dp4->dst.writemask, WRITEMASK_Y); } @@ -240,8 +243,5 @@ TEST_F(register_coalesce_test, test_channel_mul_grf) register_coalesce(v); - /* This path isn't supported yet in the reswizzling code, so we're checking - * that we haven't done anything bad to scalar non-DP[234]s. - */ - EXPECT_NE(mul->dst.reg, to.reg); + EXPECT_EQ(mul->dst.nr, to.nr); }