void *draw; /**< private, for draw module (temporary?) */
/**
- * Stream uploaders created by the driver. All drivers, state trackers, and
+ * Stream uploaders created by the driver. All drivers, gallium frontends, and
* modules should use them.
*
* Use u_upload_alloc or u_upload_data as many times as you want.
*/
void (*render_condition)( struct pipe_context *pipe,
struct pipe_query *query,
- boolean condition,
+ bool condition,
enum pipe_render_cond_flag mode );
/**
void (*destroy_query)(struct pipe_context *pipe,
struct pipe_query *q);
- boolean (*begin_query)(struct pipe_context *pipe, struct pipe_query *q);
+ bool (*begin_query)(struct pipe_context *pipe, struct pipe_query *q);
bool (*end_query)(struct pipe_context *pipe, struct pipe_query *q);
/**
* \param wait if true, this query will block until the result is ready
* \return TRUE if results are ready, FALSE otherwise
*/
- boolean (*get_query_result)(struct pipe_context *pipe,
- struct pipe_query *q,
- boolean wait,
- union pipe_query_result *result);
+ bool (*get_query_result)(struct pipe_context *pipe,
+ struct pipe_query *q,
+ bool wait,
+ union pipe_query_result *result);
/**
* Get results of a query, storing into resource. Note that this may not
*/
void (*get_query_result_resource)(struct pipe_context *pipe,
struct pipe_query *q,
- boolean wait,
+ bool wait,
enum pipe_query_value_type result_type,
int index,
struct pipe_resource *resource,
* Set whether all current non-driver queries except TIME_ELAPSED are
* active or paused.
*/
- void (*set_active_query_state)(struct pipe_context *pipe, boolean enable);
+ void (*set_active_query_state)(struct pipe_context *pipe, bool enable);
+
+ /**
+ * INTEL Performance Query
+ */
+ /*@{*/
+
+ unsigned (*init_intel_perf_query_info)(struct pipe_context *pipe);
+
+ void (*get_intel_perf_query_info)(struct pipe_context *pipe,
+ unsigned query_index,
+ const char **name,
+ uint32_t *data_size,
+ uint32_t *n_counters,
+ uint32_t *n_active);
+
+ void (*get_intel_perf_query_counter_info)(struct pipe_context *pipe,
+ unsigned query_index,
+ unsigned counter_index,
+ const char **name,
+ const char **desc,
+ uint32_t *offset,
+ uint32_t *data_size,
+ uint32_t *type_enum,
+ uint32_t *data_type_enum,
+ uint64_t *raw_max);
+
+ struct pipe_query *(*new_intel_perf_query_obj)(struct pipe_context *pipe,
+ unsigned query_index);
+
+ void (*begin_intel_perf_query)(struct pipe_context *pipe, struct pipe_query *q);
+
+ void (*end_intel_perf_query)(struct pipe_context *pipe, struct pipe_query *q);
+
+ void (*delete_intel_perf_query)(struct pipe_context *pipe, struct pipe_query *q);
+
+ void (*wait_intel_perf_query)(struct pipe_context *pipe, struct pipe_query *q);
+
+ bool (*is_intel_perf_query_ready)(struct pipe_context *pipe, struct pipe_query *q);
+
+ void (*get_intel_perf_query_data)(struct pipe_context *pipe,
+ struct pipe_query *q,
+ size_t data_size,
+ uint32_t *data,
+ uint32_t *bytes_written);
/*@}*/
void (*set_framebuffer_state)( struct pipe_context *,
const struct pipe_framebuffer_state * );
+ /**
+ * Set the sample locations used during rasterization. When NULL or sized
+ * zero, the default locations are used.
+ *
+ * Note that get_sample_position() still returns the default locations.
+ *
+ * The samples are accessed with
+ * locations[(pixel_y*grid_w+pixel_x)*ms+i],
+ * where:
+ * ms = the sample count
+ * grid_w = the pixel grid width for the sample count
+ * grid_w = the pixel grid height for the sample count
+ * pixel_x = the window x coordinate modulo grid_w
+ * pixel_y = the window y coordinate modulo grid_w
+ * i = the sample index
+ * This gives a result with the x coordinate as the low 4 bits and the y
+ * coordinate as the high 4 bits. For each coordinate 0 is the left or top
+ * edge of the pixel's rectangle and 16 (not 15) is the right or bottom edge.
+ *
+ * Out of bounds accesses are return undefined values.
+ *
+ * The pixel grid is used to vary sample locations across pixels and its
+ * size can be queried with get_sample_pixel_grid().
+ */
+ void (*set_sample_locations)( struct pipe_context *,
+ size_t size, const uint8_t *locations );
+
void (*set_polygon_stipple)( struct pipe_context *,
- const struct pipe_poly_stipple * );
+ const struct pipe_poly_stipple * );
void (*set_scissor_states)( struct pipe_context *,
unsigned start_slot,
const struct pipe_scissor_state * );
void (*set_window_rectangles)( struct pipe_context *,
- boolean include,
+ bool include,
unsigned num_rectangles,
const struct pipe_scissor_state * );
void (*set_sampler_views)(struct pipe_context *,
enum pipe_shader_type shader,
unsigned start_slot, unsigned num_views,
- struct pipe_sampler_view **);
+ struct pipe_sampler_view **views);
void (*set_tess_state)(struct pipe_context *,
const float default_outer_level[4],
* should contain at least \a count elements
* unless it's NULL, in which case no buffers will
* be bound.
+ * \param writable_bitmask If bit i is not set, buffers[i] will only be
+ * used with loads. If unsure, set to ~0.
*/
void (*set_shader_buffers)(struct pipe_context *,
enum pipe_shader_type shader,
unsigned start_slot, unsigned count,
- const struct pipe_shader_buffer *buffers);
+ const struct pipe_shader_buffer *buffers,
+ unsigned writable_bitmask);
/**
* Bind an array of hw atomic buffers for use by all shaders.
/*@}*/
+ /**
+ * INTEL_blackhole_render
+ */
+ /*@{*/
+
+ void (*set_frontend_noop)(struct pipe_context *,
+ bool enable);
+
+ /*@}*/
+
+
/**
* Resource functions for blit-like functionality
*
* The entire buffers are cleared (no scissor, no colormask, etc).
*
* \param buffers bitfield of PIPE_CLEAR_* values.
+ * \param scissor_state the scissored region to clear
* \param color pointer to a union of fiu array for each of r, g, b, a.
* \param depth depth clear value in [0,1].
* \param stencil stencil clear value
*/
void (*clear)(struct pipe_context *pipe,
unsigned buffers,
+ const struct pipe_scissor_state *scissor_state,
const union pipe_color_union *color,
double depth,
unsigned stencil);
const void *clear_value,
int clear_value_size);
+ /**
+ * If a depth buffer is rendered with different sample location state than
+ * what is current at the time of reading, the values may differ because
+ * depth buffer compression can depend the sample locations.
+ *
+ * This function is a hint to decompress the current depth buffer to avoid
+ * such problems.
+ */
+ void (*evaluate_depth_buffer)(struct pipe_context *pipe);
+
/**
* Flush draw commands.
*
void (*fence_server_sync)(struct pipe_context *pipe,
struct pipe_fence_handle *fence);
+ /**
+ * Insert commands to have the GPU signal a fence.
+ */
+ void (*fence_server_signal)(struct pipe_context *pipe,
+ struct pipe_fence_handle *fence);
+
/**
* Create a view on a texture to be used by a shader stage.
*/
/*@}*/
/**
- * Get sample position for an individual sample point.
+ * Get the default sample position for an individual sample point.
*
* \param sample_count - total number of samples
* \param sample_index - sample to get the position values for
* Invalidate the contents of the resource. This is used to
*
* (1) implement EGL's semantic of undefined depth/stencil
- * contenst after a swapbuffers. This allows a tiled renderer (for
+ * contents after a swapbuffers. This allows a tiled renderer (for
* example) to not store the depth buffer.
*
* (2) implement GL's InvalidateBufferData. For backwards compatibility,
* Generate mipmap.
* \return TRUE if mipmap generation succeeds, FALSE otherwise
*/
- boolean (*generate_mipmap)(struct pipe_context *ctx,
- struct pipe_resource *resource,
- enum pipe_format format,
- unsigned base_level,
- unsigned last_level,
- unsigned first_layer,
- unsigned last_layer);
+ bool (*generate_mipmap)(struct pipe_context *ctx,
+ struct pipe_resource *resource,
+ enum pipe_format format,
+ unsigned base_level,
+ unsigned last_level,
+ unsigned first_layer,
+ unsigned last_layer);
/**
* Create a 64-bit texture handle.
*/
void (*callback)(struct pipe_context *ctx, void (*fn)(void *), void *data,
bool asap);
+
+ /**
+ * Set a context parameter See enum pipe_context_param for more details.
+ */
+ void (*set_context_param)(struct pipe_context *ctx,
+ enum pipe_context_param param,
+ unsigned value);
};