X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Finclude%2Fstate_tracker%2Fst_api.h;h=44d6b474f8f34aaa9bcaf024b89cc64bc9783486;hb=faccbaf3faf9a7cdcda3e4032fafd0f6064459bd;hp=06abfc565078656f87686b8ad4f9d0911188a46d;hpb=ecd6fce2611e88ff8468a354cff8eda39f260a31;p=mesa.git diff --git a/src/gallium/include/state_tracker/st_api.h b/src/gallium/include/state_tracker/st_api.h index 06abfc56507..44d6b474f8f 100644 --- a/src/gallium/include/state_tracker/st_api.h +++ b/src/gallium/include/state_tracker/st_api.h @@ -90,6 +90,8 @@ enum st_api_feature #define ST_CONTEXT_FLAG_FORWARD_COMPATIBLE (1 << 1) #define ST_CONTEXT_FLAG_ROBUST_ACCESS (1 << 2) #define ST_CONTEXT_FLAG_RESET_NOTIFICATION_ENABLED (1 << 3) +#define ST_CONTEXT_FLAG_NO_ERROR (1 << 4) +#define ST_CONTEXT_FLAG_RELEASE_NONE (1 << 5) /** * Reasons that context creation might fail. @@ -139,27 +141,13 @@ enum st_attachment_type { #define ST_ATTACHMENT_ACCUM_MASK (1 << ST_ATTACHMENT_ACCUM) #define ST_ATTACHMENT_SAMPLE_MASK (1 << ST_ATTACHMENT_SAMPLE) -/** - * Enumerations of state tracker context resources. - */ -enum st_context_resource_type { - ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_2D, - ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_3D, - ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_POSITIVE_X, - ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_NEGATIVE_X, - ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_POSITIVE_Y, - ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_NEGATIVE_Y, - ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_POSITIVE_Z, - ST_CONTEXT_RESOURCE_OPENGL_TEXTURE_CUBE_MAP_NEGATIVE_Z, - ST_CONTEXT_RESOURCE_OPENGL_RENDERBUFFER, - ST_CONTEXT_RESOURCE_OPENVG_PARENT_IMAGE -}; - /** * Flush flags. */ #define ST_FLUSH_FRONT (1 << 0) #define ST_FLUSH_END_OF_FRAME (1 << 1) +#define ST_FLUSH_WAIT (1 << 2) +#define ST_FLUSH_FENCE_FD (1 << 3) /** * Value to st_manager->get_param function. @@ -178,19 +166,7 @@ enum st_manager_param { struct pipe_context; struct pipe_resource; struct pipe_fence_handle; - -/** - * Used in st_context_iface->get_resource_for_egl_image. - */ -struct st_context_resource -{ - /* these fields are filled in by the caller */ - enum st_context_resource_type type; - void *resource; - - /* this is owned by the caller */ - struct pipe_resource *texture; -}; +struct util_queue_monitoring; /** * Used in st_manager_iface->get_egl_image. @@ -213,7 +189,7 @@ struct st_egl_image struct st_visual { /** - * Available buffers. Tested with ST_FRAMEBUFFER_*_MASK. + * Available buffers. Bitfield of ST_ATTACHMENT_*_MASK bits. */ unsigned buffer_mask; @@ -243,9 +219,13 @@ struct st_config_options boolean disable_shader_bit_encoding; boolean force_glsl_extensions_warn; unsigned force_glsl_version; - boolean force_s3tc_enable; boolean allow_glsl_extension_directive_midshader; + boolean allow_glsl_builtin_variable_redeclaration; + boolean allow_higher_compat_version; boolean glsl_zero_init; + boolean force_glsl_abs_sqrt; + boolean allow_glsl_cross_stage_interpolation_mismatch; + unsigned char config_options_sha1[20]; }; /** @@ -277,6 +257,7 @@ struct st_context_attribs }; struct st_context_iface; +struct st_manager; /** * Represent a windowing system drawable. @@ -304,6 +285,16 @@ struct st_framebuffer_iface */ int32_t stamp; + /** + * Identifier that uniquely identifies the framebuffer interface object. + */ + uint32_t ID; + + /** + * The state tracker manager that manages this object. + */ + struct st_manager *state_manager; + /** * Available for the state tracker manager to use. */ @@ -348,6 +339,8 @@ struct st_framebuffer_iface const enum st_attachment_type *statts, unsigned count, struct pipe_resource **out); + boolean (*flush_swapbuffers) (struct st_context_iface *stctx, + struct st_framebuffer_iface *stfbi); }; /** @@ -363,6 +356,11 @@ struct st_context_iface void *st_context_private; void *st_manager_private; + /** + * The state tracker manager that manages this object. + */ + struct st_manager *state_manager; + /** * The CSO context associated with this context in case we need to draw * something before swap buffers. @@ -408,12 +406,17 @@ struct st_context_iface struct st_context_iface *stsrci); /** - * Look up and return the info of a resource for EGLImage. - * - * This function is optional. + * Start the thread if the API has a worker thread. + * Called after the context has been created and fully initialized on both + * sides (e.g. st/mesa and st/dri). + */ + void (*start_thread)(struct st_context_iface *stctxi); + + /** + * If the API is multithreaded, wait for all queued commands to complete. + * Called from the main thread. */ - boolean (*get_resource_for_egl_image)(struct st_context_iface *stctxi, - struct st_context_resource *stres); + void (*thread_finish)(struct st_context_iface *stctxi); }; @@ -451,6 +454,23 @@ struct st_manager */ int (*get_param)(struct st_manager *smapi, enum st_manager_param param); + + /** + * Call the loader function setBackgroundContext. Called from the worker + * thread. + */ + void (*set_background_context)(struct st_context_iface *stctxi, + struct util_queue_monitoring *queue_info); + + /** + * Destroy any private data used by the state tracker manager. + */ + void (*destroy)(struct st_manager *smapi); + + /** + * Available for the state tracker manager to use. + */ + void *st_manager_private; }; /** @@ -520,6 +540,13 @@ struct st_api * Get the currently bound context in the calling thread. */ struct st_context_iface *(*get_current)(struct st_api *stapi); + + /** + * Notify the st manager the framebuffer interface object + * is no longer valid. + */ + void (*destroy_drawable)(struct st_api *stapi, + struct st_framebuffer_iface *stfbi); }; /**