projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
u_vbuf_mgr: correctly compute max vertex count from hw buffers
[mesa.git]
/
src
/
gallium
/
drivers
/
i965
/
brw_pipe_blend.c
diff --git
a/src/gallium/drivers/i965/brw_pipe_blend.c
b/src/gallium/drivers/i965/brw_pipe_blend.c
index cc9ee2e8dbc5500e52b9bc003d09edbb0775ab44..21f786f871529402604145ef1bb5be211b9d5c69 100644
(file)
--- a/
src/gallium/drivers/i965/brw_pipe_blend.c
+++ b/
src/gallium/drivers/i965/brw_pipe_blend.c
@@
-111,19
+111,21
@@
static void *brw_create_blend_state( struct pipe_context *pipe,
const struct pipe_blend_state *templ )
{
struct brw_blend_state *blend = CALLOC_STRUCT(brw_blend_state);
const struct pipe_blend_state *templ )
{
struct brw_blend_state *blend = CALLOC_STRUCT(brw_blend_state);
+ if (blend == NULL)
+ return NULL;
if (templ->logicop_enable) {
blend->cc2.logicop_enable = 1;
blend->cc5.logicop_func = translate_logicop(templ->logicop_func);
}
if (templ->logicop_enable) {
blend->cc2.logicop_enable = 1;
blend->cc5.logicop_func = translate_logicop(templ->logicop_func);
}
- else if (templ->blend_enable) {
- blend->cc6.dest_blend_factor = translate_blend_factor(templ->rgb_dst_factor);
- blend->cc6.src_blend_factor = translate_blend_factor(templ->rgb_src_factor);
- blend->cc6.blend_function = translate_blend_equation(templ->rgb_func);
+ else if (templ->
rt[0].
blend_enable) {
+ blend->cc6.dest_blend_factor = translate_blend_factor(templ->r
t[0].r
gb_dst_factor);
+ blend->cc6.src_blend_factor = translate_blend_factor(templ->r
t[0].r
gb_src_factor);
+ blend->cc6.blend_function = translate_blend_equation(templ->r
t[0].r
gb_func);
- blend->cc5.ia_dest_blend_factor = translate_blend_factor(templ->alpha_dst_factor);
- blend->cc5.ia_src_blend_factor = translate_blend_factor(templ->alpha_src_factor);
- blend->cc5.ia_blend_function = translate_blend_equation(templ->alpha_func);
+ blend->cc5.ia_dest_blend_factor = translate_blend_factor(templ->
rt[0].
alpha_dst_factor);
+ blend->cc5.ia_src_blend_factor = translate_blend_factor(templ->
rt[0].
alpha_src_factor);
+ blend->cc5.ia_blend_function = translate_blend_equation(templ->
rt[0].
alpha_func);
blend->cc3.blend_enable = 1;
blend->cc3.ia_blend_enable =
blend->cc3.blend_enable = 1;
blend->cc3.ia_blend_enable =
@@
-144,10
+146,10
@@
static void *brw_create_blend_state( struct pipe_context *pipe,
/* Per-surface color mask -- just follow global state:
*/
/* Per-surface color mask -- just follow global state:
*/
- blend->ss0.writedisable_red = (templ->
colormask & PIPE_MASK_R) ? 1 : 0
;
- blend->ss0.writedisable_green = (templ->
colormask & PIPE_MASK_G) ? 1 : 0
;
- blend->ss0.writedisable_blue = (templ->
colormask & PIPE_MASK_B) ? 1 : 0
;
- blend->ss0.writedisable_alpha = (templ->
colormask & PIPE_MASK_A) ? 1 : 0
;
+ blend->ss0.writedisable_red = (templ->
rt[0].colormask & PIPE_MASK_R) ? 0 : 1
;
+ blend->ss0.writedisable_green = (templ->
rt[0].colormask & PIPE_MASK_G) ? 0 : 1
;
+ blend->ss0.writedisable_blue = (templ->
rt[0].colormask & PIPE_MASK_B) ? 0 : 1
;
+ blend->ss0.writedisable_alpha = (templ->
rt[0].colormask & PIPE_MASK_A) ? 0 : 1
;
return (void *)blend;
}
return (void *)blend;
}
@@
-175,9
+177,6
@@
static void brw_set_blend_color(struct pipe_context *pipe,
struct brw_context *brw = brw_context(pipe);
struct brw_blend_constant_color *bcc = &brw->curr.bcc;
struct brw_context *brw = brw_context(pipe);
struct brw_blend_constant_color *bcc = &brw->curr.bcc;
- memset(bcc, 0, sizeof(*bcc));
- bcc->header.opcode = CMD_BLEND_CONSTANT_COLOR;
- bcc->header.length = sizeof(*bcc)/4-2;
bcc->blend_constant_color[0] = blend_color->color[0];
bcc->blend_constant_color[1] = blend_color->color[1];
bcc->blend_constant_color[2] = blend_color->color[2];
bcc->blend_constant_color[0] = blend_color->color[0];
bcc->blend_constant_color[1] = blend_color->color[1];
bcc->blend_constant_color[2] = blend_color->color[2];
@@
-193,6
+192,15
@@
void brw_pipe_blend_init( struct brw_context *brw )
brw->base.create_blend_state = brw_create_blend_state;
brw->base.bind_blend_state = brw_bind_blend_state;
brw->base.delete_blend_state = brw_delete_blend_state;
brw->base.create_blend_state = brw_create_blend_state;
brw->base.bind_blend_state = brw_bind_blend_state;
brw->base.delete_blend_state = brw_delete_blend_state;
+
+ {
+ struct brw_blend_constant_color *bcc = &brw->curr.bcc;
+
+ memset(bcc, 0, sizeof(*bcc));
+ bcc->header.opcode = CMD_BLEND_CONSTANT_COLOR;
+ bcc->header.length = sizeof(*bcc)/4-2;
+ }
+
}
void brw_pipe_blend_cleanup( struct brw_context *brw )
}
void brw_pipe_blend_cleanup( struct brw_context *brw )