mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-02 12:18:09 +02:00
nouveau: ppc, swap fragment programs on big endian systems.
Thanks to the PS3 RSX project for figuring this out.
This commit is contained in:
parent
1b880c7e3c
commit
ee793281b2
3 changed files with 16 additions and 5 deletions
|
|
@ -224,7 +224,7 @@ nouveau_bo_init_storage(GLcontext *ctx, GLuint valid_gpu_access,
|
|||
GLsizeiptrARB size,
|
||||
const GLvoid *data,
|
||||
GLenum usage,
|
||||
struct gl_buffer_object *bo)
|
||||
struct gl_buffer_object *bo, int flags)
|
||||
{
|
||||
nouveau_buffer_object *nbo = (nouveau_buffer_object *)bo;
|
||||
|
||||
|
|
@ -257,7 +257,18 @@ nouveau_bo_init_storage(GLcontext *ctx, GLuint valid_gpu_access,
|
|||
|
||||
if (data) {
|
||||
GLvoid *map = nouveau_bo_map(ctx, GL_WRITE_ONLY_ARB, bo);
|
||||
_mesa_memcpy(map, data, size);
|
||||
#ifdef MESA_BIG_ENDIAN
|
||||
int i;
|
||||
if (flags) {
|
||||
for (i = 0; i < size; i+=4) {
|
||||
uint32_t _data = *(unsigned int *)(data+i);
|
||||
_data = ((_data >> 16) | ((_data & 0xffff) << 16));
|
||||
*(unsigned int *)(map+i) = _data;
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
_mesa_memcpy(map, data, size);
|
||||
(void)flags; /* get rid of warning */
|
||||
nouveau_bo_dirty_all(ctx, GL_FALSE, bo);
|
||||
nouveau_bo_unmap(ctx, bo);
|
||||
}
|
||||
|
|
@ -514,7 +525,7 @@ nouveauBufferData(GLcontext *ctx, GLenum target, GLsizeiptrARB size,
|
|||
gpu_flags = NOUVEAU_BO_VRAM_OK | NOUVEAU_BO_GART_OK;
|
||||
break;
|
||||
}
|
||||
nouveau_bo_init_storage(ctx, gpu_flags, size, data, usage, obj);
|
||||
nouveau_bo_init_storage(ctx, gpu_flags, size, data, usage, obj, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ typedef struct nouveau_buffer_object_t {
|
|||
extern void
|
||||
nouveau_bo_init_storage(GLcontext *ctx, GLuint valid_gpu_access,
|
||||
GLsizeiptrARB size, const GLvoid *data, GLenum usage,
|
||||
struct gl_buffer_object *bo);
|
||||
struct gl_buffer_object *bo, int flags);
|
||||
|
||||
extern GLboolean
|
||||
nouveau_bo_move_in(GLcontext *ctx, struct gl_buffer_object *bo);
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ NV30FPUploadToHW(GLcontext *ctx, nouveauShader *nvs)
|
|||
nvs->program_size * sizeof(uint32_t),
|
||||
(const GLvoid *)nvs->program,
|
||||
GL_DYNAMIC_DRAW_ARB,
|
||||
nvs->program_buffer);
|
||||
nvs->program_buffer, 1);
|
||||
|
||||
offset = nouveau_bo_gpu_ref(ctx, nvs->program_buffer);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue