Lines Matching refs:v3d
41 v3d_get_compiled_shader(struct v3d_context *v3d,
205 v3d_shader_precompile(struct v3d_context *v3d,
227 v3d_get_compiled_shader(v3d, &key.base, sizeof(key));
240 v3d_get_compiled_shader(v3d, &key.base, sizeof(key));
250 v3d_get_compiled_shader(v3d, &key.base, sizeof(key));
265 v3d_get_compiled_shader(v3d, &key.base, sizeof(key));
275 v3d_get_compiled_shader(v3d, &key.base, sizeof(key));
283 struct v3d_context *v3d = v3d_context(pctx);
288 so->program_id = v3d->next_uncompiled_program_id++;
341 v3d_shader_precompile(v3d, so);
349 struct v3d_context *v3d = data;
351 util_debug_message(&v3d->debug, SHADER_INFO, "%s", message);
371 v3d_get_compiled_shader(struct v3d_context *v3d,
378 struct hash_table *ht = v3d->prog.cache[s->info.stage];
389 shader = v3d_disk_cache_retrieve(v3d, key);
399 qpu_insts = v3d_compile(v3d->screen->compiler, key,
402 v3d,
407 u_upload_data(v3d->state_uploader, 0, shader_size, 8,
412 v3d_disk_cache_store(v3d, key, shader, qpu_insts, shader_size);
428 v3d->prog.spill_size_per_thread) {
434 int total_spill_size = (v3d->screen->devinfo.qpu_count * 4 *
437 v3d_bo_unreference(&v3d->prog.spill_bo);
438 v3d->prog.spill_bo = v3d_bo_alloc(v3d->screen,
440 v3d->prog.spill_size_per_thread =
455 v3d_setup_shared_key(struct v3d_context *v3d, struct v3d_key *key,
458 const struct v3d_device_info *devinfo = &v3d->screen->devinfo;
537 v3d_update_compiled_fs(struct v3d_context *v3d, uint8_t prim_mode)
539 struct v3d_job *job = v3d->job;
542 nir_shader *s = v3d->prog.bind_fs->base.ir.nir;
544 if (!(v3d->dirty & (V3D_DIRTY_PRIM_MODE |
556 v3d_setup_shared_key(v3d, &key->base, &v3d->tex[PIPE_SHADER_FRAGMENT]);
557 key->base.shader_state = v3d->prog.bind_fs;
558 key->base.ucp_enables = v3d->rasterizer->base.clip_plane_enable;
563 v3d_line_smoothing_enabled(v3d));
564 key->has_gs = v3d->prog.bind_gs != NULL;
565 if (v3d->blend->base.logicop_enable) {
566 key->logicop_func = v3d->blend->base.logicop_func;
571 key->msaa = v3d->rasterizer->base.multisample;
572 key->sample_coverage = (v3d->rasterizer->base.multisample &&
573 v3d->sample_mask != (1 << V3D_MAX_SAMPLES) - 1);
574 key->sample_alpha_to_coverage = v3d->blend->base.alpha_to_coverage;
575 key->sample_alpha_to_one = v3d->blend->base.alpha_to_one;
578 key->swap_color_rb = v3d->swap_color_rb;
580 for (int i = 0; i < v3d->framebuffer.nr_cbufs; i++) {
581 struct pipe_surface *cbuf = v3d->framebuffer.cbufs[i];
598 v3d_get_format_swizzle(&v3d->screen->devinfo,
621 v3d->rasterizer->base.sprite_coord_enable;
626 struct v3d_compiled_shader *old_fs = v3d->prog.fs;
627 v3d->prog.fs = v3d_get_compiled_shader(v3d, &key->base, sizeof(*key));
628 if (v3d->prog.fs == old_fs)
631 v3d->dirty |= V3D_DIRTY_COMPILED_FS;
634 if (v3d->prog.fs->prog_data.fs->flat_shade_flags !=
636 v3d->dirty |= V3D_DIRTY_FLAT_SHADE_FLAGS;
639 if (v3d->prog.fs->prog_data.fs->noperspective_flags !=
641 v3d->dirty |= V3D_DIRTY_NOPERSPECTIVE_FLAGS;
644 if (v3d->prog.fs->prog_data.fs->centroid_flags !=
646 v3d->dirty |= V3D_DIRTY_CENTROID_FLAGS;
650 if (old_fs && memcmp(v3d->prog.fs->prog_data.fs->input_slots,
652 sizeof(v3d->prog.fs->prog_data.fs->input_slots))) {
653 v3d->dirty |= V3D_DIRTY_FS_INPUTS;
658 v3d_update_compiled_gs(struct v3d_context *v3d, uint8_t prim_mode)
663 if (!(v3d->dirty & (V3D_DIRTY_GEOMTEX |
671 if (!v3d->prog.bind_gs) {
672 v3d->prog.gs = NULL;
673 v3d->prog.gs_bin = NULL;
678 v3d_setup_shared_key(v3d, &key->base, &v3d->tex[PIPE_SHADER_GEOMETRY]);
679 key->base.shader_state = v3d->prog.bind_gs;
680 key->base.ucp_enables = v3d->rasterizer->base.clip_plane_enable;
682 key->num_used_outputs = v3d->prog.fs->prog_data.fs->num_inputs;
684 sizeof(v3d->prog.fs->prog_data.fs->input_slots));
685 memcpy(key->used_outputs, v3d->prog.fs->prog_data.fs->input_slots,
690 v3d->rasterizer->base.point_size_per_vertex);
693 v3d_get_compiled_shader(v3d, &key->base, sizeof(*key));
694 if (gs != v3d->prog.gs) {
695 v3d->prog.gs = gs;
696 v3d->dirty |= V3D_DIRTY_COMPILED_GS;
716 struct v3d_compiled_shader *old_gs = v3d->prog.gs;
718 v3d_get_compiled_shader(v3d, &key->base, sizeof(*key));
720 v3d->prog.gs_bin = gs_bin;
721 v3d->dirty |= V3D_DIRTY_COMPILED_GS_BIN;
724 if (old_gs && memcmp(v3d->prog.gs->prog_data.gs->input_slots,
726 sizeof(v3d->prog.gs->prog_data.gs->input_slots))) {
727 v3d->dirty |= V3D_DIRTY_GS_INPUTS;
732 v3d_update_compiled_vs(struct v3d_context *v3d, uint8_t prim_mode)
737 if (!(v3d->dirty & (V3D_DIRTY_VERTTEX |
740 (v3d->prog.bind_gs ? 0 : V3D_DIRTY_RASTERIZER) |
741 (v3d->prog.bind_gs ? 0 : V3D_DIRTY_PRIM_MODE) |
742 (v3d->prog.bind_gs ? V3D_DIRTY_GS_INPUTS :
748 v3d_setup_shared_key(v3d, &key->base, &v3d->tex[PIPE_SHADER_VERTEX]);
749 key->base.shader_state = v3d->prog.bind_vs;
750 key->base.ucp_enables = v3d->rasterizer->base.clip_plane_enable;
751 key->base.is_last_geometry_stage = !v3d->prog.bind_gs;
753 if (!v3d->prog.bind_gs) {
754 key->num_used_outputs = v3d->prog.fs->prog_data.fs->num_inputs;
756 sizeof(v3d->prog.fs->prog_data.fs->input_slots));
757 memcpy(key->used_outputs, v3d->prog.fs->prog_data.fs->input_slots,
760 key->num_used_outputs = v3d->prog.gs->prog_data.gs->num_inputs;
762 sizeof(v3d->prog.gs->prog_data.gs->input_slots));
763 memcpy(key->used_outputs, v3d->prog.gs->prog_data.gs->input_slots,
769 v3d->rasterizer->base.point_size_per_vertex);
771 nir_shader *s = v3d->prog.bind_vs->base.ir.nir;
773 assert(util_bitcount(inputs_read) <= v3d->vtx->num_elements);
781 switch (v3d->vtx->pipe[driver_location].src_format) {
795 v3d_get_compiled_shader(v3d, &key->base, sizeof(*key));
796 if (vs != v3d->prog.vs) {
797 v3d->prog.vs = vs;
798 v3d->dirty |= V3D_DIRTY_COMPILED_VS;
809 if (!v3d->prog.bind_gs) {
825 key->num_used_outputs = v3d->prog.gs_bin->prog_data.gs->num_inputs;
827 sizeof(v3d->prog.gs_bin->prog_data.gs->input_slots));
828 memcpy(key->used_outputs, v3d->prog.gs_bin->prog_data.gs->input_slots,
833 v3d_get_compiled_shader(v3d, &key->base, sizeof(*key));
834 if (cs != v3d->prog.cs) {
835 v3d->prog.cs = cs;
836 v3d->dirty |= V3D_DIRTY_COMPILED_CS;
841 v3d_update_compiled_shaders(struct v3d_context *v3d, uint8_t prim_mode)
843 v3d_update_compiled_fs(v3d, prim_mode);
844 v3d_update_compiled_gs(v3d, prim_mode);
845 v3d_update_compiled_vs(v3d, prim_mode);
849 v3d_update_compiled_cs(struct v3d_context *v3d)
854 if (!(v3d->dirty & (V3D_DIRTY_UNCOMPILED_CS |
860 v3d_setup_shared_key(v3d, key, &v3d->tex[PIPE_SHADER_COMPUTE]);
861 key->shader_state = v3d->prog.bind_compute;
864 v3d_get_compiled_shader(v3d, key, sizeof(*key));
865 if (cs != v3d->prog.compute) {
866 v3d->prog.compute = cs;
867 v3d->dirty |= V3D_DIRTY_COMPILED_CS; /* XXX */
922 struct v3d_context *v3d = v3d_context(pctx);
926 hash_table_foreach(v3d->prog.cache[s->info.stage], entry) {
933 if (v3d->prog.fs == shader)
934 v3d->prog.fs = NULL;
935 if (v3d->prog.vs == shader)
936 v3d->prog.vs = NULL;
937 if (v3d->prog.cs == shader)
938 v3d->prog.cs = NULL;
939 if (v3d->prog.compute == shader)
940 v3d->prog.compute = NULL;
942 _mesa_hash_table_remove(v3d->prog.cache[s->info.stage], entry);
953 struct v3d_context *v3d = v3d_context(pctx);
954 v3d->prog.bind_fs = hwcso;
955 v3d->dirty |= V3D_DIRTY_UNCOMPILED_FS;
961 struct v3d_context *v3d = v3d_context(pctx);
962 v3d->prog.bind_gs = hwcso;
963 v3d->dirty |= V3D_DIRTY_UNCOMPILED_GS;
969 struct v3d_context *v3d = v3d_context(pctx);
970 v3d->prog.bind_vs = hwcso;
971 v3d->dirty |= V3D_DIRTY_UNCOMPILED_VS;
977 struct v3d_context *v3d = v3d_context(pctx);
979 v3d->prog.bind_compute = state;
980 v3d->dirty |= V3D_DIRTY_UNCOMPILED_CS;
994 struct v3d_context *v3d = v3d_context(pctx);
1009 if (v3d->screen->has_csd) {
1015 v3d->prog.cache[MESA_SHADER_VERTEX] =
1017 v3d->prog.cache[MESA_SHADER_GEOMETRY] =
1019 v3d->prog.cache[MESA_SHADER_FRAGMENT] =
1021 v3d->prog.cache[MESA_SHADER_COMPUTE] =
1028 struct v3d_context *v3d = v3d_context(pctx);
1031 struct hash_table *cache = v3d->prog.cache[i];
1042 v3d_bo_unreference(&v3d->prog.spill_bo);