xref: /aosp_15_r20/external/mesa3d/src/gallium/frontends/nine/surface9.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2011 Joakim Sindholt <[email protected]>
3*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker  */
5*61046927SAndroid Build Coastguard Worker 
6*61046927SAndroid Build Coastguard Worker #ifndef _NINE_SURFACE9_H_
7*61046927SAndroid Build Coastguard Worker #define _NINE_SURFACE9_H_
8*61046927SAndroid Build Coastguard Worker 
9*61046927SAndroid Build Coastguard Worker #include "nine_memory_helper.h"
10*61046927SAndroid Build Coastguard Worker #include "resource9.h"
11*61046927SAndroid Build Coastguard Worker 
12*61046927SAndroid Build Coastguard Worker #include "pipe/p_state.h"
13*61046927SAndroid Build Coastguard Worker #include "util/list.h"
14*61046927SAndroid Build Coastguard Worker #include "util/u_rect.h"
15*61046927SAndroid Build Coastguard Worker #include "util/u_inlines.h"
16*61046927SAndroid Build Coastguard Worker 
17*61046927SAndroid Build Coastguard Worker struct NineSurface9
18*61046927SAndroid Build Coastguard Worker {
19*61046927SAndroid Build Coastguard Worker     struct NineResource9 base;
20*61046927SAndroid Build Coastguard Worker 
21*61046927SAndroid Build Coastguard Worker     /* G3D state */
22*61046927SAndroid Build Coastguard Worker     struct pipe_transfer *transfer;
23*61046927SAndroid Build Coastguard Worker     struct pipe_surface *surface[2]; /* created on-demand (linear, sRGB) */
24*61046927SAndroid Build Coastguard Worker     int lock_count;
25*61046927SAndroid Build Coastguard Worker     uint8_t texture; /* rtype of container BaseTex or 0 */
26*61046927SAndroid Build Coastguard Worker 
27*61046927SAndroid Build Coastguard Worker     /* resource description */
28*61046927SAndroid Build Coastguard Worker     unsigned level;        /* refers to the pipe_resource (SetLOD !) */
29*61046927SAndroid Build Coastguard Worker     unsigned level_actual; /* refers to the NineTexture */
30*61046927SAndroid Build Coastguard Worker     unsigned layer;
31*61046927SAndroid Build Coastguard Worker     D3DSURFACE_DESC desc;
32*61046927SAndroid Build Coastguard Worker 
33*61046927SAndroid Build Coastguard Worker     struct nine_allocation *data; /* system memory backing */
34*61046927SAndroid Build Coastguard Worker     struct nine_allocation *data_internal; /* for conversions */
35*61046927SAndroid Build Coastguard Worker     enum pipe_format format_internal;
36*61046927SAndroid Build Coastguard Worker     unsigned stride; /* for system memory backing */
37*61046927SAndroid Build Coastguard Worker     unsigned stride_internal;
38*61046927SAndroid Build Coastguard Worker 
39*61046927SAndroid Build Coastguard Worker     unsigned pending_uploads_counter; /* pending uploads */
40*61046927SAndroid Build Coastguard Worker };
41*61046927SAndroid Build Coastguard Worker static inline struct NineSurface9 *
NineSurface9(void * data)42*61046927SAndroid Build Coastguard Worker NineSurface9( void *data )
43*61046927SAndroid Build Coastguard Worker {
44*61046927SAndroid Build Coastguard Worker     return (struct NineSurface9 *)data;
45*61046927SAndroid Build Coastguard Worker }
46*61046927SAndroid Build Coastguard Worker 
47*61046927SAndroid Build Coastguard Worker HRESULT
48*61046927SAndroid Build Coastguard Worker NineSurface9_new( struct NineDevice9 *pDevice,
49*61046927SAndroid Build Coastguard Worker                   struct NineUnknown *pContainer,
50*61046927SAndroid Build Coastguard Worker                   struct pipe_resource *pResource,
51*61046927SAndroid Build Coastguard Worker                   struct nine_allocation *user_buffer,
52*61046927SAndroid Build Coastguard Worker                   uint8_t TextureType, /* 0 if pContainer isn't BaseTexure9 */
53*61046927SAndroid Build Coastguard Worker                   unsigned Level,
54*61046927SAndroid Build Coastguard Worker                   unsigned Layer,
55*61046927SAndroid Build Coastguard Worker                   D3DSURFACE_DESC *pDesc,
56*61046927SAndroid Build Coastguard Worker                   struct NineSurface9 **ppOut );
57*61046927SAndroid Build Coastguard Worker 
58*61046927SAndroid Build Coastguard Worker HRESULT
59*61046927SAndroid Build Coastguard Worker NineSurface9_ctor( struct NineSurface9 *This,
60*61046927SAndroid Build Coastguard Worker                    struct NineUnknownParams *pParams,
61*61046927SAndroid Build Coastguard Worker                    struct NineUnknown *pContainer,
62*61046927SAndroid Build Coastguard Worker                    struct pipe_resource *pResource,
63*61046927SAndroid Build Coastguard Worker                    struct nine_allocation *user_buffer,
64*61046927SAndroid Build Coastguard Worker                    uint8_t TextureType,
65*61046927SAndroid Build Coastguard Worker                    unsigned Level,
66*61046927SAndroid Build Coastguard Worker                    unsigned Layer,
67*61046927SAndroid Build Coastguard Worker                    D3DSURFACE_DESC *pDesc );
68*61046927SAndroid Build Coastguard Worker 
69*61046927SAndroid Build Coastguard Worker void
70*61046927SAndroid Build Coastguard Worker NineSurface9_dtor( struct NineSurface9 *This );
71*61046927SAndroid Build Coastguard Worker 
72*61046927SAndroid Build Coastguard Worker /*** Nine private ***/
73*61046927SAndroid Build Coastguard Worker 
74*61046927SAndroid Build Coastguard Worker void
75*61046927SAndroid Build Coastguard Worker NineSurface9_MarkContainerDirty( struct NineSurface9 *This );
76*61046927SAndroid Build Coastguard Worker 
77*61046927SAndroid Build Coastguard Worker static inline struct pipe_surface *
NineSurface9_GetSurface(struct NineSurface9 * This,int sRGB)78*61046927SAndroid Build Coastguard Worker NineSurface9_GetSurface( struct NineSurface9 *This, int sRGB )
79*61046927SAndroid Build Coastguard Worker {
80*61046927SAndroid Build Coastguard Worker     assert(This->surface[sRGB]);
81*61046927SAndroid Build Coastguard Worker     return This->surface[sRGB];
82*61046927SAndroid Build Coastguard Worker }
83*61046927SAndroid Build Coastguard Worker 
84*61046927SAndroid Build Coastguard Worker static inline struct pipe_resource *
NineSurface9_GetResource(struct NineSurface9 * This)85*61046927SAndroid Build Coastguard Worker NineSurface9_GetResource( struct NineSurface9 *This )
86*61046927SAndroid Build Coastguard Worker {
87*61046927SAndroid Build Coastguard Worker     return This->base.resource;
88*61046927SAndroid Build Coastguard Worker }
89*61046927SAndroid Build Coastguard Worker 
90*61046927SAndroid Build Coastguard Worker void
91*61046927SAndroid Build Coastguard Worker NineSurface9_SetResource( struct NineSurface9 *This,
92*61046927SAndroid Build Coastguard Worker                           struct pipe_resource *resource, unsigned level );
93*61046927SAndroid Build Coastguard Worker 
94*61046927SAndroid Build Coastguard Worker void
95*61046927SAndroid Build Coastguard Worker NineSurface9_SetMultiSampleType( struct NineSurface9 *This,
96*61046927SAndroid Build Coastguard Worker                                  D3DMULTISAMPLE_TYPE mst );
97*61046927SAndroid Build Coastguard Worker 
98*61046927SAndroid Build Coastguard Worker void
99*61046927SAndroid Build Coastguard Worker NineSurface9_SetResourceResize( struct NineSurface9 *This,
100*61046927SAndroid Build Coastguard Worker                                 struct pipe_resource *resource );
101*61046927SAndroid Build Coastguard Worker 
102*61046927SAndroid Build Coastguard Worker void
103*61046927SAndroid Build Coastguard Worker NineSurface9_AddDirtyRect( struct NineSurface9 *This,
104*61046927SAndroid Build Coastguard Worker                            const struct pipe_box *box );
105*61046927SAndroid Build Coastguard Worker 
106*61046927SAndroid Build Coastguard Worker HRESULT
107*61046927SAndroid Build Coastguard Worker NineSurface9_UploadSelf( struct NineSurface9 *This,
108*61046927SAndroid Build Coastguard Worker                          const struct pipe_box *damaged );
109*61046927SAndroid Build Coastguard Worker 
110*61046927SAndroid Build Coastguard Worker void
111*61046927SAndroid Build Coastguard Worker NineSurface9_CopyMemToDefault( struct NineSurface9 *This,
112*61046927SAndroid Build Coastguard Worker                                struct NineSurface9 *From,
113*61046927SAndroid Build Coastguard Worker                                const POINT *pDestPoint,
114*61046927SAndroid Build Coastguard Worker                                const RECT *pSourceRect );
115*61046927SAndroid Build Coastguard Worker 
116*61046927SAndroid Build Coastguard Worker void
117*61046927SAndroid Build Coastguard Worker NineSurface9_CopyDefaultToMem( struct NineSurface9 *This,
118*61046927SAndroid Build Coastguard Worker                                struct NineSurface9 *From );
119*61046927SAndroid Build Coastguard Worker 
120*61046927SAndroid Build Coastguard Worker static inline bool
NineSurface9_IsOffscreenPlain(struct NineSurface9 * This)121*61046927SAndroid Build Coastguard Worker NineSurface9_IsOffscreenPlain (struct NineSurface9 *This )
122*61046927SAndroid Build Coastguard Worker {
123*61046927SAndroid Build Coastguard Worker     return This->base.usage == 0 && !This->texture;
124*61046927SAndroid Build Coastguard Worker }
125*61046927SAndroid Build Coastguard Worker 
126*61046927SAndroid Build Coastguard Worker #if MESA_DEBUG || !defined(NDEBUG)
127*61046927SAndroid Build Coastguard Worker void
128*61046927SAndroid Build Coastguard Worker NineSurface9_Dump( struct NineSurface9 *This );
129*61046927SAndroid Build Coastguard Worker #else
130*61046927SAndroid Build Coastguard Worker static inline void
NineSurface9_Dump(struct NineSurface9 * This)131*61046927SAndroid Build Coastguard Worker NineSurface9_Dump( struct NineSurface9 *This ) { }
132*61046927SAndroid Build Coastguard Worker #endif
133*61046927SAndroid Build Coastguard Worker 
134*61046927SAndroid Build Coastguard Worker /*** Direct3D public ***/
135*61046927SAndroid Build Coastguard Worker 
136*61046927SAndroid Build Coastguard Worker HRESULT NINE_WINAPI
137*61046927SAndroid Build Coastguard Worker NineSurface9_GetContainer( struct NineSurface9 *This,
138*61046927SAndroid Build Coastguard Worker                            REFIID riid,
139*61046927SAndroid Build Coastguard Worker                            void **ppContainer );
140*61046927SAndroid Build Coastguard Worker 
141*61046927SAndroid Build Coastguard Worker HRESULT NINE_WINAPI
142*61046927SAndroid Build Coastguard Worker NineSurface9_GetDesc( struct NineSurface9 *This,
143*61046927SAndroid Build Coastguard Worker                       D3DSURFACE_DESC *pDesc );
144*61046927SAndroid Build Coastguard Worker 
145*61046927SAndroid Build Coastguard Worker HRESULT NINE_WINAPI
146*61046927SAndroid Build Coastguard Worker NineSurface9_LockRect( struct NineSurface9 *This,
147*61046927SAndroid Build Coastguard Worker                        D3DLOCKED_RECT *pLockedRect,
148*61046927SAndroid Build Coastguard Worker                        const RECT *pRect,
149*61046927SAndroid Build Coastguard Worker                        DWORD Flags );
150*61046927SAndroid Build Coastguard Worker 
151*61046927SAndroid Build Coastguard Worker HRESULT NINE_WINAPI
152*61046927SAndroid Build Coastguard Worker NineSurface9_UnlockRect( struct NineSurface9 *This );
153*61046927SAndroid Build Coastguard Worker 
154*61046927SAndroid Build Coastguard Worker HRESULT NINE_WINAPI
155*61046927SAndroid Build Coastguard Worker NineSurface9_GetDC( struct NineSurface9 *This,
156*61046927SAndroid Build Coastguard Worker                     HDC *phdc );
157*61046927SAndroid Build Coastguard Worker 
158*61046927SAndroid Build Coastguard Worker HRESULT NINE_WINAPI
159*61046927SAndroid Build Coastguard Worker NineSurface9_ReleaseDC( struct NineSurface9 *This,
160*61046927SAndroid Build Coastguard Worker                         HDC hdc );
161*61046927SAndroid Build Coastguard Worker 
162*61046927SAndroid Build Coastguard Worker #endif /* _NINE_SURFACE9_H_ */
163