#include "glxclient.h"
#include <dlfcn.h>
#include "dri_common.h"
-
-struct drisw_display
-{
- __GLXDRIdisplay base;
-};
-
-struct drisw_context
-{
- struct glx_context base;
- __DRIcontext *driContext;
-
-};
-
-struct drisw_screen
-{
- struct glx_screen base;
-
- __DRIscreen *driScreen;
- __GLXDRIscreen vtable;
- const __DRIcoreExtension *core;
- const __DRIswrastExtension *swrast;
- const __DRItexBufferExtension *texBuffer;
- const __DRIcopySubBufferExtension *copySubBuffer;
-
- const __DRIconfig **driver_configs;
-
- void *driver;
-};
-
-struct drisw_drawable
-{
- __GLXDRIdrawable base;
-
- GC gc;
- GC swapgc;
-
- __DRIdrawable *driDrawable;
- XVisualInfo *visinfo;
- XImage *ximage;
-};
+#include "drisw_priv.h"
static Bool
XCreateDrawable(struct drisw_drawable * pdp,
}
static const __DRIswrastLoaderExtension swrastLoaderExtension = {
- {__DRI_SWRAST_LOADER, __DRI_SWRAST_LOADER_VERSION},
- swrastGetDrawableInfo,
- swrastPutImage,
- swrastGetImage,
- swrastPutImage2,
+ .base = {__DRI_SWRAST_LOADER, 2 },
+
+ .getDrawableInfo = swrastGetDrawableInfo,
+ .putImage = swrastPutImage,
+ .getImage = swrastGetImage,
+ .putImage2 = swrastPutImage2,
};
static const __DRIextension *loader_extensions[] = {
static void
drisw_release_tex_image(Display * dpy, GLXDrawable drawable, int buffer)
{
-#if __DRI_TEX_BUFFER_VERSION >= 3
struct glx_context *gc = __glXGetCurrentContext();
- struct dri2_context *pcp = (struct dri2_context *) gc;
+ struct drisw_context *pcp = (struct drisw_context *) gc;
__GLXDRIdrawable *base = GetGLXDRIDrawable(dpy, drawable);
struct glx_display *dpyPriv = __glXInitialize(dpy);
- struct dri2_drawable *pdraw = (struct dri2_drawable *) base;
- struct dri2_screen *psc;
+ struct drisw_drawable *pdraw = (struct drisw_drawable *) base;
+ struct drisw_screen *psc;
- if (pdraw != NULL) {
- psc = (struct dri2_screen *) base->psc;
+ if (dpyPriv != NULL && pdraw != NULL) {
+ psc = (struct drisw_screen *) base->psc;
if (!psc->texBuffer)
return;
pdraw->driDrawable);
}
}
-#endif
}
static const struct glx_context_vtable drisw_context_vtable = {
- drisw_destroy_context,
- drisw_bind_context,
- drisw_unbind_context,
- NULL,
- NULL,
- DRI_glXUseXFont,
- drisw_bind_tex_image,
- drisw_release_tex_image,
- NULL, /* get_proc_address */
+ .destroy = drisw_destroy_context,
+ .bind = drisw_bind_context,
+ .unbind = drisw_unbind_context,
+ .wait_gl = NULL,
+ .wait_x = NULL,
+ .use_x_font = DRI_glXUseXFont,
+ .bind_tex_image = drisw_bind_tex_image,
+ .release_tex_image = drisw_release_tex_image,
+ .get_proc_address = NULL,
};
static struct glx_context *
psc->driScreen = NULL;
if (psc->driver)
dlclose(psc->driver);
+ free(psc);
}
#define SWRAST_DRIVER_NAME "swrast"
}
static const struct glx_screen_vtable drisw_screen_vtable = {
- drisw_create_context,
- drisw_create_context_attribs
+ .create_context = drisw_create_context,
+ .create_context_attribs = drisw_create_context_attribs,
+ .query_renderer_integer = NULL,
+ .query_renderer_string = NULL,
};
static void
configs = driConvertConfigs(psc->core, psc->base.configs, driver_configs);
visuals = driConvertConfigs(psc->core, psc->base.visuals, driver_configs);
- if (!configs || !visuals)
+ if (!configs || !visuals) {
+ ErrorMessageF("No matching fbConfigs or visuals found\n");
goto handle_error;
+ }
glx_config_destroy_list(psc->base.configs);
psc->base.configs = configs;