diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c index 0e95f48..a4a1875 100644 --- a/src/gallium/drivers/radeonsi/si_descriptors.c +++ b/src/gallium/drivers/radeonsi/si_descriptors.c @@ -244,7 +244,8 @@ static void si_emit_descriptors(struct si_context *sctx, radeon_emit(cs, (va >> 32UL) & 0xFFFFFFFFUL); } - radeon_emit_array(cs, descriptors[i], desc->element_dw_size); + radeon_emit_array_cpu_to_le32(cs, descriptors[i], + desc->element_dw_size); last_index = i; } @@ -611,18 +612,18 @@ void si_update_vertex_buffers(struct si_context *sctx) va = rbuffer->gpu_address + offset; /* Fill in T# buffer resource description */ - desc[0] = va & 0xFFFFFFFF; - desc[1] = S_008F04_BASE_ADDRESS_HI(va >> 32) | - S_008F04_STRIDE(vb->stride); + desc[0] = util_cpu_to_le32(va); + desc[1] = util_cpu_to_le32(S_008F04_BASE_ADDRESS_HI(va >> 32) | + S_008F04_STRIDE(vb->stride)); if (vb->stride) /* Round up by rounding down and adding 1 */ - desc[2] = (vb->buffer->width0 - offset - - sctx->vertex_elements->format_size[i]) / - vb->stride + 1; + desc[2] = util_cpu_to_le32((vb->buffer->width0 - offset - + sctx->vertex_elements->format_size[i]) / + vb->stride + 1); else - desc[2] = vb->buffer->width0 - offset; + desc[2] = util_cpu_to_le32(vb->buffer->width0 - offset); - desc[3] = sctx->vertex_elements->rsrc_word3[i]; + desc[3] = util_cpu_to_le32(sctx->vertex_elements->rsrc_word3[i]); if (!bound[ve->vertex_buffer_index]) { r600_context_bo_reloc(&sctx->b, &sctx->b.rings.gfx, diff --git a/src/gallium/winsys/radeon/drm/radeon_winsys.h b/src/gallium/winsys/radeon/drm/radeon_winsys.h index dbd58f1..797630d 100644 --- a/src/gallium/winsys/radeon/drm/radeon_winsys.h +++ b/src/gallium/winsys/radeon/drm/radeon_winsys.h @@ -586,4 +586,12 @@ static INLINE void radeon_emit_array(struct radeon_winsys_cs *cs, cs->cdw += count; } +static INLINE void radeon_emit_array_cpu_to_le32(struct radeon_winsys_cs *cs, + const uint32_t *values, + unsigned count) +{ + util_memcpy_cpu_to_le32(cs->buf+cs->cdw, values, count * 4); + cs->cdw += count; +} + #endif