#ifndef R300_CONTEXT_H
#define R300_CONTEXT_H
+#define R300_BUFFER_ALIGNMENT 64
+
#include "draw/draw_vertex.h"
#include "util/u_blitter.h"
#include "pipe/p_context.h"
#include "util/u_inlines.h"
#include "util/u_transfer.h"
-#include "util/u_vbuf.h"
#include "r300_defines.h"
#include "r300_screen.h"
+#include "compiler/radeon_regalloc.h"
#include "../../winsys/radeon/drm/radeon_winsys.h"
struct u_upload_mgr;
struct r300_vertex_shader;
struct r300_stencilref_context;
+enum colormask_swizzle {
+ COLORMASK_BGRA,
+ COLORMASK_RGBA,
+ COLORMASK_RRRR,
+ COLORMASK_AAAA,
+ COLORMASK_GRRG,
+ COLORMASK_ARRA,
+ COLORMASK_NUM_SWIZZLES
+};
+
struct r300_atom {
/* Name, for debugging. */
const char* name;
struct r300_blend_state {
struct pipe_blend_state state;
- uint32_t cb_clamp[8];
+ uint32_t cb_clamp[COLORMASK_NUM_SWIZZLES][8];
uint32_t cb_noclamp[8];
uint32_t cb_no_readwrite[8];
};
/* Whether the CBZB clear is allowed on the surface. */
boolean cbzb_allowed;
+
+ unsigned colormask_swizzle;
};
struct r300_texture_desc {
struct r300_resource
{
- struct u_vbuf_resource b;
+ struct u_resource b;
/* Winsys buffer backing this resource. */
struct pb_buffer *buf;
struct radeon_winsys_cs_handle *cs_buf;
enum radeon_bo_domain domain;
- /* Constant buffers are in user memory. */
- uint8_t *constant_buffer;
+ /* Constant buffers and SWTCL vertex and index buffers are in user
+ * memory. */
+ uint8_t *malloced_buffer;
/* Texture description (addressing, layout, special features). */
struct r300_texture_desc tex;
/* Draw module. Used mostly for SW TCL. */
struct draw_context* draw;
/* Vertex buffer for SW TCL. */
- struct pipe_resource* vbo;
+ struct pb_buffer *vbo;
+ struct radeon_winsys_cs_handle *vbo_cs;
/* Offset and size into the SW TCL VBO. */
size_t draw_vbo_offset;
- size_t draw_vbo_size;
- /* Whether the VBO must not be flushed. */
- boolean draw_vbo_locked;
- boolean draw_first_emitted;
/* Accelerated blit support. */
struct blitter_context* blitter;
void *dsa_decompress_zmask;
- struct u_vbuf *vbuf_mgr;
struct pipe_index_buffer index_buffer;
struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS];
unsigned nr_vertex_buffers;
+ struct u_upload_mgr *uploader;
struct util_slab_mempool pool_transfers;
boolean hiz_in_use; /* Whether HIZ is enabled. */
enum r300_hiz_func hiz_func; /* HiZ function. Can be either MIN or MAX. */
uint32_t hiz_clear_value; /* HiZ clear value. */
+
+ /* Compiler state. */
+ struct rc_regalloc_state fs_regalloc_state; /* Register allocator info for
+ * fragment shaders. */
};
#define foreach_atom(r300, atom) \
/* r300_render_translate.c */
void r300_translate_index_buffer(struct r300_context *r300,
- struct pipe_resource **index_buffer,
+ struct pipe_index_buffer *ib,
+ struct pipe_resource **out_index_buffer,
unsigned *index_size, unsigned index_offset,
unsigned *start, unsigned count);
void r300_plug_in_stencil_ref_fallback(struct r300_context *r300);
/* r300_render.c */
-void r300_draw_flush_vbuf(struct r300_context *r300);
void r500_emit_index_bias(struct r300_context *r300, int index_bias);
void r300_blitter_draw_rectangle(struct blitter_context *blitter,
- unsigned x1, unsigned y1,
- unsigned x2, unsigned y2,
+ int x1, int y1, int x2, int y2,
float depth,
enum blitter_attrib_type type,
const union pipe_color_union *attrib);