#define BRW_MAX_CURBE (32*16)
+
+/* Need a value to say a particular vertex shader output isn't
+ * present. Limits us to 63 outputs currently.
+ */
+#define BRW_OUTPUT_NOT_PRESENT ((1<<6)-1)
+
+
struct brw_context;
struct brw_depth_stencil_state {
struct brw_surf_ss0 ss0;
};
-
struct brw_rasterizer_state;
+struct brw_immediate_data {
+ unsigned nr;
+ float (*data)[4];
+};
struct brw_vertex_shader {
const struct tgsi_token *tokens;
+ struct brw_winsys_buffer *const_buffer; /** Program constant buffer/surface */
+
struct tgsi_shader_info info;
+ struct brw_immediate_data immediates;
- unsigned has_flow_control:1;
+ GLuint has_flow_control:1;
+ GLuint use_const_buffer:1;
+
+ /* Offsets of special vertex shader outputs required for clipping.
+ */
+ GLuint output_hpos:6; /* not always zero? */
+ GLuint output_color0:6;
+ GLuint output_color1:6;
+ GLuint output_bfc0:6;
+ GLuint output_bfc1:6;
+ GLuint output_edgeflag:6;
unsigned id;
- struct brw_winsys_buffer *const_buffer; /** Program constant buffer/surface */
- GLboolean use_const_buffer;
};
struct brw_fs_signature {
GLuint nr_inputs;
struct {
- GLuint semantic:5;
- GLuint semantic_index:27;
+ GLuint interp:3; /* TGSI_INTERPOLATE_x */
+ GLuint semantic:5; /* TGSI_SEMANTIC_x */
+ GLuint semantic_index:24;
} input[PIPE_MAX_SHADER_INPUTS];
};
struct tgsi_shader_info info;
struct brw_fs_signature signature;
+ struct brw_immediate_data immediates;
unsigned iz_lookup;
- //unsigned wm_lookup;
+ /*unsigned wm_lookup;*/
unsigned uses_depth:1;
unsigned has_flow_control:1;
struct brw_sampler {
- float border_color[4];
struct brw_ss0 ss0;
struct brw_ss1 ss1;
+ float border_color[4];
struct brw_ss3 ss3;
};
#define PIPE_NEW_SCISSOR 0x100000
#define PIPE_NEW_BOUND_TEXTURES 0x200000
#define PIPE_NEW_NR_CBUFS 0x400000
+#define PIPE_NEW_FRAGMENT_SIGNATURE 0x800000
#define BRW_NEW_WM_SURFACES 0x1000
#define BRW_NEW_xxx 0x2000 /* was FENCE */
#define BRW_NEW_INDICES 0x4000
-#define BRW_NEW_VERTICES 0x8000
+
/**
* Used for any batch entry with a relocated pointer that will be used
* by any 3D rendering. Need to re-emit these fresh in each
GLuint nr_params; /**< number of TGSI_FILE_CONSTANT's */
- GLboolean copy_edgeflag;
GLboolean writes_psiz;
/* Used for calculating urb partitions:
/* Size == 0 if output either not written, or always [0,0,0,1]
*/
-struct brw_vs_ouput_sizes {
+struct brw_vs_output_sizes {
GLubyte output_size[PIPE_MAX_SHADER_OUTPUTS];
};
/** Number of texture sampler units */
#define BRW_MAX_TEX_UNIT 16
+/** Max number of render targets in a shader */
+#define BRW_MAX_DRAW_BUFFERS 4
+
/**
* Size of our surface binding table for the WM.
* This contains pointers to the drawing surfaces and current texture
* objects and shader constant buffers (+2).
*/
-#define BRW_WM_MAX_SURF (PIPE_MAX_COLOR_BUFS + BRW_MAX_TEX_UNIT + 1)
+#define BRW_WM_MAX_SURF (BRW_MAX_DRAW_BUFFERS + BRW_MAX_TEX_UNIT + 1)
/**
* Helpers to convert drawing buffers, textures and constant buffers
* to surface binding table indexes, for WM.
*/
-#define SURF_INDEX_DRAW(d) (d)
-#define SURF_INDEX_FRAG_CONST_BUFFER (PIPE_MAX_COLOR_BUFS)
-#define SURF_INDEX_TEXTURE(t) (PIPE_MAX_COLOR_BUFS + 1 + (t))
+#define BTI_COLOR_BUF(d) (d)
+#define BTI_FRAGMENT_CONSTANTS (BRW_MAX_DRAW_BUFFERS)
+#define BTI_TEXTURE(t) (BRW_MAX_DRAW_BUFFERS + 1 + (t))
/**
* Size of surface binding table for the VS.
const struct brw_blend_state *blend;
const struct brw_rasterizer_state *rast;
const struct brw_depth_stencil_state *zstencil;
+ const struct brw_vertex_element_packet *velems;
const struct brw_sampler *sampler[PIPE_MAX_SAMPLERS];
unsigned num_samplers;
- struct pipe_texture *texture[PIPE_MAX_SAMPLERS];
+ struct pipe_sampler_view *fragment_sampler_views[PIPE_MAX_SAMPLERS];
struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS];
- struct pipe_vertex_element vertex_element[PIPE_MAX_ATTRIBS];
- unsigned num_vertex_elements;
- unsigned num_textures;
+ unsigned num_fragment_sampler_views;
unsigned num_vertex_buffers;
struct pipe_scissor_state scissor;
struct pipe_viewport_state viewport;
+ struct pipe_stencil_ref stencil_ref;
struct pipe_framebuffer_state fb;
struct pipe_clip_state ucp;
- struct pipe_buffer *vertex_constants;
- struct pipe_buffer *fragment_constants;
+ struct pipe_resource *vertex_constants;
+ struct pipe_resource *fragment_constants;
struct brw_blend_constant_color bcc;
+ struct brw_cc1 cc1_stencil_ref;
struct brw_polygon_stipple bps;
struct brw_cc_viewport ccv;
*
* Updates are signaled by PIPE_NEW_INDEX_BUFFER.
*/
- struct pipe_buffer *index_buffer;
+ struct pipe_resource *index_buffer;
unsigned index_size;
/* Updates are signalled by PIPE_NEW_INDEX_RANGE:
/** Input sizes, calculated from active vertex program.
* One bit per fragment program input attribute.
*/
- //GLbitfield input_size_masks[4];
+ /*GLbitfield input_size_masks[4];*/
/** Array of surface default colors (texture border color) */
struct brw_winsys_buffer *sdc_bo[BRW_MAX_TEX_UNIT];
*/
int brw_upload_cs_urb_state(struct brw_context *brw);
-/* brw_disasm.c */
-int brw_disasm_insn (FILE *file, const struct brw_instruction *inst);
-int brw_disasm (FILE *file,
- const struct brw_instruction *inst,
- unsigned count);
+/* brw_context.c
+ */
+struct pipe_context *brw_create_context(struct pipe_screen *screen,
+ void *priv);
/*======================================================================
* Inline conversion functions. These are better-typed than the