diff options
author | Corbin Simpson <MostAwesomeDude@gmail.com> | 2010-04-26 12:57:42 -0700 |
---|---|---|
committer | Corbin Simpson <MostAwesomeDude@gmail.com> | 2010-04-26 12:57:42 -0700 |
commit | 475c2e03d14681255a4996937e96355bb266b17c (patch) | |
tree | f3d3d395a9c2c6d678b7849e2e68c4f0ac600dc5 | |
parent | 7c4832d2d3273a10cf2f5f4fd25327fe51965aeb (diff) |
Screen.
-rw-r--r-- | drm.py | 10 | ||||
-rwxr-xr-x | main.py | 6 | ||||
-rw-r--r-- | screen.py | 119 |
3 files changed, 131 insertions, 4 deletions
@@ -1,6 +1,8 @@ #!/usr/bin/env python from ctypes import * +import screen + class drm_api(Structure): pass @@ -9,7 +11,8 @@ drm_api._fields_ = [ ("name", c_char_p), ("driver_name", c_char_p), ("create_screen", - CFUNCTYPE(c_void_p, POINTER(drm_api), c_int, c_void_p)), + CFUNCTYPE(POINTER(screen.pipe_screen), + POINTER(drm_api), c_int, c_void_p)), ] class DrmApi(object): @@ -18,11 +21,12 @@ class DrmApi(object): self.drm_api = handle.drm_api_create() def __del__(self): + return self.drm_api[0].destroy(self.drm_api) def create_screen(self, fd): - screen = self.drm_api[0].create_screen(self.drm_api, fd, None) - print screen + s = screen.Screen(self.drm_api[0].create_screen(self.drm_api, fd, None)) + return s @property def name(self): @@ -20,4 +20,8 @@ print "Loaded drm_api object, name %s" % da.name screen = da.create_screen(raw.drmOpen(da.name, None)) -del da +print "Created screen, name %s vendor %s" % (screen.name, screen.vendor) +if screen["GLSL"]: + print "Whoo, GLSL!" +else: + print "No GLSL..." diff --git a/screen.py b/screen.py new file mode 100644 index 0000000..dfd4f6d --- /dev/null +++ b/screen.py @@ -0,0 +1,119 @@ +from ctypes import * + +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, + "NPOT_TEXTURES": 2, + "TWO_SIDED_STENCIL": 3, + "GLSL": 4, + "DUAL_SOURCE_BLEND": 5, + "ANISOTROPIC_FILTER": 6, + "POINT_SPRITE": 7, + "MAX_RENDER_TARGETS": 8, + "OCCLUSION_QUERY": 9, + "TEXTURE_SHADOW_MAP": 10, + "MAX_TEXTURE_2D_LEVELS": 11, + "MAX_TEXTURE_3D_LEVELS": 12, + "MAX_TEXTURE_CUBE_LEVELS": 13, + "MAX_LINE_WIDTH": 14, + "MAX_LINE_WIDTH_AA": 15, + "MAX_POINT_WIDTH": 16, + "MAX_POINT_WIDTH_AA": 17, + "MAX_TEXTURE_ANISOTROPY": 18, + "MAX_TEXTURE_LOD_BIAS": 19, + "GUARD_BAND_LEFT": 20, + "GUARD_BAND_TOP": 21, + "GUARD_BAND_RIGHT": 22, + "GUARD_BAND_BOTTOM": 23, + "TEXTURE_MIRROR_CLAMP": 24, + "TEXTURE_MIRROR_REPEAT": 25, + "MAX_VERTEX_TEXTURE_UNITS": 26, + "TGSI_CONT_SUPPORTED": 27, + "BLEND_EQUATION_SEPARATE": 28, + "SM3": 29, + "MAX_PREDICATE_REGISTERS": 30, + "PIPE_CAP_MAX_COMBINED_SAMPLERS": 31, + "PIPE_CAP_MAX_CONST_BUFFERS": 32, + "PIPE_CAP_MAX_CONST_BUFFER_SIZE": 33, + "PIPE_CAP_INDEP_BLEND_ENABLE": 34, + "PIPE_CAP_INDEP_BLEND_FUNC": 35, + "PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT": 36, + "PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT": 37, + "PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER": 38, + "PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER": 39, +} + +paramfs = { +} + +class Screen(object): + + def __init__(self, s): + self.pipe_screen = s + + def __del__(self): + self.destroy() + + def __getitem__(self, key): + if key in params: + return self.pipe_screen[0].get_param(self.pipe_screen, params[key]) + elif key in paramfs: + return self.pipe_screen[0].get_paramf(self.pipe_screen, paramfs[key]) + else: + raise KeyError + + 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) + |