2 #include "nouveau_fifo.h"
3 #include "nouveau_object.h"
4 #include "nouveau_reg.h"
7 GLboolean
nouveauCreateContextObject(nouveauContextPtr nmesa
,
8 uint32_t handle
, int class)
10 drm_nouveau_grobj_alloc_t cto
;
13 cto
.channel
= nmesa
->fifo
.channel
;
16 ret
= drmCommandWrite(nmesa
->driFd
, DRM_NOUVEAU_GROBJ_ALLOC
,
22 void nouveauObjectOnSubchannel(nouveauContextPtr nmesa
, int subchannel
, int handle
)
24 BEGIN_RING_SIZE(subchannel
, 0, 1);
28 void nouveauObjectInit(nouveauContextPtr nmesa
)
30 #ifdef NOUVEAU_RING_DEBUG
34 nouveauCreateContextObject(nmesa
, Nv3D
, nmesa
->screen
->card
->class_3d
);
35 if (nmesa
->screen
->card
->type
>=NV_10
) {
36 nouveauCreateContextObject(nmesa
, NvCtxSurf2D
, NV10_CONTEXT_SURFACES_2D
);
37 nouveauCreateContextObject(nmesa
, NvImageBlit
, NV10_IMAGE_BLIT
);
39 nouveauCreateContextObject(nmesa
, NvCtxSurf2D
, NV04_CONTEXT_SURFACES_2D
);
40 nouveauCreateContextObject(nmesa
, NvCtxSurf3D
, NV04_CONTEXT_SURFACES_3D
);
41 nouveauCreateContextObject(nmesa
, NvImageBlit
, NV_IMAGE_BLIT
);
43 nouveauCreateContextObject(nmesa
, NvMemFormat
, NV_MEMORY_TO_MEMORY_FORMAT
);
45 #ifdef ALLOW_MULTI_SUBCHANNEL
46 nouveauObjectOnSubchannel(nmesa
, NvSubCtxSurf2D
, NvCtxSurf2D
);
47 BEGIN_RING_SIZE(NvSubCtxSurf2D
, NV10_CONTEXT_SURFACES_2D_SET_DMA_IN_MEMORY0
, 2);
51 nouveauObjectOnSubchannel(nmesa
, NvSubImageBlit
, NvImageBlit
);
52 BEGIN_RING_SIZE(NvSubImageBlit
, NV10_IMAGE_BLIT_SET_CONTEXT_SURFACES_2D
, 1);
53 OUT_RING(NvCtxSurf2D
);
54 BEGIN_RING_SIZE(NvSubImageBlit
, NV10_IMAGE_BLIT_SET_OPERATION
, 1);
55 OUT_RING(3); /* SRCCOPY */
57 nouveauObjectOnSubchannel(nmesa
, NvSubMemFormat
, NvMemFormat
);
60 nouveauObjectOnSubchannel(nmesa
, NvSub3D
, Nv3D
);