i965: Add GetGpuInfo function
diff --git a/drivers/intel/gpuinfo.c b/drivers/intel/gpuinfo.c
index 80db0d8..4651a8a 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: