1 #include "util/u_math.h"
2 #include "pipe/p_context.h"
3 #include "pipe/p_state.h"
5 #include "brw_context.h"
8 * called from intelDrawBuffer()
10 static void brw_set_framebuffer_state( struct pipe_context
*pipe
,
11 const struct pipe_framebuffer_state
*fb
)
13 struct brw_context
*brw
= brw_context(pipe
);
18 if (brw
->curr
.fb
.width
!= fb
->width
||
19 brw
->curr
.fb
.height
!= fb
->height
) {
20 brw
->curr
.fb
.width
= fb
->width
;
21 brw
->curr
.fb
.height
= fb
->height
;
22 brw
->state
.dirty
.mesa
|= PIPE_NEW_FRAMEBUFFER_DIMENSIONS
;
27 if (brw
->curr
.fb
.zsbuf
!= fb
->zsbuf
) {
28 pipe_surface_reference(&brw
->curr
.fb
.zsbuf
, fb
->zsbuf
);
29 brw
->state
.dirty
.mesa
|= PIPE_NEW_DEPTH_BUFFER
;
34 for (i
= 0; i
< MAX2(fb
->nr_cbufs
, brw
->curr
.fb
.nr_cbufs
); i
++) {
35 if (brw
->curr
.fb
.cbufs
[i
] != fb
->cbufs
[i
]) {
36 brw
->state
.dirty
.mesa
|= PIPE_NEW_COLOR_BUFFERS
;
37 pipe_surface_reference(&brw
->curr
.fb
.cbufs
[i
], fb
->cbufs
[i
]);
41 if (brw
->curr
.fb
.nr_cbufs
!= fb
->nr_cbufs
) {
42 brw
->curr
.fb
.nr_cbufs
= fb
->nr_cbufs
;
43 brw
->state
.dirty
.mesa
|= PIPE_NEW_NR_CBUFS
;
48 static void brw_set_viewport_state( struct pipe_context
*pipe
,
49 const struct pipe_viewport_state
*viewport
)
51 struct brw_context
*brw
= brw_context(pipe
);
53 brw
->curr
.viewport
= *viewport
;
54 brw
->curr
.ccv
.min_depth
= 0.0; /* XXX: near */
55 brw
->curr
.ccv
.max_depth
= 1.0; /* XXX: far */
57 brw
->state
.dirty
.mesa
|= PIPE_NEW_VIEWPORT
;
61 void brw_pipe_framebuffer_init( struct brw_context
*brw
)
63 brw
->base
.set_framebuffer_state
= brw_set_framebuffer_state
;
64 brw
->base
.set_viewport_state
= brw_set_viewport_state
;
67 void brw_pipe_framebuffer_cleanup( struct brw_context
*brw
)
69 struct pipe_framebuffer_state
*fb
= &brw
->curr
.fb
;
72 for (i
= 0; i
< PIPE_MAX_COLOR_BUFS
; i
++) {
73 pipe_surface_reference(&fb
->cbufs
[i
], NULL
);
76 pipe_surface_reference(&fb
->zsbuf
, NULL
);