2017-04-16 80 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