r300g: abort if a vertex buffer offset is not dword-aligned
authorMarek Olšák <maraeo@gmail.com>
Mon, 22 Mar 2010 01:18:51 +0000 (02:18 +0100)
committerMarek Olšák <maraeo@gmail.com>
Mon, 26 Apr 2010 05:21:59 +0000 (07:21 +0200)
src/gallium/drivers/r300/r300_emit.c

index 19acdaba621bbc834fdc4c0d3d79cf0af14032ec..7dc7c1d0efcf4692737af76c4b40887fac52527a 100644 (file)
@@ -832,6 +832,15 @@ void r300_emit_aos(struct r300_context* r300, unsigned offset)
     unsigned packet_size = (aos_count * 3 + 1) / 2;
     CS_LOCALS(r300);
 
+    for (i = 0; i < aos_count; i++) {
+        if ((vbuf[velem[i].vertex_buffer_index].buffer_offset + velem[i].src_offset) % 4 != 0) {
+            /* XXX We must align the buffer. */
+            assert(0);
+            fprintf(stderr, "r300: Unaligned vertex buffer offsets aren't supported, aborting..\n");
+            abort();
+        }
+    }
+
     BEGIN_CS(2 + packet_size + aos_count * 2);
     OUT_CS_PKT3(R300_PACKET3_3D_LOAD_VBPNTR, packet_size);
     OUT_CS(aos_count);