python/regress: Initial commit for vertex shader regression tests.

This commit is contained in:
Michal Krol 2009-04-01 00:19:46 +02:00
parent 093ad509fc
commit 3f3db46911
5 changed files with 280 additions and 0 deletions

View File

@ -0,0 +1,11 @@
VERT1.1
DCL IN[0], POSITION
DCL IN[1], COLOR
DCL OUT[0], POSITION
DCL OUT[1], COLOR
DCL TEMP[0]
IMM FLT32 { 0.2, 0.2, 0.0, 0.0 }
ADD TEMP[0], IN[0], IMM[0]
ABS OUT[0], TEMP[0]
MOV OUT[1], IN[1]
END

View File

@ -0,0 +1,9 @@
VERT1.1
DCL IN[0], POSITION
DCL IN[1], COLOR
DCL OUT[0], POSITION
DCL OUT[1], COLOR
IMM FLT32 { 0.2, -0.1, 0.0, 0.0 }
ADD OUT[0], IN[0], IMM[0]
MOV OUT[1], IN[1]
END

View File

@ -0,0 +1,12 @@
VERT1.1
DCL IN[0], POSITION
DCL IN[1], COLOR
DCL OUT[0], POSITION
DCL OUT[1], COLOR
DCL TEMP[0]
IMM FLT32 { 0.0, 0.0, 1.0, 1.0 }
DP3 TEMP[0].xy, IN[0], IN[0]
MOV TEMP[0].zw, IMM[0]
MUL OUT[0], IN[0], TEMP[0]
MOV OUT[1], IN[1]
END

View File

@ -0,0 +1,8 @@
VERT1.1
DCL IN[0], POSITION
DCL IN[1], COLOR
DCL OUT[0], POSITION
DCL OUT[1], COLOR
MOV OUT[0], IN[0]
MOV OUT[1], IN[1]
END

View File

@ -0,0 +1,240 @@
#!/usr/bin/env python
##########################################################################
#
# Copyright 2009 VMware, Inc.
# All Rights Reserved.
#
# 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 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 VMWARE AND/OR ITS 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.
#
##########################################################################
from gallium import *
def make_image(surface):
data = surface.get_tile_rgba8(0, 0, surface.width, surface.height)
import Image
outimage = Image.fromstring('RGBA', (surface.width, surface.height), data, "raw", 'RGBA', 0, 1)
return outimage
def save_image(filename, surface):
outimage = make_image(surface)
outimage.save(filename, "PNG")
def test(dev, name):
ctx = dev.context_create()
width = 320
height = 320
minz = 0.0
maxz = 1.0
# disabled blending/masking
blend = Blend()
blend.rgb_src_factor = PIPE_BLENDFACTOR_ONE
blend.alpha_src_factor = PIPE_BLENDFACTOR_ONE
blend.rgb_dst_factor = PIPE_BLENDFACTOR_ZERO
blend.alpha_dst_factor = PIPE_BLENDFACTOR_ZERO
blend.colormask = PIPE_MASK_RGBA
ctx.set_blend(blend)
# depth/stencil/alpha
depth_stencil_alpha = DepthStencilAlpha()
depth_stencil_alpha.depth.enabled = 1
depth_stencil_alpha.depth.writemask = 1
depth_stencil_alpha.depth.func = PIPE_FUNC_LESS
ctx.set_depth_stencil_alpha(depth_stencil_alpha)
# rasterizer
rasterizer = Rasterizer()
rasterizer.front_winding = PIPE_WINDING_CW
rasterizer.cull_mode = PIPE_WINDING_NONE
rasterizer.scissor = 1
ctx.set_rasterizer(rasterizer)
# viewport
viewport = Viewport()
scale = FloatArray(4)
scale[0] = width / 2.0
scale[1] = -height / 2.0
scale[2] = (maxz - minz) / 2.0
scale[3] = 1.0
viewport.scale = scale
translate = FloatArray(4)
translate[0] = width / 2.0
translate[1] = height / 2.0
translate[2] = (maxz - minz) / 2.0
translate[3] = 0.0
viewport.translate = translate
ctx.set_viewport(viewport)
# samplers
sampler = Sampler()
sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE
sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE
sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE
sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE
sampler.min_img_filter = PIPE_TEX_MIPFILTER_NEAREST
sampler.mag_img_filter = PIPE_TEX_MIPFILTER_NEAREST
sampler.normalized_coords = 1
ctx.set_sampler(0, sampler)
# scissor
scissor = Scissor()
scissor.minx = 0
scissor.miny = 0
scissor.maxx = width
scissor.maxy = height
ctx.set_scissor(scissor)
clip = Clip()
clip.nr = 0
ctx.set_clip(clip)
# framebuffer
cbuf = dev.texture_create(
PIPE_FORMAT_X8R8G8B8_UNORM,
width, height,
tex_usage=PIPE_TEXTURE_USAGE_DISPLAY_TARGET,
).get_surface()
zbuf = dev.texture_create(
PIPE_FORMAT_Z32_UNORM,
width, height,
tex_usage=PIPE_TEXTURE_USAGE_DEPTH_STENCIL,
).get_surface()
fb = Framebuffer()
fb.width = width
fb.height = height
fb.nr_cbufs = 1
fb.set_cbuf(0, cbuf)
fb.set_zsbuf(zbuf)
ctx.set_framebuffer(fb)
ctx.surface_clear(cbuf, 0x80808080)
ctx.surface_clear(zbuf, 0xffffffff)
# vertex shader
vs = Shader(file('vert-' + name + '.txt', 'rt').read())
ctx.set_vertex_shader(vs)
# fragment shader
fs = Shader('''
FRAG1.1
DCL IN[0], COLOR, LINEAR
DCL OUT[0], COLOR, CONSTANT
0:MOV OUT[0], IN[0]
1:END
''')
ctx.set_fragment_shader(fs)
xy = [
0.0, 0.8,
-0.2, 0.4,
0.2, 0.4,
-0.4, 0.0,
0.0, 0.0,
0.4, 0.0,
-0.6, -0.4,
-0.2, -0.4,
0.2, -0.4,
0.6, -0.4,
-0.8, -0.8,
-0.4, -0.8,
0.0, -0.8,
0.4, -0.8,
0.8, -0.8,
]
color = [
1.0, 0.0, 0.0,
0.0, 1.0, 0.0,
0.0, 0.0, 1.0,
]
tri = [
1, 2, 0,
3, 4, 1,
4, 2, 1,
4, 5, 2,
6, 7, 3,
7, 4, 3,
7, 8, 4,
8, 5, 4,
8, 9, 5,
10, 11, 6,
11, 7, 6,
11, 12, 7,
12, 8, 7,
12, 13, 8,
13, 9, 8,
13, 14, 9,
]
nverts = 16 * 3
nattrs = 2
verts = FloatArray(nverts * nattrs * 4)
for i in range(0, nverts):
verts[i * nattrs * 4 + 0] = xy[tri[i] * 2 + 0] # x
verts[i * nattrs * 4 + 1] = xy[tri[i] * 2 + 1] # y
verts[i * nattrs * 4 + 2] = 0.5 # z
verts[i * nattrs * 4 + 3] = 1.0 # w
verts[i * nattrs * 4 + 4] = color[(i % 3) * 3 + 0] # r
verts[i * nattrs * 4 + 5] = color[(i % 3) * 3 + 1] # g
verts[i * nattrs * 4 + 6] = color[(i % 3) * 3 + 2] # b
verts[i * nattrs * 4 + 7] = 1.0 # a
ctx.draw_vertices(PIPE_PRIM_TRIANGLES,
nverts,
nattrs,
verts)
ctx.flush()
save_image('vert-' + name + '.png', cbuf)
def main():
tests = [
'abs',
'add',
'dp3',
'mov',
]
html = '''<html>
<head>
<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"screen.css\">
</head>
<body>
<div class=\"main\">
<h2>regression tests for <span style=\"color: #FF8000\">vertex</span> shader</h2>
<table><tbody>
'''
dev = Device()
for t in tests:
test(dev, t)
html += '<tr><td width=\"300px\">' + t + '</td>'
html += '<td><img src=\"vert-' + t + '.png\"></img></td></tr>\n'
html += '</tbody></table>\n</body>\n</html>\n'
file('vertex-shader.htm', 'wt').write(html)
if __name__ == '__main__':
main()