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