Example #1
0
static bool draw_transition(bool (*view_start)(int, int), bool (*view_end)(int, int), enum transition_t transition)
{
  static int cur_x = ET024006_WIDTH;
  static bool altern = true;
  const int inc = 25;

  cur_x -= inc;
  if (cur_x < 0)
    cur_x = 0;

  switch (transition)
  {
  case TRANSITION_FROM_LEFT_TO_RIGHT:
    if (altern)
      view_start(cur_x - ET024006_WIDTH, 0);
    else
      view_end(cur_x, 0);
    break;
  case TRANSITION_FROM_RIGHT_TO_LEFT:
    if (altern)
      view_start(ET024006_WIDTH - cur_x, 0);
    else
      view_end(-cur_x, 0);
    break;
  }

  altern = !altern;

  if (cur_x)
    return false;

  cur_x = ET024006_WIDTH;
  return true;
}
TEST(nn_workload_data_cpp_wrapper, basic_view_test)
{
    nn_workload_data_coords_t lengths = { 4, 4, 4, 4, 4, 4 };
    nn_workload_data_layout_t layout =
    {
        { 0, 0, 0, 0, 0, 0 }, // tile_log2
        { 0, 0, 0, 0, 0, 0 }, // alignment
        default_ordering, // ordering
        NN_DATATYPE_FLOAT
    };

    nn_workload_data_coords_t view_begin(1, 1, 1, 1, 1, 1);
    nn_workload_data_coords_t view_end(2, 2, 2, 2, 2, 2);
    
    nn::nn_workload_data_t<float> nndata(lengths, layout);
    
    nn::nn_workload_data_t<float> nnview(nndata, view_begin, view_end);

    ASSERT_NE(nndata.parent->data_buffer, nullptr);
   
    // Two views that have the same parent
    ASSERT_EQ(nnview.parent, nndata.parent);
    
    validate_view(nndata, nnview, view_begin, view_end);

}   
TEST(nn_workload_data_cpp_wrapper, tiling_view_test)
{
    nn_workload_data_coords_t lengths = { 8, 8, 8, 8, 8, 8 };
    nn_workload_data_layout_t layout =
    {
        { 1, 1, 1, 1, 1, 1 }, // tile_log2
        { 0, 0, 0, 0, 0, 0 }, // alignment
        default_ordering, // ordering
        NN_DATATYPE_INT16
    };

    nn_workload_data_coords_t view_begin(2, 2, 2, 2, 2, 2);
    nn_workload_data_coords_t view_end(5, 5, 5, 5, 5, 5);

    nn::nn_workload_data_t<int16_t> nndata(lengths, layout);

    nn::nn_workload_data_t<int16_t> nnview(nndata, view_begin, view_end);

    ASSERT_NE(nndata.parent->data_buffer, nullptr);

    // Two views that have the same parent
    ASSERT_EQ(nnview.parent, nndata.parent);

    validate_view(nndata, nnview, view_begin, view_end);

    // View created from a view
    nn_workload_data_coords_t view2_begin(0, 0, 0, 0, 0, 0);
    nn_workload_data_coords_t view2_end(1, 1, 1, 1, 1, 1);
    nn_workload_data_coords_t view3_begin(2, 2, 2, 2, 2, 2);
    nn_workload_data_coords_t view3_end(3, 3, 3, 3, 3, 3);
    nn::nn_workload_data_t<int16_t> nnview2(nnview, view2_begin, view2_end);
    nn::nn_workload_data_t<int16_t> nnview3(nnview, view3_begin, view3_end);

    EXPECT_EQ(4, nndata.parent->reference_count);

    // make sure the views give access to the correct data
    validate_view(nnview, nnview2, view2_begin, view2_end);
    validate_view(nnview, nnview3, view3_begin, view3_end);

    // Invalid view requested - causes an exception
    nn_workload_data_coords_t view4_begin(1, 1, 1, 1, 1, 1);
    nn_workload_data_coords_t view4_end(2, 2, 2, 2, 2, 2);
    EXPECT_THROW(nn::nn_workload_data_t<int16_t> nnview3(nnview, view4_begin, view4_end), std::bad_alloc);
}
Example #4
0
/*
 *  Each word in the command buffer is the name of a treetop.
 */
void
ph_gettrees(struct pkg_conn *UNUSED(pc), char *buf)
{
    size_t n = 0;
    long max_argc = 0;
    char **argv = NULL;
    int	argc = 0;
    struct rt_i *rtip = APP.a_rt_i;

    RT_CK_RTI(rtip);

    if (debug)  fprintf(stderr, "ph_gettrees: %s\n", buf);

    /* Copy values from command line options into rtip */
    rtip->useair = use_air;
    if (rt_dist_tol > 0)  {
	rtip->rti_tol.dist = rt_dist_tol;
	rtip->rti_tol.dist_sq = rt_dist_tol * rt_dist_tol;
    }
    if (rt_perp_tol > 0)  {
	rtip->rti_tol.perp = rt_perp_tol;
	rtip->rti_tol.para = 1 - rt_perp_tol;
    }

    for (n = 0; n < strlen(buf); n++) {
	if (isspace((int)buf[n]))
	    max_argc++;
    }
    argv = (char **)bu_calloc(max_argc+1, sizeof(char *), "alloc argv");

    if ((argc = bu_argv_from_string(argv, max_argc, buf)) <= 0)  {
	/* No words in input */
	(void)free(buf);
	bu_free(argv, "free argv");
	return;
    }
    title_obj = bu_strdup(argv[0]);

    if (rtip->needprep == 0)  {
	/* First clean up after the end of the previous frame */
	if (debug)bu_log("Cleaning previous model\n");
	view_end(&APP);
	view_cleanup(rtip);
	rt_clean(rtip);
	if (rdebug&RDEBUG_RTMEM_END)
	    bu_prmem("After rt_clean");
    }

    /* Load the desired portion of the model */
    if (rt_gettrees(rtip, argc, (const char **)argv, npsw) < 0)
	fprintf(stderr, "rt_gettrees(%s) FAILED\n", argv[0]);
    bu_free(argv, "free argv");

    /* In case it changed from startup time via an OPT command */
    if (npsw > 1)  {
	RTG.rtg_parallel = 1;
    } else
	RTG.rtg_parallel = 0;

    seen_gettrees = 1;
    (void)free(buf);

    prepare();

    /* Acknowledge that we are ready */
    if (pkg_send(MSG_GETTREES_REPLY,
		   title_obj, strlen(title_obj)+1, pcsrv) < 0)
	fprintf(stderr, "MSG_START error\n");
}