summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorbin Simpson <MostAwesomeDude@gmail.com>2010-07-26 21:47:52 -0700
committerCorbin Simpson <MostAwesomeDude@gmail.com>2010-07-26 21:47:52 -0700
commite7fcd759f33c9f5c63d39b7fa7eef9ebfa77e820 (patch)
tree3317a396571b84a4b06f5981c27f6f1c864a96c2
parent0945f7ed3e8896d68677a6657bbb571865408ac8 (diff)
Convert Screen to a fully Cython'd class.
-rw-r--r--drm.py2
-rw-r--r--pylladium.pyx180
2 files changed, 98 insertions, 84 deletions
diff --git a/drm.py b/drm.py
index 608fc95..2b8a5b7 100644
--- a/drm.py
+++ b/drm.py
@@ -14,7 +14,7 @@ drm_api._fields_ = [
("name", c_char_p),
("driver_name", c_char_p),
("create_screen",
- CFUNCTYPE(POINTER(pylladium.pipe_screen),
+ CFUNCTYPE(c_void_p,
POINTER(drm_api),
c_int,
POINTER(drm_create_screen_arg))),
diff --git a/pylladium.pyx b/pylladium.pyx
index 4a81d94..ad1c784 100644
--- a/pylladium.pyx
+++ b/pylladium.pyx
@@ -1,4 +1,101 @@
+#!/usr/bin/env python
+
from ctypes import *
+import pprint
+import sys
+
+cdef extern from "gallium/pipe/p_screen.h":
+ cdef struct pipe_screen:
+ void destroy(pipe_screen*)
+ char* get_name(pipe_screen*)
+ char* get_vendor(pipe_screen*)
+ int get_param(pipe_screen*, int)
+ float get_paramf(pipe_screen*, int)
+ # ...
+ bint is_format_supported(pipe_screen*,
+ int, int, unsigned int, unsigned int)
+ # ...
+
+"""
+pipe_screen._fields_ = [
+ ("winsys", c_void_p),
+ ("destroy", CFUNCTYPE(None, POINTER(pipe_screen))),
+ ("get_name", CFUNCTYPE(c_char_p, POINTER(pipe_screen))),
+ ("get_vendor", CFUNCTYPE(c_char_p, POINTER(pipe_screen))),
+ ("get_param", CFUNCTYPE(c_int, POINTER(pipe_screen), c_int)),
+ ("get_paramf", CFUNCTYPE(c_float, POINTER(pipe_screen), c_int)),
+ ("context_create", CFUNCTYPE(c_void_p, POINTER(pipe_screen), c_void_p)),
+ ("is_format_supported",
+ CFUNCTYPE(c_int,
+ POINTER(pipe_screen),
+ c_int,
+ c_int,
+ c_uint,
+ c_uint)),
+ ("resource_create", CFUNCTYPE(c_void_p, POINTER(pipe_screen), c_void_p)),
+ ("resource_from_handle",
+ CFUNCTYPE(c_void_p, POINTER(pipe_screen), c_void_p, c_void_p)),
+ ("resource_get_handle",
+ CFUNCTYPE(c_int, POINTER(pipe_screen), c_void_p, c_void_p)),
+ ("resource_destroy", CFUNCTYPE(None, POINTER(pipe_screen), c_void_p)),
+ ("get_tex_surface",
+ CFUNCTYPE(c_void_p,
+ POINTER(pipe_screen),
+ c_void_p,
+ c_uint,
+ c_uint,
+ c_uint,
+ c_uint)),
+ ("tex_surface_destroy", CFUNCTYPE(None, c_void_p)),
+ ("user_buffer_create",
+ CFUNCTYPE(c_void_p, POINTER(pipe_screen), c_void_p, c_uint, c_uint)),
+ ("flush_frontbuffer",
+ CFUNCTYPE(None, POINTER(pipe_screen), c_void_p, c_void_p)),
+ ("fence_reference",
+ CFUNCTYPE(None, POINTER(pipe_screen), c_void_p, c_void_p)),
+ ("fence_signalled",
+ CFUNCTYPE(c_int, POINTER(pipe_screen), c_void_p, c_uint)),
+ ("fence_finish",
+ CFUNCTYPE(c_int, POINTER(pipe_screen), c_void_p, c_uint)),
+]
+"""
+
+cdef class Screen:
+ cdef pipe_screen *screen
+ cdef readonly object params, format_supported_dict
+
+ def __init__(self, int screen):
+ self.screen = <pipe_screen*>screen
+ self.params = {}
+ self.format_supported_dict = {}
+
+ self.init_params()
+
+ def __del__(self):
+ self.destroy()
+
+ def init_params(self):
+ for k, v in params.iteritems():
+ self.params[k] = self.screen.get_param(self.screen, v)
+ for k, v in parambs.iteritems():
+ self.params[k] = bool(self.screen.get_param(self.screen, v))
+ for k, v in paramfs.iteritems():
+ self.params[k] = self.screen.get_paramf(self.screen, v)
+
+ def destroy(self):
+ self.screen.destroy(self.screen)
+
+ property name:
+ def __get__(self):
+ return self.screen.get_name(self.screen)
+
+ property vendor:
+ def __get__(self):
+ return self.screen.get_vendor(self.screen)
+
+ def is_format_supported(self, format, target, bindings, geom_flags):
+ return bool(self.screen.is_format_supported(self.screen,
+ format, target, bindings.value, geom_flags.value))
class pipe_context(Structure):
pass
@@ -98,10 +195,6 @@ pipe_context._fields_ = [
("transfer_unmap", c_void_p),
("transfer_inline_write", c_void_p),
]
-#!/usr/bin/env python
-
-import pprint
-import sys
def parse_enums(f):
handle = open(f, "r")
@@ -270,7 +363,6 @@ by_name = {'A8B8G8R8_SRGB': 98,
'Z32_FLOAT': 18,
'Z32_FLOAT_S8X24_USCALED': 126,
'Z32_UNORM': 17}
-from ctypes import *
class bind_bitfield(Structure):
_fields_ = [
@@ -307,50 +399,6 @@ class Geom(Union):
("value", c_uint),
]
-class pipe_screen(Structure):
- pass
-
-pipe_screen._fields_ = [
- ("winsys", c_void_p),
- ("destroy", CFUNCTYPE(None, POINTER(pipe_screen))),
- ("get_name", CFUNCTYPE(c_char_p, POINTER(pipe_screen))),
- ("get_vendor", CFUNCTYPE(c_char_p, POINTER(pipe_screen))),
- ("get_param", CFUNCTYPE(c_int, POINTER(pipe_screen), c_int)),
- ("get_paramf", CFUNCTYPE(c_float, POINTER(pipe_screen), c_int)),
- ("context_create", CFUNCTYPE(c_void_p, POINTER(pipe_screen), c_void_p)),
- ("is_format_supported",
- CFUNCTYPE(c_int,
- POINTER(pipe_screen),
- c_int,
- c_int,
- c_uint,
- c_uint)),
- ("resource_create", CFUNCTYPE(c_void_p, POINTER(pipe_screen), c_void_p)),
- ("resource_from_handle",
- CFUNCTYPE(c_void_p, POINTER(pipe_screen), c_void_p, c_void_p)),
- ("resource_get_handle",
- CFUNCTYPE(c_int, POINTER(pipe_screen), c_void_p, c_void_p)),
- ("resource_destroy", CFUNCTYPE(None, POINTER(pipe_screen), c_void_p)),
- ("get_tex_surface",
- CFUNCTYPE(c_void_p,
- POINTER(pipe_screen),
- c_void_p,
- c_uint,
- c_uint,
- c_uint,
- c_uint)),
- ("tex_surface_destroy", CFUNCTYPE(None, c_void_p)),
- ("user_buffer_create",
- CFUNCTYPE(c_void_p, POINTER(pipe_screen), c_void_p, c_uint, c_uint)),
- ("flush_frontbuffer",
- CFUNCTYPE(None, POINTER(pipe_screen), c_void_p, c_void_p)),
- ("fence_reference",
- CFUNCTYPE(None, POINTER(pipe_screen), c_void_p, c_void_p)),
- ("fence_signalled",
- CFUNCTYPE(c_int, POINTER(pipe_screen), c_void_p, c_uint)),
- ("fence_finish",
- CFUNCTYPE(c_int, POINTER(pipe_screen), c_void_p, c_uint)),
-]
params = {
"MAX_TEXTURE_IMAGE_UNITS": 1,
@@ -400,37 +448,3 @@ paramfs = {
"GUARD_BAND_BOTTOM": 23,
}
-class Screen(object):
-
- def __init__(self, s):
- self.pipe_screen = s
- self.init_params()
- self.format_supported_dict = {}
-
- def __del__(self):
- self.destroy()
-
- def init_params(self):
- self.params = {}
- for k, v in params.iteritems():
- self.params[k] = self.pipe_screen[0].get_param(self.pipe_screen, v)
- for k, v in parambs.iteritems():
- self.params[k] = bool(self.pipe_screen[0].get_param(self.pipe_screen, v))
- for k, v in paramfs.iteritems():
- self.params[k] = self.pipe_screen[0].get_paramf(self.pipe_screen, v)
-
- def destroy(self):
- self.pipe_screen[0].destroy(self.pipe_screen)
-
- @property
- def name(self):
- return self.pipe_screen[0].get_name(self.pipe_screen)
-
- @property
- def vendor(self):
- return self.pipe_screen[0].get_vendor(self.pipe_screen)
-
- def is_format_supported(self, format, target, bindings, geom_flags):
- return bool(self.pipe_screen[0].is_format_supported(self.pipe_screen,
- format, target, bindings.value, geom_flags.value))
-