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 struct drm_nouveau_grobj_alloc 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
);
38 nouveauCreateContextObject(nmesa
, NvCtxSurf2D
, NV04_CONTEXT_SURFACES_2D
);
39 nouveauCreateContextObject(nmesa
, NvCtxSurf3D
, NV04_CONTEXT_SURFACES_3D
);
41 if (nmesa
->screen
->card
->type
>=NV_11
) {
42 nouveauCreateContextObject(nmesa
, NvImageBlit
, NV10_IMAGE_BLIT
);
44 nouveauCreateContextObject(nmesa
, NvImageBlit
, NV_IMAGE_BLIT
);
46 nouveauCreateContextObject(nmesa
, NvMemFormat
, NV_MEMORY_TO_MEMORY_FORMAT
);
48 #ifdef ALLOW_MULTI_SUBCHANNEL
49 nouveauObjectOnSubchannel(nmesa
, NvSubCtxSurf2D
, NvCtxSurf2D
);
50 BEGIN_RING_SIZE(NvSubCtxSurf2D
, NV10_CONTEXT_SURFACES_2D_SET_DMA_IN_MEMORY0
, 2);
54 nouveauObjectOnSubchannel(nmesa
, NvSubImageBlit
, NvImageBlit
);
55 BEGIN_RING_SIZE(NvSubImageBlit
, NV10_IMAGE_BLIT_SET_CONTEXT_SURFACES_2D
, 1);
56 OUT_RING(NvCtxSurf2D
);
57 BEGIN_RING_SIZE(NvSubImageBlit
, NV10_IMAGE_BLIT_SET_OPERATION
, 1);
58 OUT_RING(3); /* SRCCOPY */
60 nouveauObjectOnSubchannel(nmesa
, NvSubMemFormat
, NvMemFormat
);
63 nouveauObjectOnSubchannel(nmesa
, NvSub3D
, Nv3D
);