Convert the rasterizer cso to the new semantics.
Basically make cso hold the driver specific struct, while managing the template.
This commit is contained in:
@@ -53,6 +53,11 @@ struct cso_blend {
|
|||||||
void *data;
|
void *data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct cso_rasterizer {
|
||||||
|
struct pipe_rasterizer_state state;
|
||||||
|
void *data;
|
||||||
|
};
|
||||||
|
|
||||||
enum cso_cache_type {
|
enum cso_cache_type {
|
||||||
CSO_BLEND,
|
CSO_BLEND,
|
||||||
CSO_SAMPLER,
|
CSO_SAMPLER,
|
||||||
|
@@ -73,7 +73,7 @@ struct failover_context {
|
|||||||
const struct fo_state *blend;
|
const struct fo_state *blend;
|
||||||
const struct pipe_sampler_state *sampler[PIPE_MAX_SAMPLERS];
|
const struct pipe_sampler_state *sampler[PIPE_MAX_SAMPLERS];
|
||||||
const struct pipe_depth_stencil_state *depth_stencil;
|
const struct pipe_depth_stencil_state *depth_stencil;
|
||||||
const struct pipe_rasterizer_state *rasterizer;
|
const struct fo_state *rasterizer;
|
||||||
const struct pipe_shader_state *fragment_shader;
|
const struct pipe_shader_state *fragment_shader;
|
||||||
const struct pipe_shader_state *vertex_shader;
|
const struct pipe_shader_state *vertex_shader;
|
||||||
|
|
||||||
|
@@ -183,17 +183,42 @@ failover_set_polygon_stipple( struct pipe_context *pipe,
|
|||||||
failover->hw->set_polygon_stipple( failover->hw, stipple );
|
failover->hw->set_polygon_stipple( failover->hw, stipple );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
failover_create_rasterizer_state(struct pipe_context *pipe,
|
||||||
|
const struct pipe_rasterizer_state *templ)
|
||||||
|
{
|
||||||
|
struct fo_state *state = malloc(sizeof(struct fo_state));
|
||||||
|
struct failover_context *failover = failover_context(pipe);
|
||||||
|
|
||||||
|
state->sw_state = failover->sw->create_rasterizer_state(pipe, templ);
|
||||||
|
state->hw_state = failover->hw->create_rasterizer_state(pipe, templ);
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
failover_bind_rasterizer_state( struct pipe_context *pipe,
|
failover_bind_rasterizer_state(struct pipe_context *pipe,
|
||||||
const struct pipe_rasterizer_state *setup )
|
void *raster)
|
||||||
{
|
{
|
||||||
struct failover_context *failover = failover_context(pipe);
|
struct failover_context *failover = failover_context(pipe);
|
||||||
|
|
||||||
failover->rasterizer = setup;
|
failover->rasterizer = (struct fo_state *)raster;
|
||||||
failover->dirty |= FO_NEW_RASTERIZER;
|
failover->dirty |= FO_NEW_RASTERIZER;
|
||||||
failover->hw->bind_rasterizer_state( failover->hw, setup );
|
failover->hw->bind_rasterizer_state( failover->hw, raster );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
failover_delete_rasterizer_state(struct pipe_context *pipe,
|
||||||
|
void *raster)
|
||||||
|
{
|
||||||
|
struct fo_state *state = (struct fo_state*)raster;
|
||||||
|
struct failover_context *failover = failover_context(pipe);
|
||||||
|
|
||||||
|
failover->sw->delete_rasterizer_state(pipe, state->sw_state);
|
||||||
|
failover->hw->delete_rasterizer_state(pipe, state->hw_state);
|
||||||
|
state->sw_state = 0;
|
||||||
|
state->hw_state = 0;
|
||||||
|
free(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -284,7 +309,9 @@ failover_init_state_functions( struct failover_context *failover )
|
|||||||
failover->pipe.delete_blend_state = failover_delete_blend_state;
|
failover->pipe.delete_blend_state = failover_delete_blend_state;
|
||||||
failover->pipe.bind_sampler_state = failover_bind_sampler_state;
|
failover->pipe.bind_sampler_state = failover_bind_sampler_state;
|
||||||
failover->pipe.bind_depth_stencil_state = failover_bind_depth_stencil_state;
|
failover->pipe.bind_depth_stencil_state = failover_bind_depth_stencil_state;
|
||||||
|
failover->pipe.create_rasterizer_state = failover_create_rasterizer_state;
|
||||||
failover->pipe.bind_rasterizer_state = failover_bind_rasterizer_state;
|
failover->pipe.bind_rasterizer_state = failover_bind_rasterizer_state;
|
||||||
|
failover->pipe.delete_rasterizer_state = failover_delete_rasterizer_state;
|
||||||
failover->pipe.bind_fs_state = failover_bind_fs_state;
|
failover->pipe.bind_fs_state = failover_bind_fs_state;
|
||||||
failover->pipe.bind_vs_state = failover_bind_vs_state;
|
failover->pipe.bind_vs_state = failover_bind_vs_state;
|
||||||
|
|
||||||
|
@@ -87,7 +87,8 @@ failover_state_emit( struct failover_context *failover )
|
|||||||
failover->sw->set_polygon_stipple( failover->sw, &failover->poly_stipple );
|
failover->sw->set_polygon_stipple( failover->sw, &failover->poly_stipple );
|
||||||
|
|
||||||
if (failover->dirty & FO_NEW_RASTERIZER)
|
if (failover->dirty & FO_NEW_RASTERIZER)
|
||||||
failover->sw->bind_rasterizer_state( failover->sw, failover->rasterizer );
|
failover->sw->bind_rasterizer_state( failover->sw,
|
||||||
|
failover->rasterizer->sw_state );
|
||||||
|
|
||||||
if (failover->dirty & FO_NEW_SCISSOR)
|
if (failover->dirty & FO_NEW_SCISSOR)
|
||||||
failover->sw->set_scissor_state( failover->sw, &failover->scissor );
|
failover->sw->set_scissor_state( failover->sw, &failover->scissor );
|
||||||
|
@@ -371,23 +371,19 @@ static void i915_set_viewport_state( struct pipe_context *pipe,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const struct pipe_rasterizer_state *
|
static void *
|
||||||
i915_create_rasterizer_state(struct pipe_context *pipe,
|
i915_create_rasterizer_state(struct pipe_context *pipe,
|
||||||
const struct pipe_rasterizer_state *setup)
|
const struct pipe_rasterizer_state *setup)
|
||||||
{
|
{
|
||||||
struct pipe_rasterizer_state *raster =
|
return 0;
|
||||||
malloc(sizeof(struct pipe_rasterizer_state));
|
|
||||||
memcpy(raster, setup, sizeof(struct pipe_rasterizer_state));
|
|
||||||
|
|
||||||
return raster;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void i915_bind_rasterizer_state( struct pipe_context *pipe,
|
static void i915_bind_rasterizer_state( struct pipe_context *pipe,
|
||||||
const struct pipe_rasterizer_state *setup )
|
void *setup )
|
||||||
{
|
{
|
||||||
struct i915_context *i915 = i915_context(pipe);
|
struct i915_context *i915 = i915_context(pipe);
|
||||||
|
|
||||||
i915->rasterizer = setup;
|
i915->rasterizer = (struct pipe_rasterizer_state *)setup;
|
||||||
|
|
||||||
/* pass-through to draw module */
|
/* pass-through to draw module */
|
||||||
draw_set_rasterizer_state(i915->draw, setup);
|
draw_set_rasterizer_state(i915->draw, setup);
|
||||||
@@ -395,10 +391,10 @@ static void i915_bind_rasterizer_state( struct pipe_context *pipe,
|
|||||||
i915->dirty |= I915_NEW_RASTERIZER;
|
i915->dirty |= I915_NEW_RASTERIZER;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void i915_delete_rasterizer_state( struct pipe_context *pipe,
|
static void i915_delete_rasterizer_state(struct pipe_context *pipe,
|
||||||
const struct pipe_rasterizer_state *setup )
|
void *setup)
|
||||||
{
|
{
|
||||||
free((struct pipe_rasterizer_state*)setup);
|
/* do nothing */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void i915_set_vertex_buffer( struct pipe_context *pipe,
|
static void i915_set_vertex_buffer( struct pipe_context *pipe,
|
||||||
|
@@ -99,13 +99,10 @@ struct pipe_context {
|
|||||||
void (*delete_sampler_state)(struct pipe_context *,
|
void (*delete_sampler_state)(struct pipe_context *,
|
||||||
const struct pipe_sampler_state *);
|
const struct pipe_sampler_state *);
|
||||||
|
|
||||||
const struct pipe_rasterizer_state *(*create_rasterizer_state)(
|
void *(*create_rasterizer_state)(struct pipe_context *,
|
||||||
struct pipe_context *,
|
const struct pipe_rasterizer_state *);
|
||||||
const struct pipe_rasterizer_state *);
|
void (*bind_rasterizer_state)(struct pipe_context *, void *);
|
||||||
void (*bind_rasterizer_state)(struct pipe_context *,
|
void (*delete_rasterizer_state)(struct pipe_context *, void *);
|
||||||
const struct pipe_rasterizer_state *);
|
|
||||||
void (*delete_rasterizer_state)(struct pipe_context *,
|
|
||||||
const struct pipe_rasterizer_state *);
|
|
||||||
|
|
||||||
const struct pipe_depth_stencil_state * (*create_depth_stencil_state)(
|
const struct pipe_depth_stencil_state * (*create_depth_stencil_state)(
|
||||||
struct pipe_context *,
|
struct pipe_context *,
|
||||||
|
@@ -58,13 +58,13 @@ void softpipe_bind_depth_stencil_state(struct pipe_context *,
|
|||||||
void softpipe_delete_depth_stencil_state(struct pipe_context *,
|
void softpipe_delete_depth_stencil_state(struct pipe_context *,
|
||||||
const struct pipe_depth_stencil_state *);
|
const struct pipe_depth_stencil_state *);
|
||||||
|
|
||||||
const struct pipe_rasterizer_state *
|
void *
|
||||||
softpipe_create_rasterizer_state(struct pipe_context *,
|
softpipe_create_rasterizer_state(struct pipe_context *,
|
||||||
const struct pipe_rasterizer_state *);
|
|
||||||
void softpipe_bind_rasterizer_state(struct pipe_context *,
|
|
||||||
const struct pipe_rasterizer_state *);
|
const struct pipe_rasterizer_state *);
|
||||||
|
void softpipe_bind_rasterizer_state(struct pipe_context *,
|
||||||
|
void *);
|
||||||
void softpipe_delete_rasterizer_state(struct pipe_context *,
|
void softpipe_delete_rasterizer_state(struct pipe_context *,
|
||||||
const struct pipe_rasterizer_state *);
|
void *);
|
||||||
|
|
||||||
void softpipe_set_framebuffer_state( struct pipe_context *,
|
void softpipe_set_framebuffer_state( struct pipe_context *,
|
||||||
const struct pipe_framebuffer_state * );
|
const struct pipe_framebuffer_state * );
|
||||||
|
@@ -32,34 +32,30 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
const struct pipe_rasterizer_state *
|
void *
|
||||||
softpipe_create_rasterizer_state(struct pipe_context *pipe,
|
softpipe_create_rasterizer_state(struct pipe_context *pipe,
|
||||||
const struct pipe_rasterizer_state *setup)
|
const struct pipe_rasterizer_state *setup)
|
||||||
{
|
{
|
||||||
struct pipe_rasterizer_state *raster =
|
return 0;
|
||||||
malloc(sizeof(struct pipe_rasterizer_state));
|
|
||||||
memcpy(raster, setup, sizeof(struct pipe_rasterizer_state));
|
|
||||||
|
|
||||||
return raster;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void softpipe_bind_rasterizer_state(struct pipe_context *pipe,
|
void softpipe_bind_rasterizer_state(struct pipe_context *pipe,
|
||||||
const struct pipe_rasterizer_state *setup)
|
void *setup)
|
||||||
{
|
{
|
||||||
struct softpipe_context *softpipe = softpipe_context(pipe);
|
struct softpipe_context *softpipe = softpipe_context(pipe);
|
||||||
|
|
||||||
/* pass-through to draw module */
|
/* pass-through to draw module */
|
||||||
draw_set_rasterizer_state(softpipe->draw, setup);
|
draw_set_rasterizer_state(softpipe->draw, setup);
|
||||||
|
|
||||||
softpipe->rasterizer = setup;
|
softpipe->rasterizer = (struct pipe_rasterizer_state *)setup;
|
||||||
|
|
||||||
softpipe->dirty |= SP_NEW_RASTERIZER;
|
softpipe->dirty |= SP_NEW_RASTERIZER;
|
||||||
}
|
}
|
||||||
|
|
||||||
void softpipe_delete_rasterizer_state(struct pipe_context *pipe,
|
void softpipe_delete_rasterizer_state(struct pipe_context *pipe,
|
||||||
const struct pipe_rasterizer_state *rasterizer)
|
void *rasterizer)
|
||||||
{
|
{
|
||||||
free((struct pipe_rasterizer_state*)rasterizer);
|
/* do nothing */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -73,7 +73,7 @@ static void update_raster_state( struct st_context *st )
|
|||||||
{
|
{
|
||||||
GLcontext *ctx = st->ctx;
|
GLcontext *ctx = st->ctx;
|
||||||
struct pipe_rasterizer_state raster;
|
struct pipe_rasterizer_state raster;
|
||||||
const struct pipe_rasterizer_state *cached;
|
const struct cso_rasterizer *cso;
|
||||||
|
|
||||||
memset(&raster, 0, sizeof(raster));
|
memset(&raster, 0, sizeof(raster));
|
||||||
|
|
||||||
@@ -206,10 +206,10 @@ static void update_raster_state( struct st_context *st )
|
|||||||
if (ctx->Scissor.Enabled)
|
if (ctx->Scissor.Enabled)
|
||||||
raster.scissor = 1;
|
raster.scissor = 1;
|
||||||
|
|
||||||
cached = st_cached_rasterizer_state(st, &raster);
|
cso = st_cached_rasterizer_state(st, &raster);
|
||||||
if (st->state.rasterizer != cached) {
|
if (st->state.rasterizer != cso) {
|
||||||
st->state.rasterizer = cached;
|
st->state.rasterizer = cso;
|
||||||
st->pipe->bind_rasterizer_state( st->pipe, cached );
|
st->pipe->bind_rasterizer_state(st->pipe, cso->data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -95,22 +95,24 @@ struct pipe_depth_stencil_state * st_cached_depth_stencil_state(
|
|||||||
return (struct pipe_depth_stencil_state*)(cso_hash_iter_data(iter));
|
return (struct pipe_depth_stencil_state*)(cso_hash_iter_data(iter));
|
||||||
}
|
}
|
||||||
|
|
||||||
struct pipe_rasterizer_state * st_cached_rasterizer_state(
|
const struct cso_rasterizer* st_cached_rasterizer_state(
|
||||||
struct st_context *st,
|
struct st_context *st,
|
||||||
const struct pipe_rasterizer_state *raster)
|
const struct pipe_rasterizer_state *templ)
|
||||||
{
|
{
|
||||||
unsigned hash_key = cso_construct_key((void*)raster,
|
unsigned hash_key = cso_construct_key((void*)templ,
|
||||||
sizeof(struct pipe_rasterizer_state));
|
sizeof(struct pipe_rasterizer_state));
|
||||||
struct cso_hash_iter iter = cso_find_state_template(st->cache,
|
struct cso_hash_iter iter = cso_find_state_template(st->cache,
|
||||||
hash_key, CSO_RASTERIZER,
|
hash_key, CSO_RASTERIZER,
|
||||||
(void*)raster);
|
(void*)templ);
|
||||||
if (cso_hash_iter_is_null(iter)) {
|
if (cso_hash_iter_is_null(iter)) {
|
||||||
const struct pipe_rasterizer_state *created_state =
|
struct cso_rasterizer *cso = malloc(sizeof(struct cso_rasterizer));
|
||||||
st->pipe->create_rasterizer_state(st->pipe, raster);
|
memcpy(&cso->state, templ, sizeof(struct pipe_rasterizer_state));
|
||||||
iter = cso_insert_state(st->cache, hash_key, CSO_RASTERIZER,
|
cso->data = st->pipe->create_rasterizer_state(st->pipe, templ);
|
||||||
(void*)created_state);
|
if (!cso->data)
|
||||||
|
cso->data = &cso->state;
|
||||||
|
iter = cso_insert_state(st->cache, hash_key, CSO_RASTERIZER, cso);
|
||||||
}
|
}
|
||||||
return (struct pipe_rasterizer_state*)(cso_hash_iter_data(iter));
|
return (struct cso_rasterizer*)(cso_hash_iter_data(iter));
|
||||||
}
|
}
|
||||||
|
|
||||||
struct pipe_shader_state * st_cached_fs_state(
|
struct pipe_shader_state * st_cached_fs_state(
|
||||||
|
@@ -51,9 +51,9 @@ struct pipe_depth_stencil_state *st_cached_depth_stencil_state(
|
|||||||
struct st_context *st,
|
struct st_context *st,
|
||||||
const struct pipe_depth_stencil_state *depth_stencil);
|
const struct pipe_depth_stencil_state *depth_stencil);
|
||||||
|
|
||||||
struct pipe_rasterizer_state *st_cached_rasterizer_state(
|
const struct cso_rasterizer *
|
||||||
struct st_context *st,
|
st_cached_rasterizer_state(struct st_context *st,
|
||||||
const struct pipe_rasterizer_state *raster);
|
const struct pipe_rasterizer_state *raster);
|
||||||
|
|
||||||
struct pipe_shader_state *st_cached_fs_state(
|
struct pipe_shader_state *st_cached_fs_state(
|
||||||
struct st_context *st,
|
struct st_context *st,
|
||||||
|
@@ -345,7 +345,7 @@ clear_with_quad(GLcontext *ctx,
|
|||||||
/* setup state: nothing */
|
/* setup state: nothing */
|
||||||
{
|
{
|
||||||
struct pipe_rasterizer_state raster;
|
struct pipe_rasterizer_state raster;
|
||||||
const struct pipe_rasterizer_state *cached;
|
const struct cso_rasterizer *cso;
|
||||||
memset(&raster, 0, sizeof(raster));
|
memset(&raster, 0, sizeof(raster));
|
||||||
#if 0
|
#if 0
|
||||||
/* don't do per-pixel scissor; we'll just draw a PIPE_PRIM_QUAD
|
/* don't do per-pixel scissor; we'll just draw a PIPE_PRIM_QUAD
|
||||||
@@ -354,8 +354,8 @@ clear_with_quad(GLcontext *ctx,
|
|||||||
if (ctx->Scissor.Enabled)
|
if (ctx->Scissor.Enabled)
|
||||||
raster.scissor = 1;
|
raster.scissor = 1;
|
||||||
#endif
|
#endif
|
||||||
cached = st_cached_rasterizer_state(ctx->st, &raster);
|
cso = st_cached_rasterizer_state(ctx->st, &raster);
|
||||||
pipe->bind_rasterizer_state(pipe, cached);
|
pipe->bind_rasterizer_state(pipe, cso->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fragment shader state: color pass-through program */
|
/* fragment shader state: color pass-through program */
|
||||||
@@ -415,7 +415,7 @@ clear_with_quad(GLcontext *ctx,
|
|||||||
pipe->bind_depth_stencil_state(pipe, st->state.depth_stencil);
|
pipe->bind_depth_stencil_state(pipe, st->state.depth_stencil);
|
||||||
pipe->bind_fs_state(pipe, st->state.fs);
|
pipe->bind_fs_state(pipe, st->state.fs);
|
||||||
pipe->bind_vs_state(pipe, st->state.vs);
|
pipe->bind_vs_state(pipe, st->state.vs);
|
||||||
pipe->bind_rasterizer_state(pipe, st->state.rasterizer);
|
pipe->bind_rasterizer_state(pipe, st->state.rasterizer->data);
|
||||||
pipe->set_viewport_state(pipe, &ctx->st->state.viewport);
|
pipe->set_viewport_state(pipe, &ctx->st->state.viewport);
|
||||||
/* OR:
|
/* OR:
|
||||||
st_invalidate_state(ctx, _NEW_COLOR | _NEW_DEPTH | _NEW_STENCIL);
|
st_invalidate_state(ctx, _NEW_COLOR | _NEW_DEPTH | _NEW_STENCIL);
|
||||||
|
@@ -328,12 +328,12 @@ draw_textured_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z,
|
|||||||
/* setup state: just scissor */
|
/* setup state: just scissor */
|
||||||
{
|
{
|
||||||
struct pipe_rasterizer_state setup;
|
struct pipe_rasterizer_state setup;
|
||||||
struct pipe_rasterizer_state *cached;
|
const struct cso_rasterizer *cso;
|
||||||
memset(&setup, 0, sizeof(setup));
|
memset(&setup, 0, sizeof(setup));
|
||||||
if (ctx->Scissor.Enabled)
|
if (ctx->Scissor.Enabled)
|
||||||
setup.scissor = 1;
|
setup.scissor = 1;
|
||||||
cached = st_cached_rasterizer_state(ctx->st, &setup);
|
cso = st_cached_rasterizer_state(ctx->st, &setup);
|
||||||
pipe->bind_rasterizer_state(pipe, cached);
|
pipe->bind_rasterizer_state(pipe, cso->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fragment shader state: TEX lookup program */
|
/* fragment shader state: TEX lookup program */
|
||||||
@@ -417,7 +417,7 @@ draw_textured_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z,
|
|||||||
draw_quad(ctx, x0, y0, z, x1, y1);
|
draw_quad(ctx, x0, y0, z, x1, y1);
|
||||||
|
|
||||||
/* restore GL state */
|
/* restore GL state */
|
||||||
pipe->bind_rasterizer_state(pipe, ctx->st->state.rasterizer);
|
pipe->bind_rasterizer_state(pipe, ctx->st->state.rasterizer->data);
|
||||||
pipe->bind_fs_state(pipe, ctx->st->state.fs);
|
pipe->bind_fs_state(pipe, ctx->st->state.fs);
|
||||||
pipe->bind_vs_state(pipe, ctx->st->state.vs);
|
pipe->bind_vs_state(pipe, ctx->st->state.vs);
|
||||||
pipe->set_texture_state(pipe, unit, ctx->st->state.texture[unit]);
|
pipe->set_texture_state(pipe, unit, ctx->st->state.texture[unit]);
|
||||||
|
@@ -78,7 +78,7 @@ struct st_context
|
|||||||
const struct cso_blend *blend;
|
const struct cso_blend *blend;
|
||||||
const struct pipe_sampler_state *sampler[PIPE_MAX_SAMPLERS];
|
const struct pipe_sampler_state *sampler[PIPE_MAX_SAMPLERS];
|
||||||
const struct pipe_depth_stencil_state *depth_stencil;
|
const struct pipe_depth_stencil_state *depth_stencil;
|
||||||
const struct pipe_rasterizer_state *rasterizer;
|
const struct cso_rasterizer *rasterizer;
|
||||||
const struct pipe_shader_state *fs;
|
const struct pipe_shader_state *fs;
|
||||||
const struct pipe_shader_state *vs;
|
const struct pipe_shader_state *vs;
|
||||||
|
|
||||||
|
@@ -404,7 +404,7 @@ st_feedback_draw_vbo(GLcontext *ctx,
|
|||||||
assert(draw);
|
assert(draw);
|
||||||
draw_set_viewport_state(draw, &st->state.viewport);
|
draw_set_viewport_state(draw, &st->state.viewport);
|
||||||
draw_set_clip_state(draw, &st->state.clip);
|
draw_set_clip_state(draw, &st->state.clip);
|
||||||
draw_set_rasterizer_state(draw, st->state.rasterizer);
|
draw_set_rasterizer_state(draw, st->state.rasterizer->data);
|
||||||
draw_set_vertex_shader(draw, st->state.vs);
|
draw_set_vertex_shader(draw, st->state.vs);
|
||||||
/* XXX need to set vertex info too */
|
/* XXX need to set vertex info too */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user