2011-01-02 5 views
1

Ich versuche, X11R6-7.0 unter Ubuntu Maverick zu kompilieren und habe einige seltsame Kompilierungsfehler, die ich selbst nicht lösen kann.Eröffnungsmakrodefinitionen: tdfx_span.c: lvalue erforderlich als linker Operand der Zuweisung

Ich brauchte X11R6-7.0 als ATI-Katalysator-Treiber nicht neuere Xorg und OSS-Treiber unterstützen keine 3D-Beschleunigung meiner Hardware.

Wer weiß, was diese Fehlermeldung bedeutet? Ich kenne einige C, aber ich habe ein bisschen verwirrt. Bedeutet es GET_FB_DATA Makro zurückgegeben NULL oder eine Methode/Eigenschaft nicht festgelegt?

Jeder weitere Einblick, wie man Präprozessordefinitionen an diesem Punkt "debuggen" könnte, wäre großartig. Ich glaube nicht, dass ich etwas Nützliches mit #error drucken kann.

Der Fehler erhalte ich:

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

der Code:

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: 

und relative Makros:

#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)) 

Die LFBParameters Struct

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

Antwort

0

Nein, sicherlich nicht, weil ein Zeiger 0 ist. Dies zeigt an, dass ein Typ falsch ist. Wie die Nachricht sagt, benötigen Sie einen Wert auf der linken Seite einer Zuweisung. (Was klingt normal, nicht wahr?)

Ich würde vermuten, dass irgendwie einer der Makros einen Zeigerwert zurückgibt und Sie fehlen, um es zu dereferenzieren.

0

Ihr Makro erweitert auf:

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

Also im Grunde ist es (etwas, was wie) zu tun:

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

Was ich glaube nicht richtig ist und das Problem verursacht. Ist das, was Sie erwarten?

0

Sie werden das wahrscheinlich nicht gerne hören, aber X11R6 ist bei den meisten Standards alt. Welche Grafikkarte hast du und warum wird fglrx benötigt? Wenn ich meine Wand betrachte, habe ich keine ATI/AMD Chipsätze, die fglrx benötigen; nur die neuesten Chipsätze, wie der Cayman, benötigen es, und fglrx für diese Chipsätze wird sowieso nicht auf X11R6 aufbauen.

Wie auch immer, wenn Sie unbedingt darauf bestehen, sollten Sie wahrscheinlich ein Mesa mit --with-dri-drivers = swrast erstellen, da dies verhindert, dass Treiber wie tdfx_dri gebaut werden. Sicher hast du keinen Voodoo, der auch beschleunigt werden muss, oder? : 3

Verwandte Themen