D3D11设备上下文更新子资源上的模糊内核异常
Vague kernel exception on D3D11DeviceContext Update Subresource
我正在开发一个使用 D3D11 显示 10 位视频流的类。我选择的解决方案是将每一帧渲染为四边形的纹理。因此,我有一个从 YUV 表面更新框架/纹理的功能:
void tenBitDisplay::SetTextureData(short int *yuvData) {
unsigned int size = m_width * m_height, chromaSize;
short int y1, y2, y3, y4, u, v, r, g, b;
DWORD *data;
chromaSize = size * 0.25;
data = new DWORD[size];
for(unsigned int k = 0, j = 0; k < size; k += 2, j++) {
y1 = yuvData[k];
y2 = yuvData[k + 1];
y3 = yuvData[k + m_width];
y4 = yuvData[k + m_width + 1];
u = yuvData[size + j];
v = yuvData[size + chromaSize + j];
convertYUV(y1, u, v, &r, &g, &b);
packRGB(data, r, g, b, k);
convertYUV(y2, u, v, &r, &g, &b);
packRGB(data, r, g, b, k + 1);
convertYUV(y3, u, v, &r, &g, &b);
packRGB(data, r, g, b, k + m_width);
convertYUV(y4, u, v, &r, &g, &b);
packRGB(data, r, g, b, k + m_width + 1);
if (k!=0 && (k+2) % m_width == 0)
k += m_width;
}
if (m_pTexture2D != NULL) {
m_pImmediateContext->UpdateSubresource(m_pTexture2D, 0, NULL, data, m_width * 4, 0);
}
free(data);
}
一切都执行正常,直到它到达m_pImmediateContext->UpdateSubresource(m_pTexture2D, 0, NULL, data, m_width * 4, 0);
调用。在执行此方法期间的某个时刻,将引发以下异常:
First-chance exception at 0x751EC41F (KernelBase.dll) in app.exe: 0x0000087D (parameters: 0x00000000, 0x0273D328, 0x0273C760).
If there is a handler for this exception, the program may be safely continued.
我猜这是堆、堆栈或其他与内存有关的问题。我只是无法弄清楚究竟是什么,而且我从未遇到过这样的问题,并且对从哪里开始调试它真的没有太多了解。我已经检查了前面的循环,以确保缓冲区上没有溢出并且一切正常。
编辑:我忘了提到,在我将其移动到视频解码应用程序之前,我在不同的应用程序(只是直接加载YUV文件)中运行了基本相同的代码。
我发现了问题。我在一个线程中更新纹理,而另一个线程正在调用渲染方法。这会导致线程在纹理对象上发生冲突。我实现了互斥锁,现在似乎工作正常。
相关文章:
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- CUDA内核和数学函数的显式命名空间
- 码头化的C++应用程序是否向后兼容早期的内核版本
- C++内核出现Jupyter笔记本错误
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 方便地对C++中的所有字符串文字进行模糊处理
- 内存围栏是否涉及内核
- 将 2D 推力::d evice_vector 复矩阵传递给 CUDA 内核函数
- 想要检测图像中的模糊,但无法正确
- OpenCL 内核参数中的字符***?
- 具有可分离内核的 2D 模糊卷积
- 如何在Windows内核中获取文件大小
- 库达如何将字符**从内核复制到主机
- OpenCL 是否支持向量作为内核参数?
- pthread_spinlock是否会导致从用户空间切换到内核空间
- 如何在内核中添加包含库的路径?
- 设置我的应用程序 API 感知并防止系统使其模糊和错误定位
- 正确用于模糊过滤器的内核
- 二项式模糊图像过滤器将内核应用于图像
- D3D11设备上下文更新子资源上的模糊内核异常