2011-01-02 12 views
1

Ubuntuの下でX11R6-7.0をコンパイルしようとしていて、奇妙なコンパイルエラーが発生しました。マクロの定義を開く:tdfx_span.c:左辺のオペランドに左辺値が必要です

ati触媒ドライバは新しいxorgをサポートしていないため、X11R6-7.0が必要でした。ossドライバは、ハードウェアの3Dアクセラレーションをサポートしていません。

誰でもこのエラーメッセージが意味することは分かりますか?私はいくつかを知っているCしかし、私はちょっと混乱してしまった。 マクロがNULLを返すか、またはメソッド/プロパティが設定されていないことを意味しますか?

この時点でプリプロセッサ定義を "デバッグ"する方法については、これ以上の洞察があります。 #errorと一緒に役に立つものは何も印刷できないと思います。

はエラーが私が手:

tdfx_span.c: In function ‘tdfxDDWriteDepthPixels’:
tdfx_span.c:976: error: lvalue required as left operand of assignment
tdfx_span.c:1008: error: lvalue required as left operand of assignment
tdfx_span.c: In function ‘write_stencil_pixels’:
tdfx_span.c:1242: error: lvalue required as left operand of assignment

コード:

958- switch (depth_size) { 
959- case 16: 
960-  GetBackBufferInfo(fxMesa, &backBufferInfo); 
961-  /* 
962-  * Note that the _LOCK macro adds a curly brace, 
963-  * and the UNLOCK macro removes it. 
964-  */ 
965-  WRITE_FB_SPAN_LOCK(fxMesa, info, 
966-    GR_BUFFER_AUXBUFFER, GR_LFBWRITEMODE_ANY); 
967-  { 
968-  LFBParameters ReadParams; 
969-  GetFbParams(fxMesa, &info, &backBufferInfo, 
970-    &ReadParams, sizeof(GLushort)); 
971-  for (i = 0; i < n; i++) { 
972-  if (mask[i] && visible_pixel(fxMesa, x[i], y[i])) { 
973-   xpos = x[i] + fxMesa->x_offset; 
974-   ypos = bottom - y[i]; 
975-   d16 = depth[i]; 
976:   PUT_FB_DATA(&ReadParams, GLushort, xpos, ypos, d16); 
977-  } 
978-  } 
979-  } 
980-  WRITE_FB_SPAN_UNLOCK(fxMesa, GR_BUFFER_AUXBUFFER); 
981-  break; 
982- case 24: 

と相対マクロ:

#define GET_FB_DATA(ReadParamsp, type, x, y)      \ 
    (((x) < (ReadParamsp)->firstWrappedX)       \ 
     ? (((type *)((ReadParamsp)->lfbPtr))      \ 
       [(y) * ((ReadParamsp)->LFBStrideInElts)   \ 
        + (x)])           \ 
     : (((type *)((ReadParamsp)->lfbWrapPtr))     \ 
       [((y)) * ((ReadParamsp)->LFBStrideInElts)   \ 
        + ((x) - (ReadParamsp)->firstWrappedX)])) 
#define GET_ORDINARY_FB_DATA(ReadParamsp, type, x, y)    \ 
    (((type *)((ReadParamsp)->lfbPtr))        \ 
       [(y) * ((ReadParamsp)->LFBStrideInElts)   \ 
        + (x)]) 
#define GET_WRAPPED_FB_DATA(ReadParamsp, type, x, y)    \ 
    (((type *)((ReadParamsp)->lfbWrapPtr))       \ 
       [((y)) * ((ReadParamsp)->LFBStrideInElts)   \ 
        + ((x) - (ReadParamsp)->firstWrappedX)]) 
#define PUT_FB_DATA(ReadParamsp, type, x, y, value)      \ 
    (GET_FB_DATA(ReadParamsp, type, x, y) = (type)(value)) 
#define PUT_ORDINARY_FB_DATA(ReadParamsp, type, x, y, value)    \ 
    (GET_ORDINARY_FB_DATA(ReadParamsp, type, x, y) = (type)(value)) 
#define PUT_WRAPPED_FB_DATA(ReadParamsp, type, x, y, value)    \ 
    (GET_WRAPPED_FB_DATA(ReadParamsp, type, x, y) = (type)(value)) 

LFBParameters構造体

483-typedef struct 
484-{ 
485- void *lfbPtr; 
486- void *lfbWrapPtr; 
487- FxU32 LFBStrideInElts; 
488- GLint firstWrappedX; 
489-} 
490:LFBParameters; 

答えて

0

いいえ、確かにこれはポインタが0であるためではありません。これは、タイプが間違っていることを示します。メッセージには、割り当ての左に左辺値が必要です。 (それは正常に聞こえますか?)

私は何とかマクロのどれかがポインタの値を返して、間違っていると思います。それは(のようないくつかのことを)やっているので、基本的

(
(
    ((xpos) < (&ReadParams)->firstWrappedX) ? 
    (((GLushort *)((&ReadParams)->lfbPtr)) [(ypos) * ((&ReadParams)->LFBStrideInElts) + (xpos)]) 
    : 
    (((GLushort *)((&ReadParams)->lfbWrapPtr)) [((ypos)) * ((&ReadParams)->LFBStrideInElts) + ((xpos) - (&ReadParams)->firstWrappedX)])) = (GLushort)(d16) 
); 

:に

0

あなたのマクロが展開し、私は考えていない

((GLushort *)((&ReadParams)->lfbWrapPtr))[SOME_INDEX] = (GLushort)(d16); 

は右と問題の原因です。これはあなたが期待していることですか?

0

あなたはおそらくこれを聞きたいとは思わないでしょうが、X11R6はほとんどの標準で古くなっています。どのビデオカードがありますか?そしてfglrxはなぜ必要ですか?私の壁を見ると、私はfglrxを必要とするATI/AMDチップセットを持っていません。ケイマンのような非常に最新のチップセットだけがそれを必要とし、これらのチップセット用のfglrxはX11R6上に構築されません。

とにかく、これを絶対にしなければならないのなら、おそらく--with-dri-drivers = swrastを使ってメサを構築するべきでしょう。これは、tdfx_driのようなドライバが構築されないようにするためです。確かにあなたは加速される必要があるブードゥーを持っていませんよね? :3

関連する問題