Lines Matching refs:job
42 v3dX(start_binning)(struct v3d_context *v3d, struct v3d_job *job)
44 assert(job->needs_flush);
50 v3d_cl_ensure_space_with_branch(&job->bcl, 256 /* XXX */);
52 job->submit.bcl_start = job->bcl.bo->offset;
53 v3d_job_add_bo(job, job->bcl.bo);
59 MAX2(job->num_layers, 1) * job->draw_tiles_x * job->draw_tiles_y * 64;
76 job->tile_alloc = v3d_bo_alloc(v3d->screen, tile_alloc_size,
79 job->tile_state = v3d_bo_alloc(v3d->screen,
80 MAX2(job->num_layers, 1) *
81 job->draw_tiles_y *
82 job->draw_tiles_x *
90 if (job->num_layers > 0) {
91 cl_emit(&job->bcl, NUMBER_OF_LAYERS, config) {
92 config.number_of_layers = job->num_layers;
97 assert(!job->msaa || !job->double_buffer);
99 cl_emit(&job->bcl, TILE_BINNING_MODE_CFG, config) {
100 config.width_in_pixels = job->draw_width;
101 config.height_in_pixels = job->draw_height;
103 MAX2(job->nr_cbufs, 1);
105 config.multisample_mode_4x = job->msaa;
106 config.double_buffer_in_non_ms_mode = job->double_buffer;
108 config.maximum_bpp_of_all_render_targets = job->internal_bpp;
116 cl_emit(&job->bcl, TILE_BINNING_MODE_CFG_PART2, config) {
118 cl_address(job->tile_alloc, 0);
119 config.tile_allocation_memory_size = job->tile_alloc->size;
122 cl_emit(&job->bcl, TILE_BINNING_MODE_CFG_PART1, config) {
124 cl_address(job->tile_state, 0);
126 config.width_in_tiles = job->draw_tiles_x;
127 config.height_in_tiles = job->draw_tiles_y;
130 MAX2(job->nr_cbufs, 1);
132 config.multisample_mode_4x = job->msaa;
133 config.double_buffer_in_non_ms_mode = job->double_buffer;
135 config.maximum_bpp_of_all_render_targets = job->internal_bpp;
140 cl_emit(&job->bcl, FLUSH_VCD_CACHE, bin);
142 /* Disable any leftover OQ state from another job. */
143 cl_emit(&job->bcl, OCCLUSION_QUERY_COUNTER, counter);
148 cl_emit(&job->bcl, START_TILE_BINNING, bin);
156 struct v3d_job *job = v3d->job;
158 if (job->needs_flush)
161 job->needs_flush = true;
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);
317 v3d_emit_wait_for_tf(struct v3d_job *job)
322 cl_emit(&job->bcl, FLUSH_TRANSFORM_FEEDBACK_DATA, flush);
324 cl_emit(&job->bcl, WAIT_FOR_TRANSFORM_FEEDBACK, wait) {
331 /* We have just flushed all our outstanding TF work in this job so make
334 _mesa_set_clear(job->tf_write_prscs, NULL);
338 v3d_emit_wait_for_tf_if_needed(struct v3d_context *v3d, struct v3d_job *job)
340 if (!job->tf_enabled)
343 set_foreach(job->tf_write_prscs, entry) {
357 v3d_emit_wait_for_tf(job);
366 v3d_emit_gs_state_record(struct v3d_job *job,
372 cl_emit(&job->indirect, GEOMETRY_SHADER_STATE_RECORD, shader) {
412 v3d_emit_tes_gs_common_params(struct v3d_job *job,
421 cl_emit(&job->indirect, TESSELLATION_GEOMETRY_COMMON_PARAMS, shader) {
452 v3d_emit_tes_gs_shader_params(struct v3d_job *job,
457 cl_emit(&job->indirect, TESSELLATION_GEOMETRY_SHADER_PARAMS, shader) {
486 struct v3d_job *job = v3d->job;
494 v3d_write_uniforms(v3d, job, v3d->prog.fs,
500 gs_uniforms = v3d_write_uniforms(v3d, job, v3d->prog.gs,
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;
519 job->tmu_dirty_rcl |=
523 job->tmu_dirty_rcl |=
526 job->tmu_dirty_rcl |= v3d->prog.fs->prog_data.fs->base.tmu_dirty_rcl;
550 v3d_cl_ensure_space(&job->indirect,
574 v3d_emit_gs_state_record(v3d->job,
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,
599 cl_emit(&job->indirect, GL_SHADER_STATE_RECORD, shader) {
743 cl_emit_with_prepacked(&job->indirect,
780 cl_emit(&job->indirect, GL_SHADER_STATE_ATTRIBUTE_RECORD, attr) {
782 attr.address = cl_address(job->indirect.bo, 0);
794 cl_emit(&job->bcl, VCM_CACHE_SIZE, vcm) {
801 cl_emit(&job->bcl, GL_SHADER_STATE_INCLUDING_GS, state) {
802 state.address = cl_address(job->indirect.bo,
807 cl_emit(&job->bcl, GL_SHADER_STATE, state) {
808 state.address = cl_address(job->indirect.bo,
815 cl_emit(&job->bcl, GL_SHADER_STATE, state) {
816 state.address = cl_address(job->indirect.bo, shader_rec_offset);
852 v3d_update_job_ez(struct v3d_context *v3d, struct v3d_job *job)
856 * in this job. This will cause us to disable EZ for the entire job in
858 * make sure we never emit a draw call in the job with EZ enabled in
861 if (job->first_ez_state == V3D_EZ_DISABLED) {
862 assert(job->ez_state == V3D_EZ_DISABLED);
866 /* If this is the first time we update EZ state for this job we first
868 * for the entire job (based on state that is not related to the
871 if (!job->decided_global_ez_enable) {
872 job->decided_global_ez_enable = true;
874 if (!job->zsbuf) {
875 job->first_ez_state = V3D_EZ_DISABLED;
876 job->ez_state = V3D_EZ_DISABLED;
884 bool needs_depth_load = v3d->zsa && job->zsbuf &&
886 (PIPE_CLEAR_DEPTH & ~job->clear);
888 ((job->draw_width % 2 != 0) || (job->draw_height % 2 != 0))) {
891 job->first_ez_state = V3D_EZ_DISABLED;
892 job->ez_state = V3D_EZ_DISABLED;
910 if (job->ez_state == V3D_EZ_UNDECIDED)
911 job->ez_state = v3d->zsa->ez_state;
912 else if (job->ez_state != v3d->zsa->ez_state)
913 job->ez_state = V3D_EZ_DISABLED;
921 job->ez_state = V3D_EZ_DISABLED;
931 job->ez_state = V3D_EZ_DISABLED;
934 if (job->first_ez_state == V3D_EZ_UNDECIDED &&
935 (job->ez_state != V3D_EZ_DISABLED || job->draw_calls_queued == 0))
936 job->first_ez_state = job->ez_state;
1012 * we need to submit the job before drawing and update the vertex count
1022 struct v3d_job *job = v3d_get_job_for_fbo(v3d);
1035 job->submit.in_sync_bcl = v3d->out_sync;
1042 job->submit.in_sync_bcl = v3d->out_sync;
1051 v3d_job_add_write_resource(job,
1053 job->tmu_dirty_rcl = true;
1057 v3d_job_add_write_resource(job,
1059 job->tmu_dirty_rcl = true;
1066 v3d_cl_ensure_space_with_branch(&job->bcl, 256 /* XXX */);
1077 v3d_update_job_ez(v3d, job);
1079 /* If this job was writing to transform feedback buffers before this
1084 * current draw call, where we update job->tf_enabled, so we can ensure
1087 v3d_emit_wait_for_tf_if_needed(v3d, job);
1120 cl_emit(&job->bcl, BASE_VERTEX_BASE_INSTANCE, base) {
1156 cl_emit(&job->bcl, INDEX_BUFFER_SETUP, ib) {
1163 cl_emit(&job->bcl, INDIRECT_INDEXED_INSTANCED_PRIM_LIST, prim) {
1179 cl_emit(&job->bcl, INDEXED_INSTANCED_PRIM_LIST, prim) {
1195 cl_emit(&job->bcl, INDEXED_PRIM_LIST, prim) {
1214 cl_emit(&job->bcl, INDIRECT_VERTEX_ARRAY_INSTANCED_PRIMS, prim) {
1229 cl_emit(&job->bcl, VERTEX_ARRAY_INSTANCED_PRIMS, prim) {
1242 cl_emit(&job->bcl, VERTEX_ARRAY_PRIMS, prim) {
1254 cl_emit(&job->bcl, TRANSFORM_FEEDBACK_FLUSH_AND_COUNT, flush);
1256 job->draw_calls_queued++;
1258 job->tf_draw_calls_queued++;
1266 if (v3d->zsa && job->zsbuf && v3d->zsa->base.depth_enabled) {
1267 struct v3d_resource *rsc = v3d_resource(job->zsbuf->texture);
1268 v3d_job_add_bo(job, rsc->bo);
1270 job->load |= PIPE_CLEAR_DEPTH & ~job->clear;
1272 job->store |= PIPE_CLEAR_DEPTH;
1276 if (v3d->zsa && job->zsbuf && v3d->zsa->base.stencil[0].enabled) {
1277 struct v3d_resource *rsc = v3d_resource(job->zsbuf->texture);
1281 v3d_job_add_bo(job, rsc->bo);
1283 job->load |= PIPE_CLEAR_STENCIL & ~job->clear;
1286 job->store |= PIPE_CLEAR_STENCIL;
1291 for (int i = 0; i < job->nr_cbufs; i++) {
1295 if (job->store & bit || !job->cbufs[i])
1297 struct v3d_resource *rsc = v3d_resource(job->cbufs[i]->texture);
1299 job->load |= bit & ~job->clear;
1301 job->store |= bit;
1302 v3d_job_add_bo(job, rsc->bo);
1305 if (job->referenced_size > 768 * 1024 * 1024) {
1306 perf_debug("Flushing job with %dkb to try to free up memory\n",
1307 job->referenced_size / 1024);
1367 struct v3d_job *job = v3d_job_create(v3d);
1433 v3d_job_add_bo(job, v3d_resource(v3d->prog.compute->resource)->bo);
1450 struct v3d_cl_reloc uniforms = v3d_write_uniforms(v3d, job,
1453 v3d_job_add_bo(job, uniforms.bo);
1456 /* Pull some job state that was stored in a SUBMIT_CL struct out to
1459 submit.bo_handles = job->submit.bo_handles;
1460 submit.bo_handle_count = job->submit.bo_handle_count;
1487 v3d_job_free(v3d, job);
1534 v3d_tlb_clear(struct v3d_job *job, unsigned buffers,
1538 struct v3d_context *v3d = job->v3d;
1540 if (job->draw_calls_queued) {
1545 buffers &= ~(job->load | job->store);
1555 job->zsbuf &&
1556 util_format_is_depth_and_stencil(job->zsbuf->texture->format)) {
1560 for (int i = 0; i < job->nr_cbufs; i++) {
1594 memcpy(job->clear_color[i], uc.ui, internal_size);
1598 job->clear_color[i][0] = ((clamped_color.ui[0] & 0xff) |
1606 memcpy(job->clear_color[i], uc.ui, internal_size);
1610 job->clear_color[i][0] = ((clamped_color.ui[0] & 0xffff) |
1612 job->clear_color[i][1] = ((clamped_color.ui[2] & 0xffff) |
1618 memcpy(job->clear_color[i], clamped_color.ui, internal_size);
1631 job->clear_z = depth;
1633 job->clear_s = stencil;
1638 job->draw_min_x = 0;
1639 job->draw_min_y = 0;
1640 job->draw_max_x = v3d->framebuffer.width;
1641 job->draw_max_y = v3d->framebuffer.height;
1642 job->clear |= buffers;
1643 job->store |= buffers;
1644 job->scissor.disabled = true;
1656 struct v3d_job *job = v3d_get_job_for_fbo(v3d);
1658 buffers &= ~v3d_tlb_clear(job, buffers, color, depth, stencil);