mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-16 02:28:20 +02:00
llvmpipe: adapt to new vertex element cso
This commit is contained in:
parent
057427dd3e
commit
f897303855
4 changed files with 42 additions and 17 deletions
|
|
@ -145,6 +145,10 @@ llvmpipe_create_context( struct pipe_screen *screen, void *priv )
|
|||
llvmpipe->pipe.bind_vs_state = llvmpipe_bind_vs_state;
|
||||
llvmpipe->pipe.delete_vs_state = llvmpipe_delete_vs_state;
|
||||
|
||||
llvmpipe->pipe.create_vertex_elements_state = llvmpipe_create_vertex_elements_state;
|
||||
llvmpipe->pipe.bind_vertex_elements_state = llvmpipe_bind_vertex_elements_state;
|
||||
llvmpipe->pipe.delete_vertex_elements_state = llvmpipe_delete_vertex_elements_state;
|
||||
|
||||
llvmpipe->pipe.set_blend_color = llvmpipe_set_blend_color;
|
||||
llvmpipe->pipe.set_stencil_ref = llvmpipe_set_stencil_ref;
|
||||
llvmpipe->pipe.set_clip_state = llvmpipe_set_clip_state;
|
||||
|
|
@ -157,7 +161,6 @@ llvmpipe_create_context( struct pipe_screen *screen, void *priv )
|
|||
llvmpipe->pipe.set_viewport_state = llvmpipe_set_viewport_state;
|
||||
|
||||
llvmpipe->pipe.set_vertex_buffers = llvmpipe_set_vertex_buffers;
|
||||
llvmpipe->pipe.set_vertex_elements = llvmpipe_set_vertex_elements;
|
||||
|
||||
llvmpipe->pipe.draw_arrays = llvmpipe_draw_arrays;
|
||||
llvmpipe->pipe.draw_elements = llvmpipe_draw_elements;
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ struct lp_fragment_shader;
|
|||
struct lp_vertex_shader;
|
||||
struct lp_blend_state;
|
||||
struct setup_context;
|
||||
struct lp_velems_state;
|
||||
|
||||
struct llvmpipe_context {
|
||||
struct pipe_context pipe; /**< base class */
|
||||
|
|
@ -58,6 +59,7 @@ struct llvmpipe_context {
|
|||
const struct pipe_rasterizer_state *rasterizer;
|
||||
struct lp_fragment_shader *fs;
|
||||
const struct lp_vertex_shader *vs;
|
||||
const struct lp_velems_state *velems;
|
||||
|
||||
/** Other rendering state */
|
||||
struct pipe_blend_color blend_color;
|
||||
|
|
@ -71,13 +73,11 @@ struct llvmpipe_context {
|
|||
struct pipe_texture *vertex_textures[PIPE_MAX_VERTEX_SAMPLERS];
|
||||
struct pipe_viewport_state viewport;
|
||||
struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS];
|
||||
struct pipe_vertex_element vertex_element[PIPE_MAX_ATTRIBS];
|
||||
|
||||
unsigned num_samplers;
|
||||
unsigned num_textures;
|
||||
unsigned num_vertex_samplers;
|
||||
unsigned num_vertex_textures;
|
||||
unsigned num_vertex_elements;
|
||||
unsigned num_vertex_buffers;
|
||||
|
||||
unsigned dirty; /**< Mask of LP_NEW_x flags */
|
||||
|
|
|
|||
|
|
@ -119,6 +119,10 @@ struct lp_vertex_shader {
|
|||
struct draw_vertex_shader *draw_data;
|
||||
};
|
||||
|
||||
struct lp_velems_state {
|
||||
unsigned count;
|
||||
struct pipe_vertex_element velem[];
|
||||
};
|
||||
|
||||
|
||||
void *
|
||||
|
|
@ -176,8 +180,14 @@ void *llvmpipe_create_vs_state(struct pipe_context *,
|
|||
void llvmpipe_bind_vs_state(struct pipe_context *, void *);
|
||||
void llvmpipe_delete_vs_state(struct pipe_context *, void *);
|
||||
|
||||
void *llvmpipe_create_vertex_elements_state(struct pipe_context *,
|
||||
unsigned count,
|
||||
const struct pipe_vertex_element *);
|
||||
void llvmpipe_bind_vertex_elements_state(struct pipe_context *, void *);
|
||||
void llvmpipe_delete_vertex_elements_state(struct pipe_context *, void *);
|
||||
|
||||
void llvmpipe_set_polygon_stipple( struct pipe_context *,
|
||||
const struct pipe_poly_stipple * );
|
||||
const struct pipe_poly_stipple * );
|
||||
|
||||
void llvmpipe_set_scissor_state( struct pipe_context *,
|
||||
const struct pipe_scissor_state * );
|
||||
|
|
@ -194,10 +204,6 @@ llvmpipe_set_vertex_sampler_textures(struct pipe_context *,
|
|||
void llvmpipe_set_viewport_state( struct pipe_context *,
|
||||
const struct pipe_viewport_state * );
|
||||
|
||||
void llvmpipe_set_vertex_elements(struct pipe_context *,
|
||||
unsigned count,
|
||||
const struct pipe_vertex_element *);
|
||||
|
||||
void llvmpipe_set_vertex_buffers(struct pipe_context *,
|
||||
unsigned count,
|
||||
const struct pipe_vertex_buffer *);
|
||||
|
|
|
|||
|
|
@ -35,24 +35,40 @@
|
|||
#include "draw/draw_context.h"
|
||||
|
||||
|
||||
void *
|
||||
llvmpipe_create_vertex_elements_state(struct pipe_context *pipe,
|
||||
unsigned count,
|
||||
const struct pipe_vertex_element *attribs)
|
||||
{
|
||||
struct lp_velems_state *velems;
|
||||
assert(count <= PIPE_MAX_ATTRIBS);
|
||||
velems = (struct lp_velems_state *) MALLOC(sizeof(struct lp_velems_state) + count * sizeof(*attribs));
|
||||
if (velems) {
|
||||
velems->count = count;
|
||||
memcpy(velems->velem, attribs, sizeof(*attribs) * count);
|
||||
}
|
||||
return velems;
|
||||
}
|
||||
|
||||
void
|
||||
llvmpipe_set_vertex_elements(struct pipe_context *pipe,
|
||||
unsigned count,
|
||||
const struct pipe_vertex_element *attribs)
|
||||
llvmpipe_bind_vertex_elements_state(struct pipe_context *pipe,
|
||||
void *velems)
|
||||
{
|
||||
struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe);
|
||||
struct lp_velems_state *lp_velems = (struct lp_velems_state *) velems;
|
||||
|
||||
assert(count <= PIPE_MAX_ATTRIBS);
|
||||
|
||||
memcpy(llvmpipe->vertex_element, attribs,
|
||||
count * sizeof(struct pipe_vertex_element));
|
||||
llvmpipe->num_vertex_elements = count;
|
||||
llvmpipe->velems = lp_velems;
|
||||
|
||||
llvmpipe->dirty |= LP_NEW_VERTEX;
|
||||
|
||||
draw_set_vertex_elements(llvmpipe->draw, count, attribs);
|
||||
draw_set_vertex_elements(llvmpipe->draw, lp_velems->count, lp_velems->velem);
|
||||
}
|
||||
|
||||
void
|
||||
llvmpipe_delete_vertex_elements_state(struct pipe_context *pipe, void *velems)
|
||||
{
|
||||
FREE( velems );
|
||||
}
|
||||
|
||||
void
|
||||
llvmpipe_set_vertex_buffers(struct pipe_context *pipe,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue