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()
436 * \param last Last DMA in program.
520 * Generates the PDS pixel event program.
522 * \param program Pointer to the PDS pixel event program.
523 * \param buffer Pointer to the buffer for the program.
526 * \returns Pointer to just beyond the buffer for the program.
529 pvr_pds_generate_pixel_event(struct pvr_pds_event_program *restrict program, in pvr_pds_generate_pixel_event() argument
547 (2 * program->num_emit_word_pairs), in pvr_pds_generate_pixel_event()
552 program->num_emit_word_pairs, in pvr_pds_generate_pixel_event()
559 program->task_control.src0); /* DOUTU */ in pvr_pds_generate_pixel_event()
562 /* Emit words for end of tile program. */ in pvr_pds_generate_pixel_event()
563 for (uint32_t i = 0; i < program->num_emit_word_pairs; i++) { in pvr_pds_generate_pixel_event()
566 program->emit_words[(2 * i) + 0], in pvr_pds_generate_pixel_event()
567 program->emit_words[(2 * i) + 1]); in pvr_pds_generate_pixel_event()
571 for (uint32_t i = 0; i < program->num_emit_word_pairs; i++) { in pvr_pds_generate_pixel_event()
579 if (i == (program->num_emit_word_pairs - 1)) in pvr_pds_generate_pixel_event()
588 for (uint32_t i = 0; i < program->num_emit_word_pairs; i++) { in pvr_pds_generate_pixel_event()
604 uint32_t code_size = 1 + program->num_emit_word_pairs; in pvr_pds_generate_pixel_event()
607 program->data_segment = constants; in pvr_pds_generate_pixel_event()
608 program->data_size = data_size; in pvr_pds_generate_pixel_event()
609 program->code_size = code_size; in pvr_pds_generate_pixel_event()
681 * Generates a PDS program to load USC vertex inputs based from one or more
685 * \param program Pointer to the description of the program which should be
692 * 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
2711 * first 2) dwords of the shared registers and the program will issue a in pvr_pds_pixel_shader_uniform_texture_code()
2714 if (program->clear && program->packed_clear) { in pvr_pds_pixel_shader_uniform_texture_code()
2726 /* cc */ 1, /* Only for uniform loading program. */ in pvr_pds_pixel_shader_uniform_texture_code()
2727 /* END */ program->kick_usc ? 0 : 1, /* Last in pvr_pds_pixel_shader_uniform_texture_code()
2736 } else if (program->clear) { in pvr_pds_pixel_shader_uniform_texture_code()
2739 if (program->clear_color_dest_reg & 0x1) { in pvr_pds_pixel_shader_uniform_texture_code()
2758 /* cc */ 1, /* Only for Uniform Loading program */ in pvr_pds_pixel_shader_uniform_texture_code()
2764 /* cc */ 1, /* Only for Uniform Loading program */ in pvr_pds_pixel_shader_uniform_texture_code()
2770 /* cc */ 1, /* Only for uniform loading program */ in pvr_pds_pixel_shader_uniform_texture_code()
2771 /* END */ program->kick_usc ? 0 : 1, /* Last in pvr_pds_pixel_shader_uniform_texture_code()
2798 /* cc */ 1, /* Only for Uniform Loading program */ in pvr_pds_pixel_shader_uniform_texture_code()
2804 /* cc */ 1, /* Only for uniform loading program */ in pvr_pds_pixel_shader_uniform_texture_code()
2805 /* END */ program->kick_usc ? 0 : 1, /* Last in pvr_pds_pixel_shader_uniform_texture_code()
2817 if (program->kick_usc) { in pvr_pds_pixel_shader_uniform_texture_code()
2840 /* End the program. */ in pvr_pds_pixel_shader_uniform_texture_code()
2846 program->num_dword_doutw + program->num_q_word_doutw; in pvr_pds_pixel_shader_uniform_texture_code()
2848 ((program->num_texture_dma_kicks > 0) && in pvr_pds_pixel_shader_uniform_texture_code()
2849 ((program->num_uniform_dma_kicks > 0 || total_num_doutw > 0) || in pvr_pds_pixel_shader_uniform_texture_code()
2850 program->kick_usc)); in pvr_pds_pixel_shader_uniform_texture_code()
2856 * texture OR a uniform update program. in pvr_pds_pixel_shader_uniform_texture_code()
2860 MAX2(1 + program->num_texture_dma_kicks, 2); in pvr_pds_pixel_shader_uniform_texture_code()
2873 if (program->num_texture_dma_kicks > 0) { in pvr_pds_pixel_shader_uniform_texture_code()
2881 dma_address_constant64 + (program->num_texture_dma_kicks * 2); in pvr_pds_pixel_shader_uniform_texture_code()
2883 for (uint32_t dma = 0; dma < program->num_texture_dma_kicks; dma++) { in pvr_pds_pixel_shader_uniform_texture_code()
2891 /* END */ dma == (program->num_texture_dma_kicks - 1), in pvr_pds_pixel_shader_uniform_texture_code()
2902 /* End the program. */ in pvr_pds_pixel_shader_uniform_texture_code()
2912 if (program->kick_usc) { in pvr_pds_pixel_shader_uniform_texture_code()
2921 program->num_dword_doutw + 2 * program->num_q_word_doutw; in pvr_pds_pixel_shader_uniform_texture_code()
2925 program->num_uniform_dma_kicks * 3 + total_size_dma + total_num_doutw, in pvr_pds_pixel_shader_uniform_texture_code()
2928 dma_address_constant64 + program->num_uniform_dma_kicks * 2; in pvr_pds_pixel_shader_uniform_texture_code()
2931 dma_control_constant32 + program->num_uniform_dma_kicks; in pvr_pds_pixel_shader_uniform_texture_code()
2937 for (uint32_t i = 0; i < program->num_q_word_doutw; i++) { in pvr_pds_pixel_shader_uniform_texture_code()
2941 /* END */ !program->num_uniform_dma_kicks && in pvr_pds_pixel_shader_uniform_texture_code()
2942 !program->kick_usc && (i == total_num_doutw - 1), in pvr_pds_pixel_shader_uniform_texture_code()
2950 for (uint32_t i = 0; i < program->num_dword_doutw; i++) { in pvr_pds_pixel_shader_uniform_texture_code()
2954 /* END */ !program->num_uniform_dma_kicks && in pvr_pds_pixel_shader_uniform_texture_code()
2955 !program->kick_usc && (i == program->num_dword_doutw - 1), in pvr_pds_pixel_shader_uniform_texture_code()
2966 if (program->num_uniform_dma_kicks > 0) { in pvr_pds_pixel_shader_uniform_texture_code()
2967 for (uint32_t dma = 0; dma < program->num_uniform_dma_kicks; dma++) { in pvr_pds_pixel_shader_uniform_texture_code()
2974 if (!program->kick_usc && in pvr_pds_pixel_shader_uniform_texture_code()
2975 (dma == program->num_uniform_dma_kicks - 1)) { in pvr_pds_pixel_shader_uniform_texture_code()
2993 if (program->kick_usc) { in pvr_pds_pixel_shader_uniform_texture_code()
3008 } else if (program->num_uniform_dma_kicks == 0 && total_num_doutw == 0) { in pvr_pds_pixel_shader_uniform_texture_code()
3010 /* End the program. */ in pvr_pds_pixel_shader_uniform_texture_code()
3019 program->temps_used = MAX2(temps_used, 1); in pvr_pds_pixel_shader_uniform_texture_code()
3020 program->code_size = code_size; in pvr_pds_pixel_shader_uniform_texture_code()
3030 * program.
3032 * \param program Pointer to the PDS pixel shader secondary attributes program.
3036 * \returns Pointer to just beyond the buffer for the program/data.
3039 struct pvr_pds_pixel_shader_sa_program *restrict program, in pvr_pds_pixel_shader_uniform_texture_data() argument
3079 * first 2) dwords of the shared registers and the program will issue a in pvr_pds_pixel_shader_uniform_texture_data()
3082 if (program->clear && uniform && program->packed_clear) { in pvr_pds_pixel_shader_uniform_texture_data()
3094 program->clear_color[0], in pvr_pds_pixel_shader_uniform_texture_data()
3095 program->clear_color[1]); in pvr_pds_pixel_shader_uniform_texture_data()
3099 program->clear_color_dest_reg, in pvr_pds_pixel_shader_uniform_texture_data()
3109 } else if (program->clear && uniform) { in pvr_pds_pixel_shader_uniform_texture_data()
3112 if (program->clear_color_dest_reg & 0x1) { in pvr_pds_pixel_shader_uniform_texture_data()
3131 program->clear_color[0]); in pvr_pds_pixel_shader_uniform_texture_data()
3135 program->clear_color[1], in pvr_pds_pixel_shader_uniform_texture_data()
3136 program->clear_color[2]); in pvr_pds_pixel_shader_uniform_texture_data()
3140 program->clear_color[3]); in pvr_pds_pixel_shader_uniform_texture_data()
3144 program->clear_color_dest_reg, in pvr_pds_pixel_shader_uniform_texture_data()
3157 program->clear_color_dest_reg + 1, in pvr_pds_pixel_shader_uniform_texture_data()
3170 program->clear_color_dest_reg + 3, in pvr_pds_pixel_shader_uniform_texture_data()
3197 program->clear_color[0], in pvr_pds_pixel_shader_uniform_texture_data()
3198 program->clear_color[1]); in pvr_pds_pixel_shader_uniform_texture_data()
3202 program->clear_color[2], in pvr_pds_pixel_shader_uniform_texture_data()
3203 program->clear_color[3]); in pvr_pds_pixel_shader_uniform_texture_data()
3207 program->clear_color_dest_reg, in pvr_pds_pixel_shader_uniform_texture_data()
3217 doutw |= (program->clear_color_dest_reg + 2) in pvr_pds_pixel_shader_uniform_texture_data()
3230 if (program->kick_usc) { in pvr_pds_pixel_shader_uniform_texture_data()
3238 program->usc_task_control.src0); /* 64-bit in pvr_pds_pixel_shader_uniform_texture_data()
3248 if (program->kick_usc) { in pvr_pds_pixel_shader_uniform_texture_data()
3256 program->usc_task_control.src0); /* 64-bit Src0 */ in pvr_pds_pixel_shader_uniform_texture_data()
3261 program->num_dword_doutw + program->num_q_word_doutw; in pvr_pds_pixel_shader_uniform_texture_data()
3263 program->num_dword_doutw + 2 * program->num_q_word_doutw; in pvr_pds_pixel_shader_uniform_texture_data()
3270 program->num_uniform_dma_kicks * 3 + in pvr_pds_pixel_shader_uniform_texture_data()
3274 dma_address_constant64 + program->num_uniform_dma_kicks * 2; in pvr_pds_pixel_shader_uniform_texture_data()
3278 dma_control_constant32 + program->num_uniform_dma_kicks; in pvr_pds_pixel_shader_uniform_texture_data()
3282 for (uint32_t i = 0; i < program->num_q_word_doutw; i++) { in pvr_pds_pixel_shader_uniform_texture_data()
3286 program->q_word_doutw_value[2 * i], in pvr_pds_pixel_shader_uniform_texture_data()
3287 program->q_word_doutw_value[2 * i + 1]); in pvr_pds_pixel_shader_uniform_texture_data()
3291 program->q_word_doutw_control[i] | in pvr_pds_pixel_shader_uniform_texture_data()
3292 ((!program->num_uniform_dma_kicks && in pvr_pds_pixel_shader_uniform_texture_data()
3301 for (uint32_t i = 0; i < program->num_dword_doutw; i++) { in pvr_pds_pixel_shader_uniform_texture_data()
3304 program->dword_doutw_value[i]); in pvr_pds_pixel_shader_uniform_texture_data()
3308 program->dword_doutw_control[i] | in pvr_pds_pixel_shader_uniform_texture_data()
3309 ((!program->num_uniform_dma_kicks && in pvr_pds_pixel_shader_uniform_texture_data()
3310 i == program->num_dword_doutw - 1) in pvr_pds_pixel_shader_uniform_texture_data()
3320 if (program->num_uniform_dma_kicks > 0) { in pvr_pds_pixel_shader_uniform_texture_data()
3324 for (kick = 0; kick < program->num_uniform_dma_kicks - 1; in pvr_pds_pixel_shader_uniform_texture_data()
3329 program->uniform_dma_address[kick], in pvr_pds_pixel_shader_uniform_texture_data()
3334 program->uniform_dma_control[kick]); in pvr_pds_pixel_shader_uniform_texture_data()
3342 program->uniform_dma_address[kick], in pvr_pds_pixel_shader_uniform_texture_data()
3348 program->uniform_dma_control[kick] | in pvr_pds_pixel_shader_uniform_texture_data()
3353 } else if (program->num_texture_dma_kicks > 0) { in pvr_pds_pixel_shader_uniform_texture_data()
3359 program->num_texture_dma_kicks * 3, in pvr_pds_pixel_shader_uniform_texture_data()
3362 dma_address_constant64 + (program->num_texture_dma_kicks * 2); in pvr_pds_pixel_shader_uniform_texture_data()
3366 for (kick = 0; kick < program->num_texture_dma_kicks - 1; kick++) { in pvr_pds_pixel_shader_uniform_texture_data()
3370 program->texture_dma_address[kick], in pvr_pds_pixel_shader_uniform_texture_data()
3376 program->texture_dma_control[kick]); in pvr_pds_pixel_shader_uniform_texture_data()
3384 program->texture_dma_address[kick], in pvr_pds_pixel_shader_uniform_texture_data()
3391 program->texture_dma_control[kick] | in pvr_pds_pixel_shader_uniform_texture_data()
3398 program->data_segment = constants; in pvr_pds_pixel_shader_uniform_texture_data()
3401 program->temps_used = MAX2(temps_used, 1); in pvr_pds_pixel_shader_uniform_texture_data()
3402 program->data_size = data_size; in pvr_pds_pixel_shader_uniform_texture_data()
3411 * Generates generic DOUTC PDS program.
3413 * \param program Pointer to the PDS kick USC.
3414 * \param buffer Pointer to the buffer for the program.
3416 * \returns Pointer to just beyond the buffer for the code or program segment.
3418 uint32_t *pvr_pds_generate_doutc(struct pvr_pds_fence_program *restrict program, in pvr_pds_generate_doutc() argument
3434 /* Update the program sizes. */ in pvr_pds_generate_doutc()
3435 program->data_size = data_size; in pvr_pds_generate_doutc()
3436 program->code_size = code_size; in pvr_pds_generate_doutc()
3437 program->data_segment = constants; in pvr_pds_generate_doutc()
3456 program->data_size = data_size; in pvr_pds_generate_doutc()
3467 /* End the program. */ in pvr_pds_generate_doutc()
3471 program->code_size = code_size; in pvr_pds_generate_doutc()
3478 * Generates generic kick DOUTU PDS program in a single data+code block.
3481 * \param buffer Pointer to the buffer for the program.
3484 * \returns Pointer to just beyond the buffer for the code or program segment.
3572 /* End the program. */ in pvr_pds_generate_doutw()
3587 * Generates generic kick DOUTU PDS program in a single data+code block.
3589 * \param program Pointer to the PDS kick USC.
3590 * \param buffer Pointer to the buffer for the program.
3595 * \returns Pointer to just beyond the buffer for the code or program segment.
3597 uint32_t *pvr_pds_kick_usc(struct pvr_pds_kickusc_program *restrict program, in pvr_pds_kick_usc() argument
3616 /* Update the program sizes. */ in pvr_pds_kick_usc()
3617 program->data_size = data_size; in pvr_pds_kick_usc()
3618 program->code_size = code_size; in pvr_pds_kick_usc()
3619 program->data_segment = constants; in pvr_pds_kick_usc()
3632 program->usc_task_control.src0); /* 64-bit in pvr_pds_kick_usc()
3705 * Generates program to kick the USC task to store shared.
3707 * \param program Pointer to the PDS shared register.
3708 * \param buffer Pointer to the buffer for the program.
3711 * \returns Pointer to just beyond the buffer for the program.
3714 struct pvr_pds_shared_storing_program *restrict program, in pvr_pds_generate_shared_storing_program() argument
3719 struct pvr_pds_kickusc_program *kick_usc_program = &program->usc_task; in pvr_pds_generate_shared_storing_program()
3720 struct pvr_pds_doutw_control *doutw_control = &program->doutw_control; in pvr_pds_generate_shared_storing_program()
3730 program->data_size = doutw_control->data_size; in pvr_pds_generate_shared_storing_program()
3735 program->cc_enable, in pvr_pds_generate_shared_storing_program()
3737 program->data_size += kick_usc_program->data_size; in pvr_pds_generate_shared_storing_program()
3752 program->code_size = doutw_control->code_size; in pvr_pds_generate_shared_storing_program()
3758 program->cc_enable, in pvr_pds_generate_shared_storing_program()
3760 program->code_size += kick_usc_program->code_size; in pvr_pds_generate_shared_storing_program()
3770 struct pvr_pds_fence_program *restrict program, in pvr_pds_generate_fence_terminate_program() argument
3785 pvr_pds_generate_doutc(program, constants, PDS_GENERATE_DATA_SEGMENT); in pvr_pds_generate_fence_terminate_program()
3786 data_size += program->data_size; in pvr_pds_generate_fence_terminate_program()
3792 program->fence_constant_word = in pvr_pds_generate_fence_terminate_program()
3796 program->data_size = data_size; in pvr_pds_generate_fence_terminate_program()
3821 (program->fence_constant_word >> 1), /* src1 = 1 */ in pvr_pds_generate_fence_terminate_program()
3850 instruction = pvr_pds_generate_doutc(program, in pvr_pds_generate_fence_terminate_program()
3853 code_size += program->code_size; in pvr_pds_generate_fence_terminate_program()
3855 program->code_size = code_size; in pvr_pds_generate_fence_terminate_program()
3864 * Generates program to kick the USC task to load shared registers from memory.
3866 * \param program Pointer to the PDS shared register.
3867 * \param buffer Pointer to the buffer for the program.
3870 * \returns Pointer to just beyond the buffer for the program.
3873 struct pvr_pds_shared_storing_program *restrict program, in pvr_pds_generate_compute_shared_loading_program() argument
3878 struct pvr_pds_kickusc_program *kick_usc_program = &program->usc_task; in pvr_pds_generate_compute_shared_loading_program()
3879 struct pvr_pds_doutw_control *doutw_control = &program->doutw_control; in pvr_pds_generate_compute_shared_loading_program()
3904 program->cc_enable, in pvr_pds_generate_compute_shared_loading_program()
3921 program->data_size = data_size; in pvr_pds_generate_compute_shared_loading_program()
3966 program->cc_enable, in pvr_pds_generate_compute_shared_loading_program()
3970 program->code_size = code_size; in pvr_pds_generate_compute_shared_loading_program()
3982 * initialized for program generation.
3984 * \param program Pointer to the PDS pixel shader program.
3985 * \param buffer Pointer to the buffer for the program.
3987 * \returns Pointer to just beyond the buffer for the program.
3990 struct pvr_pds_coeff_loading_program *restrict program, in pvr_pds_coefficient_loading() argument
4004 program->data_segment = constants; in pvr_pds_coefficient_loading()
4009 total_data_size += 2 * program->num_fpu_iterators; in pvr_pds_coefficient_loading()
4010 code_size += program->num_fpu_iterators; in pvr_pds_coefficient_loading()
4024 while (iterator < program->num_fpu_iterators) { in pvr_pds_coefficient_loading()
4032 (uint64_t)program->FPU_iterators[iterator] in pvr_pds_coefficient_loading()
4037 (uint64_t)program->destination[iterator++] in pvr_pds_coefficient_loading()
4043 if (iterator >= program->num_fpu_iterators) { in pvr_pds_coefficient_loading()
4068 program->temps_used = 1; in pvr_pds_coefficient_loading()
4069 program->data_size = total_data_size; in pvr_pds_coefficient_loading()
4070 program->code_size = code_size; in pvr_pds_coefficient_loading()
4088 * \param buffer Pointer to the buffer for the program.
4092 * \returns Pointer to just beyond the buffer for the program.
4273 * \param program Pointer to the stream out program.
4274 * \param buffer Pointer to the buffer for the program.
4279 * \returns Pointer to just beyond the buffer for the program.
4282 struct pvr_pds_stream_out_init_program *restrict program, in pvr_pds_generate_stream_out_init_program() argument
4303 for (uint32_t index = 0; index < program->num_buffers; index++) { in pvr_pds_generate_stream_out_init_program()
4304 if (program->dev_address_for_buffer_data[index] != 0) { in pvr_pds_generate_stream_out_init_program()
4305 /* Generate load/store program to load/store persistent temps. */ in pvr_pds_generate_stream_out_init_program()
4314 program->dev_address_for_buffer_data[index], in pvr_pds_generate_stream_out_init_program()
4315 program->pds_buffer_data_size[index], in pvr_pds_generate_stream_out_init_program()
4325 PTDst += program->pds_buffer_data_size[index]; in pvr_pds_generate_stream_out_init_program()
4336 /* Save size information to program */ in pvr_pds_generate_stream_out_init_program()
4337 program->stream_out_init_pds_data_size = in pvr_pds_generate_stream_out_init_program()
4339 /* PDS program code size. */ in pvr_pds_generate_stream_out_init_program()
4340 program->stream_out_init_pds_code_size = total_code_size; in pvr_pds_generate_stream_out_init_program()
4343 return buffer + program->stream_out_init_pds_data_size; in pvr_pds_generate_stream_out_init_program()
4351 * Generate stream out terminate program for stream out.
4359 * The stream out terminate program is used to update the PPP state and the data
4362 * \param program Pointer to the stream out program.
4363 * \param buffer Pointer to the buffer for the program.
4366 * \returns Pointer to just beyond the buffer for the program.
4369 struct pvr_pds_stream_out_terminate_program *restrict program, in pvr_pds_generate_stream_out_terminate_program() argument
4380 /* Generate store program to store persistent temps. */ in pvr_pds_generate_stream_out_terminate_program()
4385 program->dev_address_for_storing_persistent_temp, in pvr_pds_generate_stream_out_terminate_program()
4386 program->pds_persistent_temp_size_to_store, in pvr_pds_generate_stream_out_terminate_program()
4401 /* Save size information to program. */ in pvr_pds_generate_stream_out_terminate_program()
4402 program->stream_out_terminate_pds_data_size = in pvr_pds_generate_stream_out_terminate_program()
4404 /* PDS program code size. */ in pvr_pds_generate_stream_out_terminate_program()
4405 program->stream_out_terminate_pds_code_size = total_code_size; in pvr_pds_generate_stream_out_terminate_program()
4408 return buffer + program->stream_out_terminate_pds_data_size; in pvr_pds_generate_stream_out_terminate_program()
4499 struct pvr_pds_drawindirect_program *restrict program, in pvr_pds_generate_draw_arrays_indirect() argument
4507 switch ((program->arg_buffer >> 2) % 4) { in pvr_pds_generate_draw_arrays_indirect()
4509 if (program->support_base_instance) { in pvr_pds_generate_draw_arrays_indirect()
4510 if (program->increment_draw_id) { in pvr_pds_generate_draw_arrays_indirect()
4521 if (program->support_base_instance) { in pvr_pds_generate_draw_arrays_indirect()
4522 if (program->increment_draw_id) { in pvr_pds_generate_draw_arrays_indirect()
4533 if (program->support_base_instance) { in pvr_pds_generate_draw_arrays_indirect()
4534 if (program->increment_draw_id) { in pvr_pds_generate_draw_arrays_indirect()
4545 if (program->support_base_instance) { in pvr_pds_generate_draw_arrays_indirect()
4546 if (program->increment_draw_id) { in pvr_pds_generate_draw_arrays_indirect()
4568 program->program = *psc_program; in pvr_pds_generate_draw_arrays_indirect()
4570 switch ((program->arg_buffer >> 2) % 4) { in pvr_pds_generate_draw_arrays_indirect()
4572 if (program->support_base_instance) { in pvr_pds_generate_draw_arrays_indirect()
4573 if (program->increment_draw_id) { in pvr_pds_generate_draw_arrays_indirect()
4576 program->arg_buffer & ~0xfull, in pvr_pds_generate_draw_arrays_indirect()
4580 program->index_list_addr_buffer + 4); in pvr_pds_generate_draw_arrays_indirect()
4583 program->index_list_addr_buffer); in pvr_pds_generate_draw_arrays_indirect()
4586 program->num_views); in pvr_pds_generate_draw_arrays_indirect()
4592 program->arg_buffer & ~0xfull, in pvr_pds_generate_draw_arrays_indirect()
4596 program->index_list_addr_buffer + 4); in pvr_pds_generate_draw_arrays_indirect()
4599 program->index_list_addr_buffer); in pvr_pds_generate_draw_arrays_indirect()
4602 program->num_views); in pvr_pds_generate_draw_arrays_indirect()
4607 program->arg_buffer & in pvr_pds_generate_draw_arrays_indirect()
4612 program->index_list_addr_buffer + 4); in pvr_pds_generate_draw_arrays_indirect()
4615 program->index_list_addr_buffer); in pvr_pds_generate_draw_arrays_indirect()
4617 program->num_views); in pvr_pds_generate_draw_arrays_indirect()
4622 if (program->support_base_instance) { in pvr_pds_generate_draw_arrays_indirect()
4623 if (program->increment_draw_id) { in pvr_pds_generate_draw_arrays_indirect()
4626 program->arg_buffer & ~0xfull, in pvr_pds_generate_draw_arrays_indirect()
4630 program->index_list_addr_buffer + 4); in pvr_pds_generate_draw_arrays_indirect()
4633 program->index_list_addr_buffer); in pvr_pds_generate_draw_arrays_indirect()
4636 program->num_views); in pvr_pds_generate_draw_arrays_indirect()
4642 program->arg_buffer & ~0xfull, in pvr_pds_generate_draw_arrays_indirect()
4646 program->index_list_addr_buffer + 4); in pvr_pds_generate_draw_arrays_indirect()
4649 program->index_list_addr_buffer); in pvr_pds_generate_draw_arrays_indirect()
4652 program->num_views); in pvr_pds_generate_draw_arrays_indirect()
4657 program->arg_buffer & in pvr_pds_generate_draw_arrays_indirect()
4662 program->index_list_addr_buffer + 4); in pvr_pds_generate_draw_arrays_indirect()
4665 program->index_list_addr_buffer); in pvr_pds_generate_draw_arrays_indirect()
4667 program->num_views); in pvr_pds_generate_draw_arrays_indirect()
4672 if (program->support_base_instance) { in pvr_pds_generate_draw_arrays_indirect()
4673 if (program->increment_draw_id) { in pvr_pds_generate_draw_arrays_indirect()
4676 program->arg_buffer & ~0xfull, in pvr_pds_generate_draw_arrays_indirect()
4680 program->index_list_addr_buffer + 4); in pvr_pds_generate_draw_arrays_indirect()
4683 program->index_list_addr_buffer); in pvr_pds_generate_draw_arrays_indirect()
4686 program->num_views); in pvr_pds_generate_draw_arrays_indirect()
4692 program->arg_buffer & ~0xfull, in pvr_pds_generate_draw_arrays_indirect()
4696 program->index_list_addr_buffer + 4); in pvr_pds_generate_draw_arrays_indirect()
4699 program->index_list_addr_buffer); in pvr_pds_generate_draw_arrays_indirect()
4702 program->num_views); in pvr_pds_generate_draw_arrays_indirect()
4707 program->arg_buffer & in pvr_pds_generate_draw_arrays_indirect()
4712 program->index_list_addr_buffer + 4); in pvr_pds_generate_draw_arrays_indirect()
4715 program->index_list_addr_buffer); in pvr_pds_generate_draw_arrays_indirect()
4717 program->num_views); in pvr_pds_generate_draw_arrays_indirect()
4722 if (program->support_base_instance) { in pvr_pds_generate_draw_arrays_indirect()
4723 if (program->increment_draw_id) { in pvr_pds_generate_draw_arrays_indirect()
4726 program->arg_buffer & ~0xfull, in pvr_pds_generate_draw_arrays_indirect()
4730 program->index_list_addr_buffer + 4); in pvr_pds_generate_draw_arrays_indirect()
4733 program->index_list_addr_buffer); in pvr_pds_generate_draw_arrays_indirect()
4736 program->num_views); in pvr_pds_generate_draw_arrays_indirect()
4742 program->arg_buffer & ~0xfull, in pvr_pds_generate_draw_arrays_indirect()
4746 program->index_list_addr_buffer + 4); in pvr_pds_generate_draw_arrays_indirect()
4749 program->index_list_addr_buffer); in pvr_pds_generate_draw_arrays_indirect()
4752 program->num_views); in pvr_pds_generate_draw_arrays_indirect()
4757 program->arg_buffer & in pvr_pds_generate_draw_arrays_indirect()
4762 program->index_list_addr_buffer + 4); in pvr_pds_generate_draw_arrays_indirect()
4765 program->index_list_addr_buffer); in pvr_pds_generate_draw_arrays_indirect()
4767 program->num_views); in pvr_pds_generate_draw_arrays_indirect()
4789 struct pvr_pds_drawindirect_program *restrict program, in pvr_pds_generate_draw_elements_indirect() argument
4797 switch ((program->arg_buffer >> 2) % 4) { in pvr_pds_generate_draw_elements_indirect()
4799 if (program->support_base_instance) { in pvr_pds_generate_draw_elements_indirect()
4800 if (program->increment_draw_id) { in pvr_pds_generate_draw_elements_indirect()
4811 if (program->support_base_instance) { in pvr_pds_generate_draw_elements_indirect()
4812 if (program->increment_draw_id) { in pvr_pds_generate_draw_elements_indirect()
4823 if (program->support_base_instance) { in pvr_pds_generate_draw_elements_indirect()
4824 if (program->increment_draw_id) { in pvr_pds_generate_draw_elements_indirect()
4835 if (program->support_base_instance) { in pvr_pds_generate_draw_elements_indirect()
4836 if (program->increment_draw_id) { in pvr_pds_generate_draw_elements_indirect()
4859 program->program = *psc_program; in pvr_pds_generate_draw_elements_indirect()
4861 switch ((program->arg_buffer >> 2) % 4) { in pvr_pds_generate_draw_elements_indirect()
4863 if (program->support_base_instance) { in pvr_pds_generate_draw_elements_indirect()
4864 if (program->increment_draw_id) { in pvr_pds_generate_draw_elements_indirect()
4867 program->arg_buffer & ~0xfull, in pvr_pds_generate_draw_elements_indirect()
4871 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
4874 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
4877 program->num_views); in pvr_pds_generate_draw_elements_indirect()
4880 program->index_stride); in pvr_pds_generate_draw_elements_indirect()
4883 program->index_buffer); in pvr_pds_generate_draw_elements_indirect()
4886 program->index_block_header); in pvr_pds_generate_draw_elements_indirect()
4892 program->arg_buffer & ~0xfull, in pvr_pds_generate_draw_elements_indirect()
4896 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
4899 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
4902 program->num_views); in pvr_pds_generate_draw_elements_indirect()
4905 program->index_stride); in pvr_pds_generate_draw_elements_indirect()
4908 program->index_buffer); in pvr_pds_generate_draw_elements_indirect()
4911 program->index_block_header); in pvr_pds_generate_draw_elements_indirect()
4917 program->arg_buffer & in pvr_pds_generate_draw_elements_indirect()
4922 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
4925 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
4927 program->num_views); in pvr_pds_generate_draw_elements_indirect()
4929 program->index_stride); in pvr_pds_generate_draw_elements_indirect()
4931 program->index_buffer); in pvr_pds_generate_draw_elements_indirect()
4934 program->index_block_header); in pvr_pds_generate_draw_elements_indirect()
4939 if (program->support_base_instance) { in pvr_pds_generate_draw_elements_indirect()
4940 if (program->increment_draw_id) { in pvr_pds_generate_draw_elements_indirect()
4943 program->arg_buffer & ~0xfull, in pvr_pds_generate_draw_elements_indirect()
4947 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
4950 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
4953 program->num_views); in pvr_pds_generate_draw_elements_indirect()
4956 program->index_stride); in pvr_pds_generate_draw_elements_indirect()
4959 program->index_buffer); in pvr_pds_generate_draw_elements_indirect()
4962 program->index_block_header); in pvr_pds_generate_draw_elements_indirect()
4968 program->arg_buffer & ~0xfull, in pvr_pds_generate_draw_elements_indirect()
4972 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
4975 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
4978 program->num_views); in pvr_pds_generate_draw_elements_indirect()
4981 program->index_stride); in pvr_pds_generate_draw_elements_indirect()
4984 program->index_buffer); in pvr_pds_generate_draw_elements_indirect()
4987 program->index_block_header); in pvr_pds_generate_draw_elements_indirect()
4993 program->arg_buffer & in pvr_pds_generate_draw_elements_indirect()
4998 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
5001 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
5003 program->num_views); in pvr_pds_generate_draw_elements_indirect()
5005 program->index_stride); in pvr_pds_generate_draw_elements_indirect()
5007 program->index_buffer); in pvr_pds_generate_draw_elements_indirect()
5010 program->index_block_header); in pvr_pds_generate_draw_elements_indirect()
5015 if (program->support_base_instance) { in pvr_pds_generate_draw_elements_indirect()
5016 if (program->increment_draw_id) { in pvr_pds_generate_draw_elements_indirect()
5019 program->arg_buffer & ~0xfull, in pvr_pds_generate_draw_elements_indirect()
5023 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
5026 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
5029 program->num_views); in pvr_pds_generate_draw_elements_indirect()
5032 program->index_stride); in pvr_pds_generate_draw_elements_indirect()
5035 program->index_buffer); in pvr_pds_generate_draw_elements_indirect()
5038 program->index_block_header); in pvr_pds_generate_draw_elements_indirect()
5044 program->arg_buffer & ~0xfull, in pvr_pds_generate_draw_elements_indirect()
5048 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
5051 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
5054 program->num_views); in pvr_pds_generate_draw_elements_indirect()
5057 program->index_stride); in pvr_pds_generate_draw_elements_indirect()
5060 program->index_buffer); in pvr_pds_generate_draw_elements_indirect()
5063 program->index_block_header); in pvr_pds_generate_draw_elements_indirect()
5069 program->arg_buffer & in pvr_pds_generate_draw_elements_indirect()
5074 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
5077 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
5079 program->num_views); in pvr_pds_generate_draw_elements_indirect()
5081 program->index_stride); in pvr_pds_generate_draw_elements_indirect()
5083 program->index_buffer); in pvr_pds_generate_draw_elements_indirect()
5086 program->index_block_header); in pvr_pds_generate_draw_elements_indirect()
5091 if (program->support_base_instance) { in pvr_pds_generate_draw_elements_indirect()
5092 if (program->increment_draw_id) { in pvr_pds_generate_draw_elements_indirect()
5095 program->arg_buffer & ~0xfull, in pvr_pds_generate_draw_elements_indirect()
5099 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
5102 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
5105 program->num_views); in pvr_pds_generate_draw_elements_indirect()
5108 program->index_stride); in pvr_pds_generate_draw_elements_indirect()
5111 program->index_buffer); in pvr_pds_generate_draw_elements_indirect()
5114 program->index_block_header); in pvr_pds_generate_draw_elements_indirect()
5120 program->arg_buffer & ~0xfull, in pvr_pds_generate_draw_elements_indirect()
5124 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
5127 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
5130 program->num_views); in pvr_pds_generate_draw_elements_indirect()
5133 program->index_stride); in pvr_pds_generate_draw_elements_indirect()
5136 program->index_buffer); in pvr_pds_generate_draw_elements_indirect()
5139 program->index_block_header); in pvr_pds_generate_draw_elements_indirect()
5145 program->arg_buffer & in pvr_pds_generate_draw_elements_indirect()
5150 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
5153 program->index_list_addr_buffer); in pvr_pds_generate_draw_elements_indirect()
5155 program->num_views); in pvr_pds_generate_draw_elements_indirect()
5157 program->index_stride); in pvr_pds_generate_draw_elements_indirect()
5159 program->index_buffer); in pvr_pds_generate_draw_elements_indirect()
5162 program->index_block_header); in pvr_pds_generate_draw_elements_indirect()