Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
virgl-es
mesa
Commits
6410e94b
Commit
6410e94b
authored
Jul 13, 2008
by
José Fonseca
Browse files
python: New state tracker which exposes the pipe driver to python scripts.
Still under development. Just barely works.
parent
36dd89c8
Changes
11
Hide whitespace changes
Inline
Side-by-side
SConstruct
View file @
6410e94b
...
...
@@ -29,23 +29,22 @@ import common
#######################################################################
# Configuration options
default_statetrackers
=
'mesa'
if
common
.
default_platform
in
(
'linux'
,
'freebsd'
,
'darwin'
):
default_statetrackers
=
'all'
default_drivers
=
'softpipe,failover,i915simple,i965simple'
default_winsys
=
'xlib'
elif
common
.
default_platform
in
(
'winddk'
,):
default_statetrackers
=
'all'
default_drivers
=
'softpipe,i915simple'
default_winsys
=
'all'
else
:
default_statetrackers
=
'all'
default_drivers
=
'all'
default_winsys
=
'all'
opts
=
Options
(
'config.py'
)
common
.
AddOptions
(
opts
)
opts
.
Add
(
ListOption
(
'statetrackers'
,
'state trackers to build'
,
default_statetrackers
,
[
'mesa'
]))
[
'mesa'
,
'python'
]))
opts
.
Add
(
ListOption
(
'drivers'
,
'pipe drivers to build'
,
default_drivers
,
[
'softpipe'
,
'failover'
,
'i915simple'
,
'i965simple'
,
'cell'
]))
opts
.
Add
(
ListOption
(
'winsys'
,
'winsys drivers to build'
,
default_winsys
,
...
...
src/gallium/SConscript
View file @
6410e94b
...
...
@@ -25,3 +25,5 @@ SConscript([
for
driver
in
env
[
'drivers'
]:
SConscript
(
os
.
path
.
join
(
'drivers'
,
driver
,
'SConscript'
))
SConscript
(
'state_trackers/python/SConscript'
)
src/gallium/state_trackers/python/README
0 → 100644
View file @
6410e94b
This directory contains Python bindings to Gallium3D. It looks like a state
tracker from the pipe driver perspective, and it looks like a pipe driver from
the python script perspective.
To build you'll need:
* Python (with development packages)
* SCons
* SWIG
* Python Imaging Library (for the samples)
Invoke scons on the top dir as
scons statetrackers=python
To use do
export PYTHONPATH=build/XXXX-XXXX-XXXX/gallium/state_trackers/python
and then try running
python src/gallium/state_trackers/python/samples/simple.py
which should create a simple.png
This is still in experimental phase, and there many limitations to what you can
do with from Python.
--
Jose Fonseca <jrfonseca@tungstengraphics.com>
src/gallium/state_trackers/python/SConscript
0 → 100644
View file @
6410e94b
Import
(
'*'
)
if
'python'
in
env
[
'statetrackers'
]:
env
=
env
.
Clone
()
env
.
Append
(
CPPPATH
=
'.'
)
env
.
Tool
(
'swig'
)
env
.
Append
(
SWIGPATH
=
[
'#src/gallium/include'
,
'#src/gallium/include/pipe'
])
env
.
Append
(
SWIGFLAGS
=
[
'-python'
,
'-keyword'
])
env
.
ParseConfig
(
'python-config --cflags --ldflags --libs'
)
env
.
SharedLibrary
(
target
=
'_gallium'
,
source
=
[
'gallium.i'
,
'st_device.c'
,
'st_softpipe_winsys.c'
,
],
SHLIBPREFIX
=
''
,
LIBS
=
softpipe
+
auxiliaries
+
env
[
'LIBS'
],
)
src/gallium/state_trackers/python/gallium.i
0 → 100644
View file @
6410e94b
/**************************************************************************
*
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sub license, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial portions
* of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
* IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
**************************************************************************/
/**
* @file
* SWIG interface definion for Gallium types.
*
* @author Jose Fonseca <jrfonseca@tungstengraphics.com>
*/
%
module
gallium
;
%
{
#
include
<
stdio
.
h
>
#
include
<
Python
.
h
>
#
include
"pipe/p_screen.h"
#
include
"pipe/p_context.h"
#
include
"pipe/p_inlines.h"
#
include
"pipe/p_util.h"
#
include
"pipe/p_shader_tokens.h"
#
include
"util/u_draw_quad.h"
#
include
"util/p_tile.h"
#
include
"cso_cache/cso_context.h"
#
include
"st_device.h"
%
}
%
include
"carrays.i"
%
array_class
(
int
,
IntArray
)
;
%
array_class
(
float
,
FloatArray
)
;
%
rename
(
Device
)
st_device
;
%
rename
(
Context
)
st_context
;
%
rename
(
Texture
)
pipe_texture
;
%
rename
(
Surface
)
pipe_surface
;
%
rename
(
Buffer
)
pipe_buffer
;
%
rename
(
BlendColor
)
pipe_blend_color
;
%
rename
(
Blend
)
pipe_blend_state
;
%
rename
(
Clip
)
pipe_clip_state
;
%
rename
(
ConstantBuffer
)
pipe_constant_buffer
;
%
rename
(
DepthStencilAlpha
)
pipe_depth_stencil_alpha_state
;
%
rename
(
FormatBlock
)
pipe_format_block
;
%
rename
(
Framebuffer
)
pipe_framebuffer_state
;
%
rename
(
PolyStipple
)
pipe_poly_stipple
;
%
rename
(
Rasterizer
)
pipe_rasterizer_state
;
%
rename
(
Sampler
)
pipe_sampler_state
;
%
rename
(
Scissor
)
pipe_scissor_state
;
%
rename
(
Shader
)
pipe_shader_state
;
%
rename
(
VertexBuffer
)
pipe_vertex_buffer
;
%
rename
(
VertexElement
)
pipe_vertex_element
;
%
rename
(
Viewport
)
pipe_viewport_state
;
%
include
"p_format.i"
;
%
include
"pipe/p_defines.h"
;
%
include
"pipe/p_state.h"
;
%
include
"pipe/p_shader_tokens.h"
;
%
nodefaultctor
;
%
nodefaultdtor
;
struct
st_device
{
}
;
struct
st_context
{
}
;
%
extend
st_device
{
st_device
(
int
hardware
=
0
)
{
return
st_device_create
(
hardware
?
TRUE
:
FALSE
)
;
}
~
st_device
()
{
st_device_destroy
(
$
self
)
;
}
const
char
*
get_name
(
void
)
{
return
$
self-
>
screen-
>
get_name
(
$
self-
>
screen
)
;
}
const
char
*
get_vendor
(
void
)
{
return
$
self-
>
screen-
>
get_vendor
(
$
self-
>
screen
)
;
}
/**
* Query an integer-valued capability/parameter/limit
* \param param one of PIPE_CAP_x
*/
int
get_param
(
int
param
)
{
return
$
self-
>
screen-
>
get_param
(
$
self-
>
screen
,
param
)
;
}
/**
* Query a float-valued capability/parameter/limit
* \param param one of PIPE_CAP_x
*/
float
get_paramf
(
int
param
)
{
return
$
self-
>
screen-
>
get_paramf
(
$
self-
>
screen
,
param
)
;
}
/**
* Check if the given pipe_format is supported as a texture or
* drawing surface.
* \param type one of PIPE_TEXTURE, PIPE_SURFACE
*/
int
is_format_supported
(
enum
pipe_format
format
,
unsigned
type
)
{
return
$
self-
>
screen-
>
is_format_supported
(
$
self-
>
screen
,
format
,
type
)
;
}
struct
st_context
*
context_create
(
void
)
{
return
st_context_create
(
$
self
)
;
}
struct
pipe_texture
*
texture_create
(
enum
pipe_format
format
,
unsigned
width
,
unsigned
height
,
unsigned
depth
=
1
,
unsigned
last_level
=
0
,
enum
pipe_texture_target
target
=
PIPE_TEXTURE_2D
,
unsigned
usage
=
0
)
{
struct
pipe_texture
templat
;
memset
(
&
templat,
0
,
sizeof(templat));
templat
.
format
=
format
;
pf_get_block
(
templat
.
format
,
&
templat.block);
templat
.
width
[
0
]
=
width
;
templat
.
height
[
0
]
=
height
;
templat
.
depth
[
0
]
=
depth
;
templat
.
last_level
=
last_level
;
templat
.
target
=
target
;
templat
.
tex_usage
=
usage
;
return
$
self-
>
screen-
>
texture_create
(
$
self-
>
screen
,
&
templat);
}
struct
pipe_buffer
*
buffer_create
(
unsigned
size
,
unsigned
alignment
=
0
,
unsigned
usage
=
0
)
{
return
$
self-
>
screen-
>
winsys-
>
buffer_create
(
$
self-
>
screen-
>
winsys
,
alignment
,
usage
,
size
)
;
}
}
;
%
extend
st_context
{
~
st_context
()
{
st_context_destroy
(
$
self
)
;
}
/*
* State functions (create/bind/destroy state objects)
*/
void
set_blend
(
const
struct
pipe_blend_state
*
state
)
{
cso_set_blend
(
$
self-
>
cso
,
state
)
;
}
void
set_sampler
(
unsigned
index
,
const
struct
pipe_sampler_state
*
state
)
{
cso_single_sampler
(
$
self-
>
cso
,
index
,
state
)
;
cso_single_sampler_done
(
$
self-
>
cso
)
;
}
void
set_rasterizer
(
const
struct
pipe_rasterizer_state
*
state
)
{
cso_set_rasterizer
(
$
self-
>
cso
,
state
)
;
}
void
set_depth_stencil_alpha
(
const
struct
pipe_depth_stencil_alpha_state
*
state
)
{
cso_set_depth_stencil_alpha
(
$
self-
>
cso
,
state
)
;
}
void
*
create_fs
(
const
struct
pipe_shader_state
*
state
)
{
return
$
self-
>
pipe-
>
create_fs_state
(
$
self-
>
pipe
,
state
)
;
}
void
bind_fs
(
void
*
state_obj
)
{
$
self-
>
pipe-
>
bind_fs_state
(
$
self-
>
pipe
,
state_obj
)
;
}
void
delete_fs
(
void
*
state_obj
)
{
$
self-
>
pipe-
>
delete_fs_state
(
$
self-
>
pipe
,
state_obj
)
;
}
void
*
create_vs
(
const
struct
pipe_shader_state
*
state
)
{
return
$
self-
>
pipe-
>
create_vs_state
(
$
self-
>
pipe
,
state
)
;
}
void
bind_vs
(
void
*
state_obj
)
{
$
self-
>
pipe-
>
bind_vs_state
(
$
self-
>
pipe
,
state_obj
)
;
}
void
delete_vs
(
void
*
state_obj
)
{
$
self-
>
pipe-
>
delete_vs_state
(
$
self-
>
pipe
,
state_obj
)
;
}
/*
* Parameter-like state (or properties)
*/
void
set_blend_color
(
const
struct
pipe_blend_color
*
state
)
{
cso_set_blend_color
(
$
self-
>
cso
,
state
)
;
}
void
set_clip
(
const
struct
pipe_clip_state
*
state
)
{
$
self-
>
pipe-
>
set_clip_state
(
$
self-
>
pipe
,
state
)
;
}
void
set_constant_buffer
(
unsigned
shader
,
unsigned
index
,
const
struct
pipe_constant_buffer
*
buf
)
{
$
self-
>
pipe-
>
set_constant_buffer
(
$
self-
>
pipe
,
shader
,
index
,
buf
)
;
}
void
set_framebuffer
(
const
struct
pipe_framebuffer_state
*
state
)
{
cso_set_framebuffer
(
$
self-
>
cso
,
state
)
;
}
void
set_polygon_stipple
(
const
struct
pipe_poly_stipple
*
state
)
{
$
self-
>
pipe-
>
set_polygon_stipple
(
$
self-
>
pipe
,
state
)
;
}
void
set_scissor
(
const
struct
pipe_scissor_state
*
state
)
{
$
self-
>
pipe-
>
set_scissor_state
(
$
self-
>
pipe
,
state
)
;
}
void
set_viewport
(
const
struct
pipe_viewport_state
*
state
)
{
cso_set_viewport
(
$
self-
>
cso
,
state
)
;
}
void
set_sampler_texture
(
unsigned
index
,
struct
pipe_texture
*
texture
)
{
pipe_texture_reference
(
&
$self->sampler_textures[index],
texture);
$
self-
>
pipe-
>
set_sampler_textures
(
$
self-
>
pipe
,
PIPE_MAX_SAMPLERS
,
$
self-
>
sampler_textures
)
;
}
void
set_vertex_buffer
(
unsigned
index
,
const
struct
pipe_vertex_buffer
*
buffer
)
{
memcpy
(
&
$self->vertex_buffers[index],
buffer,
sizeof(*buffer));
$
self-
>
pipe-
>
set_vertex_buffers
(
$
self-
>
pipe
,
PIPE_MAX_ATTRIBS
,
$
self-
>
vertex_buffers
)
;
}
void
set_vertex_element
(
unsigned
index
,
const
struct
pipe_vertex_element
*
element
)
{
memcpy
(
&
$self->vertex_elements[index],
element,
sizeof(*element));
$
self-
>
pipe-
>
set_vertex_elements
(
$
self-
>
pipe
,
PIPE_MAX_ATTRIBS
,
$
self-
>
vertex_elements
)
;
}
/*
* Draw functions
*/
void
draw_arrays
(
unsigned
mode
,
unsigned
start
,
unsigned
count
)
{
$
self-
>
pipe-
>
draw_arrays
(
$
self-
>
pipe
,
mode
,
start
,
count
)
;
}
void
draw_elements
(
struct
pipe_buffer
*
indexBuffer
,
unsigned
indexSize
,
unsigned
mode
,
unsigned
start
,
unsigned
count
)
{
$
self-
>
pipe-
>
draw_elements
(
$
self-
>
pipe
,
indexBuffer
,
indexSize
,
mode
,
start
,
count
)
;
}
void
draw_vertices
(
unsigned
prim
,
unsigned
num_verts
,
unsigned
num_attribs
,
const
float
*
vertices
)
{
struct
pipe_context
*
pipe
=
$
self-
>
pipe
;
struct
pipe_winsys
*
winsys
=
pipe-
>
winsys
;
struct
pipe_buffer
*
vbuf
;
float
*
map
;
unsigned
size
;
size
=
num_verts
*
num_attribs
*
4
*
sizeof
(
float
)
;
vbuf
=
winsys-
>
buffer_create
(
winsys
,
32
,
PIPE_BUFFER_USAGE_VERTEX
,
size
)
;
if
(
!
vbuf
)
goto
error1
;
map
=
winsys-
>
buffer_map
(
winsys
,
vbuf
,
PIPE_BUFFER_USAGE_CPU_WRITE
)
;
if
(
!
map
)
goto
error2
;
memcpy
(
map
,
vertices
,
size
)
;
pipe-
>
winsys-
>
buffer_unmap
(
pipe-
>
winsys
,
vbuf
)
;
util_draw_vertex_buffer
(
pipe
,
vbuf
,
prim
,
num_verts
,
num_attribs
)
;
error2
:
pipe_buffer_reference
(
pipe-
>
winsys
,
&
vbuf,
NULL);
error1
:
;
}
void
draw_quad
(
float
x0
,
float
y0
,
float
x1
,
float
y1
,
float
z
=
0.0
f
)
{
util_draw_texquad
(
$
self-
>
pipe
,
x0
,
y0
,
x1
,
y1
,
z
)
;
}
void
flush
(
void
)
{
struct
pipe_fence_handle
*
fence
=
NULL
;
$
self-
>
pipe-
>
flush
(
$
self-
>
pipe
,
PIPE_FLUSH_RENDER_CACHE
,
&
fence);
/* TODO: allow asynchronous operation */
$
self-
>
pipe-
>
winsys-
>
fence_finish
(
$
self-
>
pipe-
>
winsys
,
fence
,
0
)
;
$
self-
>
pipe-
>
winsys-
>
fence_reference
(
$
self-
>
pipe-
>
winsys
,
&
fence,
NULL
);
}
/*
* Surface functions
*/
void
surface_copy
(
int
do_flip
,
struct
pipe_surface
*
dest
,
unsigned
destx
,
unsigned
desty
,
struct
pipe_surface
*
src
,
unsigned
srcx
,
unsigned
srcy
,
unsigned
width
,
unsigned
height
)
{
$
self-
>
pipe-
>
surface_copy
(
$
self-
>
pipe
,
do_flip
,
dest
,
destx
,
desty
,
src
,
srcx
,
srcy
,
width
,
height
)
;
}
void
surface_fill
(
struct
pipe_surface
*
dst
,
unsigned
x
,
unsigned
y
,
unsigned
width
,
unsigned
height
,
unsigned
value
)
{
$
self-
>
pipe-
>
surface_fill
(
$
self-
>
pipe
,
dst
,
x
,
y
,
width
,
height
,
value
)
;
}
void
clear
(
struct
pipe_surface
*
surface
,
unsigned
value
)
{
$
self-
>
pipe-
>
clear
(
$
self-
>
pipe
,
surface
,
value
)
;
}
}
;
%
extend
pipe_texture
{
~
pipe_texture
()
{
struct
pipe_texture
*
ptr
=
$
self
;
pipe_texture_reference
(
&
ptr,
NULL);
}
/** Get a surface which is a "view" into a texture */
struct
pipe_surface
*
get_surface
(
unsigned
face
=
0
,
unsigned
level
=
0
,
unsigned
zslice
=
0
,
unsigned
usage
=
0
)
{
struct
pipe_screen
*
screen
=
$
self-
>
screen
;
return
screen-
>
get_tex_surface
(
screen
,
$
self
,
face
,
level
,
zslice
,
usage
)
;
}
}
;
%
extend
pipe_surface
{
~
pipe_surface
()
{
struct
pipe_surface
*
ptr
=
$
self
;
pipe_surface_reference
(
&
ptr,
NULL);
}
// gets mapped to pipe_surface_map automatically
void
*
map
(
unsigned
flags
)
;
// gets mapped to pipe_surface_unmap automatically
void
unmap
(
void
)
;
void
get_tile_rgba
(
unsigned
x
,
unsigned
y
,
unsigned
w
,
unsigned
h
,
float
*
p
)
{
pipe_get_tile_rgba
(
$
self
,
x
,
y
,
w
,
h
,
p
)
;
}
void
put_tile_rgba
(
unsigned
x
,
unsigned
y
,
unsigned
w
,
unsigned
h
,
const
float
*
p
)
{
pipe_put_tile_rgba
(
$
self
,
x
,
y
,
w
,
h
,
p
)
;
}
void
get_tile_z
(
unsigned
x
,
unsigned
y
,
unsigned
w
,
unsigned
h
,
unsigned
*
z
)
{
pipe_get_tile_z
(
$
self
,
x
,
y
,
w
,
h
,
z
)
;
}
void
put_tile_z
(
unsigned
x
,
unsigned
y
,
unsigned
w
,
unsigned
h
,
const
unsigned
*
z
)
{
pipe_put_tile_z
(
$
self
,
x
,
y
,
w
,
h
,
z
)
;
}
}
;
%
extend
pipe_framebuffer_state
{
pipe_framebuffer_state
(
void
)
{
return
CALLOC_STRUCT
(
pipe_framebuffer_state
)
;
}
~
pipe_framebuffer_state
()
{
unsigned
index
;
for
(
index
=
0
;
index
<
PIPE_MAX_COLOR_BUFS
;
++
index
)
pipe_surface_reference
(
&
$self->cbufs[index],
NULL);
pipe_surface_reference
(
&
$self->zsbuf,
NULL);
FREE
(
$
self
)
;
}
void
set_cbuf
(
unsigned
index
,
struct
pipe_surface
*
surface
)
{
pipe_surface_reference
(
&
$self->cbufs[index],
surface);
}
void
set_zsbuf
(
struct
pipe_surface
*
surface
)
{
pipe_surface_reference
(
&
$self->zsbuf,
surface);
}
}
;
src/gallium/state_trackers/python/p_format.i
0 → 100644
View file @
6410e94b
/**************************************************************************
*
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sub license, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial portions
* of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
* IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
**************************************************************************/
/*
* XXX: SWIG can't parse p_format.h, so we need to duplicate the relevant
* declarations here
*/
%
{
#
include
"pipe/p_format.h"
%
}
enum
pipe_format
{
PIPE_FORMAT_NONE
,
PIPE_FORMAT_A8R8G8B8_UNORM
,
PIPE_FORMAT_X8R8G8B8_UNORM
,
PIPE_FORMAT_B8G8R8A8_UNORM
,
PIPE_FORMAT_B8G8R8X8_UNORM
,
PIPE_FORMAT_A1R5G5B5_UNORM
,
PIPE_FORMAT_A4R4G4B4_UNORM
,
PIPE_FORMAT_R5G6B5_UNORM
,
PIPE_FORMAT_A2B10G10R10_UNORM
,
PIPE_FORMAT_L8_UNORM
,
PIPE_FORMAT_A8_UNORM
,
PIPE_FORMAT_I8_UNORM
,
PIPE_FORMAT_A8L8_UNORM
,
PIPE_FORMAT_L16_UNORM
,
PIPE_FORMAT_YCBCR
,
PIPE_FORMAT_YCBCR_REV
,
PIPE_FORMAT_Z16_UNORM
,
PIPE_FORMAT_Z32_UNORM
,
PIPE_FORMAT_Z32_FLOAT
,
PIPE_FORMAT_S8Z24_UNORM
,
PIPE_FORMAT_Z24S8_UNORM
,
PIPE_FORMAT_X8Z24_UNORM
,
PIPE_FORMAT_Z24X8_UNORM
,
PIPE_FORMAT_S8_UNORM
,
PIPE_FORMAT_R64_FLOAT
,
PIPE_FORMAT_R64G64_FLOAT
,