diff options
author | Rob Clark <[email protected]> | 2013-05-26 17:13:27 -0400 |
---|---|---|
committer | Rob Clark <[email protected]> | 2013-06-08 13:15:51 -0400 |
commit | 18c317b21ddc2ec4538544f9dd69dc568dcf821f (patch) | |
tree | 224e3c0464dcedabbf5784e5c3def952473fd8f8 /src/gallium/drivers/freedreno/freedreno_context.h | |
parent | 213c207b3ac40ae769afe01b8578f566b5e7840d (diff) |
freedreno: prepare for a3xx
Split the parts that are specific to adreno a2xx series GPUs from the
parts that will be in common with a3xx, so that a3xx support can be
added more cleanly.
Signed-off-by: Rob Clark <[email protected]>
Diffstat (limited to 'src/gallium/drivers/freedreno/freedreno_context.h')
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_context.h | 50 |
1 files changed, 30 insertions, 20 deletions
diff --git a/src/gallium/drivers/freedreno/freedreno_context.h b/src/gallium/drivers/freedreno/freedreno_context.h index c3a85b5c7ab..a6133c0d8c3 100644 --- a/src/gallium/drivers/freedreno/freedreno_context.h +++ b/src/gallium/drivers/freedreno/freedreno_context.h @@ -37,23 +37,18 @@ #include "freedreno_screen.h" -struct fd_blend_stateobj; -struct fd_rasterizer_stateobj; -struct fd_zsa_stateobj; -struct fd_sampler_stateobj; struct fd_vertex_stateobj; -struct fd_shader_stateobj; struct fd_texture_stateobj { struct pipe_sampler_view *textures[PIPE_MAX_SAMPLERS]; unsigned num_textures; - struct fd_sampler_stateobj *samplers[PIPE_MAX_SAMPLERS]; + struct pipe_sampler_state *samplers[PIPE_MAX_SAMPLERS]; unsigned num_samplers; unsigned dirty_samplers; }; struct fd_program_stateobj { - struct fd_shader_stateobj *vp, *fp; + void *vp, *fp; enum { FD_SHADER_DIRTY_VP = (1 << 0), FD_SHADER_DIRTY_FP = (1 << 1), @@ -79,6 +74,11 @@ struct fd_vertexbuf_stateobj { uint32_t dirty_mask; }; +struct fd_vertex_stateobj { + struct pipe_vertex_element pipe[PIPE_MAX_ATTRIBS]; + unsigned num_elements; +}; + struct fd_gmem_stateobj { struct pipe_scissor_state scissor; uint cpp; @@ -102,11 +102,6 @@ struct fd_context { /* shaders used by mem->gmem blits: */ struct fd_program_stateobj blit_prog; // TODO move to screen? - /* vertex buff used for clear/gmem->mem vertices, and mem->gmem - * vertices and tex coords: - */ - struct pipe_resource *solid_vertexbuf; - /* do we need to mem2gmem before rendering. We don't, if for example, * there was a glClear() that invalidated the entire previous buffer * contents. Keep track of which buffer(s) are cleared, or needs @@ -125,10 +120,6 @@ struct fd_context { struct fd_ringbuffer *ring; struct fd_ringmarker *draw_start, *draw_end; - /* scissor can't really be changed mid-render.. we probably need - * to flush out all pending draws and then start a new tile pass - * w/ new stencil state.. - */ struct pipe_scissor_state scissor; /* Track the maximal bounds of the scissor of all the draws within a @@ -164,9 +155,9 @@ struct fd_context { FD_DIRTY_SCISSOR = (1 << 17), } dirty; - struct fd_blend_stateobj *blend; - struct fd_rasterizer_stateobj *rasterizer; - struct fd_zsa_stateobj *zsa; + struct pipe_blend_state *blend; + struct pipe_rasterizer_state *rasterizer; + struct pipe_depth_stencil_alpha_state *zsa; struct fd_texture_stateobj verttex, fragtex; @@ -183,6 +174,22 @@ struct fd_context { struct fd_constbuf_stateobj constbuf[PIPE_SHADER_TYPES]; struct fd_vertexbuf_stateobj vertexbuf; struct pipe_index_buffer indexbuf; + + /* GMEM/tile handling fxns: */ + void (*emit_tile_init)(struct fd_context *ctx); + void (*emit_tile_prep)(struct fd_context *ctx, uint32_t xoff, uint32_t yoff, + uint32_t bin_w, uint32_t bin_h); + void (*emit_tile_mem2gmem)(struct fd_context *ctx, uint32_t xoff, uint32_t yoff, + uint32_t bin_w, uint32_t bin_h); + void (*emit_tile_renderprep)(struct fd_context *ctx, uint32_t xoff, uint32_t yoff, + uint32_t bin_w, uint32_t bin_h); + void (*emit_tile_gmem2mem)(struct fd_context *ctx, uint32_t xoff, uint32_t yoff, + uint32_t bin_w, uint32_t bin_h); + + /* draw: */ + void (*draw)(struct fd_context *pctx, const struct pipe_draw_info *info); + void (*clear)(struct fd_context *ctx, unsigned buffers, + const union pipe_color_union *color, double depth, unsigned stencil); }; static INLINE struct fd_context * @@ -191,8 +198,11 @@ fd_context(struct pipe_context *pctx) return (struct fd_context *)pctx; } -struct pipe_context * fd_context_create(struct pipe_screen *pscreen, void *priv); +struct pipe_context * fd_context_init(struct fd_context *ctx, + struct pipe_screen *pscreen, void *priv); void fd_context_render(struct pipe_context *pctx); +void fd_context_destroy(struct pipe_context *pctx); + #endif /* FREEDRENO_CONTEXT_H_ */ |