History

drm/v3d: Create a CPU job extension for the copy performance query job

A CPU job is a type of job that performs operations that requires CPU intervention. A copy performance query job is a job that copy the complete or partial result of a query to a buffer. In order to copy the result of a performance query to a buffer, we need to get the values from the performance monitors. So, create a user extension for the CPU job that enables the creation of a copy performance query job. This user extension will allow the creation of a CPU job that copy the results of a performance query to a BO with the possibility to indicate the availability with a availability bit.

Maíra Canal committed 2 years ago

Commit 209e8d21 parent bae7cb54 files · +198 −0Browse files

Showing the changes to include/uapi/drm (1 of 4 files). Show all

Unified · Split

include/uapi/drm/v3d_drm.h+50−0
@@ -77,6 +77,7 @@ struct drm_v3d_extension { · 76 unmodified lines
7777 #define DRM_V3D_EXT_ID_CPU_RESET_TIMESTAMP_QUERY 0x04
7878 #define DRM_V3D_EXT_ID_CPU_COPY_TIMESTAMP_QUERY 0x05
7979 #define DRM_V3D_EXT_ID_CPU_RESET_PERFORMANCE_QUERY 0x06
80+#define DRM_V3D_EXT_ID_CPU_COPY_PERFORMANCE_QUERY 0x07
8081 __u32 flags; /* mbz */
8182 };
8283
@@ -519,6 +520,52 @@ struct drm_v3d_reset_performance_query { · 436 unmodified lines
519520 __u64 kperfmon_ids;
520521 };
521522
523+/**
524+ * struct drm_v3d_copy_performance_query - ioctl extension for the CPU job to copy
525+ * performance query results to a buffer
526+ *
527+ * When an extension DRM_V3D_EXT_ID_CPU_COPY_PERFORMANCE_QUERY is defined, it
528+ * points to this extension to define a copy performance query submission. This
529+ * CPU job will copy the performance queries results to a BO with the offset
530+ * and stride defined in the extension.
531+ */
532+struct drm_v3d_copy_performance_query {
533+ struct drm_v3d_extension base;
534+
535+ /* Define if should write to buffer using 64 or 32 bits */
536+ __u8 do_64bit;
537+
538+ /* Define if it can write to buffer even if the query is not available */
539+ __u8 do_partial;
540+
541+ /* Define if it should write availability bit to buffer */
542+ __u8 availability_bit;
543+
544+ /* mbz */
545+ __u8 pad;
546+
547+ /* Offset of the buffer in the BO */
548+ __u32 offset;
549+
550+ /* Stride of the buffer in the BO */
551+ __u32 stride;
552+
553+ /* Number of performance monitors */
554+ __u32 nperfmons;
555+
556+ /* Number of performance counters related to this query pool */
557+ __u32 ncounters;
558+
559+ /* Number of queries */
560+ __u32 count;
561+
562+ /* Array of performance queries's syncobjs to indicate its availability */
563+ __u64 syncs;
564+
565+ /* Array of u64 user-pointers that point to an array of kperfmon_ids */
566+ __u64 kperfmon_ids;
567+};
568+
522569 struct drm_v3d_submit_cpu {
523570 /* Pointer to a u32 array of the BOs that are referenced by the job.
524571 *
@@ -537,6 +584,9 @@ struct drm_v3d_submit_cpu { · 12 unmodified lines
537584 *
538585 * For DRM_V3D_EXT_ID_CPU_RESET_PERFORMANCE_QUERY, it must contain no
539586 * BOs.
587+ *
588+ * For DRM_V3D_EXT_ID_CPU_COPY_PERFORMANCE_QUERY, it must contain one
589+ * BO, where the performance queries will be written.
540590 */
541591 __u64 bo_handles;
542592