python: Basic test case for 2d texture.
[mesa.git] / src / gallium / state_trackers / python / tests / base.py
1 #!/usr/bin/env python
2 ##########################################################################
3 #
4 # Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
5 # All Rights Reserved.
6 #
7 # Permission is hereby granted, free of charge, to any person obtaining a
8 # copy of this software and associated documentation files (the
9 # "Software"), to deal in the Software without restriction, including
10 # without limitation the rights to use, copy, modify, merge, publish,
11 # distribute, sub license, and/or sell copies of the Software, and to
12 # permit persons to whom the Software is furnished to do so, subject to
13 # the following conditions:
14 #
15 # The above copyright notice and this permission notice (including the
16 # next paragraph) shall be included in all copies or substantial portions
17 # of the Software.
18 #
19 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
22 # IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
23 # ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24 # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25 # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 #
27 ##########################################################################
28
29
30 from gallium import *
31
32
33 # Enumerate all pixel formats
34 formats = {}
35 for name, value in globals().items():
36 if name.startswith("PIPE_FORMAT_") and isinstance(value, int):
37 formats[value] = name
38
39
40 def save_image(filename, surface):
41 pixels = FloatArray(surface.height*surface.width*4)
42 surface.get_tile_rgba(0, 0, surface.width, surface.height, pixels)
43
44 import Image
45 outimage = Image.new(
46 mode='RGB',
47 size=(surface.width, surface.height),
48 color=(0,0,0))
49 outpixels = outimage.load()
50 for y in range(0, surface.height):
51 for x in range(0, surface.width):
52 offset = (y*surface.width + x)*4
53 r, g, b, a = [int(pixels[offset + ch]*255) for ch in range(4)]
54 outpixels[x, y] = r, g, b
55 outimage.save(filename, "PNG")
56
57
58
59 class Test:
60
61 def __init__(self):
62 pass
63
64 def run(self):
65 raise NotImplementedError
66
67
68 class TestSuite(Test):
69
70 def __init__(self, tests = None):
71 Test.__init__(self)
72 if tests is None:
73 self.tests = []
74 else:
75 self.tests = tests
76
77 def add_test(self, test):
78 self.tests.append(test)
79
80 def run(self):
81 for test in self.tests:
82 self.test.run()
83
84
85 class TextureTemplate:
86
87 def __init__(self, format=PIPE_FORMAT_R8G8B8A8_UNORM, width=1, height=1, depth=1, last_level=0, target=PIPE_TEXTURE_2D):
88 self.format = format
89 self.width = width
90 self.height = height
91 self.depth = depth
92 self.last_level = last_level
93 self.target = target
94
95
96