progs/gallium/python: Try to fix most regressions.

Not enough for retrace to work again though.
This commit is contained in:
José Fonseca
2010-04-12 15:08:05 +09:00
parent c48f21ea7c
commit 19211bb5b8
9 changed files with 123 additions and 151 deletions
+78 -106
View File
@@ -109,6 +109,8 @@ struct_factories = {
"pipe_vertex_element": gallium.VertexElement,
"pipe_viewport_state": gallium.Viewport,
#"pipe_texture": gallium.Texture,
'pipe_subresource': gallium.pipe_subresource,
'pipe_box': gallium.pipe_box,
}
@@ -185,14 +187,8 @@ class Global(Object):
self.interpreter = interpreter
self.real = real
def pipe_winsys_create(self):
return Winsys(self.interpreter, gallium.Device())
def pipe_screen_create(self, winsys=None):
if winsys is None:
real = gallium.Device()
else:
real = winsys.real
def pipe_screen_create(self):
real = gallium.Device()
return Screen(self.interpreter, real)
def pipe_context_create(self, screen):
@@ -200,59 +196,13 @@ class Global(Object):
return Context(self.interpreter, context)
class Winsys(Object):
def __init__(self, interpreter, real):
self.interpreter = interpreter
self.real = real
def get_name(self):
pass
def user_buffer_create(self, data, size):
# We don't really care to distinguish between user and regular buffers
buffer = self.real.buffer_create(size,
4,
gallium.PIPE_BUFFER_USAGE_CPU_READ |
gallium.PIPE_BUFFER_USAGE_CPU_WRITE )
assert size == len(data)
buffer.write(data)
return buffer
def buffer_create(self, alignment, usage, size):
return self.real.buffer_create(size, alignment, usage)
def buffer_destroy(self, buffer):
pass
def buffer_write(self, buffer, data, size):
assert size == len(data)
buffer.write(data)
def fence_finish(self, fence, flags):
pass
def fence_reference(self, dst, src):
pass
def flush_frontbuffer(self, surface):
pass
def surface_alloc(self):
return None
def surface_release(self, surface):
pass
class Transfer:
def __init__(self, surface, x, y, w, h):
self.surface = surface
self.x = x
self.y = y
self.w = w
self.h = h
def __init__(self, resource, usage, subresource, box):
self.resource = resource
self.usage = usage
self.subresource = subresource
self.box = box
class Screen(Object):
@@ -276,18 +226,18 @@ class Screen(Object):
context = self.real.context_create()
return Context(self.interpreter, context)
def is_format_supported(self, format, target, tex_usage, geom_flags):
return self.real.is_format_supported(format, target, tex_usage, geom_flags)
def is_format_supported(self, format, target, bind, geom_flags):
return self.real.is_format_supported(format, target, bind, geom_flags)
def texture_create(self, templat):
return self.real.texture_create(
def resource_create(self, templat):
return self.real.resource_create(
format = templat.format,
width = templat.width,
height = templat.height,
depth = templat.depth,
last_level = templat.last_level,
target = templat.target,
tex_usage = templat.tex_usage,
bind = templat.bind,
)
def texture_destroy(self, texture):
@@ -307,37 +257,9 @@ class Screen(Object):
def tex_surface_release(self, surface):
pass
def surface_write(self, surface, data, stride, size):
if surface is None:
return
# assert surface.nblocksy * stride == size
surface.put_tile_raw(0, 0, surface.width, surface.height, data, stride)
def get_tex_transfer(self, texture, face, level, zslice, usage, x, y, w, h):
if texture is None:
return None
transfer = Transfer(texture.get_surface(face, level, zslice), x, y, w, h)
if transfer and usage & gallium.PIPE_TRANSFER_READ:
if self.interpreter.options.all:
self.interpreter.present(transfer.surface, 'transf_read', x, y, w, h)
return transfer
def tex_transfer_destroy(self, transfer):
self.interpreter.unregister_object(transfer)
def transfer_write(self, transfer, stride, data, size):
if transfer is None:
return
transfer.surface.put_tile_raw(transfer.x, transfer.y, transfer.w, transfer.h, data, stride)
if self.interpreter.options.all:
self.interpreter.present(transfer.surface, 'transf_write', transfer.x, transfer.y, transfer.w, transfer.h)
def user_buffer_create(self, data, size):
def user_buffer_create(self, data, size, bind):
# We don't really care to distinguish between user and regular buffers
buffer = self.real.buffer_create(size,
4,
gallium.PIPE_BUFFER_USAGE_CPU_READ |
gallium.PIPE_BUFFER_USAGE_CPU_WRITE )
buffer = self.real.buffer_create(size, bind)
assert size == len(data)
buffer.write(data)
return buffer
@@ -348,10 +270,6 @@ class Screen(Object):
def buffer_destroy(self, buffer):
pass
def buffer_write(self, buffer, data, size, offset=0):
assert size == len(data)
buffer.write(data)
def fence_finish(self, fence, flags):
pass
@@ -499,13 +417,23 @@ class Context(Object):
def set_viewport_state(self, state):
self.real.set_viewport(state)
def set_fragment_sampler_textures(self, num_textures, textures):
for i in range(num_textures):
self.real.set_fragment_sampler_texture(i, textures[i])
def create_sampler_view(self, texture, templ):
return self.real.create_sampler_view(texture,
format = templ.format,
first_level = templ.first_level,
last_level = templ.last_level,
swizzle_r = templ.swizzle_r,
swizzle_g = templ.swizzle_r,
swizzle_b = templ.swizzle_g,
swizzle_a = templ.swizzle_a)
def set_vertex_sampler_textures(self, num_textures, textures):
for i in range(num_textures):
self.real.set_vertex_sampler_texture(i, textures[i])
def set_fragment_sampler_views(self, num, views):
for i in range(num):
self.real.set_fragment_sampler_view(i, views[i])
def set_vertex_sampler_views(self, num, views):
for i in range(num):
self.real.set_vertex_sampler_view(i, views[i])
def set_vertex_buffers(self, num_buffers, buffers):
self.vbufs = buffers[0:num_buffers]
@@ -518,13 +446,21 @@ class Context(Object):
buffer_offset = vbuf.buffer_offset,
buffer = vbuf.buffer,
)
def create_vertex_elements_state(self, num_elements, elements):
return elements[0:num_elements]
def set_vertex_elements(self, num_elements, elements):
self.velems = elements[0:num_elements]
def bind_vertex_elements_state(self, state):
elements = state
num_elements = len(elements)
self.velems = elements
for i in range(num_elements):
self.real.set_vertex_element(i, elements[i])
self.real.set_vertex_elements(num_elements)
def delete_vertex_elements_state(self, state):
pass
def dump_vertices(self, start, count):
if not self.interpreter.verbosity(2):
return
@@ -630,6 +566,42 @@ class Context(Object):
#return self.real.is_buffer_referenced(format, buf)
pass
def buffer_write(self, buffer, data, size, offset=0):
assert size == len(data)
self.buffer_write(buffer, data)
def surface_write(self, surface, data, stride, size):
if surface is None:
return
# assert surface.nblocksy * stride == size
surface.put_tile_raw(0, 0, surface.width, surface.height, data, stride)
def get_transfer(self, texture, sr, usage, box):
if texture is None:
return None
transfer = Transfer(texture, sr, usage, box)
if transfer and usage & gallium.PIPE_TRANSFER_READ:
if self.interpreter.options.all:
surface = texture.get_surface(sr.face, sr.level, box.z)
self.interpreter.present(transfer.surface, 'transf_read', box.x, box.y, box.w, box.h)
return transfer
def tex_transfer_destroy(self, transfer):
self.interpreter.unregister_object(transfer)
def transfer_write(self, transfer, data, size):
if transfer is None:
return
self.real.transfer_inline_write(resource, sr, usage, box, data, stride, slice_stride)
self.transfertransfer.surface.put_tile_raw(transfer.x, transfer.y, transfer.w, transfer.h, data, transfer.stride)
if self.interpreter.options.all:
box = transfer.box
surface = transfer.resource.get_surface(sr.face, sr.level, box.z)
self.interpreter.present(transfer.surface, 'transf_write', box.x, box.y, box.w, box.h)
def transfer_inline_write(self, resource, sr, usage, box, stride, slice_stride, data):
self.real.transfer_inline_write(resource, sr, usage, box, data, stride, slice_stride)
def _set_dirty(self):
if self.interpreter.options.step:
self._present()
+4 -4
View File
@@ -133,15 +133,15 @@ def test(dev):
ctx.set_clip(clip)
# framebuffer
cbuf = dev.texture_create(
cbuf = dev.resource_create(
PIPE_FORMAT_B8G8R8X8_UNORM,
width, height,
tex_usage=PIPE_TEXTURE_USAGE_RENDER_TARGET,
bind=PIPE_BIND_RENDER_TARGET,
).get_surface()
zbuf = dev.texture_create(
zbuf = dev.resource_create(
PIPE_FORMAT_Z32_UNORM,
width, height,
tex_usage=PIPE_TEXTURE_USAGE_DEPTH_STENCIL,
bind=PIPE_BIND_DEPTH_STENCIL,
).get_surface()
fb = Framebuffer()
fb.width = width
+4 -4
View File
@@ -134,15 +134,15 @@ def test(dev):
ctx.set_clip(clip)
# framebuffer
cbuf = dev.texture_create(
cbuf = dev.resource_create(
PIPE_FORMAT_B8G8R8X8_UNORM,
width, height,
tex_usage=PIPE_TEXTURE_USAGE_RENDER_TARGET,
bind=PIPE_BIND_RENDER_TARGET,
).get_surface()
zbuf = dev.texture_create(
zbuf = dev.resource_create(
PIPE_FORMAT_Z32_UNORM,
width, height,
tex_usage=PIPE_TEXTURE_USAGE_DEPTH_STENCIL,
bind=PIPE_BIND_DEPTH_STENCIL,
).get_surface()
fb = Framebuffer()
fb.width = width
@@ -112,10 +112,10 @@ def test(dev, name):
ctx.set_clip(clip)
# framebuffer
cbuf = dev.texture_create(
cbuf = dev.resource_create(
PIPE_FORMAT_B8G8R8X8_UNORM,
width, height,
tex_usage=PIPE_TEXTURE_USAGE_RENDER_TARGET,
bind=PIPE_BIND_RENDER_TARGET,
).get_surface()
fb = Framebuffer()
fb.width = width
@@ -113,10 +113,10 @@ def test(dev, name):
ctx.set_clip(clip)
# framebuffer
cbuf = dev.texture_create(
cbuf = dev.resource_create(
PIPE_FORMAT_B8G8R8X8_UNORM,
width, height,
tex_usage=PIPE_TEXTURE_USAGE_RENDER_TARGET,
bind=PIPE_BIND_RENDER_TARGET,
).get_surface()
fb = Framebuffer()
fb.width = width
+7 -7
View File
@@ -71,35 +71,35 @@ class TextureTest(TestCase):
level = self.level
zslice = self.zslice
tex_usage = PIPE_TEXTURE_USAGE_SAMPLER
bind = PIPE_BIND_SAMPLER_VIEW
geom_flags = 0
if not dev.is_format_supported(format, target, tex_usage, geom_flags):
if not dev.is_format_supported(format, target, bind, geom_flags):
raise TestSkip
if not dev.is_format_supported(format, target, tex_usage, geom_flags):
if not dev.is_format_supported(format, target, bind, geom_flags):
raise TestSkip
# textures
dst_texture = dev.texture_create(
dst_texture = dev.resource_create(
target = target,
format = format,
width = width,
height = height,
depth = depth,
last_level = last_level,
tex_usage = tex_usage,
bind = bind,
)
dst_surface = dst_texture.get_surface(face = face, level = level, zslice = zslice)
src_texture = dev.texture_create(
src_texture = dev.resource_create(
target = target,
format = format,
width = dst_surface.width,
height = dst_surface.height,
depth = 1,
last_level = 0,
tex_usage = PIPE_TEXTURE_USAGE_SAMPLER,
bind = PIPE_BIND_SAMPLER_VIEW,
)
src_surface = src_texture.get_surface()
+14 -14
View File
@@ -131,14 +131,14 @@ class TextureColorSampleTest(TestCase):
minz = 0.0
maxz = 1.0
tex_usage = PIPE_TEXTURE_USAGE_SAMPLER
bind = PIPE_BIND_SAMPLER_VIEW
geom_flags = 0
if width != height:
geom_flags |= PIPE_TEXTURE_GEOM_NON_SQUARE
if not is_pot(width) or not is_pot(height) or not is_pot(depth):
geom_flags |= PIPE_TEXTURE_GEOM_NON_POWER_OF_TWO
if not dev.is_format_supported(format, target, tex_usage, geom_flags):
if not dev.is_format_supported(format, target, bind, geom_flags):
raise TestSkip
# disabled blending/masking
@@ -174,14 +174,14 @@ class TextureColorSampleTest(TestCase):
ctx.set_fragment_sampler(0, sampler)
# texture
texture = dev.texture_create(
texture = dev.resource_create(
target = target,
format = format,
width = width,
height = height,
depth = depth,
last_level = last_level,
tex_usage = tex_usage,
bind = bind,
)
expected_rgba = FloatArray(height*width*4)
@@ -225,11 +225,11 @@ class TextureColorSampleTest(TestCase):
ctx.set_clip(clip)
# framebuffer
cbuf_tex = dev.texture_create(
cbuf_tex = dev.resource_create(
PIPE_FORMAT_B8G8R8A8_UNORM,
width,
height,
tex_usage = PIPE_TEXTURE_USAGE_RENDER_TARGET,
bind = PIPE_BIND_RENDER_TARGET,
)
cbuf = cbuf_tex.get_surface()
@@ -349,14 +349,14 @@ class TextureDepthSampleTest(TestCase):
minz = 0.0
maxz = 1.0
tex_usage = PIPE_TEXTURE_USAGE_SAMPLER
bind = PIPE_BIND_SAMPLER_VIEW
geom_flags = 0
if width != height:
geom_flags |= PIPE_TEXTURE_GEOM_NON_SQUARE
if not is_pot(width) or not is_pot(height) or not is_pot(depth):
geom_flags |= PIPE_TEXTURE_GEOM_NON_POWER_OF_TWO
if not dev.is_format_supported(format, target, tex_usage, geom_flags):
if not dev.is_format_supported(format, target, bind, geom_flags):
raise TestSkip
# disabled blending/masking
@@ -411,14 +411,14 @@ class TextureDepthSampleTest(TestCase):
ctx.set_fragment_sampler(0, sampler)
# texture
texture = dev.texture_create(
texture = dev.resource_create(
target = target,
format = format,
width = width,
height = height,
depth = depth,
last_level = last_level,
tex_usage = tex_usage,
bind = bind,
)
expected_rgba = FloatArray(height*width*4)
@@ -446,18 +446,18 @@ class TextureDepthSampleTest(TestCase):
ctx.set_clip(clip)
# framebuffer
cbuf_tex = dev.texture_create(
cbuf_tex = dev.resource_create(
PIPE_FORMAT_B8G8R8A8_UNORM,
width,
height,
tex_usage = PIPE_TEXTURE_USAGE_RENDER_TARGET,
bind = PIPE_BIND_RENDER_TARGET,
)
zsbuf_tex = dev.texture_create(
zsbuf_tex = dev.resource_create(
PIPE_FORMAT_X8Z24_UNORM,
width,
height,
tex_usage = PIPE_TEXTURE_USAGE_RENDER_TARGET,
bind = PIPE_BIND_RENDER_TARGET,
)
cbuf = cbuf_tex.get_surface()
+8 -8
View File
@@ -68,40 +68,40 @@ class TextureTest(TestCase):
zslice = self.zslice
# textures
dst_texture = dev.texture_create(
dst_texture = dev.resource_create(
target = target,
format = format,
width = width,
height = height,
depth = depth,
last_level = last_level,
tex_usage = PIPE_TEXTURE_USAGE_RENDER_TARGET,
bind = PIPE_BIND_RENDER_TARGET,
)
if dst_texture is None:
raise TestSkip
dst_surface = dst_texture.get_surface(face = face, level = level, zslice = zslice)
ref_texture = dev.texture_create(
ref_texture = dev.resource_create(
target = target,
format = format,
width = dst_surface.width,
height = dst_surface.height,
depth = 1,
last_level = 0,
tex_usage = PIPE_TEXTURE_USAGE_SAMPLER,
bind = PIPE_BIND_SAMPLER_VIEW,
)
ref_surface = ref_texture.get_surface()
src_texture = dev.texture_create(
src_texture = dev.resource_create(
target = target,
format = PIPE_FORMAT_B8G8R8A8_UNORM,
width = dst_surface.width,
height = dst_surface.height,
depth = 1,
last_level = 0,
tex_usage = PIPE_TEXTURE_USAGE_SAMPLER,
bind = PIPE_BIND_SAMPLER_VIEW,
)
src_surface = src_texture.get_surface()
@@ -148,11 +148,11 @@ class TextureTest(TestCase):
ctx.set_fragment_sampler_texture(0, src_texture)
# framebuffer
cbuf_tex = dev.texture_create(
cbuf_tex = dev.resource_create(
PIPE_FORMAT_B8G8R8A8_UNORM,
width,
height,
tex_usage = PIPE_TEXTURE_USAGE_RENDER_TARGET,
bind = PIPE_BIND_RENDER_TARGET,
)
fb = Framebuffer()
@@ -72,20 +72,20 @@ class TextureTest(TestCase):
level = self.level
zslice = self.zslice
tex_usage = PIPE_TEXTURE_USAGE_SAMPLER
bind = PIPE_BIND_SAMPLER_VIEW
geom_flags = 0
if not dev.is_format_supported(format, target, tex_usage, geom_flags):
if not dev.is_format_supported(format, target, bind, geom_flags):
raise TestSkip
# textures
texture = dev.texture_create(
texture = dev.resource_create(
target = target,
format = format,
width = width,
height = height,
depth = depth,
last_level = last_level,
tex_usage = tex_usage,
bind = bind,
)
surface = texture.get_surface(face, level, zslice)