summaryrefslogtreecommitdiff
path: root/progs/gallium/python/tests/texture_transfer.py
diff options
context:
space:
mode:
Diffstat (limited to 'progs/gallium/python/tests/texture_transfer.py')
-rwxr-xr-xprogs/gallium/python/tests/texture_transfer.py115
1 files changed, 58 insertions, 57 deletions
diff --git a/progs/gallium/python/tests/texture_transfer.py b/progs/gallium/python/tests/texture_transfer.py
index 7da00e4255..639d3d362c 100755
--- a/progs/gallium/python/tests/texture_transfer.py
+++ b/progs/gallium/python/tests/texture_transfer.py
@@ -29,6 +29,7 @@
import os
+import random
from gallium import *
from base import *
@@ -59,6 +60,7 @@ class TextureTest(TestCase):
def test(self):
dev = self.dev
+ ctx = self.ctx
target = self.target
format = self.format
@@ -70,8 +72,12 @@ class TextureTest(TestCase):
level = self.level
zslice = self.zslice
- tex_usage = 0
+ tex_usage = PIPE_TEXTURE_USAGE_SAMPLER
+ geom_flags = 0
+ if not dev.is_format_supported(format, target, tex_usage, geom_flags):
+ raise TestSkip
+ # textures
texture = dev.texture_create(
target = target,
format = format,
@@ -81,20 +87,17 @@ class TextureTest(TestCase):
last_level = last_level,
tex_usage = tex_usage,
)
- if texture is None:
- raise TestSkip
surface = texture.get_surface(face, level, zslice)
- # ???
- stride = pf_get_stride(texture->format, w)
- size = pf_get_nblocksy(texture->format) * stride
+ stride = util_format_get_stride(format, surface.width)
+ size = util_format_get_nblocksy(format, surface.height) * stride
in_raw = os.urandom(size)
- surface.put_tile_raw(0, 0, surface.width, surface.height, in_raw, stride)
+ ctx.surface_write_raw(surface, 0, 0, surface.width, surface.height, in_raw, stride)
- out_raw = surface.get_tile_raw(0, 0, surface.width, surface.height)
+ out_raw = ctx.surface_read_raw(surface, 0, 0, surface.width, surface.height)
if in_raw != out_raw:
raise TestFailure
@@ -102,6 +105,7 @@ class TextureTest(TestCase):
def main():
dev = Device()
+ ctx = dev.context_create()
suite = TestSuite()
targets = [
@@ -110,26 +114,6 @@ def main():
PIPE_TEXTURE_3D,
]
- formats = [
- PIPE_FORMAT_B8G8R8A8_UNORM,
- PIPE_FORMAT_B8G8R8X8_UNORM,
- PIPE_FORMAT_B8G8R8A8_SRGB,
- PIPE_FORMAT_B5G6R5_UNORM,
- PIPE_FORMAT_B5G5R5A1_UNORM,
- PIPE_FORMAT_B4G4R4A4_UNORM,
- PIPE_FORMAT_Z32_UNORM,
- PIPE_FORMAT_S8Z24_UNORM,
- PIPE_FORMAT_X8Z24_UNORM,
- PIPE_FORMAT_Z16_UNORM,
- PIPE_FORMAT_S8_UNORM,
- PIPE_FORMAT_A8_UNORM,
- PIPE_FORMAT_L8_UNORM,
- PIPE_FORMAT_DXT1_RGB,
- PIPE_FORMAT_DXT1_RGBA,
- PIPE_FORMAT_DXT3_RGBA,
- PIPE_FORMAT_DXT5_RGBA,
- ]
-
sizes = [64, 32, 16, 8, 4, 2, 1]
#sizes = [1020, 508, 252, 62, 30, 14, 6, 3]
#sizes = [64]
@@ -144,35 +128,52 @@ def main():
PIPE_TEX_FACE_NEG_Z,
]
- for target in targets:
- for format in formats:
- for size in sizes:
- if target == PIPE_TEXTURE_3D:
- depth = size
- else:
- depth = 1
- for face in faces:
- if target != PIPE_TEXTURE_CUBE and face:
- continue
- levels = lods(size)
- for last_level in range(levels):
- for level in range(0, last_level + 1):
- zslice = 0
- while zslice < depth >> level:
- test = TextureTest(
- dev = dev,
- target = target,
- format = format,
- width = size,
- height = size,
- depth = depth,
- last_level = last_level,
- face = face,
- level = level,
- zslice = zslice,
- )
- suite.add_test(test)
- zslice = (zslice + 1)*2 - 1
+ try:
+ n = int(sys.argv[1])
+ except:
+ n = 10000
+
+ for i in range(n):
+ format = random.choice(formats.keys())
+ if not util_format_is_depth_or_stencil(format):
+ is_depth_or_stencil = util_format_is_depth_or_stencil(format)
+
+ if is_depth_or_stencil:
+ target = PIPE_TEXTURE_2D
+ else:
+ target = random.choice(targets)
+
+ size = random.choice(sizes)
+
+ if target == PIPE_TEXTURE_3D:
+ depth = size
+ else:
+ depth = 1
+
+ if target == PIPE_TEXTURE_CUBE:
+ face = random.choice(faces)
+ else:
+ face = PIPE_TEX_FACE_POS_X
+
+ levels = lods(size)
+ last_level = random.randint(0, levels - 1)
+ level = random.randint(0, last_level)
+ zslice = random.randint(0, max(depth >> level, 1) - 1)
+
+ test = TextureTest(
+ dev = dev,
+ ctx = ctx,
+ target = target,
+ format = format,
+ width = size,
+ height = size,
+ depth = depth,
+ last_level = last_level,
+ face = face,
+ level = level,
+ zslice = zslice,
+ )
+ suite.add_test(test)
suite.run()