summaryrefslogtreecommitdiff
path: root/tests/asmparsertest
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2009-08-22 19:16:55 -0700
committerIan Romanick <ian.d.romanick@intel.com>2009-08-23 17:31:51 -0700
commitbf5dbf79ebfba0de4c63263de8efdab73db4bbad (patch)
tree1828fef7f815289e67cb71efe28fc9b5c1e95fb3 /tests/asmparsertest
parent491a658b97bf949600726b620349a302aafa5fe3 (diff)
Compile tests using both DOS and Unix line endings.
Diffstat (limited to 'tests/asmparsertest')
-rw-r--r--tests/asmparsertest/asmparsertest.c130
1 files changed, 105 insertions, 25 deletions
diff --git a/tests/asmparsertest/asmparsertest.c b/tests/asmparsertest/asmparsertest.c
index c50c59ae4..55bd65450 100644
--- a/tests/asmparsertest/asmparsertest.c
+++ b/tests/asmparsertest/asmparsertest.c
@@ -41,15 +41,78 @@
int automatic = FALSE;
+char *
+unix_line_endings(const char *input, size_t length)
+{
+ char *output = malloc(length + 1);
+ unsigned i;
+ unsigned j = 0;
+
+ for (i = 0; i < length; i++) {
+ if ((input[i] == 0x0D) && (input[i + 1] == 0x0A)) {
+ i++;
+ output[j] = 0x0A;
+ } else {
+ output[j] = input[i];
+ }
+
+ j++;
+ }
+
+ output[j] = '\0';
+ return output;
+}
+
+
+char *
+dos_line_endings(const char *input, size_t length)
+{
+ char *output;
+ unsigned i;
+ unsigned j = 0;
+ size_t new_length = length;
+
+
+ for (i = 0; i < length; i++) {
+ if (input[i] == 0x0A) {
+ new_length++;
+ }
+ }
+
+ output = malloc(new_length + 1);
+ for (i = 0; i < length; i++) {
+ if ((input[i] == 0x0D) && (input[i + 1] == 0x0A)) {
+ i++;
+ output[j + 0] = 0x0D;
+ output[j + 1] = 0x0A;
+ j += 2;
+ } else if (input[i] == 0x0A) {
+ output[j + 0] = 0x0D;
+ output[j + 1] = 0x0A;
+ j += 2;
+ } else {
+ output[j] = input[i];
+ j++;
+ }
+ }
+
+ output[j] = '\0';
+ return output;
+}
+
+
void
compile(const char *filename, GLenum target, int use_ARB)
{
GLenum err;
- GLuint prognum;
+ GLuint prognum[2];
char *buf;
char *ptr;
unsigned sz;
int expected_fail;
+ char *converted_buffers[2];
+ size_t buffer_sizes[2];
+ unsigned i;
if (!automatic) {
@@ -95,42 +158,59 @@ compile(const char *filename, GLenum target, int use_ARB)
}
- /* The use_ARB flag is used instead of the target because
- * GL_VERTEX_PROGRAM_ARB and GL_VERTEX_PROGRAM_NV have the same value.
- */
+ converted_buffers[0] = unix_line_endings(buf, sz);
+ buffer_sizes[0] = strlen(converted_buffers[0]);
+ converted_buffers[1] = dos_line_endings(buf, sz);
+ buffer_sizes[1] = strlen(converted_buffers[1]);
+
if (use_ARB) {
glEnable(target);
-
- glGenProgramsARB(1, &prognum);
- glBindProgramARB(target, prognum);
- glProgramStringARB(target, GL_PROGRAM_FORMAT_ASCII_ARB, sz,
- (const GLubyte *) buf);
+ glGenProgramsARB(2, prognum);
} else {
- glGenProgramsNV(1, &prognum);
- glBindProgramNV(target, prognum);
- glLoadProgramNV(target, prognum, sz, (const GLubyte *) buf);
+ glGenProgramsNV(2, prognum);
}
- err = glGetError();
- if (err != GL_NO_ERROR) {
- GLint errorpos;
+ for (i = 0; i < 2; i++) {
+ /* The use_ARB flag is used instead of the target because
+ * GL_VERTEX_PROGRAM_ARB and GL_VERTEX_PROGRAM_NV have the same
+ * value.
+ */
+ if (use_ARB) {
+ glBindProgramARB(target, prognum[i]);
+ glProgramStringARB(target, GL_PROGRAM_FORMAT_ASCII_ARB,
+ buffer_sizes[i],
+ (const GLubyte *) converted_buffers[i]);
+ } else {
+ glBindProgramNV(target, prognum[i]);
+ glLoadProgramNV(target, prognum[i],
+ buffer_sizes[i],
+ (const GLubyte *) converted_buffers[i]);
+ }
- glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errorpos);
- if (!automatic) {
- printf("glGetError = 0x%04x\n", err);
- printf("errorpos: %d\n", errorpos);
- printf("%s\n",
- (char *) glGetString(GL_PROGRAM_ERROR_STRING_ARB));
+
+ err = glGetError();
+ if (err != GL_NO_ERROR) {
+ GLint errorpos;
+
+ glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errorpos);
+ if (!automatic) {
+ printf("glGetError = 0x%04x\n", err);
+ printf("errorpos: %d\n", errorpos);
+ printf("%s\n",
+ (char *) glGetString(GL_PROGRAM_ERROR_STRING_ARB));
+ }
}
- }
+ if ((err == GL_NO_ERROR) != (expected_fail == FALSE)) {
+ piglit_report_result(PIGLIT_FAILURE);
+ }
+ }
free(buf);
+ free(converted_buffers[0]);
+ free(converted_buffers[1]);
- if ((err == GL_NO_ERROR) != (expected_fail == FALSE)) {
- piglit_report_result(PIGLIT_FAILURE);
- }
}