- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
所以我想通过 WinAPI 函数获取有关显卡的信息,但有一个关于如何获取我的确切显卡信息的问题。我已经编写了调用 EnumDisplayDevices 的代码,并且通过调用我收到了 DeviceString“Intel(R) HD Graphics Family”。然而,这并没有告诉我确切的显卡,例如英特尔高清显卡系列有 4200、4400 等等(根据我的理解)。
我搜索了更多的方法来查找此信息,甚至查看了注册表,它仍然引导我找到“Intel(R) HD Graphics Family”的描述字符串......现在我在这里。非常感谢任何能帮助我的人,它实际上是一个 stackoverflow 线程,它首先将我引向了 EnumDisplayDevices 的方向 :)
最佳答案
我会使用 OpenGL 而不是 WinAPI 因为我不知道 WinAPI 是否有这样的功能并且懒得研究.是的,您可以在注册表项中搜索此信息,但由于可能会更改位置/名称,这在未来并不安全。 OpenGL 方法很简单:
它适用于所有支持 OpenGL 1.0 的支持 OpenGL 的显卡/驱动程序,这些都是当今的显卡。
您可以使用 OpenGL 函数 glGetString
获取此信息:
GL_VENDOR Returns the company responsible for this OpenGL implementation. This name does not change from release to release.
GL_RENDERER Returns the name of the renderer. This name is typically specific to a particular configuration of a hardware platform. It does not change from release to release.
GL_VERSION Returns a version or release number (of supported OpenGL and gfx driver version)
GL_EXTENSIONS Returns a space-separated list of supported extensions to OpenGL (all capabilities of your card)
剩下的很简单(使用第二个链接中的 gl_init,gl_exit
):
gl_init(Your_App_Window_Handle);
char *vendor =(char*)glGetString(GL_VENDOR);
char *device =(char*)glGetString(GL_RENDERER);
char *version=(char*)glGetString(GL_VERSION);
char *ext =(char*)glGetString(GL_EXTENSIONS);
gl_exit();
我的设置返回:
vendor ="NVIDIA Corporation"
device ="GeForce GTX 550 Ti/PCIe/SSE2"
version="4.5.0 NVIDIA 347.25"
ext ="GL_AMD_multi_draw_indirect GL_ARB_arrays_of_arrays GL_ARB_base_instance GL_ARB_blend_func_extended GL_ARB_buffer_storage GL_ARB_clear_buffer_object GL_ARB_clear_texture GL_ARB_clip_control GL_ARB_color_buffer_float GL_ARB_compatibility GL_ARB_compressed_texture_pixel_storage GL_ARB_conservative_depth GL_ARB_compute_shader GL_ARB_compute_variable_group_size GL_ARB_conditional_render_inverted GL_ARB_copy_buffer GL_ARB_copy_image GL_ARB_cull_distance GL_ARB_debug_output GL_ARB_depth_buffer_float GL_ARB_depth_clamp GL_ARB_depth_texture GL_ARB_derivative_control GL_ARB_direct_state_access GL_ARB_draw_buffers GL_ARB_draw_buffers_blend GL_ARB_draw_indirect GL_ARB_draw_elements_base_vertex GL_ARB_draw_instanced GL_ARB_enhanced_layouts GL_ARB_ES2_compatibility GL_ARB_ES3_compatibility GL_ARB_ES3_1_compatibility GL_ARB_explicit_attrib_location GL_ARB_explicit_uniform_location GL_ARB_fragment_coord_conventions GL_ARB_fragment_layer_viewport GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_framebuffer_no_attachments GL_ARB_framebuffer_object GL_ARB_framebuffer_sRGB GL_ARB_geometry_shader4 GL_ARB_get_program_binary GL_ARB_get_texture_sub_image GL_ARB_gpu_shader5 GL_ARB_gpu_shader_fp64 GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_imaging GL_ARB_indirect_parameters GL_ARB_instanced_arrays GL_ARB_internalformat_query GL_ARB_internalformat_query2 GL_NV_internalformat_sample_query GL_ARB_invalidate_subdata GL_ARB_map_buffer_alignment GL_ARB_map_buffer_range GL_ARB_multi_bind GL_ARB_multi_draw_indirect GL_ARB_multisample GL_ARB_multitexture GL_ARB_occlusion_query GL_ARB_occlusion_query2 GL_ARB_pipeline_statistics_query GL_ARB_pixel_buffer_object GL_ARB_point_parameters GL_ARB_point_sprite GL_ARB_program_interface_query GL_ARB_provoking_vertex GL_ARB_robust_buffer_access_behavior GL_ARB_robustness GL_ARB_sample_shading GL_ARB_sampler_objects GL_ARB_seamless_cube_map GL_ARB_separate_shader_objects GL_ARB_shader_atomic_counters GL_ARB_shader_bit_encoding GL_ARB_shader_draw_parameters GL
[注释]
你只需要包括 gl.h
不需要 glu,glew
或其他任何东西(除了 wglext.h
应该单独包含在 gl.h
中)。它通常位于单独的包含子目录中,例如:
#include <gl\gl.h>
[编辑1]
由于 Intel OpenGL 实现也没有公开版本,所以我只看到另一个选项。您需要获取卡的 PCI ID VID/PID 并与已知值进行交叉检查:
Model CPU arch. Release date PCI ID Execution units
HD Graphics Arrandale 2010 8086:0046 6
HD Graphics Sandy Bridge January 2011 8086:0106 6
HD Graphics 2000 Sandy Bridge January 2011 8086:0102 6
HD Graphics 3000 Sandy Bridge January 2011 8086:0116 16
HD Graphics 2500 Ivy Bridge April 2012 8086:016A 6
HD Graphics 4000 Ivy Bridge April 2012 8086:0166 16
HD Graphics 4400 Haswell 2013 20
HD Graphics 4600 Haswell 2013 8086:0416 20
HD Graphics 5500 Broadwell 2015 24
取自here .
要获取 PCI ID,您可以使用:
只需将解析字符串从 TEXT("USB")
更改为 TEXT("PCI")
并检查 VID 8086
设备这样:
bool PCIinfo()
{
int i,n;
AnsiString s,txt="";
DWORD dwSize,dwPropertyRegDataType;
HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
TCHAR szDesc[1024];
// hDevInfo = SetupDiGetClassDevs(NULL, NULL , NULL, DIGCF_PRESENT|DIGCF_ALLCLASSES); // List all devices
// hDevInfo = SetupDiGetClassDevs(NULL, TEXT("USB"), NULL, DIGCF_PRESENT|DIGCF_ALLCLASSES); // List all connected USB devices
hDevInfo = SetupDiGetClassDevs(NULL, TEXT("PCI"), NULL, DIGCF_PRESENT|DIGCF_ALLCLASSES); // List all connected PCI devices
if (hDevInfo == INVALID_HANDLE_VALUE) return false;
// Find the ones that are driverless
for (i=0;;i++)
{
DeviceInfoData.cbSize = sizeof(DeviceInfoData);
if (!SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData)) break;
SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC,&dwPropertyRegDataType, (BYTE*)szDesc,sizeof(szDesc),&dwSize);
s=szDesc; n=48; while (s.Length()<n) s+=" "; if (s.Length()>n) s=s.SubString(1,n); txt+=s+" ";
SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_HARDWAREID,&dwPropertyRegDataType, (BYTE*)szDesc,sizeof(szDesc),&dwSize);
s=szDesc; n=64; while (s.Length()<n) s+=" "; if (s.Length()>n) s=s.SubString(1,n); txt+=s+" ";
SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_LOCATION_INFORMATION,&dwPropertyRegDataType, (BYTE*)szDesc,sizeof(szDesc),&dwSize);
s=szDesc; n=40; while (s.Length()<n) s+=" "; if (s.Length()>n) s=s.SubString(1,n); txt+=s+" ";
txt+="\r\n";
}
Main->mm_log->Lines->Add(txt);
return true;
}
该代码在我的设置中返回:
PCI standard host CPU bridge PCI\VEN_1022&DEV_1400&SUBSYS_00000000&REV_00 PCI bus 0, device 24, function 0
PCI standard host CPU bridge PCI\VEN_1022&DEV_1401&SUBSYS_00000000&REV_00 PCI bus 0, device 24, function 1
PCI standard host CPU bridge PCI\VEN_1022&DEV_1402&SUBSYS_00000000&REV_00 PCI bus 0, device 24, function 2
PCI standard host CPU bridge PCI\VEN_1022&DEV_1403&SUBSYS_00000000&REV_00 PCI bus 0, device 24, function 3
PCI standard host CPU bridge PCI\VEN_1022&DEV_1404&SUBSYS_00000000&REV_00 PCI bus 0, device 24, function 4
PCI standard host CPU bridge PCI\VEN_1022&DEV_1405&SUBSYS_00000000&REV_00 PCI bus 0, device 24, function 5
PCI standard host CPU bridge PCI\VEN_1022&DEV_1410&SUBSYS_14101022&REV_00 PCI bus 0, device 0, function 0
PCI Express standard Root Port PCI\VEN_1022&DEV_1412&SUBSYS_12341022&REV_00 PCI bus 0, device 2, function 0
PCI Express standard Root Port PCI\VEN_1022&DEV_1414&SUBSYS_12341022&REV_00 PCI bus 0, device 4, function 0
PCI Express standard Root Port PCI\VEN_1022&DEV_1417&SUBSYS_12341022&REV_00 PCI bus 0, device 7, function 0
AMD IOMMU Device PCI\VEN_1022&DEV_1419&SUBSYS_14191022&REV_00 PCI bus 0, device 0, function 2
AMD SATA Controller PCI\VEN_1022&DEV_7801&SUBSYS_B0021458&REV_40 PCI bus 0, device 17, function 0
Standard OpenHCD USB Host Controller PCI\VEN_1022&DEV_7807&SUBSYS_50041458&REV_11 PCI bus 0, device 18, function 0
Standard OpenHCD USB Host Controller PCI\VEN_1022&DEV_7807&SUBSYS_50041458&REV_11 PCI bus 0, device 19, function 0
Standard Enhanced PCI to USB Host Controller PCI\VEN_1022&DEV_7808&SUBSYS_50041458&REV_11 PCI bus 0, device 18, function 2
Standard Enhanced PCI to USB Host Controller PCI\VEN_1022&DEV_7808&SUBSYS_50041458&REV_11 PCI bus 0, device 19, function 2
Standard OpenHCD USB Host Controller PCI\VEN_1022&DEV_7809&SUBSYS_50041458&REV_11 PCI bus 0, device 20, function 5
AMD SMBus PCI\VEN_1022&DEV_780B&SUBSYS_780B1022&REV_14 PCI bus 0, device 20, function 0
High Definition Audio Controller PCI\VEN_1022&DEV_780D&SUBSYS_A0021458&REV_01 PCI bus 0, device 20, function 2
PCI standard ISA bridge PCI\VEN_1022&DEV_780E&SUBSYS_780E1022&REV_11 PCI bus 0, device 20, function 3
PCI standard PCI-to-PCI bridge PCI\VEN_1022&DEV_780F&SUBSYS_00000000&REV_40 PCI bus 0, device 20, function 4
AMD USB 3.0 Host Controller PCI\VEN_1022&DEV_7812&SUBSYS_50041458&REV_03 PCI bus 0, device 16, function 0
AMD USB 3.0 Host Controller PCI\VEN_1022&DEV_7812&SUBSYS_50041458&REV_03 PCI bus 0, device 16, function 1
High Definition Audio Controller PCI\VEN_10DE&DEV_0BEE&SUBSYS_35371458&REV_A1 PCI bus 1, device 0, function 1
NVIDIA GeForce GTX 550 Ti PCI\VEN_10DE&DEV_1244&SUBSYS_35371458&REV_A1 PCI bus 1, device 0, function 0
Realtek PCIe GBE Family Controller PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_06 PCI bus 2, device 0, function 0
MSI TV@Anywhere Plus PCI\VEN_1131&DEV_7133&SUBSYS_62311462&REV_D1 PCI bus 4, device 6, function 0
Etron USB 3.0 Extensible Host Controller PCI\VEN_1B6F&DEV_7023&SUBSYS_50071458&REV_01 PCI bus 3, device 0, function 0
所以在不同的IntelHD图形计算机上运行它并检查是否存在不同的PCI ID ...
关于windows - 通过 WinAPI 确定英特尔高清显卡版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35822248/
我尝试设置一个文件来使用 PyCharm 编写 AI。 我正在使用的教程:https://www.youtube.com/watch?v=ujTCoH21GlA 当我运行代码时: $ import t
我一直在寻找很长一段时间,似乎无法找到一个官方/结论性的数字来引用英特尔至强四核可以完成的单精度浮点运算/时钟周期的数量。我有一个 Intel Xeon 四核 E5530 CPU。 我希望用它来计算我
在深度学习与神经网络领域,研究人员通常离不开 GPU。得益于 GPU 极高内存带宽和较多核心数,研究人员可以更快地获得模型训练的结果。与此同时,CPU 受限于自身较少的核心数,计算运行需要较长的时间
我试图了解 TCS 启用的 SGX 线程与 SDK 提供的不受信任线程之间的区别. 如果我理解正确的话,TCS 允许多个逻辑处理器进入同一个飞地。每个逻辑处理器都有自己的 TCS,因此也有自己的入口点
我想通过 IACA 分析器运行一些代码以查看它使用了多少个 uops——我从一个简单的函数开始,看看它是否在工作。 不幸的是,当我插入 IACA 说要使用的宏时,生成的程序集非常不同,因此对它的任何分
是否有可能获得许可的开发人员证书,以在生产模式下签署经过安全审查、社区开发的开源 SGX 软件二进制文件,并将其发布在 apt 或 rpm 等开源存储库中? 我刚问过英特尔 SGX 团队,他们说只有经
我正在尝试模拟 Intel 8080 指令集,但我被这条指令卡住了 OUT D8 ,根据书Intel 8080/8085 Assembly Language Programming它说 OUT ins
我在使用一些现有的 FORTRAN 代码时发现了一个问题。尽管它已经预料到需要在重新分配之前释放数组,但这从来没有必要。我现在需要它来执行此操作,但它无法正常运行。 当前的伪代码大约是: MODULE
我正在尝试在内存中对齐以下类型的数据: type foo real, allocatable, dimension(:) :: bar1, bar2 !dir$ attributes al
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
似乎获得和释放语义的公认定义是这样的: (引自 http://msdn.microsoft.com/en-us/library/windows/hardware/ff540496(v=vs.85).a
这是我对英特尔 TBB 流图性能进行基准测试的尝试。这是设置: 一个广播节点发送continue_msg到 N 后继节点 (一broadcast_node) 每个后继节点执行一次计算,该计算需要 t
我有两个问题 第一个问题:我使用 css3、HTML5、JavaScript 开发应用程序。在我的应用程序中,我需要从数据库中获取数据。我该怎么做? 第二个问题:intel xdk 在构建 l 时必须
在英特尔手册的第 3 卷中,它包含硬件事件计数器的描述: BACLEAR_FORCE_IQ Counts number of times a BACLEAR was forced by the Ins
嘿,我正在使用 Intel xdk 开发混合应用程序。我已经创建了注册表,然后我将代码放在那里。我尝试使用 Php Mysql 将数据库插入我的数据库后。 如果我单击注册按钮,它会显示这样的错误 [
我想知道是否可以让英特尔 C++ 编译器(或其他编译器,如 gcc 或 clang)显示一些来自优化器的消息。我想知道优化器究竟对我的代码做了什么。默认情况下,编译器只打印非常基本的东西,比如未使用的
我正在使用 64 位架构的 Intel 程序集优化我的视频解码器。为了优化,我使用 AVX2 指令集。 我的开发环境:- 操作系统:- Win 7(64位) IDE:- MSVS 2008(教授) C
如果这是一个非常愚蠢的问题,我很抱歉;我的 Fortran 不太好。我正在移植一些旧的 Fortran 代码,并遇到了这个子例程定义: SUBROUTINE SET_HYDROMODULE(HYDRO
请问,我是否可以将 Intel XDK API 和 Phonegap API 集成到单个移动应用程序中?这是因为,某些 API 仅在 Phonegap 中可用,反之亦然。 最佳答案 是的,如果我正确理
在 x86 中查找任意操作码的含义(例如 0xC8 )的相对快速简便的方法是什么? Intel Software Developer's manual搜索起来不是很有趣...... 最佳答案 查询 t
我是一名优秀的程序员,十分优秀!