- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 CheckMultisampleQualityLevels(...)
在我的硬件上建立 MSAA 支持。我按照这个顺序做:
D3D11CreateDevice(...)
给我 device
device->CheckMultisampleQualityLevels(...)
DXGI_SWAP_CHAIN_DESC.SampleDesc
CreateSwapChain(...)
给定 DXGI_SWAP_CHAIN_DESC
问题是,对于 pNumQualityLevels
,CheckMultisampleQualityLevels(...)
总是给我 0
。而且我确定我的显卡支持某些 MSAA(我已经在 GeForce gtx 780 和其他显卡上测试了该程序,结果相同)。
我错过了什么吗?我应该在 CheckMultisampleQualityLevels(...)
之前调用其他东西吗?
代码:
创 build 备:
UINT createDeviceFlags = 0;
#ifdef DEBUG_DIRECTX
createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endif
D3D_DRIVER_TYPE driverTypes[] = {
D3D_DRIVER_TYPE_HARDWARE,
D3D_DRIVER_TYPE_WARP,
D3D_DRIVER_TYPE_REFERENCE,
};
std::string driverTypesNames[] = {
"D3D_DRIVER_TYPE_HARDWARE",
"D3D_DRIVER_TYPE_WARP",
"D3D_DRIVER_TYPE_REFERENCE",
};
UINT numDriverTypes = ARRAYSIZE(driverTypes);
D3D_FEATURE_LEVEL featureLevels[] = {
D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_10_1,
D3D_FEATURE_LEVEL_10_0,
};
std::string featureLevelsNames[] = {
"D3D_FEATURE_LEVEL_11_0",
"D3D_FEATURE_LEVEL_10_1",
"D3D_FEATURE_LEVEL_10_0",
};
UINT numFeatureLevels = ARRAYSIZE(featureLevels);
D3D_FEATURE_LEVEL g_featureLevel = D3D_FEATURE_LEVEL_11_0;
for(UINT driverTypeIndex = 0; driverTypeIndex < numDriverTypes; driverTypeIndex++){
driverType = driverTypes[driverTypeIndex];
result = D3D11CreateDevice(NULL, driverType, NULL, createDeviceFlags, featureLevels, numFeatureLevels, D3D11_SDK_VERSION, &device, &g_featureLevel, &context);
if(SUCCEEDED(result)){
LOG(logDEBUG1, "Driver type: " << driverTypesNames[driverTypeIndex] << ".", MOD_GRAPHIC);
break;
}
}
ERROR_HANDLE(SUCCEEDED(result), L"Could not create device (DirectX 11).", MOD_GRAPHIC);
检查多样本质量水平(基于 vertexwahn.de article ):
sampleCountOut = 1;
maxQualityLevelOut = 0;
for(UINT sampleCount = 1; sampleCount <= D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT; sampleCount++){
UINT maxQualityLevel = 0;
HRESULT hr = device->CheckMultisampleQualityLevels(DXGI_FORMAT_R8G8B8A8_UNORM, sampleCount, &maxQualityLevel);
if(maxQualityLevel > 0){
maxQualityLevel--;
}
ERROR_HANDLE(hr == S_OK, L"CheckMultisampleQualityLevels failed.", MOD_GRAPHIC);
if(maxQualityLevel > 0){
LOG(logDEBUG1, "MSAA " << sampleCount << "X supported with " << maxQualityLevel << " quality levels.", MOD_GRAPHIC);
sampleCountOut = sampleCount;
maxQualityLevelOut = maxQualityLevel;
}
}
交换链:
DXGI_SWAP_CHAIN_DESC sd;
ZeroMemory(&sd, sizeof(sd));
sd.BufferCount = 1;
sd.BufferDesc.Width = width;
sd.BufferDesc.Height = height;
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
sd.BufferDesc.RefreshRate.Numerator = 60;
sd.BufferDesc.RefreshRate.Denominator = 1;
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
sd.OutputWindow = *hwnd;
sd.SampleDesc.Count = sampleCount;
sd.SampleDesc.Quality = maxQualityLevel;
sd.Windowed = false;
sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; // allow full-screen switchin
//based on http://stackoverflow.com/questions/27270504/directx-creating-the-swapchain
IDXGIDevice * dxgiDevice = 0;
HRESULT hr = device->QueryInterface(__uuidof(IDXGIDevice), (void **)& dxgiDevice);
ERROR_HANDLE(SUCCEEDED(hr), L"Query for IDXGIDevice failed.", MOD_GRAPHIC);
IDXGIAdapter * dxgiAdapter = 0;
hr = dxgiDevice->GetParent(__uuidof(IDXGIAdapter), (void **)& dxgiAdapter);
ERROR_HANDLE(SUCCEEDED(hr), L"Could not get IDXGIAdapter.", MOD_GRAPHIC);
IDXGIFactory * dxgiFactory = 0;
hr = dxgiAdapter->GetParent(__uuidof(IDXGIFactory), (void **)& dxgiFactory);
ERROR_HANDLE(SUCCEEDED(hr), L"Could not get IDXGIFactory.", MOD_GRAPHIC);
// This system only has DirectX 11.0 installed (let's assume it)
result = dxgiFactory->CreateSwapChain(device, &sd, &swapChain);
LOG(logDEBUG1, "This system only has DirectX 11.0 installed. CreateSwapChain(...) used.", MOD_GRAPHIC);
ERROR_HANDLE(result == S_OK, L"Could not swap chain.", MOD_GRAPHIC);
我的 ERROR_HANDLE(...)
宏永远不会触发(第一个参数在所有情况下都为真)。日志显示我使用 D3D_DRIVER_TYPE_HARDWARE
作为驱动程序类型。
DirectX 调试器说(这是一些问题,但我不认为这是 CheckMultisampleQualityLevels(...)
给我错误结果的原因):
DXGI WARNING: IDXGISwapChain::Present: Fullscreen presentation inefficiencies incurred due to application not using IDXGISwapChain::ResizeBuffers appropriately, specifying a DXGI_MODE_DESC not available in IDXGIOutput::GetDisplayModeList, or not using DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH.DXGI_SWAP_CHAIN_DESC::BufferDesc = { 1600, 900, { 60, 1 }, R8G8B8A8_UNORM, 0, 0 }; DXGI_SWAP_CHAIN_DESC::SampleDesc = { 8, 0 }; DXGI_SWAP_CHAIN_DESC::Flags = 0x2; [ MISCELLANEOUS WARNING #98: ]
最佳答案
您的代码先从 maxQualityLevels 中减去 1,然后再检查它是否大于零。初始值为 1 表示以质量级别 0 创建目标是有效的。
假设您希望它适用于所有供应商,您只需要真正检查它是否 > 0,然后创建质量 = 0 的表面即可。
质量级别 > 0 是特定于供应商的,对于不同的 GPU 可能意味着任意数量的东西。 Nvidia 的 CSAA 和 AMD 的 EQAA 都可以通过非零质量级别获得,但您需要查看他们自己的文档才能弄清楚每个质量级别的实际含义。它们在功能上也与传统 MSAA 略有不同。 “质量”有点误导,因为数字越大并不一定意味着质量越高,称其为“模式”更合适
同时查看:
http://www.nvidia.com/object/coverage-sampled-aa.html
和
关于c++ - CheckMultisampleQualityLevels(...) 表示该卡不支持 MSAA(例如我的 GeForce GTX 780 不支持)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30957466/
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
GeForce 6xx 系列 GPU 是否使用 RISC、CISC 或 VLIW 风格的指令? 在一个来源中,在 http://www.motherboardpoint.com/risc-cisc-t
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
采用 TCC 模式的 Tesla(Fermi 或 Kepler)与采用 WDDM 的 Geforce(同代)相比? 我编写的程序在内核开销方面存在一些非常严重的问题,因为它必须重复启动内核,开销如此之
如何检查 OpenGL 上下文是否在 Geforce 卡上运行?我需要运行不同的代码,具体取决于它是在 Geforce 卡、Quadro 还是 AMD 卡上运行,并且需要一种检测方法。 最佳答案 我认
我在编写一些 C++ AMP 代码时遇到了问题。我已经包含了一个样本。它在模拟加速器上运行良好,但在我的硬件(Windows 7、NVIDIA GeForce GTX 660、最新驱动程序)上使显示驱
On this page ,它说支持“GeForce” HW accelerated encode and decode are supported on NVIDIA GeForce, Quadro
我在运行 Nvidia 在他们的 GPU 计算 SDK 中提供的示例时遇到问题(有一个已编译示例代码库)。 对于 cuda,我收到消息“未检测到支持 CUDA 的设备”,对于 OpenCL,应该找到支
我在 Windows 7 机器上有 4 个 GTX 570。根据编程指南,点对点内存复制应该在 Geforce 和 Quadro 以及 Tesla 上工作 Memory copies can be p
我正在 build 一个工作站,并想进行一些繁重的 CUDA 编程。我不想全力以赴地获得 Tesla 卡,并且几乎将其缩小到 Quadro 4000 和 GeForce 480,但我并不真正理解其中的
我使用 CheckMultisampleQualityLevels(...) 在我的硬件上建立 MSAA 支持。我按照这个顺序做: D3D11CreateDevice(...) 给我 device d
我在配备 16 GB 内存、1 TB 硬盘和专用 NVIDIA GeForce GTX 1070 的英特尔酷睿 i7-8700 CPU 上运行 Windows 10显卡。 我计划启动 3 个由我的 W
当我尝试使用标志 DXGI_CREATE_FACTORY_DEBUG 调用 D3D12GetDebugInterface 或 CreateDXGIFactory2 时,调用在我的笔记本电脑上失败,但在
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我在 Windows 10 中同时安装了 CPU 和 GPU 版本的 tensorflow。 conda list t.*flow # packages in environment at C:\Us
Geforce 9500 GT 可以运行 CUDA Toolkit 5.0 吗? 首页:https://developer.nvidia.com/cuda-gpus Geforce 9500 GT 有
我正在使用 tf-seq2seq 训练 NMT 模型GEFORCE GTX 1080 ti (11GB) 的封装。在训练模型期间,执行 nvidia-smi显示当所有 CPU 内核都忙时,GPU vo
如果使用 Quadro GPU 与 GeForce GPU,TensorFlow 性能是否有明显差异? 例如它是否使用 double 运算或其他会导致 GeForce 卡性能下降的因素? 我即将购买一
我有一台配备 GeForce 9400 显卡的 MacBook Pro。维基百科说这张卡支持OpenGL 3。 但是 OS X 10.6 附带的头文件和库似乎只是 OpenGL 2(我检查了 /usr
使用 OpenGL 3.3 核心配置文件,我正在通过 渲染全屏“四边形”(作为单个超大三角形) gl.DrawArrays(gl.TRIANGLES, 0, 3) 使用以下着色器。 顶点着色器: #v
我是一名优秀的程序员,十分优秀!