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
< PIPE_MAX_COLOR_BUFS
; 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
= MIN2(BRW_MAX_DRAW_BUFFERS
, 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
= viewport
->scale
[2] * -1.0 + viewport
->translate
[2];
55 brw
->curr
.ccv
.max_depth
= viewport
->scale
[2] * 1.0 + viewport
->translate
[2];
58 debug_printf("%s depth range %f .. %f\n",
60 brw
->curr
.ccv
.min_depth
,
61 brw
->curr
.ccv
.max_depth
);
63 brw
->state
.dirty
.mesa
|= PIPE_NEW_VIEWPORT
;
67 void brw_pipe_framebuffer_init( struct brw_context
*brw
)
69 brw
->base
.set_framebuffer_state
= brw_set_framebuffer_state
;
70 brw
->base
.set_viewport_state
= brw_set_viewport_state
;
73 void brw_pipe_framebuffer_cleanup( struct brw_context
*brw
)
75 struct pipe_framebuffer_state
*fb
= &brw
->curr
.fb
;
78 for (i
= 0; i
< PIPE_MAX_COLOR_BUFS
; i
++) {
79 pipe_surface_reference(&fb
->cbufs
[i
], NULL
);
82 pipe_surface_reference(&fb
->zsbuf
, NULL
);