Lines Matching refs:program
423 struct pvr_pds_pixel_shader_sa_program *program)
425 memset(program, 0, sizeof(*program));
521 * Generates the PDS pixel event program.
523 * \param program Pointer to the PDS pixel event program.
524 * \param buffer Pointer to the buffer for the program.
527 * \returns Pointer to just beyond the buffer for the program.
530 pvr_pds_generate_pixel_event(struct pvr_pds_event_program *restrict program,
548 (2 * program->num_emit_word_pairs),
553 program->num_emit_word_pairs,
560 program->task_control.src0); /* DOUTU */
563 /* Emit words for end of tile program. */
564 for (uint32_t i = 0; i < program->num_emit_word_pairs; i++) {
567 program->emit_words[(2 * i) + 0],
568 program->emit_words[(2 * i) + 1]);
572 for (uint32_t i = 0; i < program->num_emit_word_pairs; i++) {
580 if (i == (program->num_emit_word_pairs - 1))
589 for (uint32_t i = 0; i < program->num_emit_word_pairs; i++) {
605 uint32_t code_size = 1 + program->num_emit_word_pairs;
608 program->data_segment = constants;
609 program->data_size = data_size;
610 program->code_size = code_size;
682 * Generates a PDS program to load USC vertex inputs based from one or more
686 * \param program Pointer to the description of the program which should be
693 * written, but size information in program is updated.
699 pvr_pds_vertex_shader(struct pvr_pds_vertex_shader_program *restrict program,
741 pvr_pds_vertex_streams_contains_instance_data(program->streams,
742 program->num_streams);
748 uint32_t last_stream_index = program->num_streams - 1;
756 for (uint32_t i = 0; i < program->data_size; i++)
761 /* Generate the PDS vertex shader program */
768 if (program->iterate_remap_id)
781 for (uint32_t stream = 0; stream < program->num_streams; stream++) {
783 8 * program->streams[stream].num_elements,
795 direct_writes_needed = program->iterate_instance_id ||
796 program->iterate_vtx_id || program->iterate_remap_id;
800 for (uint32_t stream = 0; stream < program->num_streams; stream++) {
801 vertex_stream = &program->streams[stream];
846 program->streams[stream].num_vertices =
847 pvr_pds_get_bank_based_constants(program->num_streams,
855 program->streams[stream].num_vertices,
869 if (program->num_streams > 0 &&
870 program->streams[program->num_streams - 1].use_ddmadt) {
883 pvr_pds_get_bank_based_constants(program->num_streams,
893 program->instance_ID_modifier) {
894 if (program->iterate_vtx_id) {
896 pvr_pds_get_bank_based_constants(program->num_streams,
902 if (program->iterate_instance_id || program->instance_ID_modifier) {
903 if (program->instance_ID_modifier == 0) {
905 pvr_pds_get_bank_based_constants(program->num_streams,
911 pvr_pds_get_bank_based_constants(program->num_streams,
917 pvr_pds_get_bank_based_constants(program->num_streams,
925 pvr_pds_get_bank_based_constants(program->num_streams,
933 if (program->base_instance != 0) {
935 pvr_pds_get_bank_based_constants(program->num_streams,
941 if (program->iterate_remap_id) {
943 pvr_pds_get_bank_based_constants(program->num_streams,
950 if (program->instance_ID_modifier != 0) {
961 program->instance_ID_modifier);
974 if (any_instanced_stream || program->iterate_instance_id) {
975 if (program->base_instance != 0) {
976 assert(!program->draw_indirect);
981 program->base_instance);
987 if (program->draw_indirect) {
988 assert((program->instance_ID_modifier == 0) &&
989 (program->base_instance == 0));
999 for (uint32_t stream = 0; stream < program->num_streams; stream++) {
1007 vertex_stream = &program->streams[stream];
1011 ((program->base_instance > 0) || (program->draw_indirect)));
1330 if (program->stream_patch_offsets) {
1331 program
1332 ->stream_patch_offsets[program->num_stream_patches++] =
1587 if (program->iterate_vtx_id) {
1588 if (program->draw_indirect) {
1606 program->vtx_id_register,
1612 if (!program->iterate_instance_id && !program->iterate_remap_id)
1631 if (program->iterate_instance_id) {
1634 program->instance_id_register,
1640 if (!program->iterate_remap_id)
1658 if (program->iterate_remap_id) {
1689 program->usc_task_control.src0); /* 64-bit
1692 if (program->stream_patch_offsets) {
1694 program->stream_patch_offsets[0] = usc_control_constant64 >> 1;
1708 /* End the program if the Dout did not already end it. */
1718 program->data_segment = buffer;
1723 program->temps_used = temps_used;
1724 program->data_size = consts_size;
1725 program->code_size = code_size;
1726 program->ddmadt_enables = ddmadt_enables;
1728 program->skip_stream_flag = skip_stream_flag;
1734 * Generates a PDS program to load USC compute shader global/local/workgroup
1737 * \param program Pointer to description of the program that should be
1744 * size information in program is updated.
1750 pvr_pds_compute_shader(struct pvr_pds_compute_shader_program *restrict program,
1786 for (uint32_t j = 0; j < program->data_size; j++)
1798 if (program->kick_usc) {
1804 if (program->has_coefficient_update_task) {
1809 if (program->conditional_render) {
1821 program->cond_render_const_offset_in_dwords = predicate_ld_src0_constant;
1822 program->cond_render_pred_temp = cond_render_pred_temp;
1825 if ((program->barrier_coefficient != PVR_PDS_COMPUTE_INPUT_REG_UNUSED) ||
1826 (program->clear_pds_barrier) ||
1827 (program->kick_usc && program->conditional_render)) {
1831 if (program->barrier_coefficient != PVR_PDS_COMPUTE_INPUT_REG_UNUSED) {
1839 if (program->work_group_input_regs[0] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED ||
1840 program->work_group_input_regs[1] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED) {
1845 if (program->work_group_input_regs[2] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED) {
1850 if ((program->local_input_regs[0] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED) ||
1851 (program->local_input_regs[1] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED) ||
1852 (program->local_input_regs[2] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED)) {
1856 if (program->add_base_workgroup) {
1859 if (program->work_group_input_regs[workgroup_component] !=
1861 program
1869 if (program->kick_usc) {
1873 program->usc_task_control.src0); /* 64-bit
1878 if (program->has_coefficient_update_task) {
1883 program->usc_task_control_coeff_update.src0); /* 64-bit Src0 */
1886 if ((program->barrier_coefficient != PVR_PDS_COMPUTE_INPUT_REG_UNUSED) ||
1887 (program->clear_pds_barrier) ||
1888 (program->kick_usc && program->conditional_render)) {
1894 if (program->barrier_coefficient != PVR_PDS_COMPUTE_INPUT_REG_UNUSED) {
1898 program->barrier_coefficient + 4,
1907 program->barrier_coefficient,
1916 if ((program->work_group_input_regs[0] ==
1918 (program->work_group_input_regs[1] ==
1920 (program->work_group_input_regs[2] ==
1929 if (program->work_group_input_regs[0] !=
1931 program->work_group_input_regs[1] !=
1936 assert(program->work_group_input_regs[1] ==
1937 (program->work_group_input_regs[0] + 1));
1940 program->work_group_input_regs[0],
1948 if (program->work_group_input_regs[2] ==
1957 if (program->work_group_input_regs[0] !=
1960 program->work_group_input_regs[0],
1969 if (program->work_group_input_regs[2] ==
1977 } else if (program->work_group_input_regs[1] !=
1980 program->work_group_input_regs[1],
1989 if (program->work_group_input_regs[2] ==
2001 if (program->work_group_input_regs[2] !=
2004 program->work_group_input_regs[2],
2015 if ((program->local_input_regs[1] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED) ||
2016 (program->local_input_regs[2] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED)) {
2022 if (!program->flattened_work_groups) {
2023 if ((program->local_input_regs[1] !=
2025 (program->local_input_regs[2] !=
2027 assert(program->local_input_regs[1] ==
2028 program->local_input_regs[2]);
2032 if (program->local_input_regs[1] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED)
2033 dest_reg = program->local_input_regs[1];
2035 dest_reg = program->local_input_regs[2];
2040 if (program->local_input_regs[0] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED) {
2041 assert(dest_reg == (program->local_input_regs[0] + 1));
2044 program->local_input_regs[0],
2071 else if (program->local_input_regs[0] !=
2074 program->local_input_regs[0],
2100 assert(program->coeff_update_task_branch_size > 0);
2107 program->coeff_update_task_branch_size /* ADDR */));
2110 if (program->barrier_coefficient != PVR_PDS_COMPUTE_INPUT_REG_UNUSED) {
2126 if (program->add_base_workgroup) {
2130 if (program->work_group_input_regs[workgroup_component] ==
2139 program->base_workgroup_constant_offset_in_dwords
2153 if ((program->work_group_input_regs[0] !=
2155 (program->work_group_input_regs[1] !=
2159 if (program->work_group_input_regs[0] !=
2173 if (program->work_group_input_regs[2] !=
2184 if (program->kick_usc && program->has_coefficient_update_task) {
2195 program->coeff_update_task_branch_size = code_size / sizeof(uint32_t);
2200 if ((program->local_input_regs[0] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED) &&
2201 ((program->local_input_regs[1] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED) ||
2202 (program->local_input_regs[2] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED))) {
2207 if (program->local_input_regs[0] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED) {
2212 else if (program->local_input_regs[1] !=
2214 program->local_input_regs[2] !=
2221 if ((program->local_input_regs[0] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED) ||
2222 (program->local_input_regs[1] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED) ||
2223 (program->local_input_regs[2] != PVR_PDS_COMPUTE_INPUT_REG_UNUSED)) {
2231 if (program->clear_pds_barrier) {
2247 if (program->fence) {
2252 if (program->kick_usc) {
2253 if (program->conditional_render) {
2348 /* End the program if the Dout did not already end it. */
2357 program->data_segment = buffer;
2362 /* Require at least one DWORD of PDS data so the program runs. */
2365 program->temps_used = temps_used;
2366 program->highest_temp = temps_used;
2367 program->data_size = data_size;
2369 program->code_size = code_size;
2375 * Generates the PDS vertex shader data or code block. This program will do a
2378 * \param program Pointer to the PDS vertex shader program.
2379 * \param buffer Pointer to the buffer for the program.
2385 struct pvr_pds_vertex_shader_sa_program *restrict program,
2404 program->num_dword_doutw + program->num_q_word_doutw;
2406 program->num_dword_doutw + 2 * program->num_q_word_doutw;
2415 if (program->kick_usc) {
2420 if (program->clear_pds_barrier) {
2425 2 * program->num_dma_kicks,
2433 total_size_dma + total_num_doutw + program->num_dma_kicks,
2441 if (program->kick_usc) {
2445 program->usc_task_control.src0); /* DOUTU
2452 if (program->clear_pds_barrier) {
2461 for (uint32_t i = 0; i < program->num_q_word_doutw; i++) {
2465 program->q_word_doutw_value[2 * i],
2466 program->q_word_doutw_value[2 * i + 1]);
2470 program->q_word_doutw_control[i] |
2471 ((!program->num_dma_kicks && i == total_num_doutw - 1)
2479 for (uint32_t i = 0; i < program->num_dword_doutw; i++) {
2483 program->dword_doutw_value[i]);
2487 program->dword_doutw_control[i] |
2488 ((!program->num_dma_kicks && i == program->num_dword_doutw - 1)
2499 if (program->num_dma_kicks == 1) /* Most-common case. */
2504 program->dma_address[0],
2512 program->dma_control[0] |
2517 } else if (program->num_dma_kicks > 1) {
2518 for (kick_index = 0; kick_index < program->num_dma_kicks - 1;
2523 program->dma_address[kick_index],
2530 program->dma_control[kick_index]);
2538 program->dma_address[kick_index],
2546 program->dma_control[kick_index] |
2549 buffer += 3 * program->num_dma_kicks;
2552 if (program->clear_pds_barrier) {
2568 for (uint32_t i = 0; i < program->num_q_word_doutw; i++) {
2572 /* END */ !program->num_dma_kicks && !program->kick_usc &&
2581 for (uint32_t i = 0; i < program->num_dword_doutw; i++) {
2585 /* END */ !program->num_dma_kicks && !program->kick_usc &&
2586 (i == program->num_dword_doutw - 1),
2595 if (program->num_dma_kicks != 0) {
2598 if (program->num_dma_kicks == 1) /* Most-common case. */
2602 /* END */ !program->kick_usc,
2608 for (kick_index = 0; kick_index < program->num_dma_kicks;
2612 /* END */ (!program->kick_usc) &&
2613 (kick_index + 1 == program->num_dma_kicks),
2627 if (program->kick_usc) {
2636 if (!program->kick_usc && program->num_dma_kicks == 0 &&
2642 code_size = program->num_dma_kicks + total_num_doutw;
2643 if (program->clear_pds_barrier)
2646 if (program->kick_usc)
2653 program->data_size = data_size;
2654 program->code_size = code_size;
2661 * program.
2663 * \param program Pointer to the PDS pixel shader secondary attributes program.
2666 * \returns Pointer to just beyond the buffer for the program/data.
2669 struct pvr_pds_pixel_shader_sa_program *restrict program,
2710 * first 2) dwords of the shared registers and the program will issue a
2713 if (program->clear && program->packed_clear) {
2725 /* cc */ 1, /* Only for uniform loading program. */
2726 /* END */ program->kick_usc ? 0 : 1, /* Last
2735 } else if (program->clear) {
2738 if (program->clear_color_dest_reg & 0x1) {
2757 /* cc */ 1, /* Only for Uniform Loading program */
2763 /* cc */ 1, /* Only for Uniform Loading program */
2769 /* cc */ 1, /* Only for uniform loading program */
2770 /* END */ program->kick_usc ? 0 : 1, /* Last
2797 /* cc */ 1, /* Only for Uniform Loading program */
2803 /* cc */ 1, /* Only for uniform loading program */
2804 /* END */ program->kick_usc ? 0 : 1, /* Last
2816 if (program->kick_usc) {
2839 /* End the program. */
2845 program->num_dword_doutw + program->num_q_word_doutw;
2847 ((program->num_texture_dma_kicks > 0) &&
2848 ((program->num_uniform_dma_kicks > 0 || total_num_doutw > 0) ||
2849 program->kick_usc));
2855 * texture OR a uniform update program.
2859 MAX2(1 + program->num_texture_dma_kicks, 2);
2872 if (program->num_texture_dma_kicks > 0) {
2880 dma_address_constant64 + (program->num_texture_dma_kicks * 2);
2882 for (uint32_t dma = 0; dma < program->num_texture_dma_kicks; dma++) {
2890 /* END */ dma == (program->num_texture_dma_kicks - 1),
2901 /* End the program. */
2911 if (program->kick_usc) {
2920 program->num_dword_doutw + 2 * program->num_q_word_doutw;
2924 program->num_uniform_dma_kicks * 3 + total_size_dma + total_num_doutw,
2927 dma_address_constant64 + program->num_uniform_dma_kicks * 2;
2930 dma_control_constant32 + program->num_uniform_dma_kicks;
2936 for (uint32_t i = 0; i < program->num_q_word_doutw; i++) {
2940 /* END */ !program->num_uniform_dma_kicks &&
2941 !program->kick_usc && (i == total_num_doutw - 1),
2949 for (uint32_t i = 0; i < program->num_dword_doutw; i++) {
2953 /* END */ !program->num_uniform_dma_kicks &&
2954 !program->kick_usc && (i == program->num_dword_doutw - 1),
2965 if (program->num_uniform_dma_kicks > 0) {
2966 for (uint32_t dma = 0; dma < program->num_uniform_dma_kicks; dma++) {
2973 if (!program->kick_usc &&
2974 (dma == program->num_uniform_dma_kicks - 1)) {
2992 if (program->kick_usc) {
3007 } else if (program->num_uniform_dma_kicks == 0 && total_num_doutw == 0) {
3009 /* End the program. */
3018 program->temps_used = MAX2(temps_used, 1);
3019 program->code_size = code_size;
3029 * program.
3031 * \param program Pointer to the PDS pixel shader secondary attributes program.
3035 * \returns Pointer to just beyond the buffer for the program/data.
3038 struct pvr_pds_pixel_shader_sa_program *restrict program,
3078 * first 2) dwords of the shared registers and the program will issue a
3081 if (program->clear && uniform && program->packed_clear) {
3093 program->clear_color[0],
3094 program->clear_color[1]);
3098 program->clear_color_dest_reg,
3108 } else if (program->clear && uniform) {
3111 if (program->clear_color_dest_reg & 0x1) {
3130 program->clear_color[0]);
3134 program->clear_color[1],
3135 program->clear_color[2]);
3139 program->clear_color[3]);
3143 program->clear_color_dest_reg,
3156 program->clear_color_dest_reg + 1,
3169 program->clear_color_dest_reg + 3,
3196 program->clear_color[0],
3197 program->clear_color[1]);
3201 program->clear_color[2],
3202 program->clear_color[3]);
3206 program->clear_color_dest_reg,
3216 doutw |= (program->clear_color_dest_reg + 2)
3229 if (program->kick_usc) {
3237 program->usc_task_control.src0); /* 64-bit
3247 if (program->kick_usc) {
3255 program->usc_task_control.src0); /* 64-bit Src0 */
3260 program->num_dword_doutw + program->num_q_word_doutw;
3262 program->num_dword_doutw + 2 * program->num_q_word_doutw;
3269 program->num_uniform_dma_kicks * 3 +
3273 dma_address_constant64 + program->num_uniform_dma_kicks * 2;
3277 dma_control_constant32 + program->num_uniform_dma_kicks;
3281 for (uint32_t i = 0; i < program->num_q_word_doutw; i++) {
3285 program->q_word_doutw_value[2 * i],
3286 program->q_word_doutw_value[2 * i + 1]);
3290 program->q_word_doutw_control[i] |
3291 ((!program->num_uniform_dma_kicks &&
3300 for (uint32_t i = 0; i < program->num_dword_doutw; i++) {
3303 program->dword_doutw_value[i]);
3307 program->dword_doutw_control[i] |
3308 ((!program->num_uniform_dma_kicks &&
3309 i == program->num_dword_doutw - 1)
3319 if (program->num_uniform_dma_kicks > 0) {
3323 for (kick = 0; kick < program->num_uniform_dma_kicks - 1;
3328 program->uniform_dma_address[kick],
3333 program->uniform_dma_control[kick]);
3341 program->uniform_dma_address[kick],
3347 program->uniform_dma_control[kick] |
3352 } else if (program->num_texture_dma_kicks > 0) {
3358 program->num_texture_dma_kicks * 3,
3361 dma_address_constant64 + (program->num_texture_dma_kicks * 2);
3365 for (kick = 0; kick < program->num_texture_dma_kicks - 1; kick++) {
3369 program->texture_dma_address[kick],
3375 program->texture_dma_control[kick]);
3383 program->texture_dma_address[kick],
3390 program->texture_dma_control[kick] |
3397 program->data_segment = constants;
3400 program->temps_used = MAX2(temps_used, 1);
3401 program->data_size = data_size;
3410 * Generates generic DOUTC PDS program.
3412 * \param program Pointer to the PDS kick USC.
3413 * \param buffer Pointer to the buffer for the program.
3415 * \returns Pointer to just beyond the buffer for the code or program segment.
3417 uint32_t *pvr_pds_generate_doutc(struct pvr_pds_fence_program *restrict program,
3433 /* Update the program sizes. */
3434 program->data_size = data_size;
3435 program->code_size = code_size;
3436 program->data_segment = constants;
3455 program->data_size = data_size;
3466 /* End the program. */
3470 program->code_size = code_size;
3477 * Generates generic kick DOUTU PDS program in a single data+code block.
3480 * \param buffer Pointer to the buffer for the program.
3483 * \returns Pointer to just beyond the buffer for the code or program segment.
3571 /* End the program. */
3586 * Generates generic kick DOUTU PDS program in a single data+code block.
3588 * \param program Pointer to the PDS kick USC.
3589 * \param buffer Pointer to the buffer for the program.
3594 * \returns Pointer to just beyond the buffer for the code or program segment.
3596 uint32_t *pvr_pds_kick_usc(struct pvr_pds_kickusc_program *restrict program,
3615 /* Update the program sizes. */
3616 program->data_size = data_size;
3617 program->code_size = code_size;
3618 program->data_segment = constants;
3631 program->usc_task_control.src0); /* 64-bit
3704 * Generates program to kick the USC task to store shared.
3706 * \param program Pointer to the PDS shared register.
3707 * \param buffer Pointer to the buffer for the program.
3710 * \returns Pointer to just beyond the buffer for the program.
3713 struct pvr_pds_shared_storing_program *restrict program,
3718 struct pvr_pds_kickusc_program *kick_usc_program = &program->usc_task;
3719 struct pvr_pds_doutw_control *doutw_control = &program->doutw_control;
3729 program->data_size = doutw_control->data_size;
3734 program->cc_enable,
3736 program->data_size += kick_usc_program->data_size;
3751 program->code_size = doutw_control->code_size;
3757 program->cc_enable,
3759 program->code_size += kick_usc_program->code_size;
3769 struct pvr_pds_fence_program *restrict program,
3784 pvr_pds_generate_doutc(program, constants, PDS_GENERATE_DATA_SEGMENT);
3785 data_size += program->data_size;
3791 program->fence_constant_word =
3795 program->data_size = data_size;
3820 (program->fence_constant_word >> 1), /* src1 = 1 */
3849 instruction = pvr_pds_generate_doutc(program,
3852 code_size += program->code_size;
3854 program->code_size = code_size;
3863 * Generates program to kick the USC task to load shared registers from memory.
3865 * \param program Pointer to the PDS shared register.
3866 * \param buffer Pointer to the buffer for the program.
3869 * \returns Pointer to just beyond the buffer for the program.
3872 struct pvr_pds_shared_storing_program *restrict program,
3877 struct pvr_pds_kickusc_program *kick_usc_program = &program->usc_task;
3878 struct pvr_pds_doutw_control *doutw_control = &program->doutw_control;
3903 program->cc_enable,
3920 program->data_size = data_size;
3965 program->cc_enable,
3969 program->code_size = code_size;
3981 * initialized for program generation.
3983 * \param program Pointer to the PDS pixel shader program.
3984 * \param buffer Pointer to the buffer for the program.
3986 * \returns Pointer to just beyond the buffer for the program.
3989 struct pvr_pds_coeff_loading_program *restrict program,
4003 program->data_segment = constants;
4008 total_data_size += 2 * program->num_fpu_iterators;
4009 code_size += program->num_fpu_iterators;
4023 while (iterator < program->num_fpu_iterators) {
4031 (uint64_t)program->FPU_iterators[iterator]
4036 (uint64_t)program->destination[iterator++]
4042 if (iterator >= program->num_fpu_iterators) {
4067 program->temps_used = 1;
4068 program->data_size = total_data_size;
4069 program->code_size = code_size;
4087 * \param buffer Pointer to the buffer for the program.
4091 * \returns Pointer to just beyond the buffer for the program.
4272 * \param program Pointer to the stream out program.
4273 * \param buffer Pointer to the buffer for the program.
4278 * \returns Pointer to just beyond the buffer for the program.
4281 struct pvr_pds_stream_out_init_program *restrict program,
4302 for (uint32_t index = 0; index < program->num_buffers; index++) {
4303 if (program->dev_address_for_buffer_data[index] != 0) {
4304 /* Generate load/store program to load/store persistent temps. */
4313 program->dev_address_for_buffer_data[index],
4314 program->pds_buffer_data_size[index],
4324 PTDst += program->pds_buffer_data_size[index];
4335 /* Save size information to program */
4336 program->stream_out_init_pds_data_size =
4338 /* PDS program code size. */
4339 program->stream_out_init_pds_code_size = total_code_size;
4342 return buffer + program->stream_out_init_pds_data_size;
4350 * Generate stream out terminate program for stream out.
4358 * The stream out terminate program is used to update the PPP state and the data
4361 * \param program Pointer to the stream out program.
4362 * \param buffer Pointer to the buffer for the program.
4365 * \returns Pointer to just beyond the buffer for the program.
4368 struct pvr_pds_stream_out_terminate_program *restrict program,
4379 /* Generate store program to store persistent temps. */
4384 program->dev_address_for_storing_persistent_temp,
4385 program->pds_persistent_temp_size_to_store,
4400 /* Save size information to program. */
4401 program->stream_out_terminate_pds_data_size =
4403 /* PDS program code size. */
4404 program->stream_out_terminate_pds_code_size = total_code_size;
4407 return buffer + program->stream_out_terminate_pds_data_size;
4498 struct pvr_pds_drawindirect_program *restrict program,
4506 switch ((program->arg_buffer >> 2) % 4) {
4508 if (program->support_base_instance) {
4509 if (program->increment_draw_id) {
4520 if (program->support_base_instance) {
4521 if (program->increment_draw_id) {
4532 if (program->support_base_instance) {
4533 if (program->increment_draw_id) {
4544 if (program->support_base_instance) {
4545 if (program->increment_draw_id) {
4567 program->program = *psc_program;
4569 switch ((program->arg_buffer >> 2) % 4) {
4571 if (program->support_base_instance) {
4572 if (program->increment_draw_id) {
4575 program->arg_buffer & ~0xfull,
4579 program->index_list_addr_buffer + 4);
4582 program->index_list_addr_buffer);
4585 program->num_views);
4591 program->arg_buffer & ~0xfull,
4595 program->index_list_addr_buffer + 4);
4598 program->index_list_addr_buffer);
4601 program->num_views);
4606 program->arg_buffer &
4611 program->index_list_addr_buffer + 4);
4614 program->index_list_addr_buffer);
4616 program->num_views);
4621 if (program->support_base_instance) {
4622 if (program->increment_draw_id) {
4625 program->arg_buffer & ~0xfull,
4629 program->index_list_addr_buffer + 4);
4632 program->index_list_addr_buffer);
4635 program->num_views);
4641 program->arg_buffer & ~0xfull,
4645 program->index_list_addr_buffer + 4);
4648 program->index_list_addr_buffer);
4651 program->num_views);
4656 program->arg_buffer &
4661 program->index_list_addr_buffer + 4);
4664 program->index_list_addr_buffer);
4666 program->num_views);
4671 if (program->support_base_instance) {
4672 if (program->increment_draw_id) {
4675 program->arg_buffer & ~0xfull,
4679 program->index_list_addr_buffer + 4);
4682 program->index_list_addr_buffer);
4685 program->num_views);
4691 program->arg_buffer & ~0xfull,
4695 program->index_list_addr_buffer + 4);
4698 program->index_list_addr_buffer);
4701 program->num_views);
4706 program->arg_buffer &
4711 program->index_list_addr_buffer + 4);
4714 program->index_list_addr_buffer);
4716 program->num_views);
4721 if (program->support_base_instance) {
4722 if (program->increment_draw_id) {
4725 program->arg_buffer & ~0xfull,
4729 program->index_list_addr_buffer + 4);
4732 program->index_list_addr_buffer);
4735 program->num_views);
4741 program->arg_buffer & ~0xfull,
4745 program->index_list_addr_buffer + 4);
4748 program->index_list_addr_buffer);
4751 program->num_views);
4756 program->arg_buffer &
4761 program->index_list_addr_buffer + 4);
4764 program->index_list_addr_buffer);
4766 program->num_views);
4788 struct pvr_pds_drawindirect_program *restrict program,
4796 switch ((program->arg_buffer >> 2) % 4) {
4798 if (program->support_base_instance) {
4799 if (program->increment_draw_id) {
4810 if (program->support_base_instance) {
4811 if (program->increment_draw_id) {
4822 if (program->support_base_instance) {
4823 if (program->increment_draw_id) {
4834 if (program->support_base_instance) {
4835 if (program->increment_draw_id) {
4858 program->program = *psc_program;
4860 switch ((program->arg_buffer >> 2) % 4) {
4862 if (program->support_base_instance) {
4863 if (program->increment_draw_id) {
4866 program->arg_buffer & ~0xfull,
4870 program->index_list_addr_buffer);
4873 program->index_list_addr_buffer);
4876 program->num_views);
4879 program->index_stride);
4882 program->index_buffer);
4885 program->index_block_header);
4891 program->arg_buffer & ~0xfull,
4895 program->index_list_addr_buffer);
4898 program->index_list_addr_buffer);
4901 program->num_views);
4904 program->index_stride);
4907 program->index_buffer);
4910 program->index_block_header);
4916 program->arg_buffer &
4921 program->index_list_addr_buffer);
4924 program->index_list_addr_buffer);
4926 program->num_views);
4928 program->index_stride);
4930 program->index_buffer);
4933 program->index_block_header);
4938 if (program->support_base_instance) {
4939 if (program->increment_draw_id) {
4942 program->arg_buffer & ~0xfull,
4946 program->index_list_addr_buffer);
4949 program->index_list_addr_buffer);
4952 program->num_views);
4955 program->index_stride);
4958 program->index_buffer);
4961 program->index_block_header);
4967 program->arg_buffer & ~0xfull,
4971 program->index_list_addr_buffer);
4974 program->index_list_addr_buffer);
4977 program->num_views);
4980 program->index_stride);
4983 program->index_buffer);
4986 program->index_block_header);
4992 program->arg_buffer &
4997 program->index_list_addr_buffer);
5000 program->index_list_addr_buffer);
5002 program->num_views);
5004 program->index_stride);
5006 program->index_buffer);
5009 program->index_block_header);
5014 if (program->support_base_instance) {
5015 if (program->increment_draw_id) {
5018 program->arg_buffer & ~0xfull,
5022 program->index_list_addr_buffer);
5025 program->index_list_addr_buffer);
5028 program->num_views);
5031 program->index_stride);
5034 program->index_buffer);
5037 program->index_block_header);
5043 program->arg_buffer & ~0xfull,
5047 program->index_list_addr_buffer);
5050 program->index_list_addr_buffer);
5053 program->num_views);
5056 program->index_stride);
5059 program->index_buffer);
5062 program->index_block_header);
5068 program->arg_buffer &
5073 program->index_list_addr_buffer);
5076 program->index_list_addr_buffer);
5078 program->num_views);
5080 program->index_stride);
5082 program->index_buffer);
5085 program->index_block_header);
5090 if (program->support_base_instance) {
5091 if (program->increment_draw_id) {
5094 program->arg_buffer & ~0xfull,
5098 program->index_list_addr_buffer);
5101 program->index_list_addr_buffer);
5104 program->num_views);
5107 program->index_stride);
5110 program->index_buffer);
5113 program->index_block_header);
5119 program->arg_buffer & ~0xfull,
5123 program->index_list_addr_buffer);
5126 program->index_list_addr_buffer);
5129 program->num_views);
5132 program->index_stride);
5135 program->index_buffer);
5138 program->index_block_header);
5144 program->arg_buffer &
5149 program->index_list_addr_buffer);
5152 program->index_list_addr_buffer);
5154 program->num_views);
5156 program->index_stride);
5158 program->index_buffer);
5161 program->index_block_header);