| @@ -120,6 +120,22 @@ to the array index which is used for sampling. | |||
| * ``sampler_view_destroy`` destroys a sampler view and releases its reference | |||
| to associated texture. | |||
| Shader Resources | |||
| ^^^^^^^^^^^^^^^^ | |||
| Shader resources are textures or buffers that may be read or written | |||
| from a shader without an associated sampler. This means that they | |||
| have no support for floating point coordinates, address wrap modes or | |||
| filtering. | |||
| Shader resources are specified for all the shader stages at once using | |||
| the ``set_shader_resources`` method. When binding texture resources, | |||
| the ``level``, ``first_layer`` and ``last_layer`` pipe_surface fields | |||
| specify the mipmap level and the range of layers the texture will be | |||
| constrained to. In the case of buffers, ``first_element`` and | |||
| ``last_element`` specify the range within the buffer that will be used | |||
| by the shader resource. | |||
| Surfaces | |||
| ^^^^^^^^ | |||
| @@ -575,7 +591,9 @@ The compute program has access to four special resources: | |||
| These resources use a byte-based addressing scheme, and they can be | |||
| accessed from the compute program by means of the LOAD/STORE TGSI | |||
| opcodes. | |||
| opcodes. Additional resources to be accessed using the same opcodes | |||
| may be specified by the user with the ``set_compute_resources`` | |||
| method. | |||
| In addition, normal texture sampling is allowed from the compute | |||
| program: ``bind_compute_sampler_states`` may be used to set up texture | |||
| @@ -249,6 +249,10 @@ resources might be created and handled quite differently. | |||
| process. | |||
| * ``PIPE_BIND_GLOBAL``: A buffer that can be mapped into the global | |||
| address space of a compute program. | |||
| * ``PIPE_BIND_SHADER_RESOURCE``: A buffer or texture that can be | |||
| bound to the graphics pipeline as a shader resource. | |||
| * ``PIPE_BIND_COMPUTE_RESOURCE``: A buffer or texture that can be | |||
| bound to the compute program as a shader resource. | |||
| .. _pipe_usage: | |||
| @@ -229,6 +229,22 @@ struct pipe_context { | |||
| unsigned start_slot, unsigned num_views, | |||
| struct pipe_sampler_view **); | |||
| /** | |||
| * Bind an array of shader resources that will be used by the | |||
| * graphics pipeline. Any resources that were previously bound to | |||
| * the specified range will be unbound after this call. | |||
| * | |||
| * \param first first resource to bind. | |||
| * \param count number of consecutive resources to bind. | |||
| * \param resources array of pointers to the resources to bind, it | |||
| * should contain at least \a count elements | |||
| * unless it's NULL, in which case no new | |||
| * resources will be bound. | |||
| */ | |||
| void (*set_shader_resources)(struct pipe_context *, | |||
| unsigned start, unsigned count, | |||
| struct pipe_surface **resources); | |||
| void (*set_vertex_buffers)( struct pipe_context *, | |||
| unsigned num_buffers, | |||
| const struct pipe_vertex_buffer * ); | |||
| @@ -441,6 +457,22 @@ struct pipe_context { | |||
| void (*bind_compute_state)(struct pipe_context *, void *); | |||
| void (*delete_compute_state)(struct pipe_context *, void *); | |||
| /** | |||
| * Bind an array of shader resources that will be used by the | |||
| * compute program. Any resources that were previously bound to | |||
| * the specified range will be unbound after this call. | |||
| * | |||
| * \param first first resource to bind. | |||
| * \param count number of consecutive resources to bind. | |||
| * \param resources array of pointers to the resources to bind, it | |||
| * should contain at least \a count elements | |||
| * unless it's NULL, in which case no new | |||
| * resources will be bound. | |||
| */ | |||
| void (*set_compute_resources)(struct pipe_context *, | |||
| unsigned start, unsigned count, | |||
| struct pipe_surface **resources); | |||
| /** | |||
| * Bind an array of buffers to be mapped into the address space of | |||
| * the GLOBAL resource. Any buffers that were previously bound | |||
| @@ -305,6 +305,8 @@ enum pipe_transfer_usage { | |||
| #define PIPE_BIND_CURSOR (1 << 16) /* mouse cursor */ | |||
| #define PIPE_BIND_CUSTOM (1 << 17) /* state-tracker/winsys usages */ | |||
| #define PIPE_BIND_GLOBAL (1 << 18) /* set_global_binding */ | |||
| #define PIPE_BIND_SHADER_RESOURCE (1 << 19) /* set_shader_resources */ | |||
| #define PIPE_BIND_COMPUTE_RESOURCE (1 << 20) /* set_compute_resources */ | |||
| /* The first two flags above were previously part of the amorphous | |||
| * TEXTURE_USAGE, most of which are now descriptions of the ways a | |||
| @@ -62,6 +62,7 @@ extern "C" { | |||
| #define PIPE_MAX_GEOMETRY_SAMPLERS 16 | |||
| #define PIPE_MAX_SHADER_INPUTS 32 | |||
| #define PIPE_MAX_SHADER_OUTPUTS 32 | |||
| #define PIPE_MAX_SHADER_SAMPLER_VIEWS 32 | |||
| #define PIPE_MAX_SHADER_RESOURCES 32 | |||
| #define PIPE_MAX_TEXTURE_LEVELS 16 | |||
| #define PIPE_MAX_SO_BUFFERS 4 | |||