FYI, the flags psp->max_gl_xxx_version are incorrect for most (all?) Gallium drivers.
Marek On Sat, Oct 26, 2013 at 1:55 PM, Dave Airlie <airl...@gmail.com> wrote: > From: Dave Airlie <airl...@redhat.com> > > + nvc0 support for demo purposes, will split up later. > > So I've done this by just adding pipe cap queries for this stuff, > we might want to add another high level query to say if we are > bothered exposing this stuff. > > nouveau can't get the pci device id as it doesn't seem to use them in > userspace at all. > > Signed-off-by: Dave Airlie <airl...@redhat.com> > --- > src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 10 +++++ > src/gallium/include/pipe/p_defines.h | 7 ++- > src/gallium/state_trackers/dri/drm/dri2.c | 61 > ++++++++++++++++++++++++++ > 3 files changed, 77 insertions(+), 1 deletion(-) > > diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c > b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c > index ad20372..a692e2b 100644 > --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c > +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c > @@ -171,6 +171,16 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum > pipe_cap param) > return PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50; > case PIPE_CAP_ENDIANNESS: > return PIPE_ENDIAN_LITTLE; > + case PIPE_CAP_VENDOR_ID: > + return 0x10de; > + case PIPE_CAP_DEVICE_ID: > + return 0x10de; > + case PIPE_CAP_UMA: > + return 0; > + case PIPE_CAP_ACCELERATED: > + return 1; > + case PIPE_CAP_VIDEO_MEMORY: > + return nouveau_screen(pscreen)->device->vram_size / (1024*1024); > default: > NOUVEAU_ERR("unknown PIPE_CAP %d\n", param); > return 0; > diff --git a/src/gallium/include/pipe/p_defines.h > b/src/gallium/include/pipe/p_defines.h > index 63869c9..38d36b7 100644 > --- a/src/gallium/include/pipe/p_defines.h > +++ b/src/gallium/include/pipe/p_defines.h > @@ -512,7 +512,12 @@ enum pipe_cap { > PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK = 82, > PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE = 83, > PIPE_CAP_MAX_VIEWPORTS = 84, > - PIPE_CAP_ENDIANNESS = 85 > + PIPE_CAP_ENDIANNESS = 85, > + PIPE_CAP_VENDOR_ID = 86, > + PIPE_CAP_DEVICE_ID = 87, > + PIPE_CAP_ACCELERATED = 88, > + PIPE_CAP_VIDEO_MEMORY = 89, > + PIPE_CAP_UMA = 90, > }; > > #define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 (1 << 0) > diff --git a/src/gallium/state_trackers/dri/drm/dri2.c > b/src/gallium/state_trackers/dri/drm/dri2.c > index 5647968..87c4756 100644 > --- a/src/gallium/state_trackers/dri/drm/dri2.c > +++ b/src/gallium/state_trackers/dri/drm/dri2.c > @@ -39,6 +39,7 @@ > #include "dri_drawable.h" > #include "dri2_buffer.h" > > +#include "utils.h" > /** > * DRI2 flush extension. > */ > @@ -845,6 +846,65 @@ static struct __DRIimageExtensionRec dri2ImageExtension > = { > dri2_from_planar, > }; > > +static int > +dri2_query_renderer_integer(__DRIscreen *_screen, int param, int *value) > +{ > + struct dri_screen *screen = dri_screen(_screen); > + switch (param) { > + case __DRI2_RENDERER_VENDOR_ID: > + value[0] = screen->base.screen->get_param(screen->base.screen, > PIPE_CAP_VENDOR_ID); > + return 0; > + case __DRI2_RENDERER_DEVICE_ID: > + value[0] = screen->base.screen->get_param(screen->base.screen, > PIPE_CAP_DEVICE_ID); > + return 0; > + case __DRI2_RENDERER_ACCELERATED: > + value[0] = screen->base.screen->get_param(screen->base.screen, > PIPE_CAP_ACCELERATED); > + return 0; > + > + case __DRI2_RENDERER_VIDEO_MEMORY: > + value[0] = screen->base.screen->get_param(screen->base.screen, > PIPE_CAP_VIDEO_MEMORY); > + return 0; > + > + case __DRI2_RENDERER_UNIFIED_MEMORY_ARCHITECTURE: > + value[0] = screen->base.screen->get_param(screen->base.screen, > PIPE_CAP_UMA); > + return 0; > + > + case __DRI2_RENDERER_PREFERRED_PROFILE: > + value[0] = (_screen->max_gl_core_version != 0) > + ? (1U << __DRI_API_OPENGL_CORE) : (1U << __DRI_API_OPENGL); > + > + return 0; > + default: > + return driQueryRendererIntegerCommon(_screen, param, value); > + } > + > + return -1; > +} > + > +static int > +dri2_query_renderer_string(__DRIscreen *_screen, int param, const char > **value) > +{ > + struct dri_screen *screen = dri_screen(_screen); > + switch (param) { > + case __DRI2_RENDERER_VENDOR_ID: > + value[0] = screen->base.screen->get_vendor(screen->base.screen); > + return 0; > + case __DRI2_RENDERER_DEVICE_ID: > + value[0] = screen->base.screen->get_name(screen->base.screen); > + return 0; > + default: > + break; > + } > + return -1; > +} > + > +static struct __DRI2rendererQueryExtensionRec driRendererQueryExtension = { > + .base = { __DRI2_RENDERER_QUERY, 1 }, > + > + .queryInteger = dri2_query_renderer_integer, > + .queryString = dri2_query_renderer_string > +}; > + > /* > * Backend function init_screen. > */ > @@ -853,6 +913,7 @@ static const __DRIextension *dri_screen_extensions[] = { > &driTexBufferExtension.base, > &dri2FlushExtension.base, > &dri2ImageExtension.base, > + &driRendererQueryExtension.base, > &dri2ConfigQueryExtension.base, > &dri2ThrottleExtension.base, > NULL > -- > 1.8.3.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev