On Fri, Feb 21, 2014 at 10:04 PM, Emil Velikov <emil.l.veli...@gmail.com> wrote: > Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com> > --- > > IMHO we could easily rip out all the common stuff wrt PIPE_CAPs > handling and move it to nouveau, rather than duplicating it in > each driver. > > I believe that can be done as a follow up patch.
Easy enough to do it instead of this patch -- add a "fallback" handler to nouveau_screen.c, and call it from the default case of each of the nvXX_screen.c's get_param handler. > > -Emil > > src/gallium/drivers/nouveau/nv30/nv30_screen.c | 25 ++++++++++++++++++++++++ > src/gallium/drivers/nouveau/nv50/nv50_screen.c | 27 > +++++++++++++++++++++++++- > src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 25 ++++++++++++++++++++++++ > 3 files changed, 76 insertions(+), 1 deletion(-) > > diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.c > b/src/gallium/drivers/nouveau/nv30/nv30_screen.c > index abbc3b6..564a6c3 100644 > --- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c > +++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c > @@ -23,6 +23,8 @@ > * > */ > > +#include <xf86drm.h> Why is this needed? > +#include <nouveau_drm.h> This works? Should be <libdrm/nouveau_drm.h> I thought. It also happens to already be included in nouveau_screen.c -- another argument for moving this stuff there straight away :) > #include "util/u_format.h" > #include "util/u_format_s3tc.h" > > @@ -44,11 +46,16 @@ > #define CURIE_4497_CHIPSET 0x00005450 > #define CURIE_4497_CHIPSET6X 0x00000088 > > +#ifndef NOUVEAU_GETPARAM_PCI_DEVICE > +# define NOUVEAU_GETPARAM_PCI_DEVICE 4 > +#endif > + > static int > nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) > { > struct nv30_screen *screen = nv30_screen(pscreen); > struct nouveau_object *eng3d = screen->eng3d; > + struct nouveau_device *dev = nouveau_screen(pscreen)->device; > > switch (param) { > /* non-boolean capabilities */ > @@ -146,6 +153,24 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum > pipe_cap param) > case PIPE_CAP_MAX_GL_ES2_VERSION: > return 20; > > + case PIPE_CAP_VENDOR_ID: > + return 0x10de; > + case PIPE_CAP_DEVICE_ID: { > + uint64_t device_id; > + if (!nouveau_getparam(dev, NOUVEAU_GETPARAM_PCI_DEVICE, &device_id)) { > + NOUVEAU_ERR("NOUVEAU_GETPARAM_PCI_DEVICE failed.\n"); > + return -1; > + } > + return device_id; > + } > + case PIPE_CAP_ACCELERATED: > + return 1; > + case PIPE_CAP_VIDEO_MEMORY: > + /* XXX: expose vram_size, vram_limit, gart_size or gart_limit ? */ > + return dev->vram_size >> 20; > + case PIPE_CAP_UMA: > + return 0; > + > default: > debug_printf("unknown param %d\n", param); > return 0; > diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c > b/src/gallium/drivers/nouveau/nv50/nv50_screen.c > index 5090b7f..e6a9781 100644 > --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c > +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c > @@ -20,6 +20,9 @@ > * OTHER DEALINGS IN THE SOFTWARE. > */ > > +#include <errno.h> > +#include <xf86drm.h> > +#include <nouveau_drm.h> > #include "util/u_format.h" > #include "util/u_format_s3tc.h" > #include "pipe/p_screen.h" > @@ -30,7 +33,10 @@ > #include "nouveau_vp3_video.h" > > #include "nv_object.xml.h" > -#include <errno.h> > + > +#ifndef NOUVEAU_GETPARAM_PCI_DEVICE > +# define NOUVEAU_GETPARAM_PCI_DEVICE 4 > +#endif > > #ifndef NOUVEAU_GETPARAM_GRAPH_UNITS > # define NOUVEAU_GETPARAM_GRAPH_UNITS 13 > @@ -83,6 +89,7 @@ static int > nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) > { > const uint16_t class_3d = nouveau_screen(pscreen)->class_3d; > + struct nouveau_device *dev = nouveau_screen(pscreen)->device; > > switch (param) { > case PIPE_CAP_MAX_TEXTURE_2D_LEVELS: > @@ -209,6 +216,24 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum > pipe_cap param) > case PIPE_CAP_MAX_GL_ES2_VERSION: > return 30; > > + case PIPE_CAP_VENDOR_ID: > + return 0x10de; > + case PIPE_CAP_DEVICE_ID: { > + uint64_t device_id; > + if (!nouveau_getparam(dev, NOUVEAU_GETPARAM_PCI_DEVICE, &device_id)) { > + NOUVEAU_ERR("NOUVEAU_GETPARAM_PCI_DEVICE failed.\n"); > + return -1; > + } > + return device_id; > + } > + case PIPE_CAP_ACCELERATED: > + return 1; > + case PIPE_CAP_VIDEO_MEMORY: > + /* XXX: expose vram_size, vram_limit, gart_size or gart_limit ? */ > + return dev->vram_size >> 20; > + case PIPE_CAP_UMA: > + return 0; > + > default: > NOUVEAU_ERR("unknown PIPE_CAP %d\n", param); > return 0; > diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c > b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c > index b96dced..a263ce3 100644 > --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c > +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c > @@ -20,6 +20,8 @@ > * OTHER DEALINGS IN THE SOFTWARE. > */ > > +#include <xf86drm.h> > +#include <nouveau_drm.h> > #include "util/u_format.h" > #include "util/u_format_s3tc.h" > #include "pipe/p_screen.h" > @@ -34,6 +36,10 @@ > > #include "nvc0/nvc0_graph_macros.h" > > +#ifndef NOUVEAU_GETPARAM_PCI_DEVICE > +# define NOUVEAU_GETPARAM_PCI_DEVICE 4 > +#endif > + > #ifndef NOUVEAU_GETPARAM_GRAPH_UNITS > # define NOUVEAU_GETPARAM_GRAPH_UNITS 13 > #endif > @@ -69,6 +75,7 @@ static int > nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) > { > const uint16_t class_3d = nouveau_screen(pscreen)->class_3d; > + struct nouveau_device *dev = nouveau_screen(pscreen)->device; > > switch (param) { > case PIPE_CAP_MAX_TEXTURE_2D_LEVELS: > @@ -187,6 +194,24 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum > pipe_cap param) > case PIPE_CAP_MAX_GL_ES2_VERSION: > return 30; > > + case PIPE_CAP_VENDOR_ID: > + return 0x10de; > + case PIPE_CAP_DEVICE_ID: { > + uint64_t device_id; > + if (!nouveau_getparam(dev, NOUVEAU_GETPARAM_PCI_DEVICE, &device_id)) { > + NOUVEAU_ERR("NOUVEAU_GETPARAM_PCI_DEVICE failed.\n"); > + return -1; > + } > + return device_id; > + } > + case PIPE_CAP_ACCELERATED: > + return 1; > + case PIPE_CAP_VIDEO_MEMORY: > + /* XXX: expose vram_size, vram_limit, gart_size or gart_limit ? */ > + return dev->vram_size >> 20; > + case PIPE_CAP_UMA: > + return 0; > + > default: > NOUVEAU_ERR("unknown PIPE_CAP %d\n", param); > return 0; > -- > 1.9.0 > > _______________________________________________ > 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