Merge branch 'gallium-userbuf'
[mesa.git] / src / gallium / drivers / radeonsi / r600_state_common.c
index 53a34ef519c55146464165506b481b501cea9fa3..06eb96b9ee84c05c56c332f49bf63422d790463a 100644 (file)
@@ -628,12 +628,15 @@ static void r600_vertex_buffer_update(struct r600_context *rctx)
                ptr[0] = va & 0xFFFFFFFF;
                ptr[1] = (S_008F04_BASE_ADDRESS_HI(va >> 32) |
                          S_008F04_STRIDE(vertex_buffer->stride));
-               ptr[2] = (vertex_buffer->buffer->width0 - offset) / vertex_buffer->stride;
-               /* XXX: Hardcoding RGBA */
-               ptr[3] = (S_008F0C_DST_SEL_X(V_008F0C_SQ_SEL_X) |
-                         S_008F0C_DST_SEL_Y(V_008F0C_SQ_SEL_Y) |
-                         S_008F0C_DST_SEL_Z(V_008F0C_SQ_SEL_Z) |
-                         S_008F0C_DST_SEL_W(V_008F0C_SQ_SEL_W) |
+               if (vertex_buffer->stride > 0)
+                       ptr[2] = ((vertex_buffer->buffer->width0 - offset) /
+                                 vertex_buffer->stride);
+               else
+                       ptr[2] = vertex_buffer->buffer->width0 - offset;
+               ptr[3] = (S_008F0C_DST_SEL_X(si_map_swizzle(desc->swizzle[0])) |
+                         S_008F0C_DST_SEL_Y(si_map_swizzle(desc->swizzle[1])) |
+                         S_008F0C_DST_SEL_Z(si_map_swizzle(desc->swizzle[2])) |
+                         S_008F0C_DST_SEL_W(si_map_swizzle(desc->swizzle[3])) |
                          S_008F0C_NUM_FORMAT(num_format) |
                          S_008F0C_DATA_FORMAT(data_format));