summaryrefslogtreecommitdiff
path: root/context_surface_2d.c
blob: d1a5c0d2411345707505e5c72ac32be947122828 (plain)
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);
}