# GpuInfo 使用示例 ## 概述 GpuInfo类提供了获取设备GPU(图形处理器)详细信息的功能,包括Vulkan和OpenGL ES的硬件信息,如供应商、型号、显存、API版本、扩展等。 ## 主要功能 1. 获取GPU供应商(AMD、ARM、Qualcomm、Mali等) 2. 获取GPU型号(Adreno 650、Mali-G78等) 3. Vulkan API支持检测和版本信息 4. OpenGL ES版本和扩展信息 5. EGL版本和扩展信息 6. GPU设备类型(集成显卡、独立显卡等) 7. 驱动版本信息 ## 使用方法 ### 1. 初始化AndInfo ```kotlin import com.xyzshell.andinfo.AndInfo // 在Application或Activity中初始化 AndInfo.init(applicationContext) ``` ### 2. 获取GpuInfo实例 ```kotlin val gpuInfo = AndInfo.instance.gpu ``` ### 3. 获取GPU基本信息 #### 供应商信息 ```kotlin // 获取GPU供应商名称 val vendorName = gpuInfo.getVendorName() println("GPU供应商: $vendorName") // 输出示例: "GPU供应商: Qualcomm" 或 "GPU供应商: ARM" ``` #### GPU型号 ```kotlin // 获取GPU型号/渲染器名称 val rendererName = gpuInfo.getRendererName() println("GPU型号: $rendererName") // 输出示例: "GPU型号: Adreno (TM) 650" 或 "GPU型号: Mali-G78" ``` #### 设备类型 ```kotlin // 获取GPU设备类型 val deviceType = gpuInfo.getDeviceType() val deviceTypeDesc = gpuInfo.getDeviceTypeDescription() println("设备类型: $deviceTypeDesc") // 输出示例: "设备类型: 集成显卡" ``` ### 4. Vulkan 信息 #### Vulkan支持检测 ```kotlin // 检查是否支持Vulkan API val isVulkanSupported = gpuInfo.isVulkanSupported() println("Vulkan支持: ${if (isVulkanSupported) "是" else "否"}") ``` #### Vulkan API版本 ```kotlin // 获取Vulkan API版本 val vulkanApiVersion = gpuInfo.getVulkanApiVersion() vulkanApiVersion?.let { version -> println("Vulkan API版本: $version") // 输出示例: "Vulkan API版本: 1.3.0" } ``` #### Vulkan驱动版本 ```kotlin // 获取Vulkan驱动版本 val driverVersion = gpuInfo.getVulkanDriverVersion() driverVersion?.let { version -> println("Vulkan驱动版本: $version") // 输出示例: "Vulkan驱动版本: 512459776" } ``` ### 5. OpenGL ES 信息 #### OpenGL ES版本 ```kotlin // 获取OpenGL ES版本 val openglVersion = gpuInfo.getOpenGLVersion() openglVersion?.let { version -> println("OpenGL ES版本: $version") // 输出示例: "OpenGL ES版本: OpenGL ES 3.2 V@0490.0" } ``` #### OpenGL ES扩展 ```kotlin // 获取OpenGL ES扩展列表 val openglExtensions = gpuInfo.getOpenGLExtensions() openglExtensions?.let { extensions -> println("OpenGL ES扩展:") // 扩展字符串通常很长,以空格分隔 val extList = extensions.split(" ").filter { it.isNotEmpty() } extList.take(10).forEach { ext -> println(" - $ext") } println(" ...") } // 获取扩展数量 val extCount = gpuInfo.getOpenGLExtensionCount() println("OpenGL ES扩展数量: $extCount") // 输出示例: "OpenGL ES扩展数量: 156" ``` ### 6. EGL 信息 #### EGL版本 ```kotlin // 获取EGL版本 val eglVersion = gpuInfo.getEglVersion() eglVersion?.let { version -> println("EGL版本: $version") // 输出示例: "EGL版本: 1.5" } ``` #### EGL扩展 ```kotlin // 获取EGL扩展列表 val eglExtensions = gpuInfo.getEglExtensions() eglExtensions?.let { extensions -> println("EGL扩展:") extensions.take(10).forEach { ext -> println(" - $ext") } println(" ...") } // 获取EGL扩展数量 val eglExtCount = gpuInfo.getEglExtensionCount() println("EGL扩展数量: $eglExtCount") // 输出示例: "EGL扩展数量: 45" ``` #### EGL客户端API ```kotlin // 获取EGL支持的客户端API val clientApis = gpuInfo.getEglClientApis() clientApis?.let { apis -> println("EGL客户端API: ${apis.joinToString(", ")}") // 输出示例: "EGL客户端API: OpenGL_ES" } ``` ### 7. 获取完整GPU信息 #### 获取原始数据 ```kotlin // 获取完整的GPU信息数据 val gpuData = gpuInfo.getGpuInformation() // Vulkan物理设备列表 gpuData.vkPhysicalDevices?.forEach { device -> println("=== Vulkan设备 ===") println("设备名称: ${device.deviceName}") println("设备ID: ${device.deviceId}") println("供应商ID: 0x${device.vendorId.toString(16)}") println("设备类型: ${device.deviceType}") val apiVer = device.apiVersion println("API版本: ${apiVer.major}.${apiVer.minor}.${apiVer.patch}") if (apiVer.variant > 0) { println("API变体: ${apiVer.variant}") } println("驱动版本: ${device.driverVersion}") device.registeredVendorId?.let { vendorId -> println("注册供应商: $vendorId") } } // EGL信息 gpuData.eglInformation?.let { egl -> println("\n=== EGL信息 ===") egl.eglVendor?.let { println("供应商: $it") } egl.eglVersion?.let { println("版本: $it") } egl.eglClientApi?.let { println("客户端API: ${it.joinToString(", ")}") } egl.eglExtensions?.let { println("扩展数量: ${it.size}") } // OpenGL ES信息 egl.glInformation?.let { gl -> println("\n=== OpenGL ES信息 ===") gl.glVendor?.let { println("供应商: $it") } gl.glRenderer?.let { println("渲染器: $it") } gl.glVersion?.let { println("版本: $it") } gl.glExtensions?.let { val count = it.split(" ").filter { ext -> ext.isNotEmpty() }.size println("扩展数量: $count") } } } ``` #### 获取格式化摘要 ```kotlin // 获取格式化的GPU信息摘要 val gpuSummary = gpuInfo.getGpuSummary() println(gpuSummary) ``` ### 8. 在Android UI中显示GPU信息 ```kotlin import android.os.Bundle import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import com.xyzshell.andinfo.AndInfo class GpuInfoActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 获取GpuInfo实例 val gpuInfo = AndInfo.instance.gpu // 显示GPU信息摘要 val textView = findViewById(R.id.gpuInfoText) textView.text = buildGpuInfoText(gpuInfo) } private fun buildGpuInfoText(gpuInfo: GpuInfo): String { return buildString { appendLine("=== GPU 基本信息 ===") gpuInfo.getVendorName()?.let { appendLine("供应商: $it") } gpuInfo.getRendererName()?.let { appendLine("型号: $it") } gpuInfo.getDeviceTypeDescription()?.let { appendLine("类型: $it") } appendLine("\n=== Vulkan ===") if (gpuInfo.isVulkanSupported()) { appendLine("支持: 是") gpuInfo.getVulkanApiVersion()?.let { appendLine("API版本: $it") } gpuInfo.getVulkanDriverVersion()?.let { appendLine("驱动版本: $it") } } else { appendLine("支持: 否") } appendLine("\n=== OpenGL ES ===") gpuInfo.getOpenGLVersion()?.let { appendLine("版本: $it") } appendLine("扩展数量: ${gpuInfo.getOpenGLExtensionCount()}") appendLine("\n=== EGL ===") gpuInfo.getEglVersion()?.let { appendLine("版本: $it") } appendLine("扩展数量: ${gpuInfo.getEglExtensionCount()}") gpuInfo.getEglClientApis()?.let { appendLine("客户端API: ${it.joinToString(", ")}") } } } } ``` ## 数据结构说明 ### GpuInformationData ```kotlin data class GpuInformationData( val vkPhysicalDevices: List?, // Vulkan物理设备列表 val eglInformation: EglInformation? // EGL信息 ) ``` ### VkPhysicalDevice (Vulkan物理设备) ```kotlin data class VkPhysicalDevice( val apiVersion: VkVersion, // API版本 val driverVersion: Long, // 驱动版本 val vendorId: Long, // 供应商ID(PCI标准) val registeredVendorId: VkVendorId?, // 注册的供应商ID val deviceId: Long, // 设备ID val deviceType: VkPhysicalDeviceType, // 设备类型 val deviceName: String, // 设备名称 ) ``` ### EglInformation (EGL信息) ```kotlin data class EglInformation( val eglVendor: String?, // EGL供应商 val eglVersion: String?, // EGL版本 val eglExtensions: List?, // EGL扩展列表 val eglClientApi: List?, // 客户端API列表 val glInformation: GlInformation?, // OpenGL ES信息 ) ``` ### GlInformation (OpenGL ES信息) ```kotlin data class GlInformation( val glVendor: String?, // OpenGL供应商 val glRenderer: String?, // 渲染器名称 val glVersion: String?, // OpenGL版本 val glExtensions: String?, // 扩展列表(空格分隔) ) ``` ## 常见GPU供应商和型号 ### Qualcomm Adreno - **供应商**: Qualcomm - **常见型号**: Adreno 640, Adreno 650, Adreno 660, Adreno 730 - **PCI ID**: 0x5143 ### ARM Mali - **供应商**: ARM - **常见型号**: Mali-G76, Mali-G77, Mali-G78, Mali-G710 - **PCI ID**: 0x13B5 ### Imagination PowerVR - **供应商**: ImgTec - **常见型号**: PowerVR GE8320, PowerVR GM9446 - **PCI ID**: 0x1010 ### NVIDIA - **供应商**: NVIDIA - **常见型号**: Tegra系列 - **PCI ID**: 0x10DE ### AMD - **供应商**: AMD - **常见型号**: Radeon系列 - **PCI ID**: 0x1002 ### Intel - **供应商**: Intel - **常见型号**: HD Graphics, Iris - **PCI ID**: 0x8086 ## GPU设备类型 | 类型 | 中文名称 | 说明 | |------|----------|------| | INTEGRATED_GPU | 集成显卡 | 集成在CPU芯片中的GPU | | DISCRETE_GPU | 独立显卡 | 独立的GPU芯片 | | VIRTUAL_GPU | 虚拟显卡 | 虚拟化环境中的GPU | | CPU | CPU | 使用CPU进行图形渲染 | | OTHER | 其他 | 其他类型 | ## Vulkan供应商ID | 供应商 | ID | 说明 | |--------|-----|------| | Khronos | 0x10001 | Khronos(科纳斯组织) | | Vivante | 0x10002 | Vivante(维万特) | | VeriSilicon | 0x10003 | VeriSilicon(芯原) | | Kazan | 0x10004 | Kazan | | Codeplay | 0x10005 | Codeplay | | Mesa | 0x10006 | Mesa开源驱动 | | POCL | 0x10007 | POCL | | Mobileye | 0x10008 | Mobileye(移动眼) | ## 示例输出 ### 完整GPU信息示例 ``` === GPU 基本信息 === 供应商: Qualcomm 型号: Adreno (TM) 650 类型: 集成显卡 === Vulkan 信息 === 支持: 是 API 版本: 1.3.0 驱动版本: 512459776 --- Vulkan 设备 --- 设备名称: Adreno (TM) 650 设备 ID: 16860431361 供应商 ID: 0x5143 设备类型: 集成显卡 API 版本: 1.3.0 === OpenGL ES 信息 === 供应商: Qualcomm 渲染器: Adreno (TM) 650 版本: OpenGL ES 3.2 V@0490.0 (GIT@dd96402, Ie36a36c6b7, 1620286309) (Date:05/06/21) 扩展数量: 156 === EGL 信息 === 供应商: Android 版本: 1.5 客户端 API: OpenGL_ES 扩展数量: 45 ``` ### Mali GPU示例 ``` === GPU 基本信息 === 供应商: ARM 型号: Mali-G78 类型: 集成显卡 === Vulkan 信息 === 支持: 是 API 版本: 1.1.0 驱动版本: 28114944 === OpenGL ES 信息 === 供应商: ARM 渲染器: Mali-G78 版本: OpenGL ES 3.2 扩展数量: 143 ``` ## 注意事项 1. **本地库依赖**: GpuInfo需要加载本地库"andinfo",确保NDK部分正确编译 2. **Vulkan支持**: 不是所有设备都支持Vulkan API,需要先检查`isVulkanSupported()` 3. **设备差异**: 不同设备返回的GPU信息格式可能略有不同 4. **权限**: 获取GPU信息通常不需要特殊权限 5. **性能**: GPU信息获取涉及native调用,建议在后台线程执行 6. **扩展列表**: OpenGL扩展字符串可能非常长(数千字符),显示时需要适当处理 ## 典型应用场景 ### 1. 游戏兼容性检查 ```kotlin fun checkGameCompatibility(): Boolean { val gpuInfo = AndInfo.instance.gpu // 检查Vulkan支持 if (!gpuInfo.isVulkanSupported()) { return false } // 检查Vulkan API版本 val apiVersion = gpuInfo.getVulkanApiVersion() if (apiVersion == null || apiVersion < "1.1.0") { return false } // 检查是否为集成显卡或独立显卡 val deviceType = gpuInfo.getDeviceType() return deviceType == VkPhysicalDeviceType.INTEGRATED_GPU || deviceType == VkPhysicalDeviceType.DISCRETE_GPU } ``` ### 2. 图形API选择 ```kotlin fun selectGraphicsApi(): GraphicsApi { val gpuInfo = AndInfo.instance.gpu return when { // 优先使用Vulkan gpuInfo.isVulkanSupported() -> { val version = gpuInfo.getVulkanApiVersion() if (version != null && version >= "1.3.0") { GraphicsApi.VULKAN_1_3 } else { GraphicsApi.VULKAN_1_1 } } // 回退到OpenGL ES else -> { val glVersion = gpuInfo.getOpenGLVersion() when { glVersion?.contains("3.2") == true -> GraphicsApi.OPENGL_ES_3_2 glVersion?.contains("3.1") == true -> GraphicsApi.OPENGL_ES_3_1 else -> GraphicsApi.OPENGL_ES_3_0 } } } } ``` ### 3. 性能分析和优化建议 ```kotlin fun analyzeGpuPerformance(): PerformanceProfile { val gpuInfo = AndInfo.instance.gpu val vendor = gpuInfo.getVendorName() val renderer = gpuInfo.getRendererName() return when { // 高端Adreno renderer?.contains("Adreno") == true && (renderer.contains("6") || renderer.contains("7")) -> { PerformanceProfile.HIGH_END } // 高端Mali renderer?.contains("Mali-G7") == true || renderer?.contains("Mali-G9") == true -> { PerformanceProfile.HIGH_END } // 中端GPU renderer?.contains("Adreno 5") == true || renderer?.contains("Mali-G5") == true -> { PerformanceProfile.MID_RANGE } // 低端GPU else -> PerformanceProfile.LOW_END } } ``` ## 完成度 ✅ **100%** - 所有功能都已实现并添加详细注释 - GPU供应商信息 ✅ - GPU型号信息 ✅ - Vulkan支持检测 ✅ - Vulkan API版本 ✅ - Vulkan驱动版本 ✅ - OpenGL ES版本 ✅ - OpenGL ES扩展 ✅ - EGL版本 ✅ - EGL扩展 ✅ - EGL客户端API ✅ - GPU设备类型 ✅ - 完整的中文注释 ✅ - 格式化信息输出 ✅