diff options
Diffstat (limited to 'drivers/mxc/amd-gpu/include/gsl_drawctxt.h')
-rw-r--r-- | drivers/mxc/amd-gpu/include/gsl_drawctxt.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/drivers/mxc/amd-gpu/include/gsl_drawctxt.h b/drivers/mxc/amd-gpu/include/gsl_drawctxt.h new file mode 100644 index 000000000000..15b8097828af --- /dev/null +++ b/drivers/mxc/amd-gpu/include/gsl_drawctxt.h @@ -0,0 +1,110 @@ +/* Copyright (c) 2002,2007-2009, Code Aurora Forum. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Code Aurora nor + * the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef __GSL_DRAWCTXT_H +#define __GSL_DRAWCTXT_H + +////////////////////////////////////////////////////////////////////////////// +// Flags +////////////////////////////////////////////////////////////////////////////// + +#define CTXT_FLAGS_NOT_IN_USE 0x00000000 +#define CTXT_FLAGS_IN_USE 0x00000001 + +#define CTXT_FLAGS_STATE_SHADOW 0x00000010 // state shadow memory allocated + +#define CTXT_FLAGS_GMEM_SHADOW 0x00000100 // gmem shadow memory allocated +#define CTXT_FLAGS_GMEM_SAVE 0x00000200 // gmem must be copied to shadow +#define CTXT_FLAGS_GMEM_RESTORE 0x00000400 // gmem can be restored from shadow + +#define CTXT_FLAGS_SHADER_SAVE 0x00002000 // shader must be copied to shadow +#define CTXT_FLAGS_SHADER_RESTORE 0x00004000 // shader can be restored from shadow + +////////////////////////////////////////////////////////////////////////////// +// types +////////////////////////////////////////////////////////////////////////////// + +// ------------ +// draw context +// ------------ + +typedef struct _gmem_shadow_t +{ + gsl_memdesc_t gmemshadow; // Shadow buffer address + + // 256 KB GMEM surface = 4 bytes-per-pixel x 256 pixels/row x 256 rows. + // width & height must be a multiples of 32, in case tiled textures are used. + unsigned int size; // Size of surface used to store GMEM + unsigned int width; // Width of surface used to store GMEM + unsigned int height; // Height of surface used to store GMEM + unsigned int pitch; // Pitch of surface used to store GMEM + int offset; + unsigned int offset_x; + unsigned int offset_y; + unsigned int gmem_offset_x; + unsigned int gmem_offset_y; + + unsigned int* gmem_save_commands; + unsigned int* gmem_restore_commands; + unsigned int gmem_save[3]; + unsigned int gmem_restore[3]; + + gsl_memdesc_t quad_vertices; + gsl_memdesc_t quad_texcoords; +} gmem_shadow_t; + +#define GSL_MAX_GMEM_SHADOW_BUFFERS 2 + +typedef struct _gsl_drawctxt_t { + unsigned int pid; + gsl_flags_t flags; + gsl_context_type_t type; + gsl_memdesc_t gpustate; + + unsigned int reg_save[3]; + unsigned int reg_restore[3]; + unsigned int shader_save[3]; + unsigned int shader_fixup[3]; + unsigned int shader_restore[3]; + unsigned int chicken_restore[3]; + gmem_shadow_t context_gmem_shadow; // Information of the GMEM shadow that is created in context create + gmem_shadow_t user_gmem_shadow[GSL_MAX_GMEM_SHADOW_BUFFERS]; // User defined GMEM shadow buffers +} gsl_drawctxt_t; + + +////////////////////////////////////////////////////////////////////////////// +// prototypes +////////////////////////////////////////////////////////////////////////////// +int kgsl_drawctxt_init(gsl_device_t *device); +int kgsl_drawctxt_close(gsl_device_t *device); +int kgsl_drawctxt_destroyall(gsl_device_t *device); +void kgsl_drawctxt_switch(gsl_device_t *device, gsl_drawctxt_t *drawctxt, gsl_flags_t flags); +int kgsl_drawctxt_create(gsl_device_t* device, gsl_context_type_t type, unsigned int *drawctxt_id, gsl_flags_t flags); +int kgsl_drawctxt_destroy(gsl_device_t* device, unsigned int drawctxt_id); + +#endif // __GSL_DRAWCTXT_H |