1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#include <stdio.h>
#include <stdint.h>
#include "nouveau_class.h"
#include <nouveau_pushbuf.h>
#include <nouveau_notifier.h>
#include "screen.h"
#include "object.h"
#include "fifo.h"
void context_surface_2d_init(void)
{
struct nouveau_grobj *subchCtxSurf2D = grobj[NvSubCtxSurf2D];
printf("-- Context surface 2D, init\n");
BEGIN_RING(chan, subchCtxSurf2D, NV04_CONTEXT_SURFACES_2D_DMA_NOTIFY, 1);
OUT_RING (chan, notifier->handle);
BEGIN_RING(chan, subchCtxSurf2D, NV04_CONTEXT_SURFACES_2D_DMA_IMAGE_SOURCE, 2);
OUT_RING (chan, chan->vram->handle);
OUT_RING (chan, chan->vram->handle);
BEGIN_RING(chan, subchCtxSurf2D, NV04_CONTEXT_SURFACES_2D_FORMAT, 4);
OUT_RING (chan, (screen_bpp==32)
? NV04_CONTEXT_SURFACES_2D_FORMAT_A8R8G8B8
: NV04_CONTEXT_SURFACES_2D_FORMAT_R5G6B5
);
OUT_RING (chan, (screen_pitch<<16)|screen_pitch);
OUT_RING (chan, screen_offset); /* src */
OUT_RING (chan, screen_offset); /* dst */
FIRE_RING(chan);
}
|