X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmesa%2Fdrivers%2Fdri%2Fi965%2Ftest_vec4_register_coalesce.cpp;h=944c7386c069bf14e76f87a1fb98a7efc5b1d91f;hb=327161a48dcff9ec082ba5365ffa41bf0cbec3e4;hp=7c507f86d027b6af4158e9abfb12dff9350d0b29;hpb=42a3d63dd4470be73b92b5d87daa32a9c293f127;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 7c507f86d02..944c7386c06 100644 --- a/src/mesa/drivers/dri/i965/test_vec4_register_coalesce.cpp +++ b/src/mesa/drivers/dri/i965/test_vec4_register_coalesce.cpp @@ -23,22 +23,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 intel_context *intel; + struct brw_compiler *compiler; + struct brw_device_info *devinfo; struct gl_context *ctx; struct gl_shader_program *shader_prog; - struct brw_vs_compile *c; + struct brw_vue_prog_data *prog_data; vec4_visitor *v; }; @@ -46,59 +48,61 @@ public: class register_coalesce_vec4_visitor : public vec4_visitor { public: - register_coalesce_vec4_visitor(struct brw_context *brw, - struct brw_vs_compile *c, - struct gl_shader_program *shader_prog) - : vec4_visitor(brw, c, NULL, shader_prog, NULL, NULL) + 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 int setup_attributes(int payload_reg) + virtual void setup_payload() { - assert(!"Not reached"); - return 0; + unreachable("Not reached"); } virtual void emit_prolog() { - assert(!"Not reached"); + unreachable("Not reached"); } - virtual void emit_program_code() + virtual void emit_thread_end() { - assert(!"Not reached"); + unreachable("Not reached"); } - virtual void emit_thread_end() + virtual void emit_urb_write_header(int mrf) + { + 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)); - intel = &brw->intel; - ctx = &intel->ctx; - - c = ralloc(NULL, struct brw_vs_compile); - c->vp = ralloc(NULL, struct brw_vertex_program); + 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; - 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, c, shader_prog); + v = new register_coalesce_vec4_visitor(compiler, shader, prog_data); - _mesa_init_vertex_program(ctx, &c->vp->program, GL_VERTEX_SHADER, 0); - - intel->gen = 4; + devinfo->gen = 4; } static void @@ -111,6 +115,7 @@ _register_coalesce(vec4_visitor *v, const char *func) v->dump_instructions(); } + v->calculate_cfg(); v->opt_register_coalesce(); if (print) { @@ -129,7 +134,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); @@ -153,7 +158,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; @@ -207,7 +212,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); } @@ -233,8 +238,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); }