Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Mesa
piglit
Commits
0f8dc2bf
Commit
0f8dc2bf
authored
Jun 29, 2008
by
Nicolai Hähnle
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New test: general/texgen
parent
b8b124e7
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
304 additions
and
0 deletions
+304
-0
tests/CMakeLists.txt
tests/CMakeLists.txt
+1
-0
tests/all.tests
tests/all.tests
+4
-0
tests/general/CMakeLists.txt
tests/general/CMakeLists.txt
+21
-0
tests/general/texgen.c
tests/general/texgen.c
+278
-0
No files found.
tests/CMakeLists.txt
View file @
0f8dc2bf
add_subdirectory
(
util
)
add_subdirectory
(
bugs
)
add_subdirectory
(
general
)
add_subdirectory
(
glean
)
add_subdirectory
(
mesa
)
add_subdirectory
(
shaders
)
...
...
tests/all.tests
View file @
0f8dc2bf
...
...
@@ -54,6 +54,9 @@ glean['vertProg1'] = GleanTest('vertProg1')
mesa
=
Group
()
mesa
[
'crossbar'
]
=
PlainExecTest
([
testBinDir
+
'crossbar'
,
'-auto'
])
general
=
Group
()
general
[
'texgen'
]
=
PlainExecTest
([
testBinDir
+
'texgen'
,
'-auto'
])
shaders
=
Group
()
shaders
[
'trinity-fp1'
]
=
PlainExecTest
([
testBinDir
+
'trinity-fp1'
,
'-auto'
])
shaders
[
'fp-lit-mask'
]
=
PlainExecTest
([
testBinDir
+
'fp-lit-mask'
,
'-auto'
])
...
...
@@ -80,6 +83,7 @@ texturing['texdepth'] = PlainExecTest([testBinDir + 'texdepth', '-auto'])
texturing
[
'texrect-many'
]
=
PlainExecTest
([
testBinDir
+
'texrect-many'
,
'-auto'
])
profile
.
tests
[
'bugs'
]
=
bugs
profile
.
tests
[
'general'
]
=
general
profile
.
tests
[
'glean'
]
=
glean
profile
.
tests
[
'mesa'
]
=
mesa
profile
.
tests
[
'shaders'
]
=
shaders
...
...
tests/general/CMakeLists.txt
0 → 100644
View file @
0f8dc2bf
include_directories
(
${
OPENGL_INCLUDE_PATH
}
${
GLUT_INCLUDE_DIR
}
${
piglit_SOURCE_DIR
}
/tests/util
)
link_directories
(
${
piglit_SOURCE_DIR
}
/tests/util
)
link_libraries
(
${
OPENGL_gl_LIBRARY
}
${
OPENGL_glu_LIBRARY
}
${
GLUT_glut_LIBRARY
}
${
TIFF_LIBRARY
}
mesautil
piglitutil
)
add_executable
(
texgen texgen.c
)
tests/general/texgen.c
0 → 100644
View file @
0f8dc2bf
/*
* Copyright (c) The Piglit project 2008
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* on the rights to use, copy, modify, merge, publish, distribute, sub
* license, and/or sell copies of the Software, and to permit persons to whom
* the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
* VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
* USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/**
* @file
* Test a number of basic TexGen functions.
*/
#include <assert.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>
#include "piglit-util.h"
static
int
Width
=
128
,
Height
=
128
;
static
int
Automatic
=
0
;
static
int
CurrentTest
=
0
;
static
int
UseFragmentProgram
=
0
;
/**
* The test uses a 4x4 clamped, nearest-filtered texture with the following
* RGB colors. The pattern matches what @ref TextureFP produces and is filled
* in in @ref Init.
*/
static
GLfloat
TextureData
[
4
][
4
][
3
];
/**
* Implement the inner part of the above texture in a fragment program.
*/
static
const
char
TextureFP
[]
=
"!!ARBfp1.0
\n
"
"TEMP r0;
\n
"
"MUL r0, fragment.texcoord, 4;
\n
"
"FLR r0, r0;
\n
"
"MUL result.color, r0, 0.25;
\n
"
"END
\n
"
;
static
void
probe_cell
(
const
char
*
testname
,
int
x
,
int
y
,
const
float
*
expected
)
{
if
(
!
piglit_probe_pixel_rgb
((
2
*
x
+
1
)
*
Width
/
8
,
(
2
*
y
+
1
)
*
Height
/
8
,
expected
))
{
fprintf
(
stderr
,
"%s: %i,%i failed
\n
"
,
testname
,
x
,
y
);
if
(
Automatic
)
piglit_report_result
(
PIGLIT_FAILURE
);
}
}
/**
* Sanity test whether the texture is rendered correctly at all.
*/
static
void
test_sanity
()
{
int
x
,
y
;
glClearColor
(
0
.
5
,
0
.
5
,
0
.
5
,
1
.
0
);
glClear
(
GL_COLOR_BUFFER_BIT
);
glBegin
(
GL_QUADS
);
glTexCoord2f
(
0
,
0
);
glVertex2f
(
0
,
0
);
glTexCoord2f
(
1
,
0
);
glVertex2f
(
1
,
0
);
glTexCoord2f
(
1
,
1
);
glVertex2f
(
1
,
1
);
glTexCoord2f
(
0
,
1
);
glVertex2f
(
0
,
1
);
glEnd
();
glutSwapBuffers
();
glReadBuffer
(
GL_FRONT
);
for
(
y
=
0
;
y
<
4
;
++
y
)
{
for
(
x
=
0
;
x
<
4
;
++
x
)
probe_cell
(
"test_sanity"
,
x
,
y
,
TextureData
[
y
][
x
]);
}
}
static
void
do_test_texgen_eye
(
const
char
*
testname
)
{
static
GLfloat
sPlane1
[
4
]
=
{
1
.
0
,
0
.
0
,
0
.
0
,
0
.
25
};
static
GLfloat
sPlane2
[
4
]
=
{
1
.
0
,
0
.
0
,
0
.
0
,
-
0
.
25
};
static
GLfloat
sPlane3
[
4
]
=
{
-
1
.
0
,
0
.
0
,
0
.
0
,
1
.
25
};
int
x
,
y
;
glClearColor
(
0
.
5
,
0
.
5
,
0
.
5
,
1
.
0
);
glClear
(
GL_COLOR_BUFFER_BIT
);
// Note: Modelview matrix is identity
glTexGeni
(
GL_S
,
GL_TEXTURE_GEN_MODE
,
GL_EYE_LINEAR
);
glTexGenfv
(
GL_S
,
GL_EYE_PLANE
,
sPlane1
);
glEnable
(
GL_TEXTURE_GEN_S
);
// Draw lower left quad
glBegin
(
GL_QUADS
);
glTexCoord2f
(
0
,
0
.
25
);
glVertex2f
(
0
.
0
,
0
.
0
);
glTexCoord2f
(
0
,
0
.
25
);
glVertex2f
(
0
.
5
,
0
.
0
);
glTexCoord2f
(
0
,
0
.
75
);
glVertex2f
(
0
.
5
,
0
.
5
);
glTexCoord2f
(
0
,
0
.
75
);
glVertex2f
(
0
.
0
,
0
.
5
);
glEnd
();
// Draw lower right quad
glTexGenfv
(
GL_S
,
GL_EYE_PLANE
,
sPlane2
);
glPushMatrix
();
glTranslatef
(
0
.
5
,
-
0
.
5
,
0
.
0
);
glScalef
(
2
.
0
,
1
.
0
,
1
.
0
);
glBegin
(
GL_QUADS
);
glTexCoord2f
(
0
,
0
.
25
);
glVertex2f
(
0
.
0
,
0
.
5
);
glTexCoord2f
(
0
,
0
.
25
);
glVertex2f
(
0
.
25
,
0
.
5
);
glTexCoord2f
(
0
,
0
.
75
);
glVertex2f
(
0
.
25
,
1
.
0
);
glTexCoord2f
(
0
,
0
.
75
);
glVertex2f
(
0
.
0
,
1
.
0
);
glEnd
();
glPopMatrix
();
// Draw upper left quad
glPushMatrix
();
glTranslatef
(
1
.
0
,
0
.
5
,
0
.
0
);
glScalef
(
-
1
.
0
,
1
.
0
,
1
.
0
);
glTexGenfv
(
GL_S
,
GL_EYE_PLANE
,
sPlane3
);
glBegin
(
GL_QUADS
);
glTexCoord2f
(
0
,
0
.
25
);
glVertex2f
(
1
.
0
,
0
.
0
);
glTexCoord2f
(
0
,
0
.
25
);
glVertex2f
(
0
.
5
,
0
.
0
);
glTexCoord2f
(
0
,
0
.
75
);
glVertex2f
(
0
.
5
,
0
.
5
);
glTexCoord2f
(
0
,
0
.
75
);
glVertex2f
(
1
.
0
,
0
.
5
);
glEnd
();
glPopMatrix
();
glDisable
(
GL_TEXTURE_GEN_S
);
glutSwapBuffers
();
glReadBuffer
(
GL_FRONT
);
for
(
y
=
0
;
y
<
2
;
++
y
)
{
for
(
x
=
0
;
x
<
2
;
++
x
)
probe_cell
(
testname
,
x
,
y
,
TextureData
[
y
+
1
][
x
+
1
]);
}
}
static
void
test_texgen_eye
()
{
do_test_texgen_eye
(
"test_texgen_eye"
);
}
static
void
test_texgen_eye_fp
()
{
if
(
UseFragmentProgram
)
{
glEnable
(
GL_FRAGMENT_PROGRAM_ARB
);
do_test_texgen_eye
(
"test_texgen_eye_fp"
);
glDisable
(
GL_FRAGMENT_PROGRAM_ARB
);
}
}
static
struct
{
const
char
*
name
;
void
(
*
function
)();
}
Tests
[]
=
{
{
"sanity"
,
&
test_sanity
},
{
"texgen_eye"
,
&
test_texgen_eye
},
{
"texgen_eye_fp"
,
&
test_texgen_eye_fp
}
};
#define NrTests (ARRAY_SIZE(Tests))
static
void
Redisplay
(
void
)
{
if
(
Automatic
)
{
int
i
;
for
(
i
=
0
;
i
<
NrTests
;
++
i
)
Tests
[
i
].
function
();
piglit_report_result
(
PIGLIT_SUCCESS
);
}
else
{
Tests
[
CurrentTest
].
function
();
}
}
static
void
Reshape
(
int
width
,
int
height
)
{
Width
=
width
;
Height
=
height
;
glViewport
(
0
,
0
,
width
,
height
);
glMatrixMode
(
GL_PROJECTION
);
glLoadIdentity
();
glOrtho
(
0
.
0
,
1
.
0
,
0
.
0
,
1
.
0
,
-
1
.
0
,
1
.
0
);
glMatrixMode
(
GL_MODELVIEW
);
glLoadIdentity
();
}
static
void
Init
(
void
)
{
int
x
,
y
;
if
(
piglit_use_fragment_program
())
{
UseFragmentProgram
=
1
;
pglBindProgramARB
(
GL_FRAGMENT_PROGRAM_ARB
,
piglit_compile_program
(
GL_FRAGMENT_PROGRAM_ARB
,
TextureFP
));
}
for
(
y
=
0
;
y
<
4
;
++
y
)
{
for
(
x
=
0
;
x
<
4
;
++
x
)
{
TextureData
[
y
][
x
][
0
]
=
x
*
0
.
25
;
TextureData
[
y
][
x
][
1
]
=
y
*
0
.
25
;
TextureData
[
y
][
x
][
2
]
=
0
.
0
;
}
}
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_MIN_FILTER
,
GL_NEAREST
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_MAG_FILTER
,
GL_NEAREST
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_WRAP_S
,
GL_CLAMP
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_WRAP_T
,
GL_CLAMP
);
glTexImage2D
(
GL_TEXTURE_2D
,
0
,
GL_RGB
,
4
,
4
,
0
,
GL_RGB
,
GL_FLOAT
,
TextureData
);
glEnable
(
GL_TEXTURE_2D
);
Reshape
(
Width
,
Height
);
}
static
void
Key
(
unsigned
char
key
,
int
x
,
int
y
)
{
(
void
)
x
;
(
void
)
y
;
switch
(
key
)
{
case
't'
:
CurrentTest
++
;
if
(
CurrentTest
>=
NrTests
)
CurrentTest
=
0
;
printf
(
"Test: %s
\n
"
,
Tests
[
CurrentTest
].
name
);
break
;
case
27
:
exit
(
0
);
break
;
}
glutPostRedisplay
();
}
int
main
(
int
argc
,
char
*
argv
[])
{
int
i
;
glutInit
(
&
argc
,
argv
);
if
(
argc
==
2
&&
!
strcmp
(
argv
[
1
],
"-auto"
))
Automatic
=
1
;
glutInitWindowPosition
(
0
,
0
);
glutInitWindowSize
(
Width
,
Height
);
glutInitDisplayMode
(
GLUT_RGB
|
GLUT_DOUBLE
);
glutCreateWindow
(
argv
[
0
]);
glutReshapeFunc
(
Reshape
);
glutDisplayFunc
(
Redisplay
);
if
(
!
Automatic
)
{
printf
(
"Press 't' to switch tests; Escape to quit
\n
"
);
glutKeyboardFunc
(
Key
);
}
Init
();
glutMainLoop
();
return
0
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment