Signed-off-by: Boris Brezillon <boris.brezil...@free-electrons.com> --- include/drm-uapi/vc4_drm.h | 156 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 146 insertions(+), 10 deletions(-)
diff --git a/include/drm-uapi/vc4_drm.h b/include/drm-uapi/vc4_drm.h index 3415a4b71884..ca0220257f05 100644 --- a/include/drm-uapi/vc4_drm.h +++ b/include/drm-uapi/vc4_drm.h @@ -42,6 +42,9 @@ extern "C" { #define DRM_VC4_GET_TILING 0x09 #define DRM_VC4_LABEL_BO 0x0a #define DRM_VC4_GEM_MADVISE 0x0b +#define DRM_VC4_PERFMON_CREATE 0x0c +#define DRM_VC4_PERFMON_DESTROY 0x0d +#define DRM_VC4_PERFMON_GET_VALUES 0x0e #define DRM_IOCTL_VC4_SUBMIT_CL DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_SUBMIT_CL, struct drm_vc4_submit_cl) #define DRM_IOCTL_VC4_WAIT_SEQNO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_WAIT_SEQNO, struct drm_vc4_wait_seqno) @@ -55,6 +58,9 @@ extern "C" { #define DRM_IOCTL_VC4_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_TILING, struct drm_vc4_get_tiling) #define DRM_IOCTL_VC4_LABEL_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_LABEL_BO, struct drm_vc4_label_bo) #define DRM_IOCTL_VC4_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GEM_MADVISE, struct drm_vc4_gem_madvise) +#define DRM_IOCTL_VC4_PERFMON_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_CREATE, struct drm_vc4_perfmon_create) +#define DRM_IOCTL_VC4_PERFMON_DESTROY DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_DESTROY, struct drm_vc4_perfmon_destroy) +#define DRM_IOCTL_VC4_PERFMON_GET_VALUES DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_GET_VALUES, struct drm_vc4_perfmon_get_values) struct drm_vc4_submit_rcl_surface { __u32 hindex; /* Handle index, or ~0 if not present. */ @@ -70,6 +76,67 @@ struct drm_vc4_submit_rcl_surface { }; /** + * @VC4_BIN_CL_CHUNK: binner CL chunk + * @VC4_PERFMON_CHUNK: performance monitor chunk + */ +enum { + VC4_BIN_CL_CHUNK, + VC4_PERFMON_CHUNK, +}; + +/** + * struct drm_vc4_submit_cl_chunk - dummy chunk + * @type: extension type + * @pad: unused, should be set to zero + * + * Meant to be used for chunks that do not require extra parameters. + */ +struct drm_vc4_submit_cl_dummy_chunk { + __u32 type; + __u32 pad[3]; +}; + +/** + * struct drm_vc4_submit_cl_bin_chunk - binner CL chunk + * + * @type: extention type, should be set to %VC4_BIN_CL_CHUNK + * @size: size in bytes of the binner CL + * @ptr: userspace pointer to the binner CL + */ +struct drm_vc4_submit_cl_bin_chunk { + __u32 type; + __u32 size; + __u64 ptr; +}; + +/** + * struct drm_vc4_submit_cl_perfmon_chunk - performance monitor extension + * + * @type: extention type, should be set to %VC4_PERFMON_CHUNK + * @id: id of the perfmance monitor previously allocated with + * %DRM_IOCTL_VC4_PERFMON_CREATE + * @pad: unused, should be set to zero + */ +struct drm_vc4_submit_cl_perfmon_chunk { + __u32 type; + __u32 id; + __u64 pad; +}; + +/** + * union drm_vc4_submit_cl_chunk - CL chunk + * + * CL chunks allow us to easily extend the set of arguments one can pass + * to the submit CL ioctl without having to add new ioctls/struct everytime + * we run out of free fields in the drm_vc4_submit_cl struct. + */ +union drm_vc4_submit_cl_chunk { + struct drm_vc4_submit_cl_dummy_chunk dummy; + struct drm_vc4_submit_cl_bin_chunk bin; + struct drm_vc4_submit_cl_perfmon_chunk perfmon; +}; + +/** * struct drm_vc4_submit_cl - ioctl argument for submitting commands to the 3D * engine. * @@ -83,14 +150,23 @@ struct drm_vc4_submit_rcl_surface { * BO. */ struct drm_vc4_submit_cl { - /* Pointer to the binner command list. - * - * This is the first set of commands executed, which runs the - * coordinate shader to determine where primitives land on the screen, - * then writes out the state updates and draw calls necessary per tile - * to the tile allocation BO. - */ - __u64 bin_cl; + union { + /* Pointer to the binner command list. + * + * This is the first set of commands executed, which runs the + * coordinate shader to determine where primitives land on + * the screen, then writes out the state updates and draw calls + * necessary per tile to the tile allocation BO. + */ + __u64 bin_cl; + + /* Pointer to an array of CL chunks. + * + * This is now the preferred way of passing optional attributes + * when submitting a job. + */ + __u64 cl_chunks; + }; /* Pointer to the shader records. * @@ -120,8 +196,14 @@ struct drm_vc4_submit_cl { __u64 uniforms; __u64 bo_handles; - /* Size in bytes of the binner command list. */ - __u32 bin_cl_size; + union { + /* Size in bytes of the binner command list. */ + __u32 bin_cl_size; + + /* Number of entries in the CL extension array. */ + __u32 num_cl_chunks; + }; + /* Size in bytes of the set of shader records. */ __u32 shader_rec_size; /* Number of shader records. @@ -167,6 +249,7 @@ struct drm_vc4_submit_cl { #define VC4_SUBMIT_CL_FIXED_RCL_ORDER (1 << 1) #define VC4_SUBMIT_CL_RCL_ORDER_INCREASING_X (1 << 2) #define VC4_SUBMIT_CL_RCL_ORDER_INCREASING_Y (1 << 3) +#define VC4_SUBMIT_CL_EXTENDED (1 << 4) __u32 flags; /* Returned value of the seqno of this render job (for the @@ -308,6 +391,8 @@ struct drm_vc4_get_hang_state { #define DRM_VC4_PARAM_SUPPORTS_THREADED_FS 5 #define DRM_VC4_PARAM_SUPPORTS_FIXED_RCL_ORDER 6 #define DRM_VC4_PARAM_SUPPORTS_MADVISE 7 +#define DRM_VC4_PARAM_SUPPORTS_EXTENDED_CL 8 +#define DRM_VC4_PARAM_SUPPORTS_PERFMON 9 struct drm_vc4_get_param { __u32 param; @@ -352,6 +437,57 @@ struct drm_vc4_gem_madvise { __u32 pad; }; +enum { + VC4_PERFCNT_FEP_VALID_PRIMS_NO_RENDER, + VC4_PERFCNT_FEP_VALID_PRIMS_RENDER, + VC4_PERFCNT_FEP_CLIPPED_QUADS, + VC4_PERFCNT_FEP_VALID_QUADS, + VC4_PERFCNT_TLB_QUADS_NOT_PASSING_STENCIL, + VC4_PERFCNT_TLB_QUADS_NOT_PASSING_Z_AND_STENCIL, + VC4_PERFCNT_TLB_QUADS_PASSING_Z_AND_STENCIL, + VC4_PERFCNT_TLB_QUADS_ZERO_COVERAGE, + VC4_PERFCNT_TLB_QUADS_NON_ZERO_COVERAGE, + VC4_PERFCNT_TLB_QUADS_WRITTEN_TO_COLOR_BUF, + VC4_PERFCNT_PLB_PRIMS_OUTSIDE_VIEWPORT, + VC4_PERFCNT_PLB_PRIMS_NEED_CLIPPING, + VC4_PERFCNT_PSE_PRIMS_REVERSED, + VC4_PERFCNT_QPU_TOTAL_IDLE_CYCLES, + VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_VERTEX_COORD_SHADING, + VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_FRAGMENT_SHADING, + VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_EXEC_VALID_INST, + VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_TMUS, + VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_SCOREBOARD, + VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_VARYINGS, + VC4_PERFCNT_QPU_TOTAL_INST_CACHE_HIT, + VC4_PERFCNT_QPU_TOTAL_INST_CACHE_MISS, + VC4_PERFCNT_QPU_TOTAL_UNIFORM_CACHE_HIT, + VC4_PERFCNT_QPU_TOTAL_UNIFORM_CACHE_MISS, + VC4_PERFCNT_TMU_TOTAL_TEXT_QUADS_PROCESSED, + VC4_PERFCNT_TMU_TOTAL_TEXT_CACHE_MISS, + VC4_PERFCNT_VPM_TOTAL_CLK_CYCLES_VDW_STALLED, + VC4_PERFCNT_VPM_TOTAL_CLK_CYCLES_VCD_STALLED, + VC4_PERFCNT_L2C_TOTAL_L2_CACHE_HIT, + VC4_PERFCNT_L2C_TOTAL_L2_CACHE_MISS, + VC4_PERFCNT_NUM_EVENTS, +}; + +#define DRM_VC4_MAX_PERF_COUNTERS 16 + +struct drm_vc4_perfmon_create { + __u32 id; + __u32 ncounters; + __u8 events[DRM_VC4_MAX_PERF_COUNTERS]; +}; + +struct drm_vc4_perfmon_destroy { + __u32 id; +}; + +struct drm_vc4_perfmon_get_values { + __u32 id; + __u64 values_ptr; +}; + #if defined(__cplusplus) } #endif -- 2.11.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev