X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fstate_trackers%2Fdri%2Fdri_screen.h;h=85372cb97c889f76a4c178668edcd61a91e27895;hb=6e749a6b2b9c45829963553cedda64b4a73afe14;hp=03387a0e81361eb1729ed85aed73caa91a40a3f4;hpb=ae44b92f61b78c9991060a8dd7fa7327d428c138;p=mesa.git diff --git a/src/gallium/state_trackers/dri/dri_screen.h b/src/gallium/state_trackers/dri/dri_screen.h index 03387a0e813..85372cb97c8 100644 --- a/src/gallium/state_trackers/dri/dri_screen.h +++ b/src/gallium/state_trackers/dri/dri_screen.h @@ -33,46 +33,126 @@ #define DRI_SCREEN_H #include "dri_util.h" -#include "xmlconfig.h" #include "pipe/p_compiler.h" +#include "pipe/p_context.h" +#include "pipe/p_state.h" +#include "state_tracker/st_api.h" +#include "state_tracker/opencl_interop.h" +#include "os/os_thread.h" +#include "postprocess/filters.h" -#include "state_tracker/dri1_api.h" +struct dri_context; +struct dri_drawable; +struct pipe_loader_device; struct dri_screen { + /* st_api */ + struct st_manager base; + struct st_api *st_api; + + /* on old libGL's invalidate doesn't get called as it should */ + boolean broken_invalidate; + /* dri */ __DRIscreen *sPriv; + unsigned default_throttle_frames; - /** - * Configuration cache with default values for all contexts - */ - driOptionCache optionCache; + struct st_config_options options; + + /* Which postprocessing filters are enabled. */ + unsigned pp_enabled[PP_FILTERS]; /* drm */ int fd; - drmLock *drmLock; + boolean can_share_buffer; + + struct pipe_loader_device *dev; /* gallium */ - struct drm_api *api; - struct pipe_winsys *pipe_winsys; - struct pipe_screen *pipe_screen; boolean d_depth_bits_last; boolean sd_depth_bits_last; + boolean auto_fake_front; + boolean has_reset_status_query; + enum pipe_texture_target target; + + boolean swrast_no_present; + + /* hooks filled in by dri2 & drisw */ + __DRIimage * (*lookup_egl_image)(struct dri_screen *ctx, void *handle); + + /* OpenCL interop */ + mtx_t opencl_func_mutex; + opencl_dri_event_add_ref_t opencl_dri_event_add_ref; + opencl_dri_event_release_t opencl_dri_event_release; + opencl_dri_event_wait_t opencl_dri_event_wait; + opencl_dri_event_get_fence_t opencl_dri_event_get_fence; }; /** cast wrapper */ -static INLINE struct dri_screen * +static inline struct dri_screen * dri_screen(__DRIscreen * sPriv) { - return (struct dri_screen *)sPriv->private; + return (struct dri_screen *)sPriv->driverPrivate; } -/*********************************************************************** - * dri_screen.c - */ +struct __DRIimageRec { + struct pipe_resource *texture; + unsigned level; + unsigned layer; + uint32_t dri_format; + uint32_t dri_fourcc; + uint32_t dri_components; + unsigned use; + + void *loader_private; + + /** + * Provided by EGL_EXT_image_dma_buf_import. + */ + enum __DRIYUVColorSpace yuv_color_space; + enum __DRISampleRange sample_range; + enum __DRIChromaSiting horizontal_siting; + enum __DRIChromaSiting vertical_siting; + +}; + +static inline boolean +dri_with_format(__DRIscreen * sPriv) +{ + const __DRIdri2LoaderExtension *loader = sPriv->dri2.loader; + + return loader + && (loader->base.version >= 3) + && (loader->getBuffersWithFormat != NULL); +} + +void +dri_fill_st_visual(struct st_visual *stvis, + const struct dri_screen *screen, + const struct gl_config *mode); + +void +dri_init_options(struct dri_screen *screen); + +const __DRIconfig ** +dri_init_screen_helper(struct dri_screen *screen, + struct pipe_screen *pscreen); + +void +dri_destroy_screen_helper(struct dri_screen * screen); + +void +dri_destroy_screen(__DRIscreen * sPriv); + +extern const struct __DriverAPIRec dri_kms_driver_api; -extern struct dri1_api *__dri1_api_hooks; +extern const struct __DriverAPIRec galliumdrm_driver_api; +extern const __DRIextension *galliumdrm_driver_extensions[]; +extern const struct __DriverAPIRec galliumsw_driver_api; +extern const __DRIextension *galliumsw_driver_extensions[]; +extern const __DRIconfigOptionsExtension gallium_config_options; #endif