summaryrefslogtreecommitdiff
path: root/tests/bugs/crash-cubemap-order.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/bugs/crash-cubemap-order.c')
-rw-r--r--tests/bugs/crash-cubemap-order.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/bugs/crash-cubemap-order.c b/tests/bugs/crash-cubemap-order.c
new file mode 100644
index 000000000..c42a2ff25
--- /dev/null
+++ b/tests/bugs/crash-cubemap-order.c
@@ -0,0 +1,64 @@
+/**
+ * @file crash-cubemap-order.c
+ *
+ * Test case for "crash if cubemap faces are loaded in an unusual order".
+ *
+ * This bug existed in the R300 driver and was triggered by Sauerbraten.
+ */
+
+#include "GL/glut.h"
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include "piglit-util.h"
+
+
+static int Width = 100, Height = 100;
+
+static void Display(void)
+{
+ piglit_report_result(PIGLIT_SUCCESS);
+}
+
+static void init()
+{
+ GLubyte data[4096]; /* 32*32*4 */
+
+ memset(data, 0, sizeof(data));
+
+ glViewport(0, 0, Width, Height);
+
+ glBindTexture(GL_TEXTURE_CUBE_MAP, 1);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
+
+ glBindTexture(GL_TEXTURE_CUBE_MAP, 2);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+}
+
+
+int main(int argc, char**argv)
+{
+ glutInit(&argc, argv);
+ glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
+ glutInitWindowSize(Width, Height);
+ glutCreateWindow(argv[0]);
+ glutDisplayFunc(Display);
+ init();
+ glutMainLoop();
+ return 0;
+}
+