Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/gallium/drivers/v3d/v3dx_job.c
4570 views
1
/*
2
* Copyright © 2014-2017 Broadcom
3
*
4
* Permission is hereby granted, free of charge, to any person obtaining a
5
* copy of this software and associated documentation files (the "Software"),
6
* to deal in the Software without restriction, including without limitation
7
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
* and/or sell copies of the Software, and to permit persons to whom the
9
* Software is furnished to do so, subject to the following conditions:
10
*
11
* The above copyright notice and this permission notice (including the next
12
* paragraph) shall be included in all copies or substantial portions of the
13
* Software.
14
*
15
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21
* IN THE SOFTWARE.
22
*/
23
24
/** @file v3dx_job.c
25
*
26
* V3D version-specific functions for submitting V3D render jobs to the
27
* kernel.
28
*/
29
30
#include "v3d_context.h"
31
#include "broadcom/cle/v3dx_pack.h"
32
33
void v3dX(bcl_epilogue)(struct v3d_context *v3d, struct v3d_job *job)
34
{
35
v3d_cl_ensure_space_with_branch(&job->bcl,
36
cl_packet_length(PRIMITIVE_COUNTS_FEEDBACK) +
37
#if V3D_VERSION >= 41
38
cl_packet_length(TRANSFORM_FEEDBACK_SPECS) +
39
#endif
40
cl_packet_length(FLUSH));
41
42
if (job->tf_enabled) {
43
/* Write primitive counts to memory. */
44
assert(v3d->prim_counts);
45
struct v3d_resource *rsc =
46
v3d_resource(v3d->prim_counts);
47
cl_emit(&job->bcl, PRIMITIVE_COUNTS_FEEDBACK, counter) {
48
counter.address =
49
cl_address(rsc->bo,
50
v3d->prim_counts_offset);
51
counter.read_write_64byte = false;
52
counter.op = 0;
53
}
54
}
55
56
/* Disable TF at the end of the CL, so that the TF block
57
* cleans up and finishes before it gets reset by the next
58
* frame's tile binning mode cfg packet. (SWVC5-718).
59
*/
60
#if V3D_VERSION >= 41
61
if (job->tf_enabled) {
62
cl_emit(&job->bcl, TRANSFORM_FEEDBACK_SPECS, tfe) {
63
tfe.enable = false;
64
};
65
}
66
#endif /* V3D_VERSION >= 41 */
67
68
/* We just FLUSH here to tell the HW to cap the bin CLs with a
69
* return. Any remaining state changes won't be flushed to
70
* the bins first -- you would need FLUSH_ALL for that, but
71
* the HW for hasn't been validated
72
*/
73
cl_emit(&job->bcl, FLUSH, flush);
74
}
75
76