1 #include "util/u_math.h"
2 #include "pipe/p_context.h"
3 #include "pipe/p_state.h"
4 #include "util/u_inlines.h"
6 #include "brw_context.h"
9 * called from intelDrawBuffer()
11 static void brw_set_framebuffer_state( struct pipe_context
*pipe
,
12 const struct pipe_framebuffer_state
*fb
)
14 struct brw_context
*brw
= brw_context(pipe
);
19 if (brw
->curr
.fb
.width
!= fb
->width
||
20 brw
->curr
.fb
.height
!= fb
->height
) {
21 brw
->curr
.fb
.width
= fb
->width
;
22 brw
->curr
.fb
.height
= fb
->height
;
23 brw
->state
.dirty
.mesa
|= PIPE_NEW_FRAMEBUFFER_DIMENSIONS
;
28 if (brw
->curr
.fb
.zsbuf
!= fb
->zsbuf
) {
29 pipe_surface_reference(&brw
->curr
.fb
.zsbuf
, fb
->zsbuf
);
30 brw
->state
.dirty
.mesa
|= PIPE_NEW_DEPTH_BUFFER
;
35 for (i
= 0; i
< PIPE_MAX_COLOR_BUFS
; i
++) {
36 if (brw
->curr
.fb
.cbufs
[i
] != fb
->cbufs
[i
]) {
37 brw
->state
.dirty
.mesa
|= PIPE_NEW_COLOR_BUFFERS
;
38 pipe_surface_reference(&brw
->curr
.fb
.cbufs
[i
], fb
->cbufs
[i
]);
42 if (brw
->curr
.fb
.nr_cbufs
!= fb
->nr_cbufs
) {
43 brw
->curr
.fb
.nr_cbufs
= MIN2(BRW_MAX_DRAW_BUFFERS
, fb
->nr_cbufs
);
44 brw
->state
.dirty
.mesa
|= PIPE_NEW_NR_CBUFS
;
49 static void brw_set_viewport_state( struct pipe_context
*pipe
,
50 const struct pipe_viewport_state
*viewport
)
52 struct brw_context
*brw
= brw_context(pipe
);
54 brw
->curr
.viewport
= *viewport
;
55 brw
->curr
.ccv
.min_depth
= viewport
->scale
[2] * -1.0 + viewport
->translate
[2];
56 brw
->curr
.ccv
.max_depth
= viewport
->scale
[2] * 1.0 + viewport
->translate
[2];
59 debug_printf("%s depth range %f .. %f\n",
61 brw
->curr
.ccv
.min_depth
,
62 brw
->curr
.ccv
.max_depth
);
64 brw
->state
.dirty
.mesa
|= PIPE_NEW_VIEWPORT
;
68 void brw_pipe_framebuffer_init( struct brw_context
*brw
)
70 brw
->base
.set_framebuffer_state
= brw_set_framebuffer_state
;
71 brw
->base
.set_viewport_state
= brw_set_viewport_state
;
74 void brw_pipe_framebuffer_cleanup( struct brw_context
*brw
)
76 struct pipe_framebuffer_state
*fb
= &brw
->curr
.fb
;
79 for (i
= 0; i
< PIPE_MAX_COLOR_BUFS
; i
++) {
80 pipe_surface_reference(&fb
->cbufs
[i
], NULL
);
83 pipe_surface_reference(&fb
->zsbuf
, NULL
);