我一直在尝试在SDL_render_d3d.c
中实现Yuv422到RGB像素着色器转换。我无法获得与此相同的编译代码格式,使用了数组const DWORD shader_data[]
,这种方法很好但是是420转换器,源代码和汇编程序与编译所需的命令行一起列出源到汇编程序。
当我使用fxc编译着色器(.hlsl)时,我得到一个带有字节代码的头文件,以“DXBC”开头,据我所知,很多googling是hlsl字节代码的前缀。我还尝试在运行时从文件中进行编译,这也会创建一个包含相同内容的缓冲区。
当我尝试从此创建PixelShader时,它失败,代码为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,
...... };
答案 0 :(得分:0)
没有真正的理由将着色器保留为DWORD
的数组,只需将带有着色器的指针强制转换为DWORD *
,并确保缓冲区大小为sizeof(DWORD)
的多个(它应该是)。错误代码0x8876086c
为D3DERR_INVALIDCALL
,因此您的编译着色器可能由于某种原因无法使用。你怎么编译它?您是否指定了所需的着色器模型?