summaryrefslogtreecommitdiff
authorBen Skeggs <skeggsb@gmail.com>2007-11-01 07:17:20 (GMT)
committer Ben Skeggs <skeggsb@gmail.com>2007-11-01 07:18:15 (GMT)
commitf59e596bcd90ef824cd41e0c37952e574d6914bb (patch)
treed65da65552bc0f01e87b2ae2fe254b5b8d02fc7e
parent59c4fdb650ff2e6b6948d1bdd6bb22aa94195a32 (diff)
downloadxf86-video-nouveau-f59e596bcd90ef824cd41e0c37952e574d6914bb.zip
xf86-video-nouveau-f59e596bcd90ef824cd41e0c37952e574d6914bb.tar.gz
xf86-video-nouveau-f59e596bcd90ef824cd41e0c37952e574d6914bb.tar.bz2
nv40: completely untested fix for composite on ppc
Thanks go to ps3rsx guys for finding the issue.
-rw-r--r--src/nv40_exa.c13
-rw-r--r--src/nv_exa.c2
2 files changed, 11 insertions, 4 deletions
diff --git a/src/nv40_exa.c b/src/nv40_exa.c
index 6aa783b..a9c88c0 100644
--- a/src/nv40_exa.c
+++ b/src/nv40_exa.c
@@ -246,9 +246,16 @@ NV40_LoadFragProg(ScrnInfoPtr pScrn, nv_shader_t *shader)
}
if (!shader->hw_id) {
- memcpy(fp_mem->map + next_hw_id_offset, shader->data,
- shader->size *
- sizeof(uint32_t));
+ uint32_t *map = fp_mem->map;
+ int i;
+
+ for (i = 0; i < shader->size; i++) {
+ uint32_t data = shader->data[i];
+#if (X_BYTE_ORDER != X_LITTLE_ENDIAN)
+ data = ((data >> 16) | ((data & 0xffff) << 16));
+#endif
+ map[i] = data;
+ }
shader->hw_id = fp_mem->offset;
shader->hw_id += next_hw_id_offset;
diff --git a/src/nv_exa.c b/src/nv_exa.c
index 482bca3..1605878 100644
--- a/src/nv_exa.c
+++ b/src/nv_exa.c
@@ -698,13 +698,13 @@ NVExaInit(ScreenPtr pScreen)
pNv->EXADriverPtr->Composite = NV30EXAComposite;
pNv->EXADriverPtr->DoneComposite = NV30EXADoneComposite;
break;
+#endif
case NV_ARCH_40:
pNv->EXADriverPtr->CheckComposite = NV40EXACheckComposite;
pNv->EXADriverPtr->PrepareComposite = NV40EXAPrepareComposite;
pNv->EXADriverPtr->Composite = NV40EXAComposite;
pNv->EXADriverPtr->DoneComposite = NV40EXADoneComposite;
break;
-#endif
case NV_ARCH_50:
break;
default: