/* Flag that CPU access will be required for the case of VRAM domain */ #define AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED (1 << 0) /* Flag that CPU access will not work, this VRAM domain is invisible */ #define AMDGPU_GEM_CREATE_NO_CPU_ACCESS (1 << 1) /* Flag that USWC attributes should be used for GTT */ #define AMDGPU_GEM_CREATE_CPU_GTT_USWC (1 << 2) /* Flag that the memory should be in VRAM and cleared */ #define AMDGPU_GEM_CREATE_VRAM_CLEARED (1 << 3) /* Flag that allocating the BO should use linear VRAM */ #define AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS (1 << 5) /* Flag that BO is always valid in this VM */ #define AMDGPU_GEM_CREATE_VM_ALWAYS_VALID (1 << 6) /* Flag that BO sharing will be explicitly synchronized */ #define AMDGPU_GEM_CREATE_EXPLICIT_SYNC (1 << 7) /* Flag that indicates allocating MQD gart on GFX9, where the mtype *forthesecondpageonwardshouldbesettoNC.Itshouldnever *beusedbyuserspaceapplications.
*/ #define AMDGPU_GEM_CREATE_CP_MQD_GFX9 (1 << 8) /* Flag that BO may contain sensitive data that must be wiped before *releasingthememory
*/ #define AMDGPU_GEM_CREATE_VRAM_WIPE_ON_RELEASE (1 << 9) /* Flag that BO will be encrypted and that the TMZ bit should be *setinthePTEswhenmappingthisbufferviaGPUVMor *accessingitwithvarioushwblocks
*/ #define AMDGPU_GEM_CREATE_ENCRYPTED (1 << 10) /* Flag that BO will be used only in preemptible context, which does *notrequireGTTmemoryaccounting
*/ #define AMDGPU_GEM_CREATE_PREEMPTIBLE (1 << 11) /* Flag that BO can be discarded under memory pressure without keeping the *content.
*/ #define AMDGPU_GEM_CREATE_DISCARDABLE (1 << 12) /* Flag that BO is shared coherently between multiple devices or CPU threads. *MaydependonGPUinstructionstoflushcachestosystemscopeexplicitly. * *ThisinfluencesthechoiceofMTYPEinthePTEsonGFXv9andlaterGPUsand *mayoverridetheMTYPEselectedinAMDGPU_VA_OP_MAP.
*/ #define AMDGPU_GEM_CREATE_COHERENT (1 << 13) /* Flag that BO should not be cached by GPU. Coherent without having to flush *GPUcachesexplicitly * *ThisinfluencesthechoiceofMTYPEinthePTEsonGFXv9andlaterGPUsand *mayoverridetheMTYPEselectedinAMDGPU_VA_OP_MAP.
*/ #define AMDGPU_GEM_CREATE_UNCACHED (1 << 14) /* Flag that BO should be coherent across devices when using device-level *atomics.MaydependonGPUinstructionstoflushcachestodevicescope *explicitly,promotingthemtosystemscopeautomatically. * *ThisinfluencesthechoiceofMTYPEinthePTEsonGFXv9andlaterGPUsand *mayoverridetheMTYPEselectedinAMDGPU_VA_OP_MAP.
*/ #define AMDGPU_GEM_CREATE_EXT_COHERENT (1 << 15) /* Set PTE.D and recompress during GTT->VRAM moves according to TILING flags. */ #define AMDGPU_GEM_CREATE_GFX12_DCC (1 << 16)
struct drm_amdgpu_gem_create_in { /** the requested memory size */
__u64 bo_size; /** physical start_addr alignment in bytes for some HW requirements */
__u64 alignment; /** the requested memory domains */
__u64 domains; /** allocation flags */
__u64 domain_flags;
};
union drm_amdgpu_gem_create { struct drm_amdgpu_gem_create_in in; struct drm_amdgpu_gem_create_out out;
};
/** Opcode to create new residency list. */ #define AMDGPU_BO_LIST_OP_CREATE 0 /** Opcode to destroy previously created residency list */ #define AMDGPU_BO_LIST_OP_DESTROY 1 /** Opcode to update resource information in the list */ #define AMDGPU_BO_LIST_OP_UPDATE 2
struct drm_amdgpu_bo_list_in { /** Type of operation */
__u32 operation; /** Handle of list or 0 if we want to create one */
__u32 list_handle; /** Number of BOs in list */
__u32 bo_number; /** Size of each element describing BO */
__u32 bo_info_size; /** Pointer to array describing BOs */
__u64 bo_info_ptr;
};
struct drm_amdgpu_bo_list_entry { /** Handle of BO */
__u32 bo_handle; /** New (if specified) BO priority to be used during migration */
__u32 bo_priority;
};
struct drm_amdgpu_bo_list_out { /** Handle of resource list */
__u32 list_handle;
__u32 _pad;
};
union drm_amdgpu_bo_list { struct drm_amdgpu_bo_list_in in; struct drm_amdgpu_bo_list_out out;
};
/* GPU reset status */ #define AMDGPU_CTX_NO_RESET 0 /* this the context caused it */ #define AMDGPU_CTX_GUILTY_RESET 1 /* some other context caused it */ #define AMDGPU_CTX_INNOCENT_RESET 2 /* unknown cause */ #define AMDGPU_CTX_UNKNOWN_RESET 3
/* indicate gpu reset occurred after ctx created */ #define AMDGPU_CTX_QUERY2_FLAGS_RESET (1<<0) /* indicate vram lost occurred after ctx created */ #define AMDGPU_CTX_QUERY2_FLAGS_VRAMLOST (1<<1) /* indicate some job from this context once cause gpu hang */ #define AMDGPU_CTX_QUERY2_FLAGS_GUILTY (1<<2) /* indicate some errors are detected by RAS */ #define AMDGPU_CTX_QUERY2_FLAGS_RAS_CE (1<<3) #define AMDGPU_CTX_QUERY2_FLAGS_RAS_UE (1<<4) /* indicate that the reset hasn't completed yet */ #define AMDGPU_CTX_QUERY2_FLAGS_RESET_IN_PROGRESS (1<<5)
struct { /** For future use, no flags defined so far */
__u64 flags; /** Number of resets caused by this context so far. */
__u32 hangs; /** Reset status since the last call of the ioctl. */
__u32 reset_status;
} state;
struct {
__u32 flags;
__u32 _pad;
} pstate;
};
union drm_amdgpu_ctx { struct drm_amdgpu_ctx_in in; union drm_amdgpu_ctx_out out;
};
/* GFX12 and later: */ #define AMDGPU_TILING_GFX12_SWIZZLE_MODE_SHIFT 0 #define AMDGPU_TILING_GFX12_SWIZZLE_MODE_MASK 0x7 /* These are DCC recompression settings for memory management: */ #define AMDGPU_TILING_GFX12_DCC_MAX_COMPRESSED_BLOCK_SHIFT 3 #define AMDGPU_TILING_GFX12_DCC_MAX_COMPRESSED_BLOCK_MASK 0x3 /* 0:64B, 1:128B, 2:256B */ #define AMDGPU_TILING_GFX12_DCC_NUMBER_TYPE_SHIFT 5 #define AMDGPU_TILING_GFX12_DCC_NUMBER_TYPE_MASK 0x7 /* CB_COLOR0_INFO.NUMBER_TYPE */ #define AMDGPU_TILING_GFX12_DCC_DATA_FORMAT_SHIFT 8 #define AMDGPU_TILING_GFX12_DCC_DATA_FORMAT_MASK 0x3f /* [0:4]:CB_COLOR0_INFO.FORMAT, [5]:MM */ /* When clearing the buffer or moving it from VRAM to GTT, don't compress and set DCC metadata
* to uncompressed. Set when parts of an allocation bypass DCC and read raw data. */ #define AMDGPU_TILING_GFX12_DCC_WRITE_COMPRESS_DISABLE_SHIFT 14 #define AMDGPU_TILING_GFX12_DCC_WRITE_COMPRESS_DISABLE_MASK 0x1 /* bit gap */ #define AMDGPU_TILING_GFX12_SCANOUT_SHIFT 63 #define AMDGPU_TILING_GFX12_SCANOUT_MASK 0x1
/** The same structure is shared for input/output */ struct drm_amdgpu_gem_metadata { /** GEM Object handle */
__u32 handle; /** Do we want get or set metadata */
__u32 op; struct { /** For future use, no flags defined so far */
__u64 flags; /** family specific tiling info */
__u64 tiling_info;
__u32 data_size_bytes;
__u32 data[64];
} data;
};
struct drm_amdgpu_gem_mmap_out { /** mmap offset from the vma offset manager */
__u64 addr_ptr;
};
union drm_amdgpu_gem_mmap { struct drm_amdgpu_gem_mmap_in in; struct drm_amdgpu_gem_mmap_out out;
};
struct drm_amdgpu_gem_wait_idle_in { /** GEM object handle */
__u32 handle; /** For future use, no flags defined so far */
__u32 flags; /** Absolute timeout to wait */
__u64 timeout;
};
struct drm_amdgpu_gem_wait_idle_out { /** BO status: 0 - BO is idle, 1 - BO is busy */
__u32 status; /** Returned current memory domain */
__u32 domain;
};
union drm_amdgpu_gem_wait_idle { struct drm_amdgpu_gem_wait_idle_in in; struct drm_amdgpu_gem_wait_idle_out out;
};
/* Sets or returns a value associated with a buffer. */ struct drm_amdgpu_gem_op { /** GEM object handle */
__u32 handle; /** AMDGPU_GEM_OP_* */
__u32 op; /** Input or return value */
__u64 value;
};
struct drm_amdgpu_cs_in { /** Rendering context id */
__u32 ctx_id; /** Handle of resource list associated with CS */
__u32 bo_list_handle;
__u32 num_chunks;
__u32 flags; /** this points to __u64 * which point to cs chunks */
__u64 chunks;
};
struct drm_amdgpu_cs_out {
__u64 handle;
};
union drm_amdgpu_cs { struct drm_amdgpu_cs_in in; struct drm_amdgpu_cs_out out;
};
/* Specify flags to be used for IB */
/* This IB should be submitted to CE */ #define AMDGPU_IB_FLAG_CE (1<<0)
/* Preamble flag, which means the IB could be dropped if no context switch */ #define AMDGPU_IB_FLAG_PREAMBLE (1<<1)
/* Preempt flag, IB should set Pre_enb bit if PREEMPT flag detected */ #define AMDGPU_IB_FLAG_PREEMPT (1<<2)
/* The IB fence should do the L2 writeback but not invalidate any shader
* caches (L2/vL1/sL1/I$). */ #define AMDGPU_IB_FLAG_TC_WB_NOT_INVALIDATE (1 << 3)
/* Set GDS_COMPUTE_MAX_WAVE_ID = DEFAULT before PACKET3_INDIRECT_BUFFER. *ThiswillresetwaveIDcountersfortheIB.
*/ #define AMDGPU_IB_FLAG_RESET_GDS_MAX_WAVE_ID (1 << 4)
/* Flag the IB as secure (TMZ)
*/ #define AMDGPU_IB_FLAGS_SECURE (1 << 5)
/* Tell KMD to flush and invalidate caches
*/ #define AMDGPU_IB_FLAG_EMIT_MEM_SYNC (1 << 6)
struct drm_amdgpu_cs_chunk_ib {
__u32 _pad; /** AMDGPU_IB_FLAG_* */
__u32 flags; /** Virtual address to begin IB execution */
__u64 va_start; /** Size of submission */
__u32 ib_bytes; /** HW IP to submit to */
__u32 ip_type; /** HW IP index of the same type to submit to */
__u32 ip_instance; /** Ring index to submit to */
__u32 ring;
};
/* Input structure for the INFO ioctl */ struct drm_amdgpu_info { /* Where the return value will be stored */
__u64 return_pointer; /* The size of the return value. Just like "size" in "snprintf",
* it limits how many bytes the kernel can write. */
__u32 return_size; /* The query request id. */
__u32 query;
union { struct {
__u32 id;
__u32 _pad;
} mode_crtc;
struct {
__u32 dword_offset; /** number of registers to read */
__u32 count;
__u32 instance; /** For future use, no flags defined so far */
__u32 flags;
} read_mmr_reg;
struct drm_amdgpu_query_fw query_fw;
struct {
__u32 type;
__u32 offset;
} vbios_info;
struct {
__u32 type;
} sensor_info;
struct {
__u32 type;
} video_cap;
};
};
struct drm_amdgpu_info_gds { /** GDS GFX partition size */
__u32 gds_gfx_partition_size; /** GDS compute partition size */
__u32 compute_partition_size; /** total GDS memory size */
__u32 gds_total_size; /** GWS size per GFX partition */
__u32 gws_per_gfx_partition; /** GSW size per compute partition */
__u32 gws_per_compute_partition; /** OA size per GFX partition */
__u32 oa_per_gfx_partition; /** OA size per compute partition */
__u32 oa_per_compute_partition;
__u32 _pad;
};
struct drm_amdgpu_info_device { /** PCI Device ID */
__u32 device_id; /** Internal chip revision: A0, A1, etc.) */
__u32 chip_rev;
__u32 external_rev; /** Revision id in PCI Config space */
__u32 pci_rev;
__u32 family;
__u32 num_shader_engines;
__u32 num_shader_arrays_per_engine; /* in KHz */
__u32 gpu_counter_freq;
__u64 max_engine_clock;
__u64 max_memory_clock; /* cu information */
__u32 cu_active_number; /* NOTE: cu_ao_mask is INVALID, DON'T use it */
__u32 cu_ao_mask;
__u32 cu_bitmap[4][4]; /** Render backend pipe mask. One render backend is CB+DB. */
__u32 enabled_rb_pipes_mask;
__u32 num_rb_pipes;
__u32 num_hw_gfx_contexts; /* PCIe version (the smaller of the GPU and the CPU/motherboard) */
__u32 pcie_gen;
__u64 ids_flags; /** Starting virtual address for UMDs. */
__u64 virtual_address_offset; /** The maximum virtual address */
__u64 virtual_address_max; /** Required alignment of virtual addresses. */
__u32 virtual_address_alignment; /** Page table entry - fragment size */
__u32 pte_fragment_size;
__u32 gart_page_size; /** constant engine ram size*/
__u32 ce_ram_size; /** video memory type info*/
__u32 vram_type; /** video memory bit width*/
__u32 vram_bit_width; /* vce harvesting instance */
__u32 vce_harvest_config; /* gfx double offchip LDS buffers */
__u32 gc_double_offchip_lds_buf; /* NGG Primitive Buffer */
__u64 prim_buf_gpu_addr; /* NGG Position Buffer */
__u64 pos_buf_gpu_addr; /* NGG Control Sideband */
__u64 cntl_sb_buf_gpu_addr; /* NGG Parameter Cache */
__u64 param_buf_gpu_addr;
__u32 prim_buf_size;
__u32 pos_buf_size;
__u32 cntl_sb_buf_size;
__u32 param_buf_size; /* wavefront size*/
__u32 wave_front_size; /* shader visible vgprs*/
__u32 num_shader_visible_vgprs; /* CU per shader array*/
__u32 num_cu_per_sh; /* number of tcc blocks*/
__u32 num_tcc_blocks; /* gs vgt table depth*/
__u32 gs_vgt_table_depth; /* gs primitive buffer depth*/
__u32 gs_prim_buffer_depth; /* max gs wavefront per vgt*/
__u32 max_gs_waves_per_vgt; /* PCIe number of lanes (the smaller of the GPU and the CPU/motherboard) */
__u32 pcie_num_lanes; /* always on cu bitmap */
__u32 cu_ao_bitmap[4][4]; /** Starting high virtual address for UMDs. */
__u64 high_va_offset; /** The maximum high virtual address */
__u64 high_va_max; /* gfx10 pa_sc_tile_steering_override */
__u32 pa_sc_tile_steering_override; /* disabled TCCs */
__u64 tcc_disabled_mask;
__u64 min_engine_clock;
__u64 min_memory_clock; /* The following fields are only set on gfx11+, older chips set 0. */
__u32 tcp_cache_size; /* AKA GL0, VMEM cache */
__u32 num_sqc_per_wgp;
__u32 sqc_data_cache_size; /* AKA SMEM cache */
__u32 sqc_inst_cache_size;
__u32 gl1c_cache_size;
__u32 gl2c_cache_size;
__u64 mall_size; /* AKA infinity cache */ /* high 32 bits of the rb pipes mask */
__u32 enabled_rb_pipes_mask_hi; /* shadow area size for gfx11 */
__u32 shadow_size; /* shadow area base virtual alignment for gfx11 */
__u32 shadow_alignment; /* context save area size for gfx11 */
__u32 csa_size; /* context save area base virtual alignment for gfx11 */
__u32 csa_alignment; /* Userq IP mask (1 << AMDGPU_HW_IP_*) */
__u32 userq_ip_mask;
__u32 pad;
};
struct drm_amdgpu_info_hw_ip { /** Version of h/w IP */
__u32 hw_ip_version_major;
__u32 hw_ip_version_minor; /** Capabilities */
__u64 capabilities_flags; /** command buffer address start alignment*/
__u32 ib_start_alignment; /** command buffer size alignment*/
__u32 ib_size_alignment; /** Bitmask of available rings. Bit 0 means ring 0, etc. */
__u32 available_rings; /** version info: bits 23:16 major, 15:8 minor, 7:0 revision */
__u32 ip_discovery_version; /* Userq available slots */
__u32 userq_num_slots;
};
struct drm_amdgpu_info_num_handles { /** Max handles as supported by firmware for UVD */
__u32 uvd_max_handles; /** Handles currently in use for UVD */
__u32 uvd_used_handles;
};
struct drm_amdgpu_info_uq_metadata_gfx { /* shadow area size for gfx11 */
__u32 shadow_size; /* shadow area base virtual alignment for gfx11 */
__u32 shadow_alignment; /* context save area size for gfx11 */
__u32 csa_size; /* context save area base virtual alignment for gfx11 */
__u32 csa_alignment;
};
struct drm_amdgpu_info_uq_metadata { union { struct drm_amdgpu_info_uq_metadata_gfx gfx;
};
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.