diff options
Diffstat (limited to 'src/gallium/state_trackers/dri/drm')
-rw-r--r-- | src/gallium/state_trackers/dri/drm/Makefile.am | 46 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/drm/Makefile.sources | 5 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/drm/SConscript | 24 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/drm/dri2.c | 1354 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/drm/dri2_buffer.h | 22 | ||||
l--------- | src/gallium/state_trackers/dri/drm/dri_context.c | 1 | ||||
l--------- | src/gallium/state_trackers/dri/drm/dri_drawable.c | 1 | ||||
l--------- | src/gallium/state_trackers/dri/drm/dri_screen.c | 1 |
8 files changed, 0 insertions, 1454 deletions
diff --git a/src/gallium/state_trackers/dri/drm/Makefile.am b/src/gallium/state_trackers/dri/drm/Makefile.am deleted file mode 100644 index 8052e6bf750..00000000000 --- a/src/gallium/state_trackers/dri/drm/Makefile.am +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright © 2012 Intel Corporation -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# the rights to use, copy, modify, merge, publish, distribute, sublicense, -# and/or sell copies of the Software, and to permit persons to whom the -# Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice (including the next -# paragraph) shall be included in all copies or substantial portions of the -# Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -# DEALINGS IN THE SOFTWARE. - -include Makefile.sources -include $(top_srcdir)/src/gallium/Automake.inc - -AM_CPPFLAGS = \ - $(GALLIUM_PIPE_LOADER_DEFINES) \ - -DPIPE_SEARCH_DIR=\"$(libdir)/gallium-pipe\" \ - -I$(top_srcdir)/include \ - -I$(top_srcdir)/src/mapi \ - -I$(top_srcdir)/src/mesa \ - -I$(top_srcdir)/src/gallium/state_trackers/dri/common \ - -I$(top_srcdir)/src/mesa/drivers/dri/common \ - -I$(top_builddir)/src/mesa/drivers/dri/common \ - $(GALLIUM_CFLAGS) \ - $(LIBDRM_CFLAGS) \ - $(VISIBILITY_CFLAGS) - -if HAVE_GALLIUM_STATIC_TARGETS -AM_CPPFLAGS += \ - -DGALLIUM_STATIC_TARGETS=1 -endif # HAVE_GALLIUM_STATIC_TARGETS - -noinst_LTLIBRARIES = libdridrm.la - -libdridrm_la_SOURCES = $(C_SOURCES) diff --git a/src/gallium/state_trackers/dri/drm/Makefile.sources b/src/gallium/state_trackers/dri/drm/Makefile.sources deleted file mode 100644 index b9b93a24e8a..00000000000 --- a/src/gallium/state_trackers/dri/drm/Makefile.sources +++ /dev/null @@ -1,5 +0,0 @@ -C_SOURCES := \ - dri_context.c \ - dri_screen.c \ - dri_drawable.c \ - dri2.c diff --git a/src/gallium/state_trackers/dri/drm/SConscript b/src/gallium/state_trackers/dri/drm/SConscript deleted file mode 100644 index 761603942c3..00000000000 --- a/src/gallium/state_trackers/dri/drm/SConscript +++ /dev/null @@ -1,24 +0,0 @@ -####################################################################### -# SConscript for dri state_tracker - -Import('*') - -env = env.Clone() - -env.PkgUseModules(['DRM']) - -env.Append(CPPPATH = [ - '#/src/mapi', - '#/src/mesa', - '#/src/gallium/state_trackers/dri/common', - '#/src/mesa/drivers/dri/common', - xmlpool_options.dir.dir, # Dir to generated xmlpool/options.h -]) - -env.Append(CPPDEFINES = [('GALLIUM_STATIC_TARGETS', '1')]) - -st_dri = env.ConvenienceLibrary( - target = 'st_dri', - source = env.ParseSourceList('Makefile.sources', 'C_SOURCES') -) -Export('st_dri') diff --git a/src/gallium/state_trackers/dri/drm/dri2.c b/src/gallium/state_trackers/dri/drm/dri2.c deleted file mode 100644 index f6a4fe679f3..00000000000 --- a/src/gallium/state_trackers/dri/drm/dri2.c +++ /dev/null @@ -1,1354 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright 2009, VMware, Inc. - * All Rights Reserved. - * Copyright (C) 2010 LunarG Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * Authors: - * Keith Whitwell <keithw@vmware.com> Jakob Bornecrantz - * <wallbraker@gmail.com> Chia-I Wu <olv@lunarg.com> - */ - -#include <xf86drm.h> -#include "util/u_memory.h" -#include "util/u_inlines.h" -#include "util/u_format.h" -#include "util/u_debug.h" -#include "state_tracker/drm_driver.h" -#include "state_tracker/st_texture.h" -#include "state_tracker/st_context.h" -#include "pipe-loader/pipe_loader.h" -#include "main/texobj.h" - -#include "dri_screen.h" -#include "dri_context.h" -#include "dri_drawable.h" -#include "dri2_buffer.h" - -static int convert_fourcc(int format, int *dri_components_p) -{ - int dri_components; - switch(format) { - case __DRI_IMAGE_FOURCC_RGB565: - format = __DRI_IMAGE_FORMAT_RGB565; - dri_components = __DRI_IMAGE_COMPONENTS_RGB; - break; - case __DRI_IMAGE_FOURCC_ARGB8888: - format = __DRI_IMAGE_FORMAT_ARGB8888; - dri_components = __DRI_IMAGE_COMPONENTS_RGBA; - break; - case __DRI_IMAGE_FOURCC_XRGB8888: - format = __DRI_IMAGE_FORMAT_XRGB8888; - dri_components = __DRI_IMAGE_COMPONENTS_RGB; - break; - case __DRI_IMAGE_FOURCC_ABGR8888: - format = __DRI_IMAGE_FORMAT_ABGR8888; - dri_components = __DRI_IMAGE_COMPONENTS_RGBA; - break; - case __DRI_IMAGE_FOURCC_XBGR8888: - format = __DRI_IMAGE_FORMAT_XBGR8888; - dri_components = __DRI_IMAGE_COMPONENTS_RGB; - break; - default: - return -1; - } - *dri_components_p = dri_components; - return format; -} - -/** - * DRI2 flush extension. - */ -static void -dri2_flush_drawable(__DRIdrawable *dPriv) -{ - dri_flush(dPriv->driContextPriv, dPriv, __DRI2_FLUSH_DRAWABLE, -1); -} - -static void -dri2_invalidate_drawable(__DRIdrawable *dPriv) -{ - struct dri_drawable *drawable = dri_drawable(dPriv); - - dri2InvalidateDrawable(dPriv); - drawable->dPriv->lastStamp = drawable->dPriv->dri2.stamp; - - p_atomic_inc(&drawable->base.stamp); -} - -static const __DRI2flushExtension dri2FlushExtension = { - .base = { __DRI2_FLUSH, 4 }, - - .flush = dri2_flush_drawable, - .invalidate = dri2_invalidate_drawable, - .flush_with_flags = dri_flush, -}; - -/** - * Retrieve __DRIbuffer from the DRI loader. - */ -static __DRIbuffer * -dri2_drawable_get_buffers(struct dri_drawable *drawable, - const enum st_attachment_type *atts, - unsigned *count) -{ - __DRIdrawable *dri_drawable = drawable->dPriv; - const __DRIdri2LoaderExtension *loader = drawable->sPriv->dri2.loader; - boolean with_format; - __DRIbuffer *buffers; - int num_buffers; - unsigned attachments[10]; - unsigned num_attachments, i; - - assert(loader); - with_format = dri_with_format(drawable->sPriv); - - num_attachments = 0; - - /* for Xserver 1.6.0 (DRI2 version 1) we always need to ask for the front */ - if (!with_format) - attachments[num_attachments++] = __DRI_BUFFER_FRONT_LEFT; - - for (i = 0; i < *count; i++) { - enum pipe_format format; - unsigned bind; - int att, depth; - - dri_drawable_get_format(drawable, atts[i], &format, &bind); - if (format == PIPE_FORMAT_NONE) - continue; - - switch (atts[i]) { - case ST_ATTACHMENT_FRONT_LEFT: - /* already added */ - if (!with_format) - continue; - att = __DRI_BUFFER_FRONT_LEFT; - break; - case ST_ATTACHMENT_BACK_LEFT: - att = __DRI_BUFFER_BACK_LEFT; - break; - case ST_ATTACHMENT_FRONT_RIGHT: - att = __DRI_BUFFER_FRONT_RIGHT; - break; - case ST_ATTACHMENT_BACK_RIGHT: - att = __DRI_BUFFER_BACK_RIGHT; - break; - default: - continue; - } - - /* - * In this switch statement we must support all formats that - * may occur as the stvis->color_format. - */ - switch(format) { - case PIPE_FORMAT_B8G8R8A8_UNORM: - depth = 32; - break; - case PIPE_FORMAT_B8G8R8X8_UNORM: - depth = 24; - break; - case PIPE_FORMAT_B5G6R5_UNORM: - depth = 16; - break; - default: - depth = util_format_get_blocksizebits(format); - assert(!"Unexpected format in dri2_drawable_get_buffers()"); - } - - attachments[num_attachments++] = att; - if (with_format) { - attachments[num_attachments++] = depth; - } - } - - if (with_format) { - num_attachments /= 2; - buffers = loader->getBuffersWithFormat(dri_drawable, - &dri_drawable->w, &dri_drawable->h, - attachments, num_attachments, - &num_buffers, dri_drawable->loaderPrivate); - } - else { - buffers = loader->getBuffers(dri_drawable, - &dri_drawable->w, &dri_drawable->h, - attachments, num_attachments, - &num_buffers, dri_drawable->loaderPrivate); - } - - if (buffers) - *count = num_buffers; - - return buffers; -} - -static bool -dri_image_drawable_get_buffers(struct dri_drawable *drawable, - struct __DRIimageList *images, - const enum st_attachment_type *statts, - unsigned statts_count) -{ - __DRIdrawable *dPriv = drawable->dPriv; - __DRIscreen *sPriv = drawable->sPriv; - unsigned int image_format = __DRI_IMAGE_FORMAT_NONE; - enum pipe_format pf; - uint32_t buffer_mask = 0; - unsigned i, bind; - - for (i = 0; i < statts_count; i++) { - dri_drawable_get_format(drawable, statts[i], &pf, &bind); - if (pf == PIPE_FORMAT_NONE) - continue; - - switch (statts[i]) { - case ST_ATTACHMENT_FRONT_LEFT: - buffer_mask |= __DRI_IMAGE_BUFFER_FRONT; - break; - case ST_ATTACHMENT_BACK_LEFT: - buffer_mask |= __DRI_IMAGE_BUFFER_BACK; - break; - default: - continue; - } - - switch (pf) { - case PIPE_FORMAT_B5G6R5_UNORM: - image_format = __DRI_IMAGE_FORMAT_RGB565; - break; - case PIPE_FORMAT_B8G8R8X8_UNORM: - image_format = __DRI_IMAGE_FORMAT_XRGB8888; - break; - case PIPE_FORMAT_B8G8R8A8_UNORM: - image_format = __DRI_IMAGE_FORMAT_ARGB8888; - break; - case PIPE_FORMAT_R8G8B8A8_UNORM: - image_format = __DRI_IMAGE_FORMAT_ABGR8888; - break; - default: - image_format = __DRI_IMAGE_FORMAT_NONE; - break; - } - } - - return (*sPriv->image.loader->getBuffers) (dPriv, image_format, - (uint32_t *) &drawable->base.stamp, - dPriv->loaderPrivate, buffer_mask, - images); -} - -static __DRIbuffer * -dri2_allocate_buffer(__DRIscreen *sPriv, - unsigned attachment, unsigned format, - int width, int height) -{ - struct dri_screen *screen = dri_screen(sPriv); - struct dri2_buffer *buffer; - struct pipe_resource templ; - enum pipe_format pf; - unsigned bind = 0; - struct winsys_handle whandle; - - switch (attachment) { - case __DRI_BUFFER_FRONT_LEFT: - case __DRI_BUFFER_FAKE_FRONT_LEFT: - bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW; - break; - case __DRI_BUFFER_BACK_LEFT: - bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW; - break; - case __DRI_BUFFER_DEPTH: - case __DRI_BUFFER_DEPTH_STENCIL: - case __DRI_BUFFER_STENCIL: - bind = PIPE_BIND_DEPTH_STENCIL; /* XXX sampler? */ - break; - } - - /* because we get the handle and stride */ - bind |= PIPE_BIND_SHARED; - - switch (format) { - case 32: - pf = PIPE_FORMAT_B8G8R8A8_UNORM; - break; - case 24: - pf = PIPE_FORMAT_B8G8R8X8_UNORM; - break; - case 16: - pf = PIPE_FORMAT_Z16_UNORM; - break; - default: - return NULL; - } - - buffer = CALLOC_STRUCT(dri2_buffer); - if (!buffer) - return NULL; - - memset(&templ, 0, sizeof(templ)); - templ.bind = bind; - templ.format = pf; - templ.target = PIPE_TEXTURE_2D; - templ.last_level = 0; - templ.width0 = width; - templ.height0 = height; - templ.depth0 = 1; - templ.array_size = 1; - - buffer->resource = - screen->base.screen->resource_create(screen->base.screen, &templ); - if (!buffer->resource) { - FREE(buffer); - return NULL; - } - - memset(&whandle, 0, sizeof(whandle)); - whandle.type = DRM_API_HANDLE_TYPE_SHARED; - screen->base.screen->resource_get_handle(screen->base.screen, - buffer->resource, &whandle); - - buffer->base.attachment = attachment; - buffer->base.name = whandle.handle; - buffer->base.cpp = util_format_get_blocksize(pf); - buffer->base.pitch = whandle.stride; - - return &buffer->base; -} - -static void -dri2_release_buffer(__DRIscreen *sPriv, __DRIbuffer *bPriv) -{ - struct dri2_buffer *buffer = dri2_buffer(bPriv); - - pipe_resource_reference(&buffer->resource, NULL); - FREE(buffer); -} - -/* - * Backend functions for st_framebuffer interface. - */ - -static void -dri2_allocate_textures(struct dri_context *ctx, - struct dri_drawable *drawable, - const enum st_attachment_type *statts, - unsigned statts_count) -{ - __DRIscreen *sPriv = drawable->sPriv; - __DRIdrawable *dri_drawable = drawable->dPriv; - struct dri_screen *screen = dri_screen(sPriv); - struct pipe_resource templ; - boolean alloc_depthstencil = FALSE; - unsigned i, j, bind; - const __DRIimageLoaderExtension *image = sPriv->image.loader; - /* Image specific variables */ - struct __DRIimageList images; - /* Dri2 specific variables */ - __DRIbuffer *buffers; - struct winsys_handle whandle; - unsigned num_buffers = statts_count; - - /* First get the buffers from the loader */ - if (image) { - if (!dri_image_drawable_get_buffers(drawable, &images, - statts, statts_count)) - return; - } - else { - buffers = dri2_drawable_get_buffers(drawable, statts, &num_buffers); - if (!buffers || (drawable->old_num == num_buffers && - drawable->old_w == dri_drawable->w && - drawable->old_h == dri_drawable->h && - memcmp(drawable->old, buffers, - sizeof(__DRIbuffer) * num_buffers) == 0)) - return; - } - - /* Second clean useless resources*/ - - /* See if we need a depth-stencil buffer. */ - for (i = 0; i < statts_count; i++) { - if (statts[i] == ST_ATTACHMENT_DEPTH_STENCIL) { - alloc_depthstencil = TRUE; - break; - } - } - - /* Delete the resources we won't need. */ - for (i = 0; i < ST_ATTACHMENT_COUNT; i++) { - /* Don't delete the depth-stencil buffer, we can reuse it. */ - if (i == ST_ATTACHMENT_DEPTH_STENCIL && alloc_depthstencil) - continue; - - /* Flush the texture before unreferencing, so that other clients can - * see what the driver has rendered. - */ - if (i != ST_ATTACHMENT_DEPTH_STENCIL && drawable->textures[i]) { - struct pipe_context *pipe = ctx->st->pipe; - pipe->flush_resource(pipe, drawable->textures[i]); - } - - pipe_resource_reference(&drawable->textures[i], NULL); - } - - if (drawable->stvis.samples > 1) { - for (i = 0; i < ST_ATTACHMENT_COUNT; i++) { - boolean del = TRUE; - - /* Don't delete MSAA resources for the attachments which are enabled, - * we can reuse them. */ - for (j = 0; j < statts_count; j++) { - if (i == statts[j]) { - del = FALSE; - break; - } - } - - if (del) { - pipe_resource_reference(&drawable->msaa_textures[i], NULL); - } - } - } - - /* Third use the buffers retrieved to fill the drawable info */ - - memset(&templ, 0, sizeof(templ)); - templ.target = screen->target; - templ.last_level = 0; - templ.depth0 = 1; - templ.array_size = 1; - - if (image) { - if (images.image_mask & __DRI_IMAGE_BUFFER_FRONT) { - struct pipe_resource **buf = - &drawable->textures[ST_ATTACHMENT_FRONT_LEFT]; - struct pipe_resource *texture = images.front->texture; - - dri_drawable->w = texture->width0; - dri_drawable->h = texture->height0; - - pipe_resource_reference(buf, texture); - } - - if (images.image_mask & __DRI_IMAGE_BUFFER_BACK) { - struct pipe_resource **buf = - &drawable->textures[ST_ATTACHMENT_BACK_LEFT]; - struct pipe_resource *texture = images.back->texture; - - dri_drawable->w = texture->width0; - dri_drawable->h = texture->height0; - - pipe_resource_reference(buf, texture); - } - - /* Note: if there is both a back and a front buffer, - * then they have the same size. - */ - templ.width0 = dri_drawable->w; - templ.height0 = dri_drawable->h; - } - else { - memset(&whandle, 0, sizeof(whandle)); - - /* Process DRI-provided buffers and get pipe_resources. */ - for (i = 0; i < num_buffers; i++) { - __DRIbuffer *buf = &buffers[i]; - enum st_attachment_type statt; - enum pipe_format format; - - switch (buf->attachment) { - case __DRI_BUFFER_FRONT_LEFT: - if (!screen->auto_fake_front) { - continue; /* invalid attachment */ - } - /* fallthrough */ - case __DRI_BUFFER_FAKE_FRONT_LEFT: - statt = ST_ATTACHMENT_FRONT_LEFT; - break; - case __DRI_BUFFER_BACK_LEFT: - statt = ST_ATTACHMENT_BACK_LEFT; - break; - default: - continue; /* invalid attachment */ - } - - dri_drawable_get_format(drawable, statt, &format, &bind); - if (format == PIPE_FORMAT_NONE) - continue; - - /* dri2_drawable_get_buffers has already filled dri_drawable->w - * and dri_drawable->h */ - templ.width0 = dri_drawable->w; - templ.height0 = dri_drawable->h; - templ.format = format; - templ.bind = bind; - whandle.type = DRM_API_HANDLE_TYPE_SHARED; - whandle.handle = buf->name; - whandle.stride = buf->pitch; - - drawable->textures[statt] = - screen->base.screen->resource_from_handle(screen->base.screen, - &templ, &whandle); - assert(drawable->textures[statt]); - } - } - - /* Allocate private MSAA colorbuffers. */ - if (drawable->stvis.samples > 1) { - for (i = 0; i < statts_count; i++) { - enum st_attachment_type statt = statts[i]; - - if (statt == ST_ATTACHMENT_DEPTH_STENCIL) - continue; - - if (drawable->textures[statt]) { - templ.format = drawable->textures[statt]->format; - templ.bind = drawable->textures[statt]->bind; - templ.nr_samples = drawable->stvis.samples; - - /* Try to reuse the resource. - * (the other resource parameters should be constant) - */ - if (!drawable->msaa_textures[statt] || - drawable->msaa_textures[statt]->width0 != templ.width0 || - drawable->msaa_textures[statt]->height0 != templ.height0) { - /* Allocate a new one. */ - pipe_resource_reference(&drawable->msaa_textures[statt], NULL); - - drawable->msaa_textures[statt] = - screen->base.screen->resource_create(screen->base.screen, - &templ); - assert(drawable->msaa_textures[statt]); - - /* If there are any MSAA resources, we should initialize them - * such that they contain the same data as the single-sample - * resources we just got from the X server. - * - * The reason for this is that the state tracker (and - * therefore the app) can access the MSAA resources only. - * The single-sample resources are not exposed - * to the state tracker. - * - */ - dri_pipe_blit(ctx->st->pipe, - drawable->msaa_textures[statt], - drawable->textures[statt]); - } - } - else { - pipe_resource_reference(&drawable->msaa_textures[statt], NULL); - } - } - } - - /* Allocate a private depth-stencil buffer. */ - if (alloc_depthstencil) { - enum st_attachment_type statt = ST_ATTACHMENT_DEPTH_STENCIL; - struct pipe_resource **zsbuf; - enum pipe_format format; - unsigned bind; - - dri_drawable_get_format(drawable, statt, &format, &bind); - - if (format) { - templ.format = format; - templ.bind = bind; - - if (drawable->stvis.samples > 1) { - templ.nr_samples = drawable->stvis.samples; - zsbuf = &drawable->msaa_textures[statt]; - } - else { - templ.nr_samples = 0; - zsbuf = &drawable->textures[statt]; - } - - /* Try to reuse the resource. - * (the other resource parameters should be constant) - */ - if (!*zsbuf || - (*zsbuf)->width0 != templ.width0 || - (*zsbuf)->height0 != templ.height0) { - /* Allocate a new one. */ - pipe_resource_reference(zsbuf, NULL); - *zsbuf = screen->base.screen->resource_create(screen->base.screen, - &templ); - assert(*zsbuf); - } - } - else { - pipe_resource_reference(&drawable->msaa_textures[statt], NULL); - pipe_resource_reference(&drawable->textures[statt], NULL); - } - } - - /* For DRI2, we may get the same buffers again from the server. - * To prevent useless imports of gem names, drawable->old* is used - * to bypass the import if we get the same buffers. This doesn't apply - * to DRI3/Wayland, users of image.loader, since the buffer is managed - * by the client (no import), and the back buffer is going to change - * at every redraw. - */ - if (!image) { - drawable->old_num = num_buffers; - drawable->old_w = dri_drawable->w; - drawable->old_h = dri_drawable->h; - memcpy(drawable->old, buffers, sizeof(__DRIbuffer) * num_buffers); - } -} - -static void -dri2_flush_frontbuffer(struct dri_context *ctx, - struct dri_drawable *drawable, - enum st_attachment_type statt) -{ - __DRIdrawable *dri_drawable = drawable->dPriv; - const __DRIimageLoaderExtension *image = drawable->sPriv->image.loader; - const __DRIdri2LoaderExtension *loader = drawable->sPriv->dri2.loader; - struct pipe_context *pipe = ctx->st->pipe; - - if (statt != ST_ATTACHMENT_FRONT_LEFT) - return; - - if (drawable->stvis.samples > 1) { - /* Resolve the front buffer. */ - dri_pipe_blit(ctx->st->pipe, - drawable->textures[ST_ATTACHMENT_FRONT_LEFT], - drawable->msaa_textures[ST_ATTACHMENT_FRONT_LEFT]); - } - - if (drawable->textures[ST_ATTACHMENT_FRONT_LEFT]) { - pipe->flush_resource(pipe, drawable->textures[ST_ATTACHMENT_FRONT_LEFT]); - } - - pipe->flush(pipe, NULL, 0); - - if (image) { - image->flushFrontBuffer(dri_drawable, dri_drawable->loaderPrivate); - } - else if (loader->flushFrontBuffer) { - loader->flushFrontBuffer(dri_drawable, dri_drawable->loaderPrivate); - } -} - -static void -dri2_update_tex_buffer(struct dri_drawable *drawable, - struct dri_context *ctx, - struct pipe_resource *res) -{ - /* no-op */ -} - -static __DRIimage * -dri2_lookup_egl_image(struct dri_screen *screen, void *handle) -{ - const __DRIimageLookupExtension *loader = screen->sPriv->dri2.image; - __DRIimage *img; - - if (!loader->lookupEGLImage) - return NULL; - - img = loader->lookupEGLImage(screen->sPriv, - handle, screen->sPriv->loaderPrivate); - - return img; -} - -static __DRIimage * -dri2_create_image_from_winsys(__DRIscreen *_screen, - int width, int height, int format, - struct winsys_handle *whandle, int pitch, - void *loaderPrivate) -{ - struct dri_screen *screen = dri_screen(_screen); - __DRIimage *img; - struct pipe_resource templ; - unsigned tex_usage; - enum pipe_format pf; - - tex_usage = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW; - - switch (format) { - case __DRI_IMAGE_FORMAT_RGB565: - pf = PIPE_FORMAT_B5G6R5_UNORM; - break; - case __DRI_IMAGE_FORMAT_XRGB8888: - pf = PIPE_FORMAT_B8G8R8X8_UNORM; - break; - case __DRI_IMAGE_FORMAT_ARGB8888: - pf = PIPE_FORMAT_B8G8R8A8_UNORM; - break; - case __DRI_IMAGE_FORMAT_ABGR8888: - pf = PIPE_FORMAT_R8G8B8A8_UNORM; - break; - default: - pf = PIPE_FORMAT_NONE; - break; - } - if (pf == PIPE_FORMAT_NONE) - return NULL; - - img = CALLOC_STRUCT(__DRIimageRec); - if (!img) - return NULL; - - memset(&templ, 0, sizeof(templ)); - templ.bind = tex_usage; - templ.format = pf; - templ.target = screen->target; - templ.last_level = 0; - templ.width0 = width; - templ.height0 = height; - templ.depth0 = 1; - templ.array_size = 1; - - whandle->stride = pitch * util_format_get_blocksize(pf); - - img->texture = screen->base.screen->resource_from_handle(screen->base.screen, - &templ, whandle); - if (!img->texture) { - FREE(img); - return NULL; - } - - img->level = 0; - img->layer = 0; - img->dri_format = format; - img->loader_private = loaderPrivate; - - return img; -} - -static __DRIimage * -dri2_create_image_from_name(__DRIscreen *_screen, - int width, int height, int format, - int name, int pitch, void *loaderPrivate) -{ - struct winsys_handle whandle; - - memset(&whandle, 0, sizeof(whandle)); - whandle.type = DRM_API_HANDLE_TYPE_SHARED; - whandle.handle = name; - - return dri2_create_image_from_winsys(_screen, width, height, format, - &whandle, pitch, loaderPrivate); -} - -static __DRIimage * -dri2_create_image_from_fd(__DRIscreen *_screen, - int width, int height, int format, - int fd, int pitch, void *loaderPrivate) -{ - struct winsys_handle whandle; - - if (fd < 0) - return NULL; - - memset(&whandle, 0, sizeof(whandle)); - whandle.type = DRM_API_HANDLE_TYPE_FD; - whandle.handle = (unsigned)fd; - - return dri2_create_image_from_winsys(_screen, width, height, format, - &whandle, pitch, loaderPrivate); -} - -static __DRIimage * -dri2_create_image_from_renderbuffer(__DRIcontext *context, - int renderbuffer, void *loaderPrivate) -{ - struct dri_context *ctx = dri_context(context); - - if (!ctx->st->get_resource_for_egl_image) - return NULL; - - /* TODO */ - return NULL; -} - -static __DRIimage * -dri2_create_image(__DRIscreen *_screen, - int width, int height, int format, - unsigned int use, void *loaderPrivate) -{ - struct dri_screen *screen = dri_screen(_screen); - __DRIimage *img; - struct pipe_resource templ; - unsigned tex_usage; - enum pipe_format pf; - - tex_usage = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW; - if (use & __DRI_IMAGE_USE_SCANOUT) - tex_usage |= PIPE_BIND_SCANOUT; - if (use & __DRI_IMAGE_USE_SHARE) - tex_usage |= PIPE_BIND_SHARED; - if (use & __DRI_IMAGE_USE_LINEAR) - tex_usage |= PIPE_BIND_LINEAR; - if (use & __DRI_IMAGE_USE_CURSOR) { - if (width != 64 || height != 64) - return NULL; - tex_usage |= PIPE_BIND_CURSOR; - } - - switch (format) { - case __DRI_IMAGE_FORMAT_RGB565: - pf = PIPE_FORMAT_B5G6R5_UNORM; - break; - case __DRI_IMAGE_FORMAT_XRGB8888: - pf = PIPE_FORMAT_B8G8R8X8_UNORM; - break; - case __DRI_IMAGE_FORMAT_ARGB8888: - pf = PIPE_FORMAT_B8G8R8A8_UNORM; - break; - case __DRI_IMAGE_FORMAT_ABGR8888: - pf = PIPE_FORMAT_R8G8B8A8_UNORM; - break; - default: - pf = PIPE_FORMAT_NONE; - break; - } - if (pf == PIPE_FORMAT_NONE) - return NULL; - - img = CALLOC_STRUCT(__DRIimageRec); - if (!img) - return NULL; - - memset(&templ, 0, sizeof(templ)); - templ.bind = tex_usage; - templ.format = pf; - templ.target = PIPE_TEXTURE_2D; - templ.last_level = 0; - templ.width0 = width; - templ.height0 = height; - templ.depth0 = 1; - templ.array_size = 1; - - img->texture = screen->base.screen->resource_create(screen->base.screen, &templ); - if (!img->texture) { - FREE(img); - return NULL; - } - - img->level = 0; - img->layer = 0; - img->dri_format = format; - img->dri_components = 0; - - img->loader_private = loaderPrivate; - return img; -} - -static GLboolean -dri2_query_image(__DRIimage *image, int attrib, int *value) -{ - struct winsys_handle whandle; - memset(&whandle, 0, sizeof(whandle)); - - switch (attrib) { - case __DRI_IMAGE_ATTRIB_STRIDE: - whandle.type = DRM_API_HANDLE_TYPE_KMS; - image->texture->screen->resource_get_handle(image->texture->screen, - image->texture, &whandle); - *value = whandle.stride; - return GL_TRUE; - case __DRI_IMAGE_ATTRIB_HANDLE: - whandle.type = DRM_API_HANDLE_TYPE_KMS; - image->texture->screen->resource_get_handle(image->texture->screen, - image->texture, &whandle); - *value = whandle.handle; - return GL_TRUE; - case __DRI_IMAGE_ATTRIB_NAME: - whandle.type = DRM_API_HANDLE_TYPE_SHARED; - image->texture->screen->resource_get_handle(image->texture->screen, - image->texture, &whandle); - *value = whandle.handle; - return GL_TRUE; - case __DRI_IMAGE_ATTRIB_FD: - whandle.type= DRM_API_HANDLE_TYPE_FD; - image->texture->screen->resource_get_handle(image->texture->screen, - image->texture, &whandle); - *value = whandle.handle; - return GL_TRUE; - case __DRI_IMAGE_ATTRIB_FORMAT: - *value = image->dri_format; - return GL_TRUE; - case __DRI_IMAGE_ATTRIB_WIDTH: - *value = image->texture->width0; - return GL_TRUE; - case __DRI_IMAGE_ATTRIB_HEIGHT: - *value = image->texture->height0; - return GL_TRUE; - case __DRI_IMAGE_ATTRIB_COMPONENTS: - if (image->dri_components == 0) - return GL_FALSE; - *value = image->dri_components; - return GL_TRUE; - default: - return GL_FALSE; - } -} - -static __DRIimage * -dri2_dup_image(__DRIimage *image, void *loaderPrivate) -{ - __DRIimage *img; - - img = CALLOC_STRUCT(__DRIimageRec); - if (!img) - return NULL; - - img->texture = NULL; - pipe_resource_reference(&img->texture, image->texture); - img->level = image->level; - img->layer = image->layer; - img->dri_format = image->dri_format; - /* This should be 0 for sub images, but dup is also used for base images. */ - img->dri_components = image->dri_components; - img->loader_private = loaderPrivate; - - return img; -} - -static GLboolean -dri2_validate_usage(__DRIimage *image, unsigned int use) -{ - /* - * Gallium drivers are bad at adding usages to the resources - * once opened again in another process, which is the main use - * case for this, so we have to lie. - */ - if (image != NULL) - return GL_TRUE; - else - return GL_FALSE; -} - -static __DRIimage * -dri2_from_names(__DRIscreen *screen, int width, int height, int format, - int *names, int num_names, int *strides, int *offsets, - void *loaderPrivate) -{ - __DRIimage *img; - int stride, dri_components; - - if (num_names != 1) - return NULL; - if (offsets[0] != 0) - return NULL; - - format = convert_fourcc(format, &dri_components); - if (format == -1) - return NULL; - - /* Strides are in bytes not pixels. */ - stride = strides[0] /4; - - img = dri2_create_image_from_name(screen, width, height, format, - names[0], stride, loaderPrivate); - if (img == NULL) - return NULL; - - img->dri_components = dri_components; - return img; -} - -static __DRIimage * -dri2_from_planar(__DRIimage *image, int plane, void *loaderPrivate) -{ - __DRIimage *img; - - if (plane != 0) - return NULL; - - if (image->dri_components == 0) - return NULL; - - img = dri2_dup_image(image, loaderPrivate); - if (img == NULL) - return NULL; - - /* set this to 0 for sub images. */ - img->dri_components = 0; - return img; -} - -static __DRIimage * -dri2_create_from_texture(__DRIcontext *context, int target, unsigned texture, - int depth, int level, unsigned *error, - void *loaderPrivate) -{ - __DRIimage *img; - struct gl_context *ctx = ((struct st_context *)dri_context(context)->st)->ctx; - struct gl_texture_object *obj; - struct pipe_resource *tex; - GLuint face = 0; - - obj = _mesa_lookup_texture(ctx, texture); - if (!obj || obj->Target != target) { - *error = __DRI_IMAGE_ERROR_BAD_PARAMETER; - return NULL; - } - - tex = st_get_texobj_resource(obj); - if (!tex) { - *error = __DRI_IMAGE_ERROR_BAD_PARAMETER; - return NULL; - } - - if (target == GL_TEXTURE_CUBE_MAP) - face = depth; - - _mesa_test_texobj_completeness(ctx, obj); - if (!obj->_BaseComplete || (level > 0 && !obj->_MipmapComplete)) { - *error = __DRI_IMAGE_ERROR_BAD_PARAMETER; - return NULL; - } - - if (level < obj->BaseLevel || level > obj->_MaxLevel) { - *error = __DRI_IMAGE_ERROR_BAD_MATCH; - return NULL; - } - - if (target == GL_TEXTURE_3D && obj->Image[face][level]->Depth < depth) { - *error = __DRI_IMAGE_ERROR_BAD_MATCH; - return NULL; - } - - img = CALLOC_STRUCT(__DRIimageRec); - if (!img) { - *error = __DRI_IMAGE_ERROR_BAD_ALLOC; - return NULL; - } - - img->level = level; - img->layer = depth; - img->dri_format = driGLFormatToImageFormat(obj->Image[face][level]->TexFormat); - - img->loader_private = loaderPrivate; - - if (img->dri_format == __DRI_IMAGE_FORMAT_NONE) { - *error = __DRI_IMAGE_ERROR_BAD_PARAMETER; - free(img); - return NULL; - } - - pipe_resource_reference(&img->texture, tex); - - *error = __DRI_IMAGE_ERROR_SUCCESS; - return img; -} - -static __DRIimage * -dri2_from_fds(__DRIscreen *screen, int width, int height, int fourcc, - int *fds, int num_fds, int *strides, int *offsets, - void *loaderPrivate) -{ - __DRIimage *img; - int format, stride, dri_components; - - if (num_fds != 1) - return NULL; - if (offsets[0] != 0) - return NULL; - - format = convert_fourcc(fourcc, &dri_components); - if (format == -1) - return NULL; - - /* Strides are in bytes not pixels. */ - stride = strides[0] /4; - - img = dri2_create_image_from_fd(screen, width, height, format, - fds[0], stride, loaderPrivate); - if (img == NULL) - return NULL; - - img->dri_components = dri_components; - return img; -} - -static __DRIimage * -dri2_from_dma_bufs(__DRIscreen *screen, - int width, int height, int fourcc, - int *fds, int num_fds, - int *strides, int *offsets, - enum __DRIYUVColorSpace yuv_color_space, - enum __DRISampleRange sample_range, - enum __DRIChromaSiting horizontal_siting, - enum __DRIChromaSiting vertical_siting, - unsigned *error, - void *loaderPrivate) -{ - __DRIimage *img; - int format, stride, dri_components; - - if (num_fds != 1 || offsets[0] != 0) { - *error = __DRI_IMAGE_ERROR_BAD_MATCH; - return NULL; - } - - format = convert_fourcc(fourcc, &dri_components); - if (format == -1) { - *error = __DRI_IMAGE_ERROR_BAD_MATCH; - return NULL; - } - - /* Strides are in bytes not pixels. */ - stride = strides[0] /4; - - img = dri2_create_image_from_fd(screen, width, height, format, - fds[0], stride, loaderPrivate); - if (img == NULL) { - *error = __DRI_IMAGE_ERROR_BAD_ALLOC; - return NULL; - } - - img->yuv_color_space = yuv_color_space; - img->sample_range = sample_range; - img->horizontal_siting = horizontal_siting; - img->vertical_siting = vertical_siting; - img->dri_components = dri_components; - - *error = __DRI_IMAGE_ERROR_SUCCESS; - return img; -} - -static void -dri2_blit_image(__DRIcontext *context, __DRIimage *dst, __DRIimage *src, - int dstx0, int dsty0, int dstwidth, int dstheight, - int srcx0, int srcy0, int srcwidth, int srcheight, - int flush_flag) -{ - struct dri_context *ctx = dri_context(context); - struct pipe_context *pipe = ctx->st->pipe; - struct pipe_screen *screen; - struct pipe_fence_handle *fence; - struct pipe_blit_info blit; - - if (!dst || !src) - return; - - memset(&blit, 0, sizeof(blit)); - blit.dst.resource = dst->texture; - blit.dst.box.x = dstx0; - blit.dst.box.y = dsty0; - blit.dst.box.width = dstwidth; - blit.dst.box.height = dstheight; - blit.dst.box.depth = 1; - blit.dst.format = dst->texture->format; - blit.src.resource = src->texture; - blit.src.box.x = srcx0; - blit.src.box.y = srcy0; - blit.src.box.width = srcwidth; - blit.src.box.height = srcheight; - blit.src.box.depth = 1; - blit.src.format = src->texture->format; - blit.mask = PIPE_MASK_RGBA; - blit.filter = PIPE_TEX_FILTER_NEAREST; - - pipe->blit(pipe, &blit); - - if (flush_flag == __BLIT_FLAG_FLUSH) { - pipe->flush_resource(pipe, dst->texture); - ctx->st->flush(ctx->st, 0, NULL); - } else if (flush_flag == __BLIT_FLAG_FINISH) { - screen = dri_screen(ctx->sPriv)->base.screen; - pipe->flush_resource(pipe, dst->texture); - ctx->st->flush(ctx->st, 0, &fence); - (void) screen->fence_finish(screen, fence, PIPE_TIMEOUT_INFINITE); - screen->fence_reference(screen, &fence, NULL); - } -} - -static void -dri2_destroy_image(__DRIimage *img) -{ - pipe_resource_reference(&img->texture, NULL); - FREE(img); -} - -/* The extension is modified during runtime if DRI_PRIME is detected */ -static __DRIimageExtension dri2ImageExtension = { - .base = { __DRI_IMAGE, 9 }, - - .createImageFromName = dri2_create_image_from_name, - .createImageFromRenderbuffer = dri2_create_image_from_renderbuffer, - .destroyImage = dri2_destroy_image, - .createImage = dri2_create_image, - .queryImage = dri2_query_image, - .dupImage = dri2_dup_image, - .validateUsage = dri2_validate_usage, - .createImageFromNames = dri2_from_names, - .fromPlanar = dri2_from_planar, - .createImageFromTexture = dri2_create_from_texture, - .createImageFromFds = NULL, - .createImageFromDmaBufs = NULL, - .blitImage = dri2_blit_image, -}; - -/* - * Backend function init_screen. - */ - -static const __DRIextension *dri_screen_extensions[] = { - &driTexBufferExtension.base, - &dri2FlushExtension.base, - &dri2ImageExtension.base, - &dri2ConfigQueryExtension.base, - &dri2ThrottleExtension.base, - NULL -}; - -/** - * This is the driver specific part of the createNewScreen entry point. - * - * Returns the struct gl_config supported by this driver. - */ -static const __DRIconfig ** -dri2_init_screen(__DRIscreen * sPriv) -{ - const __DRIconfig **configs; - struct dri_screen *screen; - struct pipe_screen *pscreen = NULL; - const struct drm_conf_ret *throttle_ret = NULL; - const struct drm_conf_ret *dmabuf_ret = NULL; - - screen = CALLOC_STRUCT(dri_screen); - if (!screen) - return NULL; - - screen->sPriv = sPriv; - screen->fd = sPriv->fd; - - sPriv->driverPrivate = (void *)screen; - -#if SPLIT_TARGETS - pscreen = driver_descriptor.create_screen(screen->fd); - if (driver_descriptor.configuration) { - throttle_ret = driver_descriptor.configuration(DRM_CONF_THROTTLE); - dmabuf_ret = driver_descriptor.configuration(DRM_CONF_SHARE_FD); - } - -#else -#if GALLIUM_STATIC_TARGETS - pscreen = dd_create_screen(screen->fd); - - throttle_ret = dd_configuration(DRM_CONF_THROTTLE); - dmabuf_ret = dd_configuration(DRM_CONF_SHARE_FD); -#else - if (pipe_loader_drm_probe_fd(&screen->dev, screen->fd, true)) { - pscreen = pipe_loader_create_screen(screen->dev, PIPE_SEARCH_DIR); - - throttle_ret = pipe_loader_configuration(screen->dev, DRM_CONF_THROTTLE); - dmabuf_ret = pipe_loader_configuration(screen->dev, DRM_CONF_SHARE_FD); - } -#endif // GALLIUM_STATIC_TARGETS -#endif // SPLIT_TARGETS - - if (throttle_ret && throttle_ret->val.val_int != -1) { - screen->throttling_enabled = TRUE; - screen->default_throttle_frames = throttle_ret->val.val_int; - } - - if (dmabuf_ret && dmabuf_ret->val.val_bool) { - uint64_t cap; - - if (drmGetCap(sPriv->fd, DRM_CAP_PRIME, &cap) == 0 && - (cap & DRM_PRIME_CAP_IMPORT)) { - dri2ImageExtension.createImageFromFds = dri2_from_fds; - dri2ImageExtension.createImageFromDmaBufs = dri2_from_dma_bufs; - } - } - - sPriv->extensions = dri_screen_extensions; - - /* dri_init_screen_helper checks pscreen for us */ - - configs = dri_init_screen_helper(screen, pscreen); - if (!configs) - goto fail; - - screen->auto_fake_front = dri_with_format(sPriv); - screen->broken_invalidate = !sPriv->dri2.useInvalidate; - screen->lookup_egl_image = dri2_lookup_egl_image; - - return configs; -fail: - dri_destroy_screen_helper(screen); -#if !SPLIT_TARGETS -#if !GALLIUM_STATIC_TARGETS - if (screen->dev) - pipe_loader_release(&screen->dev, 1); -#endif // !GALLIUM_STATIC_TARGETS -#endif // !SPLIT_TARGETS - FREE(screen); - return NULL; -} - -static boolean -dri2_create_buffer(__DRIscreen * sPriv, - __DRIdrawable * dPriv, - const struct gl_config * visual, boolean isPixmap) -{ - struct dri_drawable *drawable = NULL; - - if (!dri_create_buffer(sPriv, dPriv, visual, isPixmap)) - return FALSE; - - drawable = dPriv->driverPrivate; - - drawable->allocate_textures = dri2_allocate_textures; - drawable->flush_frontbuffer = dri2_flush_frontbuffer; - drawable->update_tex_buffer = dri2_update_tex_buffer; - - return TRUE; -} - -/** - * DRI driver virtual function table. - * - * DRI versions differ in their implementation of init_screen and swap_buffers. - */ -const struct __DriverAPIRec galliumdrm_driver_api = { - .InitScreen = dri2_init_screen, - .DestroyScreen = dri_destroy_screen, - .CreateContext = dri_create_context, - .DestroyContext = dri_destroy_context, - .CreateBuffer = dri2_create_buffer, - .DestroyBuffer = dri_destroy_buffer, - .MakeCurrent = dri_make_current, - .UnbindContext = dri_unbind_context, - - .AllocateBuffer = dri2_allocate_buffer, - .ReleaseBuffer = dri2_release_buffer, -}; - -/* This is the table of extensions that the loader will dlsym() for. */ -const __DRIextension *galliumdrm_driver_extensions[] = { - &driCoreExtension.base, - &driImageDriverExtension.base, - &driDRI2Extension.base, - &gallium_config_options.base, - NULL -}; - -/* vim: set sw=3 ts=8 sts=3 expandtab: */ diff --git a/src/gallium/state_trackers/dri/drm/dri2_buffer.h b/src/gallium/state_trackers/dri/drm/dri2_buffer.h deleted file mode 100644 index e8e474ddb76..00000000000 --- a/src/gallium/state_trackers/dri/drm/dri2_buffer.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef DRI2_BUFFER_H -#define DRI2_BUFFER_H - -#include "dri_util.h" - -struct pipe_surface; - -struct dri2_buffer -{ - __DRIbuffer base; - struct pipe_resource *resource; -}; - -static INLINE struct dri2_buffer * -dri2_buffer(__DRIbuffer * driBufferPriv) -{ - return (struct dri2_buffer *) driBufferPriv; -} - -#endif - -/* vim: set sw=3 ts=8 sts=3 expandtab: */ diff --git a/src/gallium/state_trackers/dri/drm/dri_context.c b/src/gallium/state_trackers/dri/drm/dri_context.c deleted file mode 120000 index 5cfbbaeb068..00000000000 --- a/src/gallium/state_trackers/dri/drm/dri_context.c +++ /dev/null @@ -1 +0,0 @@ -../common/dri_context.c
\ No newline at end of file diff --git a/src/gallium/state_trackers/dri/drm/dri_drawable.c b/src/gallium/state_trackers/dri/drm/dri_drawable.c deleted file mode 120000 index 0fc19be6ea6..00000000000 --- a/src/gallium/state_trackers/dri/drm/dri_drawable.c +++ /dev/null @@ -1 +0,0 @@ -../common/dri_drawable.c
\ No newline at end of file diff --git a/src/gallium/state_trackers/dri/drm/dri_screen.c b/src/gallium/state_trackers/dri/drm/dri_screen.c deleted file mode 120000 index 847f6515f25..00000000000 --- a/src/gallium/state_trackers/dri/drm/dri_screen.c +++ /dev/null @@ -1 +0,0 @@ -../common/dri_screen.c
\ No newline at end of file |