diff options
author | Corbin Simpson <MostAwesomeDude@gmail.com> | 2010-07-26 21:47:52 -0700 |
---|---|---|
committer | Corbin Simpson <MostAwesomeDude@gmail.com> | 2010-07-26 21:47:52 -0700 |
commit | e7fcd759f33c9f5c63d39b7fa7eef9ebfa77e820 (patch) | |
tree | 3317a396571b84a4b06f5981c27f6f1c864a96c2 | |
parent | 0945f7ed3e8896d68677a6657bbb571865408ac8 (diff) |
Convert Screen to a fully Cython'd class.
-rw-r--r-- | drm.py | 2 | ||||
-rw-r--r-- | pylladium.pyx | 180 |
2 files changed, 98 insertions, 84 deletions
@@ -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)) - |