我一直在尝试在SDL_render_d3d.c
中实现Yuv422到RGB像素着色器的转换。我无法获得与此中使用的相同格式的编译代码,使用了一个数组const DWORD shader_data[]
,这工作正常,但它是一个 420 转换器,源代码和汇编程序以及编译源代码到汇编程序所需的命令行一起列出。
当我使用 fxc 编译着色器 (.hlsl( 时,我得到一个头文件,其中包含以"DXBC"开头的字节代码,正如我从大量谷歌搜索中了解到的那样,它是 hlsl 字节代码的前缀。我还尝试在运行时从文件进行编译,这也创建了一个包含相同的缓冲区。
当我尝试从中创建像素着色器时,它因代码0x8876086c而失败,
有谁知道如何创建DWORD格式的即用型格式? 这似乎是前进的最简单方法
工作形式:
const DWORD shader_data[] = {
0xffff0200, 0x05000051, 0xa00f0000, 0xbd808081, 0xbf008081, 0xbf008081,
....... };
FXC 生成的格式不起作用:
const BYTE g_YuvToRgb[] =
{
68, 88, 66, 67, 25, 203,
28, 33, 88, 181, 245, 169,
...... };
没有真正的理由将着色器保留为DWORD
数组,只需将指向缓冲区的指针与着色器投射到DWORD *
并确保缓冲区大小是sizeof(DWORD)
的倍数(应该是(。错误代码0x8876086c
D3DERR_INVALIDCALL
因此可能由于某种原因,您编译的着色器无法使用。你如何编译它?是否指定了所需的着色器模型?