STRUCT DRM_PVR_IOCTL_CREATE_HWRT_DATASET_ARGS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 struct drm_pvr_ioctl_create_hwrt_dataset_args(9) 🌸

okay so this is a page from the Kernel API Manual, and bestie, it's literally the struct that holds the args for %DRM_IOCTL_PVR_CREATE_HWRT_DATASET. yes it's a long name. no we're not scared of it. πŸ’…


✨ NAME ✨

struct drm_pvr_ioctl_create_hwrt_dataset_args β€” the arguments for %DRM_IOCTL_PVR_CREATE_HWRT_DATASET, periodt.


πŸŽ€ SYNOPSIS πŸŽ€

struct drm_pvr_ioctl_create_hwrt_dataset_args {
    struct drm_pvr_create_hwrt_geom_data_args geom_data_args;
    struct drm_pvr_create_hwrt_rt_data_args rt_data_args[2];
    __u32 free_list_handles[2];
    __u32 width;
    __u32 height;
    __u32 samples;
    __u32 layers;
    __u32 isp_merge_lower_x;
    __u32 isp_merge_lower_y;
    __u32 isp_merge_scale_x;
    __u32 isp_merge_scale_y;
    __u32 isp_merge_upper_x;
    __u32 isp_merge_upper_y;
    __u32 region_header_size;
    __u32 handle;
 };

look at her. iconic. now let's meet the members one by one 🫢


πŸ¦‹ MEMBERS πŸ¦‹

  • geom_data_args β€” [IN] the geometry data arguments. that's the vibe, that's the assignment.
  • rt_data_args β€” [IN] an array of render target arguments.

so like, each entry in this array is literally one render target in a double buffered setup. two of them. double the buffering, double the fun πŸ’–

  • free_list_handles β€” [IN] array of free list handles.

and here's the tea: free_list_handles[PVR_DRM_HWRT_FREE_LIST_LOCAL] must have an initial size of at least whatever drm_pvr_dev_query_runtime_info.free_list_min_pages reports. like, that's the minimum, don't come in under it, that's not the move πŸ™ˆ

  • width β€” [IN] width in pixels. pixels!! πŸ“
  • height β€” [IN] height in pixels. also pixels. matching energy.
  • samples β€” [IN] number of samples.
  • layers β€” [IN] number of layers. we love a layered situation.
  • isp_merge_lower_x β€” [IN] lower X coefficient for triangle merging.
  • isp_merge_lower_y β€” [IN] lower Y coefficient for triangle merging.
  • isp_merge_scale_x β€” [IN] scale X coefficient for triangle merging.
  • isp_merge_scale_y β€” [IN] scale Y coefficient for triangle merging.
  • isp_merge_upper_x β€” [IN] upper X coefficient for triangle merging.
  • isp_merge_upper_y β€” [IN] upper Y coefficient for triangle merging.

(yes, six whole coefficients. x and y, lower, scale and upper. triangles are out here getting merged with precision πŸ’…)

  • region_header_size β€” [IN] size of the region header array. and this common field is shared by both render targets in this data set. teamwork!
⚠️ okay important: the units for this field are not fixed β€” they differ depending on which version of the simple internal parameter format the device uses. if format 2 is in use, then this is interpreted as the number of region headers. for other formats it's interpreted as the size in dwords. so like… know your format, bestie, don't guess 😭
  • handle β€” [OUT] handle for the created HWRT dataset. that's the whole point, that's the payoff, you get a handle back ✨

🌈 SEE ALSO 🌈

this list is long long, but we're gonna read all of it because every single one matters:

Kernel file ./include/uapi/drm/pvr_drm.h PowerVR UAPI(9), struct drm_pvr_obj_array(9), DRM_PVR_OBJ_ARRAY(9), PowerVR IOCTL interface(9), PVR_IOCTL(9), PowerVR IOCTL DEV_QUERY interface(9), struct drm_pvr_dev_query_gpu_info(9), struct drm_pvr_dev_query_runtime_info(9), struct drm_pvr_dev_query_quirks(9), struct drm_pvr_dev_query_enhancements(9), enum drm_pvr_heap_id(9), struct drm_pvr_heap(9), struct drm_pvr_dev_query_heap_info(9), enum drm_pvr_static_data_area_usage(9), struct drm_pvr_static_data_area(9), struct drm_pvr_dev_query_static_data_areas(9), enum drm_pvr_dev_query(9), struct drm_pvr_ioctl_dev_query_args(9), PowerVR IOCTL CREATE_BO interface(9), Flags for CREATE_BO(9), struct drm_pvr_ioctl_create_bo_args(9), PowerVR IOCTL GET_BO_MMAP_OFFSET interface(9), struct drm_pvr_ioctl_get_bo_mmap_offset_args(9), PowerVR IOCTL CREATE_VM_CONTEXT and DESTROY_VM_CONTEXT interfaces(9), struct drm_pvr_ioctl_create_vm_context_args(9), struct drm_pvr_ioctl_destroy_vm_context_args(9), PowerVR IOCTL VM_MAP and VM_UNMAP interfaces(9), struct drm_pvr_ioctl_vm_map_args(9), struct drm_pvr_ioctl_vm_unmap_args(9), PowerVR IOCTL CREATE_CONTEXT and DESTROY_CONTEXT interfaces(9), enum drm_pvr_ctx_priority(9), enum drm_pvr_ctx_type(9), struct drm_pvr_ioctl_create_context_args(9), struct drm_pvr_ioctl_destroy_context_args(9), PowerVR IOCTL CREATE_FREE_LIST and DESTROY_FREE_LIST interfaces(9), struct drm_pvr_ioctl_create_free_list_args(9), struct drm_pvr_ioctl_destroy_free_list_args(9), PowerVR IOCTL CREATE_HWRT_DATASET and DESTROY_HWRT_DATASET interfaces(9), struct drm_pvr_create_hwrt_geom_data_args(9), struct drm_pvr_create_hwrt_rt_data_args(9), struct drm_pvr_ioctl_destroy_hwrt_dataset_args(9), PowerVR IOCTL SUBMIT_JOBS interface(9), Flags for the drm_pvr_sync_op object.(9), struct drm_pvr_sync_op(9), Flags for SUBMIT_JOB ioctl geometry command.(9), Flags for SUBMIT_JOB ioctl fragment command.(9), Flags for SUBMIT_JOB ioctl compute command.(9), Flags for SUBMIT_JOB ioctl transfer command.(9), enum drm_pvr_job_type(9), struct drm_pvr_hwrt_data_ref(9), struct drm_pvr_job(9), struct drm_pvr_ioctl_submit_jobs_args(9)


ok that's the whole page, you ate that, go forth and create HWRT datasets responsibly πŸ§šβ€β™€οΈ

mwah πŸ’‹ β€” this one lives in ./include/uapi/drm, dated October 2026, and we're signing off from the Kernel API Manual. see u in the next manpage bestie πŸŽ€

πŸ“¦ where this page comes from