From 2b5f3956be2defaa3aad81371fc7cba16c338a45 Mon Sep 17 00:00:00 2001 From: Emil Velikov Date: Thu, 14 Aug 2014 21:05:35 +0100 Subject: [PATCH] gallium/nouveau: handle query_renderer caps Signed-off-by: Emil Velikov --- .../drivers/nouveau/nv30/nv30_screen.c | 20 ++++++++++++++ .../drivers/nouveau/nv50/nv50_screen.c | 26 +++++++++++++++---- .../drivers/nouveau/nvc0/nvc0_screen.c | 24 ++++++++++++++--- 3 files changed, 61 insertions(+), 9 deletions(-) diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.c b/src/gallium/drivers/nouveau/nv30/nv30_screen.c index 4766955b5ee..aad242a1add 100644 --- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c +++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c @@ -23,6 +23,8 @@ * */ +#include +#include #include "util/u_format.h" #include "util/u_format_s3tc.h" @@ -49,6 +51,7 @@ 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 */ @@ -150,6 +153,23 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_DRAW_INDIRECT: case PIPE_CAP_TGSI_FS_FINE_DERIVATIVE: return 0; + + 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: + return dev->vram_size >> 20; + case PIPE_CAP_UMA: + return 0; } debug_printf("unknown param %d\n", param); diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c b/src/gallium/drivers/nouveau/nv50/nv50_screen.c index 8a9a40eecce..2b75e3ed264 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 +#include +#include #include "util/u_format.h" #include "util/u_format_s3tc.h" #include "pipe/p_screen.h" @@ -30,11 +33,6 @@ #include "nouveau_vp3_video.h" #include "nv_object.xml.h" -#include - -#ifndef NOUVEAU_GETPARAM_GRAPH_UNITS -# define NOUVEAU_GETPARAM_GRAPH_UNITS 13 -#endif /* affected by LOCAL_WARPS_LOG_ALLOC / LOCAL_WARPS_NO_CLAMP */ #define LOCAL_WARPS_ALLOC 32 @@ -83,6 +81,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) { /* non-boolean caps */ @@ -202,6 +201,23 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_COMPUTE: case PIPE_CAP_DRAW_INDIRECT: return 0; + + 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: + return dev->vram_size >> 20; + case PIPE_CAP_UMA: + return 0; } NOUVEAU_ERR("unknown PIPE_CAP %d\n", param); diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c index c6d9b91cede..0a8ca391add 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 +#include #include "util/u_format.h" #include "util/u_format_s3tc.h" #include "pipe/p_screen.h" @@ -34,10 +36,6 @@ #include "nvc0/mme/com9097.mme.h" -#ifndef NOUVEAU_GETPARAM_GRAPH_UNITS -# define NOUVEAU_GETPARAM_GRAPH_UNITS 13 -#endif - static boolean nvc0_screen_is_format_supported(struct pipe_screen *pscreen, enum pipe_format format, @@ -69,6 +67,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) { /* non-boolean caps */ @@ -186,6 +185,23 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_FAKE_SW_MSAA: case PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION: return 0; + + 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: + return dev->vram_size >> 20; + case PIPE_CAP_UMA: + return 0; } NOUVEAU_ERR("unknown PIPE_CAP %d\n", param); -- 2.30.2