#define PIPE_STATE_H
#include "p_compiler.h"
-
-#include "x86/rtasm/x86sse.h"
+#include "p_format.h"
/**
* Implementation limits
/* opaque type */
struct pipe_buffer_handle;
+struct pipe_winsys;
+
/***
*** State objects
unsigned poly_stipple_enable:1;
unsigned point_smooth:1;
unsigned point_sprite:1;
+ unsigned point_size_per_vertex:1; /**< size computed in vertex shader */
unsigned multisample:1; /* XXX maybe more ms state in future */
unsigned line_smooth:1;
unsigned line_stipple_enable:1;
unsigned line_stipple_factor:8; /**< [1..256] actually */
unsigned line_stipple_pattern:16;
+ unsigned bypass_clipping:1;
+ unsigned origin_lower_left:1; /**< Is (0,0) the lower-left corner? */
float line_width;
float point_size; /**< used when no per-vertex size */
};
-/**
- * Post-transform vertex feeback
- */
-struct pipe_feedback_state {
- uint enabled:1; /**< enable feedback? */
- uint discard:1; /**< discard primitives? */
- uint interleaved:1; /**< interleaved output? */
- uint num_attribs;
- uint attrib[PIPE_MAX_FEEDBACK_ATTRIBS];
- uint size[PIPE_MAX_FEEDBACK_ATTRIBS];
-};
-
-
struct pipe_poly_stipple {
unsigned stipple[32];
};
struct pipe_shader_state {
const struct tgsi_token *tokens;
-#if defined(__i386__) || defined(__386__)
- struct x86_function sse2_program;
-#endif
- void (*executable)();
-
ubyte num_inputs;
ubyte num_outputs;
+ ubyte input_map[PIPE_MAX_SHADER_INPUTS]; /* XXX this may be temporary */
ubyte input_semantic_name[PIPE_MAX_SHADER_INPUTS]; /**< TGSI_SEMANTIC_x */
ubyte input_semantic_index[PIPE_MAX_SHADER_INPUTS];
ubyte output_semantic_name[PIPE_MAX_SHADER_OUTPUTS]; /**< TGSI_SEMANTIC_x */
unsigned writemask:1; /**< allow depth buffer writes? */
unsigned func:3; /**< depth test func (PIPE_FUNC_x) */
unsigned occlusion_count:1; /**< XXX move this elsewhere? */
- float clear; /**< Clear value in [0,1] (XXX correct place?) */
} depth;
struct {
unsigned front_enabled:1;
ubyte ref_value[2]; /**< [0] = front, [1] = back */
ubyte value_mask[2];
ubyte write_mask[2];
- ubyte clear_value;
} stencil;
};
float color[4];
};
-struct pipe_clear_color_state
-{
- float color[4];
-};
-
struct pipe_framebuffer_state
{
/** multiple colorbuffers for multiple render targets */
};
-/***
- *** Resource Objects
- ***/
-
-struct pipe_region
-{
- struct pipe_buffer_handle *buffer; /**< driver private buffer handle */
-
- unsigned refcount; /**< Reference count for region */
- unsigned cpp; /**< bytes per pixel */
- unsigned pitch; /**< in pixels */
- unsigned height; /**< in pixels */
- ubyte *map; /**< only non-NULL when region is actually mapped */
- unsigned map_refcount; /**< Reference count for mapping */
-};
-
-
/**
- * 2D surface. This is basically a view into a pipe_region (memory buffer).
+ * 2D surface. This is basically a view into a memory buffer.
* May be a renderbuffer, texture mipmap level, etc.
*/
struct pipe_surface
{
- struct pipe_region *region;
- unsigned format; /**< PIPE_FORMAT_x */
+ struct pipe_buffer_handle *buffer; /**< driver private buffer handle */
+ ubyte *map; /**< only non-NULL when surface is actually mapped */
+ unsigned map_refcount; /**< Reference count for mapping */
+ enum pipe_format format; /**< PIPE_FORMAT_x */
+ unsigned cpp; /**< bytes per pixel */
unsigned width, height;
- unsigned offset; /**< offset from start of region, in bytes */
+ unsigned pitch; /**< in pixels */
+ unsigned offset; /**< offset from start of buffer, in bytes */
unsigned refcount;
-
- /**
- * Get block/tile of pixels from surface as floats
- * If color surface, return float[4]. If depth surface, return float[1].
- */
- void (*get_tile)(struct pipe_surface *ps,
- uint x, uint y, uint w, uint h, float *p);
-
- /**
- * Put block/tile of pixels into surface as floats
- * If color surface, data is float[4]. If depth surface, data is float[1].
- */
- void (*put_tile)(struct pipe_surface *ps,
- uint x, uint y, uint w, uint h, const float *p);
-
- /** As above, but data is raw pixel data */
- void (*get_tile_raw)(struct pipe_surface *ps,
- uint x, uint y, uint w, uint h, void *p);
- /** As above, but data is raw pixel data */
- void (*put_tile_raw)(struct pipe_surface *ps,
- uint x, uint y, uint w, uint h, const void *p);
+ struct pipe_winsys *winsys; /**< winsys which owns/created the surface */
};
/**
- * Describes the location of each texture image within a texture region.
+ * Texture. Represents one or several texture images on one or several mipmap
+ * levels.
*/
-struct pipe_mipmap_level
-{
- unsigned level_offset;
- unsigned width;
- unsigned height;
- unsigned depth;
- unsigned nr_images;
-
- /* Explicitly store the offset of each image for each cube face or
- * depth value. Pretty much have to accept that hardware formats
- * are going to be so diverse that there is no unified way to
- * compute the offsets of depth/cube images within a mipmap level,
- * so have to store them as a lookup table:
- */
- unsigned *image_offset; /**< array [depth] of offsets */
-};
-
-struct pipe_mipmap_tree
-{
+struct pipe_texture
+{
/* Effectively the key:
*/
- unsigned target; /* XXX convert to PIPE_TEXTURE_x */
- unsigned internal_format; /* XXX convert to PIPE_FORMAT_x */
+ unsigned target; /**< PIPE_TEXTURE_x */
+ enum pipe_format format; /**< PIPE_FORMAT_x */
- unsigned format; /**< PIPE_FORMAT_x */
unsigned first_level;
unsigned last_level;
- unsigned width0, height0, depth0; /**< Level zero image dimensions */
+ unsigned width[PIPE_MAX_TEXTURE_LEVELS];
+ unsigned height[PIPE_MAX_TEXTURE_LEVELS];
+ unsigned depth[PIPE_MAX_TEXTURE_LEVELS];
unsigned cpp;
unsigned compressed:1;
- /* Derived from the above:
- */
- unsigned pitch;
- unsigned depth_pitch; /* per-image on i945? */
- unsigned total_height;
-
- /* Includes image offset tables:
- */
- struct pipe_mipmap_level level[PIPE_MAX_TEXTURE_LEVELS];
-
- /* The data is held here:
- */
- struct pipe_region *region;
-
/* These are also refcounted:
*/
unsigned refcount;
unsigned vertex_buffer_index:5;
unsigned dst_offset:8;
- unsigned src_format:8; /**< PIPE_FORMAT_* */
-};
-
-
-/**
- * Vertex feedback buffer
- */
-struct pipe_feedback_buffer {
- struct pipe_buffer_handle *buffer;
- unsigned size;
- unsigned start_offset;
+ enum pipe_format src_format; /**< PIPE_FORMAT_* */
};
-/**
- * Hardware queries (occlusion, transform feedback, timing, etc)
- */
-struct pipe_query_object {
- uint type:3; /**< PIPE_QUERY_x */
- uint ready:1; /**< is result ready? */
- uint64 count;
-};
-
#endif