radeonsi: don't create temporary user buffer for r600_upload_const_buffer
This commit is contained in:
parent
0b7d48cbad
commit
65d451d9fa
|
@ -216,36 +216,30 @@ void r600_upload_index_buffer(struct r600_context *rctx,
|
|||
}
|
||||
|
||||
void r600_upload_const_buffer(struct r600_context *rctx, struct r600_resource **rbuffer,
|
||||
uint32_t *const_offset)
|
||||
const uint8_t *ptr, unsigned size,
|
||||
uint32_t *const_offset)
|
||||
{
|
||||
if ((*rbuffer)->b.b.user_ptr) {
|
||||
uint8_t *ptr = (*rbuffer)->b.b.user_ptr;
|
||||
unsigned size = (*rbuffer)->b.b.width0;
|
||||
*rbuffer = NULL;
|
||||
|
||||
*rbuffer = NULL;
|
||||
if (R600_BIG_ENDIAN) {
|
||||
uint32_t *tmpPtr;
|
||||
unsigned i;
|
||||
|
||||
if (R600_BIG_ENDIAN) {
|
||||
uint32_t *tmpPtr;
|
||||
unsigned i;
|
||||
|
||||
if (!(tmpPtr = malloc(size))) {
|
||||
R600_ERR("Failed to allocate BE swap buffer.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < size / 4; ++i) {
|
||||
tmpPtr[i] = bswap_32(((uint32_t *)ptr)[i]);
|
||||
}
|
||||
|
||||
u_upload_data(rctx->uploader, 0, size, tmpPtr, const_offset,
|
||||
(struct pipe_resource**)rbuffer);
|
||||
|
||||
free(tmpPtr);
|
||||
} else {
|
||||
u_upload_data(rctx->uploader, 0, size, ptr, const_offset,
|
||||
(struct pipe_resource**)rbuffer);
|
||||
if (!(tmpPtr = malloc(size))) {
|
||||
R600_ERR("Failed to allocate BE swap buffer.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < size / 4; ++i) {
|
||||
tmpPtr[i] = bswap_32(((uint32_t *)ptr)[i]);
|
||||
}
|
||||
|
||||
u_upload_data(rctx->uploader, 0, size, tmpPtr, const_offset,
|
||||
(struct pipe_resource**)rbuffer);
|
||||
|
||||
free(tmpPtr);
|
||||
} else {
|
||||
*const_offset = 0;
|
||||
u_upload_data(rctx->uploader, 0, size, ptr, const_offset,
|
||||
(struct pipe_resource**)rbuffer);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -99,6 +99,8 @@ void r600_texture_transfer_unmap(struct pipe_context *ctx,
|
|||
|
||||
struct r600_context;
|
||||
|
||||
void r600_upload_const_buffer(struct r600_context *rctx, struct r600_resource **rbuffer, uint32_t *offset);
|
||||
void r600_upload_const_buffer(struct r600_context *rctx, struct r600_resource **rbuffer,
|
||||
const uint8_t *ptr, unsigned size,
|
||||
uint32_t *const_offset);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -439,15 +439,12 @@ void r600_set_constant_buffer(struct pipe_context *ctx, uint shader, uint index,
|
|||
return;
|
||||
}
|
||||
|
||||
if (cb->user_buffer) {
|
||||
rbuffer = pipe_user_buffer_create(ctx->screen, cb->user_buffer,
|
||||
cb->buffer_size,
|
||||
PIPE_BIND_CONSTANT_BUFFER);
|
||||
}
|
||||
|
||||
r600_inval_shader_cache(rctx);
|
||||
|
||||
r600_upload_const_buffer(rctx, &rbuffer, &offset);
|
||||
if (cb->user_buffer)
|
||||
r600_upload_const_buffer(rctx, &rbuffer, cb->user_buffer, cb->buffer_size, &offset);
|
||||
else
|
||||
offset = 0;
|
||||
va_offset = r600_resource_va(ctx->screen, (void*)rbuffer);
|
||||
va_offset += offset;
|
||||
//va_offset >>= 8;
|
||||
|
|
Loading…
Reference in New Issue