aboutsummaryrefslogtreecommitdiff
path: root/layers
diff options
context:
space:
mode:
authorJon Ashburn <jon@lunarg.com>2014-11-25 12:56:49 -0700
committerCourtney Goeltzenleuchter <courtney@LunarG.com>2014-11-26 10:03:12 -0700
commitb79a1339b2f266ae57c5e9dcc1a6590d9d664f90 (patch)
tree441d05d8a22b83a7d43a0391535f9607bb8d26d2 /layers
parent32ad894f61e2a40596b88f1b01b3e4cecb49740a (diff)
downloadusermoji-b79a1339b2f266ae57c5e9dcc1a6590d9d664f90.tar.xz
Add reserved parameter to xglEnumerateLayers for layer usage
This parameter can be used by layer for getting GPA and gpu info queries. Also add xglEnumerateLayers() to Basic layer, to show example of only supporting a particular GPU.
Diffstat (limited to 'layers')
-rw-r--r--layers/basic_plugin.c33
-rw-r--r--layers/draw_state.c4
-rw-r--r--layers/mem_tracker.c4
3 files changed, 37 insertions, 4 deletions
diff --git a/layers/basic_plugin.c b/layers/basic_plugin.c
index ac8362da..d29e72d8 100644
--- a/layers/basic_plugin.c
+++ b/layers/basic_plugin.c
@@ -180,6 +180,39 @@ XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglGetFormatInfo(XGL_DEVICE device, XGL_FORMA
return result;
}
+XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglEnumerateLayers(XGL_PHYSICAL_GPU gpu, XGL_SIZE maxLayerCount, XGL_SIZE maxStringSize, XGL_CHAR* const* pOutLayers, XGL_SIZE * pOutLayerCount, XGL_VOID* pReserved)
+{
+ if (gpu != NULL)
+ {
+ XGL_BASE_LAYER_OBJECT* gpuw = (XGL_BASE_LAYER_OBJECT *) gpu;
+ printf("At start of wrapped xglEnumerateLayers() call w/ gpu: %p\n", gpu);
+ pCurObj = gpuw;
+ pthread_once(&tabOnce, initLayerTable);
+ XGL_RESULT result = myTable.EnumerateLayers((XGL_PHYSICAL_GPU)gpuw->nextObject, maxLayerCount, maxStringSize, pOutLayers, pOutLayerCount, pReserved);
+ return result;
+ } else
+ {
+ if (pOutLayerCount == NULL || pOutLayers == NULL || pOutLayers[0] == NULL || pReserved == NULL)
+ return XGL_ERROR_INVALID_POINTER;
+
+ // Example of a layer that is only compatible with Intel's GPUs
+ XGL_BASE_LAYER_OBJECT* gpuw = (XGL_BASE_LAYER_OBJECT*) pReserved;
+ GetGpuInfoType fpGetGpuInfo;
+ XGL_PHYSICAL_GPU_PROPERTIES gpuProps;
+ XGL_SIZE dataSize = sizeof(XGL_PHYSICAL_GPU_PROPERTIES);
+ fpGetGpuInfo = gpuw->pGPA((XGL_PHYSICAL_GPU) gpuw->nextObject, (const XGL_CHAR *) "xglGetGpuInfo");
+ fpGetGpuInfo((XGL_PHYSICAL_GPU) gpuw->nextObject, XGL_INFO_TYPE_PHYSICAL_GPU_PROPERTIES, &dataSize, &gpuProps);
+ if (gpuProps.vendorId == 0x8086)
+ {
+ *pOutLayerCount = 1;
+ strncpy(pOutLayers[0], "Basic", maxStringSize);
+ } else
+ {
+ *pOutLayerCount = 0;
+ }
+ return XGL_SUCCESS;
+ }
+}
XGL_LAYER_EXPORT XGL_VOID * XGLAPI xglGetProcAddr(XGL_PHYSICAL_GPU gpu, const XGL_CHAR* pName) {
XGL_BASE_LAYER_OBJECT* gpuw = (XGL_BASE_LAYER_OBJECT *) gpu;
if (gpu == NULL)
diff --git a/layers/draw_state.c b/layers/draw_state.c
index d5b8f195..46798500 100644
--- a/layers/draw_state.c
+++ b/layers/draw_state.c
@@ -927,14 +927,14 @@ XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglGetExtensionSupport(XGL_PHYSICAL_GPU gpu,
return result;
}
-XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglEnumerateLayers(XGL_PHYSICAL_GPU gpu, XGL_SIZE maxLayerCount, XGL_SIZE maxStringSize, XGL_CHAR* const* pOutLayers, XGL_SIZE * pOutLayerCount)
+XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglEnumerateLayers(XGL_PHYSICAL_GPU gpu, XGL_SIZE maxLayerCount, XGL_SIZE maxStringSize, XGL_CHAR* const* pOutLayers, XGL_SIZE * pOutLayerCount, XGL_VOID* pReserved)
{
if (gpu != NULL)
{
XGL_BASE_LAYER_OBJECT* gpuw = (XGL_BASE_LAYER_OBJECT *) gpu;
pCurObj = gpuw;
pthread_once(&tabOnce, initLayerTable);
- XGL_RESULT result = nextTable.EnumerateLayers((XGL_PHYSICAL_GPU)gpuw->nextObject, maxLayerCount, maxStringSize, pOutLayers, pOutLayerCount);
+ XGL_RESULT result = nextTable.EnumerateLayers((XGL_PHYSICAL_GPU)gpuw->nextObject, maxLayerCount, maxStringSize, pOutLayers, pOutLayerCount, pReserved);
return result;
} else
{
diff --git a/layers/mem_tracker.c b/layers/mem_tracker.c
index e4ebaae8..0f31cb69 100644
--- a/layers/mem_tracker.c
+++ b/layers/mem_tracker.c
@@ -1092,14 +1092,14 @@ XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglGetExtensionSupport(XGL_PHYSICAL_GPU gpu,
return result;
}
-XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglEnumerateLayers(XGL_PHYSICAL_GPU gpu, XGL_SIZE maxLayerCount, XGL_SIZE maxStringSize, XGL_CHAR* const* pOutLayers, XGL_SIZE * pOutLayerCount)
+XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglEnumerateLayers(XGL_PHYSICAL_GPU gpu, XGL_SIZE maxLayerCount, XGL_SIZE maxStringSize, XGL_CHAR* const* pOutLayers, XGL_SIZE * pOutLayerCount, XGL_VOID* pReserved)
{
if (gpu != NULL)
{
XGL_BASE_LAYER_OBJECT* gpuw = (XGL_BASE_LAYER_OBJECT *) gpu;
pCurObj = gpuw;
pthread_once(&tabOnce, initLayerTable);
- XGL_RESULT result = nextTable.EnumerateLayers((XGL_PHYSICAL_GPU)gpuw->nextObject, maxLayerCount, maxStringSize, pOutLayers, pOutLayerCount);
+ XGL_RESULT result = nextTable.EnumerateLayers((XGL_PHYSICAL_GPU)gpuw->nextObject, maxLayerCount, maxStringSize, pOutLayers, pOutLayerCount, pReserved);
return result;
} else
{