diff options
| author | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2014-08-01 18:10:31 -0600 |
|---|---|---|
| committer | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2014-08-01 18:19:49 -0600 |
| commit | db2596691e4e815bf0db637d8bca8529d72fc86d (patch) | |
| tree | 1ad672f1a731462397cd1849d220edeb0c469a59 /drivers/intel | |
| parent | 1951289ab640203d4cc4bc091617f903a4c27b9f (diff) | |
| download | usermoji-db2596691e4e815bf0db637d8bca8529d72fc86d.tar.xz | |
i965: Add GetGpuInfo function
Diffstat (limited to 'drivers/intel')
| -rw-r--r-- | drivers/intel/gpuinfo.c | 115 |
1 files changed, 112 insertions, 3 deletions
diff --git a/drivers/intel/gpuinfo.c b/drivers/intel/gpuinfo.c index 80db0d83..4651a8ab 100644 --- a/drivers/intel/gpuinfo.c +++ b/drivers/intel/gpuinfo.c @@ -25,26 +25,135 @@ * Courtney Goeltzenleuchter <courtney@lunarg.com> */ +#include <string.h> #include "driver.h" +#include "GitSHA1.h" -XGL_RESULT gen7_GetGpuInfo(XGL_PHYSICAL_GPU gpu, - XGL_PHYSICAL_GPU_INFO_TYPE infoType, - XGL_SIZE * pDataSize, XGL_VOID * pData) +// TODO: Really want to eliminate these +#define FAKE_PROPERTY 42 + +// TODO: What command queues can we support? +#define NUM_QUEUES 1 + +XGL_RESULT XGLAPI gen7_GetGpuProperties(struct _xgl_device *pdev, + XGL_SIZE * pDataSize, + XGL_PHYSICAL_GPU_PROPERTIES * pData) +{ + const char *chipset; + + *pDataSize = sizeof(XGL_PHYSICAL_GPU_PROPERTIES); + pData->apiVersion = XGL_API_VERSION; + // TODO: Should have driver version string + // TODO: What should version number look like? + pData->driverVersion = 1; + + pData->vendorId = pdev->ven_id; + pData->deviceId = pdev->dev_id; + pData->gpuType = XGL_GPU_TYPE_INTEGRATED; + switch (pdev->dev_id) { +#undef CHIPSET +#define CHIPSET(id, symbol, str) case id: chipset = str; break; +#include "i965_pci_ids.h" + default: + chipset = "Unknown Intel Chipset"; + break; + } + strncpy((char *) pData->gpuName, chipset, XGL_MAX_PHYSICAL_GPU_NAME); + + // TODO: Need real values here. + pData->maxMemRefsPerSubmission = FAKE_PROPERTY; + pData->virtualMemPageSize = FAKE_PROPERTY; + pData->maxInlineMemoryUpdateSize = FAKE_PROPERTY; + pData->maxBoundDescriptorSets = FAKE_PROPERTY; + pData->maxThreadGroupSize = FAKE_PROPERTY; + pData->timestampFrequency = FAKE_PROPERTY; + pData->multiColorAttachmentClears = FAKE_PROPERTY; + return XGL_SUCCESS; +} + +XGL_RESULT XGLAPI gen7_GetGpuPerformance(struct _xgl_device *pdev, + XGL_SIZE * pDataSize, + XGL_PHYSICAL_GPU_PERFORMANCE * pData) +{ + *pDataSize = sizeof(XGL_PHYSICAL_GPU_PERFORMANCE); + pData->maxGpuClock = FAKE_PROPERTY; + pData->aluPerClock = FAKE_PROPERTY; + pData->texPerClock = FAKE_PROPERTY; + pData->primsPerClock = FAKE_PROPERTY; + pData->pixelsPerClock = FAKE_PROPERTY; + + return XGL_SUCCESS; +} + +XGL_RESULT XGLAPI gen7_GetGpuQueueProperties(struct _xgl_device *pdev, + XGL_SIZE * pDataSize, + XGL_PHYSICAL_GPU_QUEUE_PROPERTIES * pData) +{ + *pDataSize = NUM_QUEUES * sizeof(XGL_PHYSICAL_GPU_QUEUE_PROPERTIES); + pData[0].structSize = sizeof(XGL_PHYSICAL_GPU_QUEUE_PROPERTIES); + pData[0].queueFlags = XGL_QUEUE_GRAPHICS_BIT; + pData[0].queueCount = 1; // TODO: What is this counting? + pData[0].supportsTimestamps = XGL_TRUE; + + return XGL_SUCCESS; +} + +XGL_RESULT XGLAPI gen7_GetGpuMemoryProperties(struct _xgl_device *pdev, + XGL_SIZE * pDataSize, + XGL_PHYSICAL_GPU_MEMORY_PROPERTIES * pData) +{ + *pDataSize = sizeof(XGL_PHYSICAL_GPU_MEMORY_PROPERTIES); + + // TODO: Need to set the flags properly + pData[0].supportsMigration = XGL_FALSE; + pData[0].supportsPinning = XGL_TRUE; + pData[0].supportsVirtualMemoryRemapping = XGL_FALSE; + + return XGL_SUCCESS; +} + +XGL_RESULT XGLAPI gen7_GetGpuInfo(XGL_PHYSICAL_GPU gpu, + XGL_PHYSICAL_GPU_INFO_TYPE infoType, + XGL_SIZE * pDataSize, XGL_VOID * pData) { XGL_RESULT ret = XGL_SUCCESS; struct _xgl_device *pdev = (struct _xgl_device *) gpu; switch (infoType) { case XGL_INFO_TYPE_PHYSICAL_GPU_PROPERTIES: + if (pData == NULL) { + return XGL_ERROR_INVALID_POINTER; + } + return gen7_GetGpuProperties(pdev, pDataSize, pData); break; case XGL_INFO_TYPE_PHYSICAL_GPU_PERFORMANCE: + if (pData == NULL) { + return XGL_ERROR_INVALID_POINTER; + } + return gen7_GetGpuPerformance(pdev, pDataSize, pData); break; case XGL_INFO_TYPE_PHYSICAL_GPU_QUEUE_PROPERTIES: + /* + * XGL Programmers guide, page 33: + * to determine the data size an application calls + * xglGetGpuInfo() with a NULL data pointer. The + * expected data size for all queue property structures + * is returned in pDataSize + */ + if (pData == NULL) { + // TODO: Count queues and return space needed + *pDataSize = NUM_QUEUES * sizeof(XGL_PHYSICAL_GPU_QUEUE_PROPERTIES); + } + return gen7_GetGpuQueueProperties(pdev, pDataSize, pData); break; case XGL_INFO_TYPE_PHYSICAL_GPU_MEMORY_PROPERTIES: + if (pData == NULL) { + return XGL_ERROR_INVALID_POINTER; + } + return gen7_GetGpuMemoryProperties(pdev, pDataSize, pData); break; default: |
