[g3dvl] move blender state into idct code

This commit is contained in:
Christian König 2011-04-17 13:01:56 +02:00
parent ca79aeb91e
commit 0a2310b375
4 changed files with 27 additions and 22 deletions

View file

@ -400,8 +400,9 @@ cleanup_shaders(struct vl_idct *idct)
static bool
init_state(struct vl_idct *idct)
{
struct pipe_sampler_state sampler;
struct pipe_blend_state blend;
struct pipe_rasterizer_state rs_state;
struct pipe_sampler_state sampler;
unsigned i;
assert(idct);
@ -412,6 +413,25 @@ init_state(struct vl_idct *idct)
if (!idct->rs_state)
goto error_rs_state;
memset(&blend, 0, sizeof blend);
blend.independent_blend_enable = 0;
blend.rt[0].blend_enable = 0;
blend.rt[0].rgb_func = PIPE_BLEND_ADD;
blend.rt[0].rgb_src_factor = PIPE_BLENDFACTOR_ONE;
blend.rt[0].rgb_dst_factor = PIPE_BLENDFACTOR_ONE;
blend.rt[0].alpha_func = PIPE_BLEND_ADD;
blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ONE;
blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ONE;
blend.logicop_enable = 0;
blend.logicop_func = PIPE_LOGICOP_CLEAR;
/* Needed to allow color writes to FB, even if blending disabled */
blend.rt[0].colormask = PIPE_MASK_RGBA;
blend.dither = 0;
idct->blend = idct->pipe->create_blend_state(idct->pipe, &blend);
if (!idct->blend)
goto error_blend;
for (i = 0; i < 2; ++i) {
memset(&sampler, 0, sizeof(sampler));
sampler.wrap_s = PIPE_TEX_WRAP_REPEAT;
@ -437,6 +457,9 @@ error_samplers:
idct->pipe->delete_rasterizer_state(idct->pipe, idct->rs_state);
error_blend:
idct->pipe->delete_blend_state(idct->pipe, idct->blend);
error_rs_state:
return false;
}
@ -450,6 +473,7 @@ cleanup_state(struct vl_idct *idct)
idct->pipe->delete_sampler_state(idct->pipe, idct->samplers[i]);
idct->pipe->delete_rasterizer_state(idct->pipe, idct->rs_state);
idct->pipe->delete_blend_state(idct->pipe, idct->blend);
}
static bool
@ -691,6 +715,7 @@ vl_idct_flush(struct vl_idct *idct, struct vl_idct_buffer *buffer, unsigned num_
num_verts = idct->blocks_x * idct->blocks_y * 4;
idct->pipe->bind_rasterizer_state(idct->pipe, idct->rs_state);
idct->pipe->bind_blend_state(idct->pipe, idct->blend);
idct->pipe->bind_fragment_sampler_states(idct->pipe, 2, idct->samplers);
/* first stage */

View file

@ -43,6 +43,7 @@ struct vl_idct
unsigned nr_of_render_targets;
void *rs_state;
void *blend;
void *samplers[2];

View file

@ -276,7 +276,6 @@ vl_mpeg12_destroy(struct pipe_video_decoder *decoder)
dec->pipe->bind_vs_state(dec->pipe, NULL);
dec->pipe->bind_fs_state(dec->pipe, NULL);
dec->pipe->delete_blend_state(dec->pipe, dec->blend);
dec->pipe->delete_depth_stencil_alpha_state(dec->pipe, dec->dsa);
vl_mc_cleanup(&dec->mc_y);
@ -489,7 +488,6 @@ vl_mpeg12_decoder_flush_buffer(struct pipe_video_decode_buffer *buffer,
vl_mc_render_ref(&buf->mc[i], sv[j][i], ne_start, ne_num, e_start, e_num);
}
dec->pipe->bind_blend_state(dec->pipe, dec->blend);
dec->pipe->bind_vertex_elements_state(dec->pipe, dec->ves_eb[i]);
if (dec->base.entrypoint <= PIPE_VIDEO_ENTRYPOINT_IDCT)
@ -515,29 +513,11 @@ vl_mpeg12_decoder_clear_buffer(struct pipe_video_decode_buffer *buffer)
static bool
init_pipe_state(struct vl_mpeg12_decoder *dec)
{
struct pipe_blend_state blend;
struct pipe_depth_stencil_alpha_state dsa;
unsigned i;
assert(dec);
memset(&blend, 0, sizeof blend);
blend.independent_blend_enable = 0;
blend.rt[0].blend_enable = 0;
blend.rt[0].rgb_func = PIPE_BLEND_ADD;
blend.rt[0].rgb_src_factor = PIPE_BLENDFACTOR_ONE;
blend.rt[0].rgb_dst_factor = PIPE_BLENDFACTOR_ONE;
blend.rt[0].alpha_func = PIPE_BLEND_ADD;
blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ONE;
blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ONE;
blend.logicop_enable = 0;
blend.logicop_func = PIPE_LOGICOP_CLEAR;
/* Needed to allow color writes to FB, even if blending disabled */
blend.rt[0].colormask = PIPE_MASK_RGBA;
blend.dither = 0;
dec->blend = dec->pipe->create_blend_state(dec->pipe, &blend);
memset(&dsa, 0, sizeof dsa);
dsa.depth.enabled = 0;
dsa.depth.writemask = 0;

View file

@ -59,7 +59,6 @@ struct vl_mpeg12_decoder
struct vl_mc mc_y, mc_c;
void *dsa;
void *blend;
};
struct vl_mpeg12_buffer