Lines Matching refs:v3d

42 v3dX(start_binning)(struct v3d_context *v3d, struct v3d_job *job)
76 job->tile_alloc = v3d_bo_alloc(v3d->screen, tile_alloc_size,
78 uint32_t tsda_per_tile_size = v3d->screen->devinfo.ver >= 40 ? 256 : 64;
79 job->tile_state = v3d_bo_alloc(v3d->screen,
154 v3d_start_draw(struct v3d_context *v3d)
156 struct v3d_job *job = v3d->job;
162 job->draw_width = v3d->framebuffer.width;
163 job->draw_height = v3d->framebuffer.height;
164 job->num_layers = util_framebuffer_get_num_layers(&v3d->framebuffer);
166 v3dX(start_binning)(v3d, job);
173 struct v3d_context *v3d = v3d_context(pctx);
176 for (int i = 0; i < v3d->tex[s].num_textures; i++) {
177 struct pipe_sampler_view *pview = v3d->tex[s].textures[i];
186 v3d_flush_jobs_writing_resource(v3d, view->texture,
192 u_foreach_bit(i, v3d->constbuf[s].enabled_mask) {
193 struct pipe_constant_buffer *cb = &v3d->constbuf[s].cb[i];
195 v3d_flush_jobs_writing_resource(v3d, cb->buffer,
202 u_foreach_bit(i, v3d->ssbo[s].enabled_mask) {
203 struct pipe_shader_buffer *sb = &v3d->ssbo[s].sb[i];
205 v3d_flush_jobs_reading_resource(v3d, sb->buffer,
212 u_foreach_bit(i, v3d->shaderimg[s].enabled_mask) {
213 struct v3d_image_view *view = &v3d->shaderimg[s].si[i];
215 v3d_flush_jobs_reading_resource(v3d, view->base.resource,
222 u_foreach_bit(i, v3d->vertexbuf.enabled_mask) {
223 struct pipe_vertex_buffer *vb = &v3d->vertexbuf.vb[i];
225 v3d_flush_jobs_writing_resource(v3d, vb->buffer.resource,
235 struct v3d_context *v3d = v3d_context(pctx);
238 if (v3d_transform_feedback_enabled(v3d)) {
239 struct v3d_streamout_stateobj *so = &v3d->streamout;
247 v3d_flush_jobs_reading_resource(v3d, target->buffer,
259 v3d_state_reads_resource(struct v3d_context *v3d,
267 u_foreach_bit(i, v3d->vertexbuf.enabled_mask) {
268 struct pipe_vertex_buffer *vb = &v3d->vertexbuf.vb[i];
280 u_foreach_bit(i, v3d->constbuf[s].enabled_mask) {
281 struct pipe_constant_buffer *cb = &v3d->constbuf[s].cb[i];
291 u_foreach_bit(i, v3d->ssbo[s].enabled_mask) {
292 struct pipe_shader_buffer *sb = &v3d->ssbo[s].sb[i];
302 for (int i = 0; i < v3d->tex[s].num_textures; i++) {
303 struct pipe_sampler_view *pview = v3d->tex[s].textures[i];
338 v3d_emit_wait_for_tf_if_needed(struct v3d_context *v3d, struct v3d_job *job)
356 if (v3d_state_reads_resource(v3d, prsc, s)) {
483 v3d_emit_gl_shader_state(struct v3d_context *v3d,
486 struct v3d_job *job = v3d->job;
488 struct v3d_vertex_stateobj *vtx = v3d->vtx;
490 struct v3d_vertexbuf_stateobj *vertexbuf = &v3d->vertexbuf;
494 v3d_write_uniforms(v3d, job, v3d->prog.fs,
499 if (v3d->prog.gs) {
500 gs_uniforms = v3d_write_uniforms(v3d, job, v3d->prog.gs,
503 if (v3d->prog.gs_bin) {
504 gs_bin_uniforms = v3d_write_uniforms(v3d, job, v3d->prog.gs_bin,
509 v3d_write_uniforms(v3d, job, v3d->prog.vs,
512 v3d_write_uniforms(v3d, job, v3d->prog.cs,
516 job->tmu_dirty_rcl |= v3d->prog.cs->prog_data.vs->base.tmu_dirty_rcl;
517 job->tmu_dirty_rcl |= v3d->prog.vs->prog_data.vs->base.tmu_dirty_rcl;
518 if (v3d->prog.gs_bin) {
520 v3d->prog.gs_bin->prog_data.gs->base.tmu_dirty_rcl;
522 if (v3d->prog.gs) {
524 v3d->prog.gs->prog_data.gs->base.tmu_dirty_rcl;
526 job->tmu_dirty_rcl |= v3d->prog.fs->prog_data.fs->base.tmu_dirty_rcl;
540 if (v3d->prog.gs) {
563 assert(v3d->screen->devinfo.ver >= 41 || !v3d->prog.gs);
564 v3d_compute_vpm_config(&v3d->screen->devinfo,
565 v3d->prog.cs->prog_data.vs,
566 v3d->prog.vs->prog_data.vs,
567 v3d->prog.gs ? v3d->prog.gs_bin->prog_data.gs : NULL,
568 v3d->prog.gs ? v3d->prog.gs->prog_data.gs : NULL,
572 if (v3d->prog.gs) {
574 v3d_emit_gs_state_record(v3d->job,
575 v3d->prog.gs_bin, gs_bin_uniforms,
576 v3d->prog.gs, gs_uniforms);
578 struct v3d_gs_prog_data *gs = v3d->prog.gs->prog_data.gs;
579 v3d_emit_tes_gs_common_params(v3d->job,
584 v3d_emit_tes_gs_shader_params(v3d->job,
590 v3d_emit_tes_gs_shader_params(v3d->job,
604 v3d->rasterizer->base.point_size_per_vertex);
611 v3d->prog.fs->prog_data.fs->writes_z;
618 v3d->prog.fs->prog_data.fs->disable_ez;
621 v3d->prog.fs->prog_data.fs->uses_center_w;
625 (v3d->prog.gs && v3d->prog.gs->prog_data.gs->uses_pid) ||
626 v3d->prog.fs->prog_data.fs->uses_pid;
628 !v3d->prog.gs && v3d->prog.fs->prog_data.fs->uses_pid;
633 v3d->prog.fs->prog_data.fs->lock_scoreboard_on_first_thrsw;
635 !v3d->prog.fs->prog_data.fs->uses_implicit_point_line_varyings;
639 v3d->prog.fs->prog_data.fs->num_inputs;
646 cl_address(v3d_resource(v3d->prog.cs->resource)->bo,
647 v3d->prog.cs->offset);
649 cl_address(v3d_resource(v3d->prog.vs->resource)->bo,
650 v3d->prog.vs->offset);
652 cl_address(v3d_resource(v3d->prog.fs->resource)->bo,
653 v3d->prog.fs->offset);
659 v3d->prog.cs->prog_data.vs->separate_segments;
661 v3d->prog.vs->prog_data.vs->separate_segments;
664 v3d->prog.cs->prog_data.vs->separate_segments ?
665 v3d->prog.cs->prog_data.vs->vpm_input_size : 1;
667 v3d->prog.vs->prog_data.vs->separate_segments ?
668 v3d->prog.vs->prog_data.vs->vpm_input_size : 1;
671 v3d->prog.cs->prog_data.vs->vpm_output_size;
673 v3d->prog.vs->prog_data.vs->vpm_output_size;
691 v3d->prog.cs->prog_data.vs->base.threads == 4;
693 v3d->prog.vs->prog_data.vs->base.threads == 4;
695 v3d->prog.fs->prog_data.fs->base.threads == 4;
698 v3d->prog.cs->prog_data.vs->base.single_seg;
700 v3d->prog.vs->prog_data.vs->base.single_seg;
702 v3d->prog.fs->prog_data.fs->base.single_seg;
705 v3d->prog.cs->prog_data.vs->base.threads == 4;
707 v3d->prog.cs->prog_data.vs->base.threads == 2;
709 v3d->prog.vs->prog_data.vs->base.threads == 4;
711 v3d->prog.vs->prog_data.vs->base.threads == 2;
713 v3d->prog.fs->prog_data.fs->base.threads == 4;
715 v3d->prog.fs->prog_data.fs->base.threads == 2;
719 v3d->prog.cs->prog_data.vs->uses_vid;
721 v3d->prog.cs->prog_data.vs->uses_iid;
723 v3d->prog.vs->prog_data.vs->uses_vid;
725 v3d->prog.vs->prog_data.vs->uses_iid;
751 v3d->prog.cs->prog_data.vs->vattr_sizes[i];
753 v3d->prog.vs->prog_data.vs->vattr_sizes[i];
763 if (v3d->prog.cs->prog_data.vs->vattr_sizes[i])
800 if (v3d->prog.gs) {
814 assert(!v3d->prog.gs);
838 v3d_update_primitives_generated_counter(struct v3d_context *v3d,
842 assert(!v3d->prog.gs);
844 if (!v3d->active_queries)
848 v3d->prims_generated += prims;
852 v3d_update_job_ez(struct v3d_context *v3d, struct v3d_job *job)
884 bool needs_depth_load = v3d->zsa && job->zsbuf &&
885 v3d->zsa->base.depth_enabled &&
897 switch (v3d->zsa->ez_state) {
911 job->ez_state = v3d->zsa->ez_state;
912 else if (job->ez_state != v3d->zsa->ez_state)
929 if (v3d->prog.fs->prog_data.fs->writes_z &&
930 !v3d->prog.fs->prog_data.fs->writes_z_from_fep) {
940 v3d_check_compiled_shaders(struct v3d_context *v3d)
945 if (!v3d->prog.vs->resource || !v3d->prog.cs->resource) {
947 } else if ((v3d->prog.gs_bin && !v3d->prog.gs_bin->resource) ||
948 (v3d->prog.gs && !v3d->prog.gs->resource)) {
950 } else if (v3d->prog.fs && !v3d->prog.fs->resource) {
981 struct v3d_context *v3d = v3d_context(pctx);
1005 v3d_flush_jobs_writing_resource(v3d, indirect->buffer,
1017 if (v3d->streamout.num_targets > 0 &&
1018 u_base_prim_type(info->mode) != u_base_prim_type(v3d->prim_mode)) {
1019 v3d_update_primitive_counters(v3d);
1022 struct v3d_job *job = v3d_get_job_for_fbo(v3d);
1032 if (v3d->tex[PIPE_SHADER_VERTEX].num_textures || (indirect && indirect->buffer)) {
1035 job->submit.in_sync_bcl = v3d->out_sync;
1041 if (v3d->sync_on_last_compute_job) {
1042 job->submit.in_sync_bcl = v3d->out_sync;
1043 v3d->sync_on_last_compute_job = false;
1050 u_foreach_bit(i, v3d->ssbo[s].enabled_mask) {
1052 v3d->ssbo[s].sb[i].buffer);
1056 u_foreach_bit(i, v3d->shaderimg[s].enabled_mask) {
1058 v3d->shaderimg[s].si[i].base.resource);
1068 if (v3d->prim_mode != info->mode) {
1069 v3d->prim_mode = info->mode;
1070 v3d->dirty |= V3D_DIRTY_PRIM_MODE;
1073 v3d_start_draw(v3d);
1074 v3d_update_compiled_shaders(v3d, info->mode);
1075 if (!v3d_check_compiled_shaders(v3d))
1077 v3d_update_job_ez(v3d, job);
1087 v3d_emit_wait_for_tf_if_needed(v3d, job);
1095 if (v3d->dirty & (V3D_DIRTY_VTXBUF |
1104 v3d->prog.cs->uniform_dirty_bits |
1105 v3d->prog.vs->uniform_dirty_bits |
1106 (v3d->prog.gs_bin ?
1107 v3d->prog.gs_bin->uniform_dirty_bits : 0) |
1108 (v3d->prog.gs ?
1109 v3d->prog.gs->uniform_dirty_bits : 0) |
1110 v3d->prog.fs->uniform_dirty_bits)) {
1111 v3d_emit_gl_shader_state(v3d, info);
1114 v3d->dirty = 0;
1131 if (v3d->streamout.num_targets)
1135 if (!v3d->prog.gs)
1136 v3d_update_primitives_generated_counter(v3d, info, &draws[0]);
1146 u_upload_data(v3d->uploader, start_offset,
1253 if (v3d->streamout.num_targets)
1257 if (v3d->streamout.num_targets)
1263 for (int i = 0; i < v3d->streamout.num_targets; i++)
1264 v3d->streamout.offsets[i] += draws[0].count;
1266 if (v3d->zsa && job->zsbuf && v3d->zsa->base.depth_enabled) {
1271 if (v3d->zsa->base.depth_writemask)
1276 if (v3d->zsa && job->zsbuf && v3d->zsa->base.stencil[0].enabled) {
1284 if (v3d->zsa->base.stencil[0].writemask ||
1285 v3d->zsa->base.stencil[1].writemask) {
1293 int blend_rt = v3d->blend->base.independent_blend_enable ? i : 0;
1300 if (v3d->blend->base.rt[blend_rt].colormask)
1335 struct v3d_context *v3d = v3d_context(pctx);
1336 struct v3d_screen *screen = v3d->screen;
1340 v3d_update_compiled_cs(v3d);
1342 if (!v3d->prog.compute->resource) {
1367 struct v3d_job *job = v3d_job_create(v3d);
1379 memcpy(v3d->compute_num_workgroups, map, 3 * sizeof(uint32_t));
1382 if (v3d->compute_num_workgroups[0] == 0 ||
1383 v3d->compute_num_workgroups[1] == 0 ||
1384 v3d->compute_num_workgroups[2] == 0) {
1391 v3d->compute_num_workgroups[0] = info->grid[0];
1392 v3d->compute_num_workgroups[1] = info->grid[1];
1393 v3d->compute_num_workgroups[2] = info->grid[2];
1398 num_wgs *= v3d->compute_num_workgroups[i];
1399 submit.cfg[i] |= (v3d->compute_num_workgroups[i] <<
1406 v3d->prog.compute->prog_data.compute;
1409 &v3d->screen->devinfo,
1433 v3d_job_add_bo(job, v3d_resource(v3d->prog.compute->resource)->bo);
1434 submit.cfg[5] = (v3d_resource(v3d->prog.compute->resource)->bo->offset +
1435 v3d->prog.compute->offset);
1437 if (v3d->prog.compute->prog_data.base->single_seg)
1439 if (v3d->prog.compute->prog_data.base->threads == 4)
1442 if (v3d->prog.compute->prog_data.compute->shared_size) {
1443 v3d->compute_shared_memory =
1444 v3d_bo_alloc(v3d->screen,
1445 v3d->prog.compute->prog_data.compute->shared_size *
1450 struct v3d_cl_reloc uniforms = v3d_write_uniforms(v3d, job,
1451 v3d->prog.compute,
1463 submit.in_sync = v3d->out_sync;
1464 submit.out_sync = v3d->out_sync;
1466 if (v3d->active_perfmon) {
1468 submit.perfmon_id = v3d->active_perfmon->kperfmon_id;
1471 v3d->last_perfmon = v3d->active_perfmon;
1482 if (v3d->active_perfmon)
1483 v3d->active_perfmon->job_submitted = true;
1487 v3d_job_free(v3d, job);
1492 u_foreach_bit(i, v3d->ssbo[PIPE_SHADER_COMPUTE].enabled_mask) {
1494 v3d->ssbo[PIPE_SHADER_COMPUTE].sb[i].buffer);
1499 u_foreach_bit(i, v3d->shaderimg[PIPE_SHADER_COMPUTE].enabled_mask) {
1501 v3d->shaderimg[PIPE_SHADER_COMPUTE].si[i].base.resource);
1507 v3d_bo_unreference(&v3d->compute_shared_memory);
1515 v3d_draw_clear(struct v3d_context *v3d,
1520 v3d_blitter_save(v3d, false);
1521 util_blitter_clear(v3d->blitter,
1522 v3d->framebuffer.width,
1523 v3d->framebuffer.height,
1524 util_framebuffer_get_num_layers(&v3d->framebuffer),
1526 util_framebuffer_get_num_samples(&v3d->framebuffer) > 1);
1538 struct v3d_context *v3d = job->v3d;
1565 struct pipe_surface *psurf = v3d->framebuffer.cbufs[i];
1582 if (v3d->swap_color_rb & (1 << i)) {
1628 v3d_resource(v3d->framebuffer.zsbuf->texture);
1640 job->draw_max_x = v3d->framebuffer.width;
1641 job->draw_max_y = v3d->framebuffer.height;
1646 v3d_start_draw(v3d);
1655 struct v3d_context *v3d = v3d_context(pctx);
1656 struct v3d_job *job = v3d_get_job_for_fbo(v3d);
1661 v3d_draw_clear(v3d, buffers, color, depth, stencil);