diff --git a/icd/intel/queue.c b/icd/intel/queue.c
index 354efe7..ac63c6c 100644
--- a/icd/intel/queue.c
+++ b/icd/intel/queue.c
@@ -318,18 +318,6 @@
     return intel_fence_wait(queue->fence, timeout);
 }
 
-ICD_EXPORT XGL_RESULT XGLAPI xglQueueSetGlobalMemReferences(
-    XGL_QUEUE                                   queue,
-    uint32_t                                    memRefCount,
-    const XGL_MEMORY_REF*                       pMemRefs)
-{
-    /*
-     * The winsys maintains the list of memory references.  These are ignored
-     * until we move away from the winsys.
-     */
-    return XGL_SUCCESS;
-}
-
 ICD_EXPORT XGL_RESULT XGLAPI xglQueueAddMemReference(
     XGL_QUEUE                                   queue,
     XGL_GPU_MEMORY                              mem)
diff --git a/icd/nulldrv/nulldrv.c b/icd/nulldrv/nulldrv.c
index 84e3197..34d3148 100644
--- a/icd/nulldrv/nulldrv.c
+++ b/icd/nulldrv/nulldrv.c
@@ -1718,15 +1718,6 @@
     return XGL_SUCCESS;
 }
 
-ICD_EXPORT XGL_RESULT XGLAPI xglQueueSetGlobalMemReferences(
-    XGL_QUEUE                                   queue,
-    uint32_t                                    memRefCount,
-    const XGL_MEMORY_REF*                       pMemRefs)
-{
-    NULLDRV_LOG_FUNC;
-    return XGL_SUCCESS;
-}
-
 ICD_EXPORT XGL_RESULT XGLAPI xglQueueAddMemReference(
     XGL_QUEUE                                   queue,
     XGL_GPU_MEMORY                              mem)
diff --git a/include/xgl.h b/include/xgl.h
index be9405a..be7cd9e 100644
--- a/include/xgl.h
+++ b/include/xgl.h
@@ -2270,7 +2270,6 @@
 typedef XGL_RESULT (XGLAPI *xglEnumerateLayersType)(XGL_PHYSICAL_GPU gpu, size_t maxLayerCount, size_t maxStringSize, size_t* pOutLayerCount, char* const* pOutLayers, void* pReserved);
 typedef XGL_RESULT (XGLAPI *xglGetDeviceQueueType)(XGL_DEVICE device, uint32_t queueNodeIndex, uint32_t queueIndex, XGL_QUEUE* pQueue);
 typedef XGL_RESULT (XGLAPI *xglQueueSubmitType)(XGL_QUEUE queue, uint32_t cmdBufferCount, const XGL_CMD_BUFFER* pCmdBuffers, uint32_t memRefCount, const XGL_MEMORY_REF* pMemRefs, XGL_FENCE fence);
-typedef XGL_RESULT (XGLAPI *xglQueueSetGlobalMemReferencesType)(XGL_QUEUE queue, uint32_t memRefCount, const XGL_MEMORY_REF* pMemRefs);
 typedef XGL_RESULT (XGLAPI *xglQueueAddMemReferenceType)(XGL_QUEUE queue, XGL_GPU_MEMORY mem);
 typedef XGL_RESULT (XGLAPI *xglQueueRemoveMemReferenceType)(XGL_QUEUE queue, XGL_GPU_MEMORY mem);
 typedef XGL_RESULT (XGLAPI *xglQueueWaitIdleType)(XGL_QUEUE queue);
@@ -2444,11 +2443,6 @@
     const XGL_MEMORY_REF*                       pMemRefs,
     XGL_FENCE                                   fence);
 
-XGL_RESULT XGLAPI xglQueueSetGlobalMemReferences(
-    XGL_QUEUE                                   queue,
-    uint32_t                                    memRefCount,
-    const XGL_MEMORY_REF*                       pMemRefs);
-
 XGL_RESULT XGLAPI xglQueueAddMemReference(
     XGL_QUEUE                                   queue,
     XGL_GPU_MEMORY                              mem);
diff --git a/include/xglLayer.h b/include/xglLayer.h
index e569aa9..897fe90 100644
--- a/include/xglLayer.h
+++ b/include/xglLayer.h
@@ -38,7 +38,6 @@
     xglEnumerateLayersType EnumerateLayers;
     xglGetDeviceQueueType GetDeviceQueue;
     xglQueueSubmitType QueueSubmit;
-    xglQueueSetGlobalMemReferencesType QueueSetGlobalMemReferences;
     xglQueueAddMemReferenceType QueueAddMemReference;
     xglQueueRemoveMemReferenceType QueueRemoveMemReference;
     xglQueueWaitIdleType QueueWaitIdle;
diff --git a/layers/glave_snapshot.c b/layers/glave_snapshot.c
index ef71c30..8497163 100644
--- a/layers/glave_snapshot.c
+++ b/layers/glave_snapshot.c
@@ -590,12 +590,6 @@
     return result;
 }
 
-XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglQueueSetGlobalMemReferences(XGL_QUEUE queue, uint32_t memRefCount, const XGL_MEMORY_REF* pMemRefs)
-{
-    XGL_RESULT result = nextTable.QueueSetGlobalMemReferences(queue, memRefCount, pMemRefs);
-    return result;
-}
-
 XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglQueueWaitIdle(XGL_QUEUE queue)
 {
     XGL_RESULT result = nextTable.QueueWaitIdle(queue);
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp
index 38a4ff1..6928c8a 100644
--- a/layers/mem_tracker.cpp
+++ b/layers/mem_tracker.cpp
@@ -951,13 +951,6 @@
     return result;
 }
 
-XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglQueueSetGlobalMemReferences(XGL_QUEUE queue, uint32_t memRefCount, const XGL_MEMORY_REF* pMemRefs)
-{
-    // TODO : Use global mem references as part of list checked on QueueSubmit above
-    XGL_RESULT result = nextTable.QueueSetGlobalMemReferences(queue, memRefCount, pMemRefs);
-    return result;
-}
-
 XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglGetDeviceQueue(
     XGL_DEVICE                                  device,
     uint32_t                                    queueNodeIndex,
@@ -1922,8 +1915,6 @@
         return (void*) xglEnumerateLayers;
     if (!strcmp(funcName, "xglQueueSubmit"))
         return (void*) xglQueueSubmit;
-    if (!strcmp(funcName, "xglQueueSetGlobalMemReferences"))
-        return (void*) xglQueueSetGlobalMemReferences;
     if (!strcmp(funcName, "xglGetDeviceQueue"))
         return (void*) xglGetDeviceQueue;
     if (!strcmp(funcName, "xglQueueAddMemReference"))
diff --git a/tests/xgltestbinding.cpp b/tests/xgltestbinding.cpp
index ae313cb..d4a06f8 100644
--- a/tests/xgltestbinding.cpp
+++ b/tests/xgltestbinding.cpp
@@ -530,10 +530,6 @@
     submit(cmd, mem_refs, fence);
 }
 
-void Queue::set_global_mem_references(const std::vector<XGL_MEMORY_REF> &mem_refs)
-{
-    EXPECT(xglQueueSetGlobalMemReferences(obj(), mem_refs.size(), &mem_refs[0]) == XGL_SUCCESS);
-}
 
 void Queue::wait()
 {
diff --git a/tests/xgltestbinding.h b/tests/xgltestbinding.h
index 2f6535e..c311508 100644
--- a/tests/xgltestbinding.h
+++ b/tests/xgltestbinding.h
@@ -259,9 +259,6 @@
     void submit(const CmdBuffer &cmd, const std::vector<XGL_MEMORY_REF> &mem_refs, Fence &fence);
     void submit(const CmdBuffer &cmd, const std::vector<XGL_MEMORY_REF> &mem_refs);
 
-    // xglQueueSetGlobalMemReferences()
-    void set_global_mem_references(const std::vector<XGL_MEMORY_REF> &mem_refs);
-
     // xglQueueWaitIdle()
     void wait();
 
diff --git a/xgl-layer-generate.py b/xgl-layer-generate.py
index 3808fe2..0e21ccb 100755
--- a/xgl-layer-generate.py
+++ b/xgl-layer-generate.py
@@ -1283,7 +1283,7 @@
         destroy_line = ''
         funcs = []
         # Special cases for API funcs that don't use an object as first arg
-        if True in [no_use_proto in proto.name for no_use_proto in ['GlobalOption', 'CreateInstance', 'QueueSubmit', 'QueueSetGlobalMemReferences', 'QueueAddMemReference', 'QueueRemoveMemReference', 'QueueWaitIdle', 'CreateDevice', 'GetGpuInfo', 'QueueSignalSemaphore', 'QueueWaitSemaphore', 'WsiX11QueuePresent']]:
+        if True in [no_use_proto in proto.name for no_use_proto in ['GlobalOption', 'CreateInstance', 'QueueSubmit', 'QueueAddMemReference', 'QueueRemoveMemReference', 'QueueWaitIdle', 'CreateDevice', 'GetGpuInfo', 'QueueSignalSemaphore', 'QueueWaitSemaphore', 'WsiX11QueuePresent']]:
             using_line = ''
         else:
             using_line = '    loader_platform_thread_lock_mutex(&objLock);\n'
diff --git a/xgl.py b/xgl.py
index 6cc463f..53074ea 100644
--- a/xgl.py
+++ b/xgl.py
@@ -275,11 +275,6 @@
              Param("const XGL_MEMORY_REF*", "pMemRefs"),
              Param("XGL_FENCE", "fence")]),
 
-        Proto("XGL_RESULT", "QueueSetGlobalMemReferences",
-            [Param("XGL_QUEUE", "queue"),
-             Param("uint32_t", "memRefCount"),
-             Param("const XGL_MEMORY_REF*", "pMemRefs")]),
-
         Proto("XGL_RESULT", "QueueAddMemReference",
             [Param("XGL_QUEUE", "queue"),
              Param("XGL_GPU_MEMORY", "mem")]),
