summaryrefslogtreecommitdiff
path: root/screen.py
blob: 04324b62dd5831e93da76a2d664232854224bf31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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,
    "MAX_RENDER_TARGETS": 8,
    "MAX_TEXTURE_2D_LEVELS": 11,
    "MAX_TEXTURE_3D_LEVELS": 12,
    "MAX_TEXTURE_CUBE_LEVELS": 13,
    "MAX_TEXTURE_ANISOTROPY": 18,
    "MAX_TEXTURE_LOD_BIAS": 19,
    "MAX_VERTEX_TEXTURE_UNITS": 26,
    "MAX_PREDICATE_REGISTERS": 30,
    "PIPE_CAP_MAX_COMBINED_SAMPLERS": 31,
    "PIPE_CAP_MAX_CONST_BUFFERS": 32,
    "PIPE_CAP_MAX_CONST_BUFFER_SIZE": 33,
}

parambs = {
    "NPOT_TEXTURES": 2,
    "TWO_SIDED_STENCIL": 3,
    "GLSL": 4,
    "DUAL_SOURCE_BLEND": 5,
    "ANISOTROPIC_FILTER": 6,
    "POINT_SPRITE": 7,
    "OCCLUSION_QUERY": 9,
    "TEXTURE_SHADOW_MAP": 10,
    "TEXTURE_MIRROR_CLAMP": 24,
    "TEXTURE_MIRROR_REPEAT": 25,
    "TGSI_CONT_SUPPORTED": 27,
    "BLEND_EQUATION_SEPARATE": 28,
    "SM3": 29,
    "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 = {
    "MAX_LINE_WIDTH": 14,
    "MAX_LINE_WIDTH_AA": 15,
    "MAX_POINT_WIDTH": 16,
    "MAX_POINT_WIDTH_AA": 17,
    "GUARD_BAND_LEFT": 20,
    "GUARD_BAND_TOP": 21,
    "GUARD_BAND_RIGHT": 22,
    "GUARD_BAND_BOTTOM": 23,
}

class Screen(object):

    def __init__(self, s):
        self.pipe_screen = s
        self.init_params()

    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)