2017-04-16 77 views
0

我一直在尝试在SDL_render_d3d.c中实现Yuv422到RGB像素着色转换。我无法获得与此相同的编译代码格式,使用const DWORD shader_data[]这个数组并且工作正常,但它是一个420转换器,源代码和汇编程序与源代码汇编程序所需的命令行一起列出。在SDL2中加载像素着色器失败

当我使用fxc编译着色器(.hlsl)时,我得到一个带有字节码的头文件,它以'DXBC'开头,据我了解,它是用来搜索hlsl字节码的前缀。我也尝试在运行时从文件进行编译,这也创建了一个包含相同的缓冲区。

当我尝试从这个失败的代码0x8876086c创建一个PixelShader,

有谁知道如何创建格式化准备使用的格式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

有没有真正的理由保持着色器阵列DWORD,只是将一个指针指向带着色器的缓冲区至DWORD *,并确保缓冲区大小为sizeof(DWORD)(它应该是)的倍数。错误代码0x8876086cD3DERR_INVALIDCALL所以可能你的编译着色器由于某种原因不可用。你如何编译它?你有没有指定所需的着色器模型?

+0

从更多测试可疑着色器模型可能是问题,管理从文件更简单(通过直通或红色像素)着色器编译。这个错误处理很差。在线文档也不匹配不帮助的头文件! – datkins