#include "radeon.h"
#include "r600_shader.h"
+struct u_upload_mgr;
+
#define R600_QUERY_STATE_STARTED (1 << 0)
#define R600_QUERY_STATE_ENDED (1 << 1)
#define R600_QUERY_STATE_SUSPENDED (1 << 2)
boolean flushed;
unsigned state;
/* The buffer where query results are stored. */
- struct radeon_bo *buffer;
+ struct radeon_ws_bo *buffer;
unsigned buffer_size;
/* linked list of queries */
struct list_head list;
};
#define R600_MAX_RSTATE 16
+#define R600_STATE_FLAG_DSA_FLUSH 1
struct r600_context_state {
union pipe_states state;
unsigned type;
struct radeon_state rstate[R600_MAX_RSTATE];
struct r600_shader shader;
- struct radeon_bo *bo;
+ struct radeon_ws_bo *bo;
unsigned nrstate;
+ unsigned flags;
};
struct r600_vertex_element
struct pipe_vertex_element elements[32];
};
+struct r600_draw {
+ struct pipe_context *ctx;
+ struct radeon_state draw;
+ struct radeon_state vgt;
+ unsigned mode;
+ unsigned start;
+ unsigned count;
+ unsigned index_size;
+ struct pipe_resource *index_buffer;
+ unsigned index_buffer_offset;
+ unsigned min_index, max_index;
+ unsigned index_bias;
+};
+
struct r600_context_hw_states {
struct radeon_state rasterizer;
struct radeon_state scissor;
};
struct r600_context;
+struct r600_screen;
struct r600_resource;
+struct r600_resource_texture;
struct r600_context_hw_state_vtbl {
void (*blend)(struct r600_context *rctx,
void (*cb_cntl)(struct r600_context *rctx, struct radeon_state *rstate);
int (*vs_resource)(struct r600_context *rctx, int id, struct r600_resource *rbuffer, uint32_t offset,
uint32_t stride, uint32_t format);
- int (*vgt_init)(struct r600_context *rctx, struct radeon_state *draw,
- struct r600_resource *rbuffer,
- uint32_t count, int vgt_draw_initiator);
- int (*vgt_prim)(struct r600_context *rctx, struct radeon_state *vgt,
- uint32_t prim, uint32_t start, uint32_t vgt_dma_index_type);
+ int (*vgt_init)(struct r600_draw *draw,
+ int vgt_draw_initiator);
+ int (*vgt_prim)(struct r600_draw *draw,
+ uint32_t prim, uint32_t vgt_dma_index_type);
int (*ps_shader)(struct r600_context *rctx, struct r600_context_state *rshader,
struct radeon_state *state);
struct r600_context {
struct pipe_context context;
+ struct blitter_context *blitter;
+ struct pipe_framebuffer_state *pframebuffer;
+ unsigned family;
+ void *custom_dsa_flush;
+ struct list_head query_list;
struct r600_screen *screen;
struct radeon *rw;
- struct radeon_ctx ctx;
- struct blitter_context *blitter;
+ struct radeon_ctx *ctx;
struct radeon_draw draw;
struct r600_context_hw_state_vtbl *vtbl;
struct radeon_state config;
struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS];
struct pipe_index_buffer index_buffer;
struct pipe_blend_color blend_color;
- struct list_head query_list;
+
+ /* upload managers */
+ struct u_upload_mgr *upload_vb;
+ struct u_upload_mgr *upload_ib;
+ bool any_user_vbs;
};
/* Convenience cast wrapper. */
const struct tgsi_token *tokens);
extern int r600_pipe_shader_update(struct pipe_context *ctx,
struct r600_context_state *rstate);
+extern int r600_find_vs_semantic_index(struct r600_context *rctx, struct r600_shader *rshader, int id);
#define R600_ERR(fmt, args...) \
fprintf(stderr, "EE %s/%s:%d - "fmt, __FILE__, __func__, __LINE__, ##args)
uint shader, uint index,
struct pipe_resource *buffer);
+int r600_upload_index_buffer(struct r600_context *rctx,
+ struct r600_draw *draw);
+int r600_upload_user_buffers(struct r600_context *rctx);
+
#endif