update for buffer object changes
diff --git a/include/xgl.h b/include/xgl.h
index 6c03de6..2e40aed 100644
--- a/include/xgl.h
+++ b/include/xgl.h
@@ -81,6 +81,8 @@
 XGL_DEFINE_SUBCLASS_HANDLE(XGL_QUEUE, XGL_BASE_OBJECT)
 XGL_DEFINE_SUBCLASS_HANDLE(XGL_GPU_MEMORY, XGL_BASE_OBJECT)
 XGL_DEFINE_SUBCLASS_HANDLE(XGL_OBJECT, XGL_BASE_OBJECT)
+XGL_DEFINE_SUBCLASS_HANDLE(XGL_BUFFER, XGL_OBJECT)
+XGL_DEFINE_SUBCLASS_HANDLE(XGL_BUFFER_VIEW, XGL_OBJECT)
 XGL_DEFINE_SUBCLASS_HANDLE(XGL_IMAGE, XGL_OBJECT)
 XGL_DEFINE_SUBCLASS_HANDLE(XGL_IMAGE_VIEW, XGL_OBJECT)
 XGL_DEFINE_SUBCLASS_HANDLE(XGL_COLOR_ATTACHMENT_VIEW, XGL_OBJECT)
@@ -151,26 +153,26 @@
     XGL_NUM_MEMORY_PRIORITY                                 = (XGL_MEMORY_PRIORITY_END_RANGE - XGL_MEMORY_PRIORITY_BEGIN_RANGE + 1),
 } XGL_MEMORY_PRIORITY;
 
-typedef enum _XGL_MEMORY_STATE
+typedef enum _XGL_BUFFER_STATE
 {
-    XGL_MEMORY_STATE_DATA_TRANSFER                          = 0x00000000,
-    XGL_MEMORY_STATE_GRAPHICS_SHADER_READ_ONLY              = 0x00000001,
-    XGL_MEMORY_STATE_GRAPHICS_SHADER_WRITE_ONLY             = 0x00000002,
-    XGL_MEMORY_STATE_GRAPHICS_SHADER_READ_WRITE             = 0x00000003,
-    XGL_MEMORY_STATE_COMPUTE_SHADER_READ_ONLY               = 0x00000004,
-    XGL_MEMORY_STATE_COMPUTE_SHADER_WRITE_ONLY              = 0x00000005,
-    XGL_MEMORY_STATE_COMPUTE_SHADER_READ_WRITE              = 0x00000006,
-    XGL_MEMORY_STATE_MULTI_SHADER_READ_ONLY                 = 0x00000007,
-    XGL_MEMORY_STATE_INDEX_DATA                             = 0x00000008,
-    XGL_MEMORY_STATE_INDIRECT_ARG                           = 0x00000009,
-    XGL_MEMORY_STATE_WRITE_TIMESTAMP                        = 0x0000000A,
-    XGL_MEMORY_STATE_QUEUE_ATOMIC                           = 0x0000000B,
+    XGL_BUFFER_STATE_DATA_TRANSFER                          = 0x00000000,
+    XGL_BUFFER_STATE_GRAPHICS_SHADER_READ_ONLY              = 0x00000001,
+    XGL_BUFFER_STATE_GRAPHICS_SHADER_WRITE_ONLY             = 0x00000002,
+    XGL_BUFFER_STATE_GRAPHICS_SHADER_READ_WRITE             = 0x00000003,
+    XGL_BUFFER_STATE_COMPUTE_SHADER_READ_ONLY               = 0x00000004,
+    XGL_BUFFER_STATE_COMPUTE_SHADER_WRITE_ONLY              = 0x00000005,
+    XGL_BUFFER_STATE_COMPUTE_SHADER_READ_WRITE              = 0x00000006,
+    XGL_BUFFER_STATE_MULTI_SHADER_READ_ONLY                 = 0x00000007,
+    XGL_BUFFER_STATE_INDEX_DATA                             = 0x00000008,
+    XGL_BUFFER_STATE_INDIRECT_ARG                           = 0x00000009,
+    XGL_BUFFER_STATE_WRITE_TIMESTAMP                        = 0x0000000A,
+    XGL_BUFFER_STATE_QUEUE_ATOMIC                           = 0x0000000B,
 
-    XGL_MEMORY_STATE_BEGIN_RANGE                            = XGL_MEMORY_STATE_DATA_TRANSFER,
-    XGL_MEMORY_STATE_END_RANGE                              = XGL_MEMORY_STATE_QUEUE_ATOMIC,
-    XGL_NUM_MEMORY_STATE                                    = (XGL_MEMORY_STATE_END_RANGE - XGL_MEMORY_STATE_BEGIN_RANGE + 1),
-    XGL_MAX_ENUM(_XGL_MEMORY_STATE)
-} XGL_MEMORY_STATE;
+    XGL_BUFFER_STATE_BEGIN_RANGE                            = XGL_BUFFER_STATE_DATA_TRANSFER,
+    XGL_BUFFER_STATE_END_RANGE                              = XGL_BUFFER_STATE_QUEUE_ATOMIC,
+    XGL_NUM_BUFFER_STATE                                    = (XGL_BUFFER_STATE_END_RANGE - XGL_BUFFER_STATE_BEGIN_RANGE + 1),
+    XGL_MAX_ENUM(_XGL_BUFFER_STATE)
+} XGL_BUFFER_STATE;
 
 typedef enum _XGL_IMAGE_STATE
 {
@@ -858,9 +860,9 @@
     XGL_STRUCTURE_TYPE_MEMORY_ALLOC_INFO                    = 2,
     XGL_STRUCTURE_TYPE_MEMORY_OPEN_INFO                     = 4,
     XGL_STRUCTURE_TYPE_PEER_MEMORY_OPEN_INFO                = 5,
-    XGL_STRUCTURE_TYPE_MEMORY_VIEW_ATTACH_INFO              = 6,
+    XGL_STRUCTURE_TYPE_BUFFER_VIEW_ATTACH_INFO              = 6,
     XGL_STRUCTURE_TYPE_IMAGE_VIEW_ATTACH_INFO               = 7,
-    XGL_STRUCTURE_TYPE_MEMORY_STATE_TRANSITION              = 8,
+    XGL_STRUCTURE_TYPE_BUFFER_STATE_TRANSITION              = 8,
     XGL_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO               = 9,
     XGL_STRUCTURE_TYPE_COLOR_ATTACHMENT_VIEW_CREATE_INFO    = 10,
     XGL_STRUCTURE_TYPE_DEPTH_STENCIL_VIEW_CREATE_INFO       = 11,
@@ -886,14 +888,16 @@
     XGL_STRUCTURE_TYPE_PIPELINE_RS_STATE_CREATE_INFO        = 31,
     XGL_STRUCTURE_TYPE_PIPELINE_TESS_STATE_CREATE_INFO      = 32,
     XGL_STRUCTURE_TYPE_IMAGE_CREATE_INFO                    = 33,
-    XGL_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO              = 34,
-    XGL_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO                = 35,
-    XGL_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO       = 36,
-    XGL_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO              = 37,
+    XGL_STRUCTURE_TYPE_BUFFER_CREATE_INFO                   = 37,
+    XGL_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO              = 38,
+    XGL_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO              = 39,
+    XGL_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO                = 40,
+    XGL_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO       = 41,
+    XGL_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO              = 42,
+    XGL_STRUCTURE_TYPE_LAYER_CREATE_INFO                    = 43,
 // IMG CHANGE BEGIN - support for vertex input description
-    XGL_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO    = 38,
+    XGL_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO    = 90,
 // IMG CHANGE END
-    XGL_STRUCTURE_TYPE_LAYER_CREATE_INFO                    = 39,
     XGL_MAX_ENUM(_XGL_STRUCTURE_TYPE)
 } XGL_STRUCTURE_TYPE;
 
@@ -930,17 +934,48 @@
 // Memory allocation flags
 typedef enum _XGL_MEMORY_ALLOC_FLAGS
 {
-    XGL_MEMORY_ALLOC_VIRTUAL_BIT                            = 0x00000001,
-    XGL_MEMORY_ALLOC_SHAREABLE_BIT                          = 0x00000002,
+    XGL_MEMORY_ALLOC_SHAREABLE_BIT                          = 0x00000001,
 } XGL_MEMORY_ALLOC_FLAGS;
 
+// Buffer usage flags
+typedef enum _XGL_BUFFER_USAGE_FLAGS
+{
+    XGL_BUFFER_USAGE_SHADER_ACCESS_READ_BIT                 = 0x00000001,   // Shader read (e.g. TBO, image buffer, UBO, SBBO)
+    XGL_BUFFER_USAGE_SHADER_ACCESS_WRITE_BIT                = 0x00000002,   // Shader write (e.g. image buffer, SSBO)
+    XGL_BUFFER_USAGE_SHADER_ACCESS_ATOMIC_BIT               = 0x00000004,   // Shader atomic operations (e.g. image buffer, SSBO)
+    XGL_BUFFER_USAGE_UNIFORM_READ_BIT                       = 0x00000008,   // Uniform read (UBO)
+    XGL_BUFFER_USAGE_INDEX_FETCH_BIT                        = 0x00000010,   // Fixed function index fetch (index buffer)
+    XGL_BUFFER_USAGE_VERTEX_FETCH_BIT                       = 0x00000020,   // Fixed function vertex fetch (VBO)
+    XGL_BUFFER_USAGE_INDIRECT_PARAMETER_FETCH_BIT           = 0x00000040,   // Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer)
+} XGL_BUFFER_USAGE_FLAGS;
+
+// Buffer flags
+typedef enum _XGL_BUFFER_CREATE_FLAGS
+{
+    XGL_BUFFER_CREATE_SHAREABLE_BIT                         = 0x00000001,
+    XGL_BUFFER_CREATE_SPARSE_BIT                            = 0x00000002,
+} XGL_BUFFER_CREATE_FLAGS;
+
+typedef enum _XGL_BUFFER_VIEW_TYPE
+{
+    XGL_BUFFER_VIEW_RAW                                     = 0x00000000,   // Raw buffer without special structure (e.g. UBO, SSBO, indirect and parameter buffers)
+    XGL_BUFFER_VIEW_TYPED                                   = 0x00000001,   // Typed buffer, format and channels are used (TBO, image buffer)
+    XGL_BUFFER_VIEW_STRUCTURED                              = 0x00000002,   // Structured buffer, stride is used (VBO, DX-style structured buffer)
+
+    XGL_BUFFER_VIEW_TYPE_BEGIN_RANGE                         = XGL_BUFFER_VIEW_RAW,
+    XGL_BUFFER_VIEW_TYPE_END_RANGE                           = XGL_BUFFER_VIEW_STRUCTURED,
+    XGL_NUM_BUFFER_VIEW_TYPE                                 = (XGL_BUFFER_VIEW_TYPE_END_RANGE - XGL_BUFFER_VIEW_TYPE_BEGIN_RANGE + 1),
+    XGL_MAX_ENUM(_XGL_BUFFER_VIEW_TYPE)
+} XGL_BUFFER_VIEW_TYPE;
+
 // Image usage flags
 typedef enum _XGL_IMAGE_USAGE_FLAGS
 {
     XGL_IMAGE_USAGE_SHADER_ACCESS_READ_BIT                  = 0x00000001,
     XGL_IMAGE_USAGE_SHADER_ACCESS_WRITE_BIT                 = 0x00000002,
-    XGL_IMAGE_USAGE_COLOR_ATTACHMENT_BIT                    = 0x00000004,
-    XGL_IMAGE_USAGE_DEPTH_STENCIL_BIT                       = 0x00000008,
+    XGL_IMAGE_USAGE_SHADER_ACCESS_ATOMIC_BIT                = 0x00000004,
+    XGL_IMAGE_USAGE_COLOR_ATTACHMENT_BIT                    = 0x00000008,
+    XGL_IMAGE_USAGE_DEPTH_STENCIL_BIT                       = 0x00000010,
 } XGL_IMAGE_USAGE_FLAGS;
 
 // Image flags
@@ -949,6 +984,7 @@
     XGL_IMAGE_CREATE_INVARIANT_DATA_BIT                     = 0x00000001,
     XGL_IMAGE_CREATE_CLONEABLE_BIT                          = 0x00000002,
     XGL_IMAGE_CREATE_SHAREABLE_BIT                          = 0x00000004,
+    XGL_IMAGE_CREATE_SPARSE_BIT                             = 0x00000008,
 } XGL_IMAGE_CREATE_FLAGS;
 
 // Depth-stencil view creation flags
@@ -1063,6 +1099,14 @@
     XGL_EXTENT2D                            extent;
 } XGL_RECT;
 
+typedef struct _XGL_CHANNEL_MAPPING
+{
+    XGL_CHANNEL_SWIZZLE                     r;
+    XGL_CHANNEL_SWIZZLE                     g;
+    XGL_CHANNEL_SWIZZLE                     b;
+    XGL_CHANNEL_SWIZZLE                     a;
+} XGL_CHANNEL_MAPPING;
+
 typedef struct _XGL_PHYSICAL_GPU_PROPERTIES
 {
     XGL_SIZE                                structSize;
@@ -1073,7 +1117,6 @@
     XGL_PHYSICAL_GPU_TYPE                   gpuType;
     XGL_CHAR                                gpuName[XGL_MAX_PHYSICAL_GPU_NAME];
     XGL_UINT                                maxMemRefsPerSubmission;
-    XGL_GPU_SIZE                            virtualMemPageSize;
     XGL_GPU_SIZE                            maxInlineMemoryUpdateSize;
     XGL_UINT                                maxBoundDescriptorSets;
     XGL_UINT                                maxThreadGroupSize;
@@ -1162,7 +1205,6 @@
 {
     XGL_SIZE                                structSize;                 // Size of structure in bytes
     XGL_BOOL                                supportsMigration;
-    XGL_BOOL                                supportsVirtualMemoryRemapping;
     XGL_BOOL                                supportsPinning;
 } XGL_PHYSICAL_GPU_MEMORY_PROPERTIES;
 
@@ -1205,19 +1247,11 @@
     XGL_GPU_MEMORY                          originalMem;
 } XGL_PEER_MEMORY_OPEN_INFO;
 
-typedef struct _XGL_VIRTUAL_MEMORY_REMAP_RANGE
-{
-    XGL_GPU_MEMORY                          virtualMem;
-    XGL_GPU_SIZE                            virtualStartPage;
-    XGL_GPU_MEMORY                          realMem;
-    XGL_GPU_SIZE                            realStartPage;
-    XGL_GPU_SIZE                            pageCount;
-} XGL_VIRTUAL_MEMORY_REMAP_RANGE;
-
 typedef struct _XGL_MEMORY_REQUIREMENTS
 {
     XGL_GPU_SIZE                            size;                       // Specified in bytes
     XGL_GPU_SIZE                            alignment;                  // Specified in bytes
+    XGL_GPU_SIZE                            granularity;                // Granularity on which xglBindObjectMemoryRange can bind sub-ranges of memory specified in bytes (usually the page size)
     XGL_UINT                                heapCount;
     XGL_UINT                                heaps[XGL_MAX_MEMORY_HEAPS];
 } XGL_MEMORY_REQUIREMENTS;
@@ -1228,17 +1262,13 @@
     XGL_FLAGS                               optimalTilingFeatures;     // XGL_FORMAT_FEATURE_FLAGS
 } XGL_FORMAT_PROPERTIES;
 
-typedef struct _XGL_MEMORY_VIEW_ATTACH_INFO
+typedef struct _XGL_BUFFER_VIEW_ATTACH_INFO
 {
-    XGL_STRUCTURE_TYPE                      sType;                      // Must be XGL_STRUCTURE_TYPE_MEMORY_VIEW_ATTACH_INFO
+    XGL_STRUCTURE_TYPE                      sType;                      // Must be XGL_STRUCTURE_TYPE_BUFFER_VIEW_ATTACH_INFO
     XGL_VOID*                               pNext;                      // Pointer to next structure
-    XGL_GPU_MEMORY                          mem;
-    XGL_GPU_SIZE                            offset;
-    XGL_GPU_SIZE                            range;
-    XGL_GPU_SIZE                            stride;
-    XGL_FORMAT                              format;
-    XGL_MEMORY_STATE                        state;
-} XGL_MEMORY_VIEW_ATTACH_INFO;
+    XGL_BUFFER_VIEW                         view;
+    XGL_BUFFER_STATE                        state;
+} XGL_BUFFER_VIEW_ATTACH_INFO;
 
 typedef struct _XGL_IMAGE_VIEW_ATTACH_INFO
 {
@@ -1248,16 +1278,38 @@
     XGL_IMAGE_STATE                         state;
 } XGL_IMAGE_VIEW_ATTACH_INFO;
 
-typedef struct _XGL_MEMORY_STATE_TRANSITION
+typedef struct _XGL_BUFFER_STATE_TRANSITION
 {
-    XGL_STRUCTURE_TYPE                      sType;                      // Must be XGL_STRUCTURE_TYPE_MEMORY_STATE_TRANSITION
+    XGL_STRUCTURE_TYPE                      sType;                      // Must be XGL_STRUCTURE_TYPE_BUFFER_STATE_TRANSITION
     XGL_VOID*                               pNext;                      // Pointer to next structure
-    XGL_GPU_MEMORY                          mem;
-    XGL_MEMORY_STATE                        oldState;
-    XGL_MEMORY_STATE                        newState;
+    XGL_BUFFER                              buffer;
+    XGL_BUFFER_STATE                        oldState;
+    XGL_BUFFER_STATE                        newState;
     XGL_GPU_SIZE                            offset;
     XGL_GPU_SIZE                            regionSize;
-} XGL_MEMORY_STATE_TRANSITION;
+} XGL_BUFFER_STATE_TRANSITION;
+
+typedef struct _XGL_BUFFER_CREATE_INFO
+{
+    XGL_STRUCTURE_TYPE                      sType;                      // Must be XGL_STRUCTURE_TYPE_BUFFER_CREATE_INFO
+    const XGL_VOID*                         pNext;                      // Pointer to next structure.
+    XGL_GPU_SIZE                            size;                       // Specified in bytes
+    XGL_FLAGS                               usage;                      // XGL_BUFFER_USAGE_FLAGS
+    XGL_FLAGS                               flags;                      // XGL_BUFFER_CREATE_FLAGS
+} XGL_BUFFER_CREATE_INFO;
+
+typedef struct _XGL_BUFFER_VIEW_CREATE_INFO
+{
+    XGL_STRUCTURE_TYPE                      sType;                      // Must be XGL_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
+    const XGL_VOID*                         pNext;                      // Pointer to next structure.
+    XGL_BUFFER                              buffer;
+    XGL_BUFFER_VIEW_TYPE                    viewType;
+    XGL_GPU_SIZE                            stride;                     // Optionally specifies stride between elements
+    XGL_FORMAT                              format;                     // Optionally specifies format of elements
+    XGL_CHANNEL_MAPPING                     channels;                   // Optionally specifies format channel mapping
+    XGL_GPU_SIZE                            offset;                     // Specified in bytes
+    XGL_GPU_SIZE                            range;                      // View size specified in bytes
+} XGL_BUFFER_VIEW_CREATE_INFO;
 
 typedef struct _XGL_IMAGE_SUBRESOURCE
 {
@@ -1311,14 +1363,6 @@
     XGL_GPU_SIZE                            depthPitch;             // Specified in bytes
 } XGL_SUBRESOURCE_LAYOUT;
 
-typedef struct _XGL_CHANNEL_MAPPING
-{
-    XGL_CHANNEL_SWIZZLE                     r;
-    XGL_CHANNEL_SWIZZLE                     g;
-    XGL_CHANNEL_SWIZZLE                     b;
-    XGL_CHANNEL_SWIZZLE                     a;
-} XGL_CHANNEL_MAPPING;
-
 typedef struct _XGL_IMAGE_VIEW_CREATE_INFO
 {
     XGL_STRUCTURE_TYPE                      sType;                  // Must be XGL_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
@@ -1370,12 +1414,19 @@
     XGL_IMAGE_STATE                         stencilState;           // XGL_IMAGE_STATE
 } XGL_DEPTH_STENCIL_BIND_INFO;
 
-typedef struct _XGL_MEMORY_COPY
+typedef struct _XGL_BUFFER_COPY
 {
     XGL_GPU_SIZE                            srcOffset;              // Specified in bytes
     XGL_GPU_SIZE                            destOffset;             // Specified in bytes
     XGL_GPU_SIZE                            copySize;               // Specified in bytes
-} XGL_MEMORY_COPY;
+} XGL_BUFFER_COPY;
+
+typedef struct _XGL_IMAGE_MEMORY_BIND_INFO
+{
+    XGL_IMAGE_SUBRESOURCE                   subresource;
+    XGL_OFFSET3D                            offset;
+    XGL_EXTENT3D                            extent;
+} XGL_IMAGE_MEMORY_BIND_INFO;
 
 typedef struct _XGL_IMAGE_COPY
 {
@@ -1386,13 +1437,13 @@
     XGL_EXTENT3D                            extent;
 } XGL_IMAGE_COPY;
 
-typedef struct _XGL_MEMORY_IMAGE_COPY
+typedef struct _XGL_BUFFER_IMAGE_COPY
 {
-    XGL_GPU_SIZE                            memOffset;              // Specified in bytes
+    XGL_GPU_SIZE                            bufferOffset;           // Specified in bytes
     XGL_IMAGE_SUBRESOURCE                   imageSubresource;
     XGL_OFFSET3D                            imageOffset;
     XGL_EXTENT3D                            imageExtent;
-} XGL_MEMORY_IMAGE_COPY;
+} XGL_BUFFER_IMAGE_COPY;
 
 typedef struct _XGL_IMAGE_RESOLVE
 {
@@ -1437,11 +1488,11 @@
     const XGL_VOID*                             pBufferData;
 } XGL_LINK_CONST_BUFFER;
 
-typedef struct _XGL_DYNAMIC_MEMORY_VIEW_SLOT_INFO
+typedef struct _XGL_DYNAMIC_BUFFER_VIEW_SLOT_INFO
 {
     XGL_DESCRIPTOR_SET_SLOT_TYPE            slotObjectType;
     XGL_UINT                                shaderEntityIndex;
-} XGL_DYNAMIC_MEMORY_VIEW_SLOT_INFO;
+} XGL_DYNAMIC_BUFFER_VIEW_SLOT_INFO;
 
 typedef struct _XGL_PIPELINE_SHADER
 {
@@ -1450,7 +1501,7 @@
     XGL_DESCRIPTOR_SET_MAPPING              descriptorSetMapping[XGL_MAX_DESCRIPTOR_SETS];
     XGL_UINT                                linkConstBufferCount;
     const XGL_LINK_CONST_BUFFER*            pLinkConstBufferInfo;
-    XGL_DYNAMIC_MEMORY_VIEW_SLOT_INFO       dynamicMemoryViewMapping;
+    XGL_DYNAMIC_BUFFER_VIEW_SLOT_INFO       dynamicBufferViewMapping;
 } XGL_PIPELINE_SHADER;
 
 typedef struct _XGL_COMPUTE_PIPELINE_CREATE_INFO
@@ -1853,7 +1904,6 @@
 typedef XGL_RESULT (XGLAPI *xglMapMemoryType)(XGL_GPU_MEMORY mem, XGL_FLAGS flags, XGL_VOID** ppData);
 typedef XGL_RESULT (XGLAPI *xglUnmapMemoryType)(XGL_GPU_MEMORY mem);
 typedef XGL_RESULT (XGLAPI *xglPinSystemMemoryType)(XGL_DEVICE device, const XGL_VOID* pSysMem, XGL_SIZE memSize, XGL_GPU_MEMORY* pMem);
-typedef XGL_RESULT (XGLAPI *xglRemapVirtualMemoryPagesType)(XGL_DEVICE device, XGL_UINT rangeCount, const XGL_VIRTUAL_MEMORY_REMAP_RANGE* pRanges, XGL_UINT preWaitSemaphoreCount, const XGL_QUEUE_SEMAPHORE* pPreWaitSemaphores, XGL_UINT postSignalSemaphoreCount, const XGL_QUEUE_SEMAPHORE* pPostSignalSemaphores);
 typedef XGL_RESULT (XGLAPI *xglGetMultiGpuCompatibilityType)(XGL_PHYSICAL_GPU gpu0, XGL_PHYSICAL_GPU gpu1, XGL_GPU_COMPATIBILITY_INFO* pInfo);
 typedef XGL_RESULT (XGLAPI *xglOpenSharedMemoryType)(XGL_DEVICE device, const XGL_MEMORY_OPEN_INFO* pOpenInfo, XGL_GPU_MEMORY* pMem);
 typedef XGL_RESULT (XGLAPI *xglOpenSharedQueueSemaphoreType)(XGL_DEVICE device, const XGL_QUEUE_SEMAPHORE_OPEN_INFO* pOpenInfo, XGL_QUEUE_SEMAPHORE* pSemaphore);
@@ -1861,7 +1911,9 @@
 typedef XGL_RESULT (XGLAPI *xglOpenPeerImageType)(XGL_DEVICE device, const XGL_PEER_IMAGE_OPEN_INFO* pOpenInfo, XGL_IMAGE* pImage, XGL_GPU_MEMORY* pMem);
 typedef XGL_RESULT (XGLAPI *xglDestroyObjectType)(XGL_OBJECT object);
 typedef XGL_RESULT (XGLAPI *xglGetObjectInfoType)(XGL_BASE_OBJECT object, XGL_OBJECT_INFO_TYPE infoType, XGL_SIZE* pDataSize, XGL_VOID* pData);
-typedef XGL_RESULT (XGLAPI *xglBindObjectMemoryType)(XGL_OBJECT object, XGL_GPU_MEMORY mem, XGL_GPU_SIZE offset);
+typedef XGL_RESULT (XGLAPI *xglBindObjectMemoryType)(XGL_OBJECT object, XGL_GPU_MEMORY mem, XGL_GPU_SIZE memOffset);
+typedef XGL_RESULT (XGLAPI *xglBindObjectMemoryRangeType)(XGL_OBJECT object, XGL_GPU_SIZE rangeOffset, XGL_GPU_SIZE rangeSize, XGL_GPU_MEMORY mem, XGL_GPU_SIZE memOffset);
+typedef XGL_RESULT (XGLAPI *xglBindImageMemoryRangeType)(XGL_IMAGE image, const XGL_IMAGE_MEMORY_BIND_INFO* bindInfo, XGL_GPU_MEMORY mem, XGL_GPU_SIZE memOffset);
 typedef XGL_RESULT (XGLAPI *xglCreateFenceType)(XGL_DEVICE device, const XGL_FENCE_CREATE_INFO* pCreateInfo, XGL_FENCE* pFence);
 typedef XGL_RESULT (XGLAPI *xglGetFenceStatusType)(XGL_FENCE fence);
 typedef XGL_RESULT (XGLAPI *xglWaitForFencesType)(XGL_DEVICE device, XGL_UINT fenceCount, const XGL_FENCE* pFences, XGL_BOOL waitAll, XGL_UINT64 timeout);
@@ -1875,6 +1927,8 @@
 typedef XGL_RESULT (XGLAPI *xglCreateQueryPoolType)(XGL_DEVICE device, const XGL_QUERY_POOL_CREATE_INFO* pCreateInfo, XGL_QUERY_POOL* pQueryPool);
 typedef XGL_RESULT (XGLAPI *xglGetQueryPoolResultsType)(XGL_QUERY_POOL queryPool, XGL_UINT startQuery, XGL_UINT queryCount, XGL_SIZE* pDataSize, XGL_VOID* pData);
 typedef XGL_RESULT (XGLAPI *xglGetFormatInfoType)(XGL_DEVICE device, XGL_FORMAT format, XGL_FORMAT_INFO_TYPE infoType, XGL_SIZE* pDataSize, XGL_VOID* pData);
+typedef XGL_RESULT (XGLAPI *xglCreateBufferType)(XGL_DEVICE device, const XGL_BUFFER_CREATE_INFO* pCreateInfo, XGL_BUFFER* pBuffer);
+typedef XGL_RESULT (XGLAPI *xglCreateBufferViewType)(XGL_DEVICE device, const XGL_BUFFER_VIEW_CREATE_INFO* pCreateInfo, XGL_BUFFER_VIEW* pView);
 typedef XGL_RESULT (XGLAPI *xglCreateImageType)(XGL_DEVICE device, const XGL_IMAGE_CREATE_INFO* pCreateInfo, XGL_IMAGE* pImage);
 typedef XGL_RESULT (XGLAPI *xglGetImageSubresourceInfoType)(XGL_IMAGE image, const XGL_IMAGE_SUBRESOURCE* pSubresource, XGL_SUBRESOURCE_INFO_TYPE infoType, XGL_SIZE* pDataSize, XGL_VOID* pData);
 typedef XGL_RESULT (XGLAPI *xglCreateImageViewType)(XGL_DEVICE device, const XGL_IMAGE_VIEW_CREATE_INFO* pCreateInfo, XGL_IMAGE_VIEW* pView);
@@ -1892,7 +1946,7 @@
 typedef XGL_VOID (XGLAPI *xglEndDescriptorSetUpdateType)(XGL_DESCRIPTOR_SET descriptorSet);
 typedef XGL_VOID (XGLAPI *xglAttachSamplerDescriptorsType)(XGL_DESCRIPTOR_SET descriptorSet, XGL_UINT startSlot, XGL_UINT slotCount, const XGL_SAMPLER* pSamplers);
 typedef XGL_VOID (XGLAPI *xglAttachImageViewDescriptorsType)(XGL_DESCRIPTOR_SET descriptorSet, XGL_UINT startSlot, XGL_UINT slotCount, const XGL_IMAGE_VIEW_ATTACH_INFO* pImageViews);
-typedef XGL_VOID (XGLAPI *xglAttachMemoryViewDescriptorsType)(XGL_DESCRIPTOR_SET descriptorSet, XGL_UINT startSlot, XGL_UINT slotCount, const XGL_MEMORY_VIEW_ATTACH_INFO* pMemViews);
+typedef XGL_VOID (XGLAPI *xglAttachBufferViewDescriptorsType)(XGL_DESCRIPTOR_SET descriptorSet, XGL_UINT startSlot, XGL_UINT slotCount, const XGL_BUFFER_VIEW_ATTACH_INFO* pBufferViews);
 typedef XGL_VOID (XGLAPI *xglAttachNestedDescriptorsType)(XGL_DESCRIPTOR_SET descriptorSet, XGL_UINT startSlot, XGL_UINT slotCount, const XGL_DESCRIPTOR_SET_ATTACH_INFO* pNestedDescriptorSets);
 typedef XGL_VOID (XGLAPI *xglClearDescriptorSetSlotsType)(XGL_DESCRIPTOR_SET descriptorSet, XGL_UINT startSlot, XGL_UINT slotCount);
 typedef XGL_RESULT (XGLAPI *xglCreateViewportStateType)(XGL_DEVICE device, const XGL_VIEWPORT_STATE_CREATE_INFO* pCreateInfo, XGL_VIEWPORT_STATE_OBJECT* pState);
@@ -1908,38 +1962,38 @@
 typedef XGL_VOID (XGLAPI *xglCmdBindPipelineDeltaType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, XGL_PIPELINE_DELTA delta);
 typedef XGL_VOID (XGLAPI *xglCmdBindStateObjectType)(XGL_CMD_BUFFER cmdBuffer, XGL_STATE_BIND_POINT stateBindPoint, XGL_STATE_OBJECT state);
 typedef XGL_VOID (XGLAPI *xglCmdBindDescriptorSetType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, XGL_UINT index, XGL_DESCRIPTOR_SET descriptorSet, XGL_UINT slotOffset);
-typedef XGL_VOID (XGLAPI *xglCmdBindDynamicMemoryViewType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, const XGL_MEMORY_VIEW_ATTACH_INFO* pMemView);
-typedef XGL_VOID (XGLAPI *xglCmdBindVertexDataType)(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY mem, XGL_GPU_SIZE offset, XGL_UINT binding);
-typedef XGL_VOID (XGLAPI *xglCmdBindIndexDataType)(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY mem, XGL_GPU_SIZE offset, XGL_INDEX_TYPE indexType);
-typedef XGL_VOID (XGLAPI *xglCmdPrepareMemoryRegionsType)(XGL_CMD_BUFFER cmdBuffer, XGL_UINT transitionCount, const XGL_MEMORY_STATE_TRANSITION* pStateTransitions);
+typedef XGL_VOID (XGLAPI *xglCmdBindDynamicBufferViewType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, const XGL_BUFFER_VIEW_ATTACH_INFO* pBufferView);
+typedef XGL_VOID (XGLAPI *xglCmdBindVertexBufferType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER buffer, XGL_GPU_SIZE offset, XGL_UINT binding);
+typedef XGL_VOID (XGLAPI *xglCmdBindIndexBufferType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER buffer, XGL_GPU_SIZE offset, XGL_INDEX_TYPE indexType);
+typedef XGL_VOID (XGLAPI *xglCmdPrepareBufferRegionsType)(XGL_CMD_BUFFER cmdBuffer, XGL_UINT transitionCount, const XGL_BUFFER_STATE_TRANSITION* pStateTransitions);
 typedef XGL_VOID (XGLAPI *xglCmdPrepareImagesType)(XGL_CMD_BUFFER cmdBuffer, XGL_UINT transitionCount, const XGL_IMAGE_STATE_TRANSITION* pStateTransitions);
 typedef XGL_VOID (XGLAPI *xglCmdDrawType)(XGL_CMD_BUFFER cmdBuffer, XGL_UINT firstVertex, XGL_UINT vertexCount, XGL_UINT firstInstance, XGL_UINT instanceCount);
 typedef XGL_VOID (XGLAPI *xglCmdDrawIndexedType)(XGL_CMD_BUFFER cmdBuffer, XGL_UINT firstIndex, XGL_UINT indexCount, XGL_INT vertexOffset, XGL_UINT firstInstance, XGL_UINT instanceCount);
-typedef XGL_VOID (XGLAPI *xglCmdDrawIndirectType)(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY mem, XGL_GPU_SIZE offset, XGL_UINT32 count, XGL_UINT32 stride);
-typedef XGL_VOID (XGLAPI *xglCmdDrawIndexedIndirectType)(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY mem, XGL_GPU_SIZE offset, XGL_UINT32 count, XGL_UINT32 stride);
+typedef XGL_VOID (XGLAPI *xglCmdDrawIndirectType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER buffer, XGL_GPU_SIZE offset, XGL_UINT32 count, XGL_UINT32 stride);
+typedef XGL_VOID (XGLAPI *xglCmdDrawIndexedIndirectType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER buffer, XGL_GPU_SIZE offset, XGL_UINT32 count, XGL_UINT32 stride);
 typedef XGL_VOID (XGLAPI *xglCmdDispatchType)(XGL_CMD_BUFFER cmdBuffer, XGL_UINT x, XGL_UINT y, XGL_UINT z);
-typedef XGL_VOID (XGLAPI *xglCmdDispatchIndirectType)(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY mem, XGL_GPU_SIZE offset);
-typedef XGL_VOID (XGLAPI *xglCmdCopyMemoryType)(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY srcMem, XGL_GPU_MEMORY destMem, XGL_UINT regionCount, const XGL_MEMORY_COPY* pRegions);
+typedef XGL_VOID (XGLAPI *xglCmdDispatchIndirectType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER buffer, XGL_GPU_SIZE offset);
+typedef XGL_VOID (XGLAPI *xglCmdCopyBufferType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER srcBuffer, XGL_BUFFER destBuffer, XGL_UINT regionCount, const XGL_BUFFER_COPY* pRegions);
 typedef XGL_VOID (XGLAPI *xglCmdCopyImageType)(XGL_CMD_BUFFER cmdBuffer, XGL_IMAGE srcImage, XGL_IMAGE destImage, XGL_UINT regionCount, const XGL_IMAGE_COPY* pRegions);
-typedef XGL_VOID (XGLAPI *xglCmdCopyMemoryToImageType)(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY srcMem, XGL_IMAGE destImage, XGL_UINT regionCount, const XGL_MEMORY_IMAGE_COPY* pRegions);
-typedef XGL_VOID (XGLAPI *xglCmdCopyImageToMemoryType)(XGL_CMD_BUFFER cmdBuffer, XGL_IMAGE srcImage, XGL_GPU_MEMORY destMem, XGL_UINT regionCount, const XGL_MEMORY_IMAGE_COPY* pRegions);
+typedef XGL_VOID (XGLAPI *xglCmdCopyBufferToImageType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER srcBuffer, XGL_IMAGE destImage, XGL_UINT regionCount, const XGL_BUFFER_IMAGE_COPY* pRegions);
+typedef XGL_VOID (XGLAPI *xglCmdCopyImageToBufferType)(XGL_CMD_BUFFER cmdBuffer, XGL_IMAGE srcImage, XGL_BUFFER destBuffer, XGL_UINT regionCount, const XGL_BUFFER_IMAGE_COPY* pRegions);
 typedef XGL_VOID (XGLAPI *xglCmdCloneImageDataType)(XGL_CMD_BUFFER cmdBuffer, XGL_IMAGE srcImage, XGL_IMAGE_STATE srcImageState, XGL_IMAGE destImage, XGL_IMAGE_STATE destImageState);
-typedef XGL_VOID (XGLAPI *xglCmdUpdateMemoryType)(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY destMem, XGL_GPU_SIZE destOffset, XGL_GPU_SIZE dataSize, const XGL_UINT32* pData);
-typedef XGL_VOID (XGLAPI *xglCmdFillMemoryType)(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY destMem, XGL_GPU_SIZE destOffset, XGL_GPU_SIZE fillSize, XGL_UINT32 data);
+typedef XGL_VOID (XGLAPI *xglCmdUpdateBufferType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER destBuffer, XGL_GPU_SIZE destOffset, XGL_GPU_SIZE dataSize, const XGL_UINT32* pData);
+typedef XGL_VOID (XGLAPI *xglCmdFillBufferType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER destBuffer, XGL_GPU_SIZE destOffset, XGL_GPU_SIZE fillSize, XGL_UINT32 data);
 typedef XGL_VOID (XGLAPI *xglCmdClearColorImageType)(XGL_CMD_BUFFER cmdBuffer, XGL_IMAGE image, const XGL_FLOAT color[4], XGL_UINT rangeCount, const XGL_IMAGE_SUBRESOURCE_RANGE* pRanges);
 typedef XGL_VOID (XGLAPI *xglCmdClearColorImageRawType)(XGL_CMD_BUFFER cmdBuffer, XGL_IMAGE image, const XGL_UINT32 color[4], XGL_UINT rangeCount, const XGL_IMAGE_SUBRESOURCE_RANGE* pRanges);
 typedef XGL_VOID (XGLAPI *xglCmdClearDepthStencilType)(XGL_CMD_BUFFER cmdBuffer, XGL_IMAGE image, XGL_FLOAT depth, XGL_UINT32 stencil, XGL_UINT rangeCount, const XGL_IMAGE_SUBRESOURCE_RANGE* pRanges);
 typedef XGL_VOID (XGLAPI *xglCmdResolveImageType)(XGL_CMD_BUFFER cmdBuffer, XGL_IMAGE srcImage, XGL_IMAGE destImage, XGL_UINT rectCount, const XGL_IMAGE_RESOLVE* pRects);
 typedef XGL_VOID (XGLAPI *xglCmdSetEventType)(XGL_CMD_BUFFER cmdBuffer, XGL_EVENT event);
 typedef XGL_VOID (XGLAPI *xglCmdResetEventType)(XGL_CMD_BUFFER cmdBuffer, XGL_EVENT event);
-typedef XGL_VOID (XGLAPI *xglCmdMemoryAtomicType)(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY destMem, XGL_GPU_SIZE destOffset, XGL_UINT64 srcData, XGL_ATOMIC_OP atomicOp);
+typedef XGL_VOID (XGLAPI *xglCmdBufferAtomicType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER destBuffer, XGL_GPU_SIZE destOffset, XGL_UINT64 srcData, XGL_ATOMIC_OP atomicOp);
 typedef XGL_VOID (XGLAPI *xglCmdBeginQueryType)(XGL_CMD_BUFFER cmdBuffer, XGL_QUERY_POOL queryPool, XGL_UINT slot, XGL_FLAGS flags);
 typedef XGL_VOID (XGLAPI *xglCmdEndQueryType)(XGL_CMD_BUFFER cmdBuffer, XGL_QUERY_POOL queryPool, XGL_UINT slot);
 typedef XGL_VOID (XGLAPI *xglCmdResetQueryPoolType)(XGL_CMD_BUFFER cmdBuffer, XGL_QUERY_POOL queryPool, XGL_UINT startQuery, XGL_UINT queryCount);
-typedef XGL_VOID (XGLAPI *xglCmdWriteTimestampType)(XGL_CMD_BUFFER cmdBuffer, XGL_TIMESTAMP_TYPE timestampType, XGL_GPU_MEMORY destMem, XGL_GPU_SIZE destOffset);
+typedef XGL_VOID (XGLAPI *xglCmdWriteTimestampType)(XGL_CMD_BUFFER cmdBuffer, XGL_TIMESTAMP_TYPE timestampType, XGL_BUFFER destBuffer, XGL_GPU_SIZE destOffset);
 typedef XGL_VOID (XGLAPI *xglCmdInitAtomicCountersType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, XGL_UINT startCounter, XGL_UINT counterCount, const XGL_UINT32* pData);
-typedef XGL_VOID (XGLAPI *xglCmdLoadAtomicCountersType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, XGL_UINT startCounter, XGL_UINT counterCount, XGL_GPU_MEMORY srcMem, XGL_GPU_SIZE srcOffset);
-typedef XGL_VOID (XGLAPI *xglCmdSaveAtomicCountersType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, XGL_UINT startCounter, XGL_UINT counterCount, XGL_GPU_MEMORY destMem, XGL_GPU_SIZE destOffset);
+typedef XGL_VOID (XGLAPI *xglCmdLoadAtomicCountersType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, XGL_UINT startCounter, XGL_UINT counterCount, XGL_BUFFER srcBuffer, XGL_GPU_SIZE srcOffset);
+typedef XGL_VOID (XGLAPI *xglCmdSaveAtomicCountersType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, XGL_UINT startCounter, XGL_UINT counterCount, XGL_BUFFER destBuffer, XGL_GPU_SIZE destOffset);
 typedef XGL_RESULT (XGLAPI *xglCreateFramebufferType)(XGL_DEVICE device, const XGL_FRAMEBUFFER_CREATE_INFO* pCreateInfo, XGL_FRAMEBUFFER* pFramebuffer);
 typedef XGL_RESULT (XGLAPI *xglCreateRenderPassType)(XGL_DEVICE device, const XGL_RENDER_PASS_CREATE_INFO* pCreateInfo, XGL_RENDER_PASS* pRenderPass);
 
@@ -2055,15 +2109,6 @@
     XGL_SIZE                                    memSize,
     XGL_GPU_MEMORY*                             pMem);
 
-XGL_RESULT XGLAPI xglRemapVirtualMemoryPages(
-    XGL_DEVICE                                  device,
-    XGL_UINT                                    rangeCount,
-    const XGL_VIRTUAL_MEMORY_REMAP_RANGE*       pRanges,
-    XGL_UINT                                    preWaitSemaphoreCount,
-    const XGL_QUEUE_SEMAPHORE*                  pPreWaitSemaphores,
-    XGL_UINT                                    postSignalSemaphoreCount,
-    const XGL_QUEUE_SEMAPHORE*                  pPostSignalSemaphores);
-
 // Multi-device functions
 
 XGL_RESULT XGLAPI xglGetMultiGpuCompatibility(
@@ -2106,7 +2151,20 @@
 XGL_RESULT XGLAPI xglBindObjectMemory(
     XGL_OBJECT                                  object,
     XGL_GPU_MEMORY                              mem,
-    XGL_GPU_SIZE                                offset);
+    XGL_GPU_SIZE                                memOffset);
+
+XGL_RESULT XGLAPI xglBindObjectMemoryRange(
+    XGL_OBJECT                                  object,
+    XGL_GPU_SIZE                                rangeOffset,
+    XGL_GPU_SIZE                                rangeSize,
+    XGL_GPU_MEMORY                              mem,
+    XGL_GPU_SIZE                                memOffset);
+
+XGL_RESULT XGLAPI xglBindImageMemoryRange(
+    XGL_IMAGE                                   image,
+    const XGL_IMAGE_MEMORY_BIND_INFO*           bindInfo,
+    XGL_GPU_MEMORY                              mem,
+    XGL_GPU_SIZE                                memOffset);
 
 // Fence functions
 
@@ -2179,6 +2237,20 @@
     XGL_SIZE*                                   pDataSize,
     XGL_VOID*                                   pData);
 
+// Buffer functions
+
+XGL_RESULT XGLAPI xglCreateBuffer(
+    XGL_DEVICE                                  device,
+    const XGL_BUFFER_CREATE_INFO*               pCreateInfo,
+    XGL_BUFFER*                                 pBuffer);
+
+// Buffer view functions
+
+XGL_RESULT XGLAPI xglCreateBufferView(
+    XGL_DEVICE                                  device,
+    const XGL_BUFFER_VIEW_CREATE_INFO*          pCreateInfo,
+    XGL_BUFFER_VIEW*                            pView);
+
 // Image functions
 
 XGL_RESULT XGLAPI xglCreateImage(
@@ -2278,11 +2350,11 @@
     XGL_UINT                                    slotCount,
     const XGL_IMAGE_VIEW_ATTACH_INFO*           pImageViews);
 
-XGL_VOID XGLAPI xglAttachMemoryViewDescriptors(
+XGL_VOID XGLAPI xglAttachBufferViewDescriptors(
     XGL_DESCRIPTOR_SET                          descriptorSet,
     XGL_UINT                                    startSlot,
     XGL_UINT                                    slotCount,
-    const XGL_MEMORY_VIEW_ATTACH_INFO*          pMemViews);
+    const XGL_BUFFER_VIEW_ATTACH_INFO*          pBufferViews);
 
 XGL_VOID XGLAPI xglAttachNestedDescriptors(
     XGL_DESCRIPTOR_SET                          descriptorSet,
@@ -2363,29 +2435,29 @@
     XGL_DESCRIPTOR_SET                          descriptorSet,
     XGL_UINT                                    slotOffset);
 
-XGL_VOID XGLAPI xglCmdBindDynamicMemoryView(
+XGL_VOID XGLAPI xglCmdBindDynamicBufferView(
     XGL_CMD_BUFFER                              cmdBuffer,
     XGL_PIPELINE_BIND_POINT                     pipelineBindPoint,
-    const XGL_MEMORY_VIEW_ATTACH_INFO*          pMemView);
+    const XGL_BUFFER_VIEW_ATTACH_INFO*          pBufferView);
 
 // IMG CHANGE BEGIN - support for vertex input description
-XGL_VOID XGLAPI xglCmdBindVertexData(
+XGL_VOID XGLAPI xglCmdBindVertexBuffer(
     XGL_CMD_BUFFER                              cmdBuffer,
-    XGL_GPU_MEMORY                              mem,
+    XGL_BUFFER                                  buffer,
     XGL_GPU_SIZE                                offset,
     XGL_UINT                                    binding);
 // IMG CHANGE END
 
-XGL_VOID XGLAPI xglCmdBindIndexData(
+XGL_VOID XGLAPI xglCmdBindIndexBuffer(
     XGL_CMD_BUFFER                              cmdBuffer,
-    XGL_GPU_MEMORY                              mem,
+    XGL_BUFFER                                  buffer,
     XGL_GPU_SIZE                                offset,
     XGL_INDEX_TYPE                              indexType);
 
-XGL_VOID XGLAPI xglCmdPrepareMemoryRegions(
+XGL_VOID XGLAPI xglCmdPrepareBufferRegions(
     XGL_CMD_BUFFER                              cmdBuffer,
     XGL_UINT                                    transitionCount,
-    const XGL_MEMORY_STATE_TRANSITION*          pStateTransitions);
+    const XGL_BUFFER_STATE_TRANSITION*          pStateTransitions);
 
 XGL_VOID XGLAPI xglCmdPrepareImages(
     XGL_CMD_BUFFER                              cmdBuffer,
@@ -2409,14 +2481,14 @@
 
 XGL_VOID XGLAPI xglCmdDrawIndirect(
     XGL_CMD_BUFFER                              cmdBuffer,
-    XGL_GPU_MEMORY                              mem,
+    XGL_BUFFER                                  buffer,
     XGL_GPU_SIZE                                offset,
     XGL_UINT32                                  count,
     XGL_UINT32                                  stride);
 
 XGL_VOID XGLAPI xglCmdDrawIndexedIndirect(
     XGL_CMD_BUFFER                              cmdBuffer,
-    XGL_GPU_MEMORY                              mem,
+    XGL_BUFFER                                  buffer,
     XGL_GPU_SIZE                                offset,
     XGL_UINT32                                  count,
     XGL_UINT32                                  stride);
@@ -2429,15 +2501,15 @@
 
 XGL_VOID XGLAPI xglCmdDispatchIndirect(
     XGL_CMD_BUFFER                              cmdBuffer,
-    XGL_GPU_MEMORY                              mem,
+    XGL_BUFFER                                  buffer,
     XGL_GPU_SIZE                                offset);
 
-XGL_VOID XGLAPI xglCmdCopyMemory(
+XGL_VOID XGLAPI xglCmdCopyBuffer(
     XGL_CMD_BUFFER                              cmdBuffer,
-    XGL_GPU_MEMORY                              srcMem,
-    XGL_GPU_MEMORY                              destMem,
+    XGL_BUFFER                                  srcBuffer,
+    XGL_BUFFER                                  destBuffer,
     XGL_UINT                                    regionCount,
-    const XGL_MEMORY_COPY*                      pRegions);
+    const XGL_BUFFER_COPY*                      pRegions);
 
 XGL_VOID XGLAPI xglCmdCopyImage(
     XGL_CMD_BUFFER                              cmdBuffer,
@@ -2446,19 +2518,19 @@
     XGL_UINT                                    regionCount,
     const XGL_IMAGE_COPY*                       pRegions);
 
-XGL_VOID XGLAPI xglCmdCopyMemoryToImage(
+XGL_VOID XGLAPI xglCmdCopyBufferToImage(
     XGL_CMD_BUFFER                              cmdBuffer,
-    XGL_GPU_MEMORY                              srcMem,
+    XGL_BUFFER                                  srcBuffer,
     XGL_IMAGE                                   destImage,
     XGL_UINT                                    regionCount,
-    const XGL_MEMORY_IMAGE_COPY*                pRegions);
+    const XGL_BUFFER_IMAGE_COPY*                pRegions);
 
-XGL_VOID XGLAPI xglCmdCopyImageToMemory(
+XGL_VOID XGLAPI xglCmdCopyImageToBuffer(
     XGL_CMD_BUFFER                              cmdBuffer,
     XGL_IMAGE                                   srcImage,
-    XGL_GPU_MEMORY                              destMem,
+    XGL_BUFFER                                  destBuffer,
     XGL_UINT                                    regionCount,
-    const XGL_MEMORY_IMAGE_COPY*                pRegions);
+    const XGL_BUFFER_IMAGE_COPY*                pRegions);
 
 XGL_VOID XGLAPI xglCmdCloneImageData(
     XGL_CMD_BUFFER                              cmdBuffer,
@@ -2467,16 +2539,16 @@
     XGL_IMAGE                                   destImage,
     XGL_IMAGE_STATE                             destImageState);
 
-XGL_VOID XGLAPI xglCmdUpdateMemory(
+XGL_VOID XGLAPI xglCmdUpdateBuffer(
     XGL_CMD_BUFFER                              cmdBuffer,
-    XGL_GPU_MEMORY                              destMem,
+    XGL_BUFFER                                  destBuffer,
     XGL_GPU_SIZE                                destOffset,
     XGL_GPU_SIZE                                dataSize,
     const XGL_UINT32*                           pData);
 
-XGL_VOID XGLAPI xglCmdFillMemory(
+XGL_VOID XGLAPI xglCmdFillBuffer(
     XGL_CMD_BUFFER                              cmdBuffer,
-    XGL_GPU_MEMORY                              destMem,
+    XGL_BUFFER                                  destBuffer,
     XGL_GPU_SIZE                                destOffset,
     XGL_GPU_SIZE                                fillSize,
     XGL_UINT32                                  data);
@@ -2518,9 +2590,9 @@
     XGL_CMD_BUFFER                              cmdBuffer,
     XGL_EVENT                                   event);
 
-XGL_VOID XGLAPI xglCmdMemoryAtomic(
+XGL_VOID XGLAPI xglCmdBufferAtomic(
     XGL_CMD_BUFFER                              cmdBuffer,
-    XGL_GPU_MEMORY                              destMem,
+    XGL_BUFFER                                  destBuffer,
     XGL_GPU_SIZE                                destOffset,
     XGL_UINT64                                  srcData,
     XGL_ATOMIC_OP                               atomicOp);
@@ -2545,7 +2617,7 @@
 XGL_VOID XGLAPI xglCmdWriteTimestamp(
     XGL_CMD_BUFFER                              cmdBuffer,
     XGL_TIMESTAMP_TYPE                          timestampType,
-    XGL_GPU_MEMORY                              destMem,
+    XGL_BUFFER                                  destBuffer,
     XGL_GPU_SIZE                                destOffset);
 
 XGL_VOID XGLAPI xglCmdInitAtomicCounters(
@@ -2560,7 +2632,7 @@
     XGL_PIPELINE_BIND_POINT                     pipelineBindPoint,
     XGL_UINT                                    startCounter,
     XGL_UINT                                    counterCount,
-    XGL_GPU_MEMORY                              srcMem,
+    XGL_BUFFER                                  srcBuffer,
     XGL_GPU_SIZE                                srcOffset);
 
 XGL_VOID XGLAPI xglCmdSaveAtomicCounters(
@@ -2568,7 +2640,7 @@
     XGL_PIPELINE_BIND_POINT                     pipelineBindPoint,
     XGL_UINT                                    startCounter,
     XGL_UINT                                    counterCount,
-    XGL_GPU_MEMORY                              destMem,
+    XGL_BUFFER                                  destBuffer,
     XGL_GPU_SIZE                                destOffset);
 
 XGL_RESULT XGLAPI xglCreateFramebuffer(
@@ -2619,11 +2691,11 @@
     feedback is part of the pipeline, transform feedback binding would be available
     through a new API bind point:
 
-        xglCmdBindTransformFeedbackMemoryView(
+        xglCmdBindTransformFeedbackBufferView(
                 XGL_CMD_BUFFER                              cmdBuffer,
                 XGL_PIPELINE_BIND_POINT                     pipelineBindPoint, // = GRAPHICS
                 XGL_UINT                                    index,
-                const XGL_MEMORY_VIEW_ATTACH_INFO*          pMemView);
+                const XGL_BUFFER_VIEW_ATTACH_INFO*          pBufferView);
 
     2) "Bindless" + support for non-bindless hardware.
 
diff --git a/include/xglDbg.h b/include/xglDbg.h
index 69e39d6..3ea8448 100644
--- a/include/xglDbg.h
+++ b/include/xglDbg.h
@@ -87,6 +87,9 @@
     XGL_DBG_OBJECT_FRAMEBUFFER            = 0x1d,
     XGL_DBG_OBJECT_RENDER_PASS            = 0x1e,
 
+    XGL_DBG_OBJECT_BUFFER,
+    XGL_DBG_OBJECT_BUFFER_VIEW,
+
     XGL_DBG_OBJECT_TYPE_BEGIN_RANGE = XGL_DBG_OBJECT_UNKNOWN,
     XGL_DBG_OBJECT_TYPE_END_RANGE   = XGL_DBG_OBJECT_RENDER_PASS,
     XGL_NUM_DBG_OBJECT_TYPE         = (XGL_DBG_OBJECT_TYPE_END_RANGE - XGL_DBG_OBJECT_TYPE_BEGIN_RANGE + 1),
diff --git a/include/xglLayer.h b/include/xglLayer.h
index 6061d89..8c473ba 100644
--- a/include/xglLayer.h
+++ b/include/xglLayer.h
@@ -45,7 +45,6 @@
     xglMapMemoryType MapMemory;
     xglUnmapMemoryType UnmapMemory;
     xglPinSystemMemoryType PinSystemMemory;
-    xglRemapVirtualMemoryPagesType RemapVirtualMemoryPages;
     xglGetMultiGpuCompatibilityType GetMultiGpuCompatibility;
     xglOpenSharedMemoryType OpenSharedMemory;
     xglOpenSharedQueueSemaphoreType OpenSharedQueueSemaphore;
@@ -54,6 +53,8 @@
     xglDestroyObjectType DestroyObject;
     xglGetObjectInfoType GetObjectInfo;
     xglBindObjectMemoryType BindObjectMemory;
+    xglBindObjectMemoryRangeType BindObjectMemoryRange;
+    xglBindImageMemoryRangeType BindImageMemoryRange;
     xglCreateFenceType CreateFence;
     xglGetFenceStatusType GetFenceStatus;
     xglWaitForFencesType WaitForFences;
@@ -67,6 +68,8 @@
     xglCreateQueryPoolType CreateQueryPool;
     xglGetQueryPoolResultsType GetQueryPoolResults;
     xglGetFormatInfoType GetFormatInfo;
+    xglCreateBufferType CreateBuffer;
+    xglCreateBufferViewType CreateBufferView;
     xglCreateImageType CreateImage;
     xglGetImageSubresourceInfoType GetImageSubresourceInfo;
     xglCreateImageViewType CreateImageView;
@@ -84,7 +87,7 @@
     xglEndDescriptorSetUpdateType EndDescriptorSetUpdate;
     xglAttachSamplerDescriptorsType AttachSamplerDescriptors;
     xglAttachImageViewDescriptorsType AttachImageViewDescriptors;
-    xglAttachMemoryViewDescriptorsType AttachMemoryViewDescriptors;
+    xglAttachBufferViewDescriptorsType AttachBufferViewDescriptors;
     xglAttachNestedDescriptorsType AttachNestedDescriptors;
     xglClearDescriptorSetSlotsType ClearDescriptorSetSlots;
     xglCreateViewportStateType CreateViewportState;
@@ -100,10 +103,10 @@
     xglCmdBindPipelineDeltaType CmdBindPipelineDelta;
     xglCmdBindStateObjectType CmdBindStateObject;
     xglCmdBindDescriptorSetType CmdBindDescriptorSet;
-    xglCmdBindDynamicMemoryViewType CmdBindDynamicMemoryView;
-    xglCmdBindVertexDataType CmdBindVertexData;
-    xglCmdBindIndexDataType CmdBindIndexData;
-    xglCmdPrepareMemoryRegionsType CmdPrepareMemoryRegions;
+    xglCmdBindDynamicBufferViewType CmdBindDynamicBufferView;
+    xglCmdBindVertexBufferType CmdBindVertexBuffer;
+    xglCmdBindIndexBufferType CmdBindIndexBuffer;
+    xglCmdPrepareBufferRegionsType CmdPrepareBufferRegions;
     xglCmdPrepareImagesType CmdPrepareImages;
     xglCmdDrawType CmdDraw;
     xglCmdDrawIndexedType CmdDrawIndexed;
@@ -111,20 +114,20 @@
     xglCmdDrawIndexedIndirectType CmdDrawIndexedIndirect;
     xglCmdDispatchType CmdDispatch;
     xglCmdDispatchIndirectType CmdDispatchIndirect;
-    xglCmdCopyMemoryType CmdCopyMemory;
+    xglCmdCopyBufferType CmdCopyBuffer;
     xglCmdCopyImageType CmdCopyImage;
-    xglCmdCopyMemoryToImageType CmdCopyMemoryToImage;
-    xglCmdCopyImageToMemoryType CmdCopyImageToMemory;
+    xglCmdCopyBufferToImageType CmdCopyBufferToImage;
+    xglCmdCopyImageToBufferType CmdCopyImageToBuffer;
     xglCmdCloneImageDataType CmdCloneImageData;
-    xglCmdUpdateMemoryType CmdUpdateMemory;
-    xglCmdFillMemoryType CmdFillMemory;
+    xglCmdUpdateBufferType CmdUpdateBuffer;
+    xglCmdFillBufferType CmdFillBuffer;
     xglCmdClearColorImageType CmdClearColorImage;
     xglCmdClearColorImageRawType CmdClearColorImageRaw;
     xglCmdClearDepthStencilType CmdClearDepthStencil;
     xglCmdResolveImageType CmdResolveImage;
     xglCmdSetEventType CmdSetEvent;
     xglCmdResetEventType CmdResetEvent;
-    xglCmdMemoryAtomicType CmdMemoryAtomic;
+    xglCmdBufferAtomicType CmdBufferAtomic;
     xglCmdBeginQueryType CmdBeginQuery;
     xglCmdEndQueryType CmdEndQuery;
     xglCmdResetQueryPoolType CmdResetQueryPool;
diff --git a/tests/blit_tests.cpp b/tests/blit_tests.cpp
index a77764c..3fbc712 100644
--- a/tests/blit_tests.cpp
+++ b/tests/blit_tests.cpp
@@ -29,8 +29,6 @@
 
 namespace xgl_testing {
 
-typedef GpuMemory Buffer;
-
 XGL_SIZE get_format_size(XGL_FORMAT format);
 
 class Environment : public ::testing::Environment {
@@ -54,7 +52,7 @@
 
 class ImageChecker {
 public:
-    explicit ImageChecker(const XGL_IMAGE_CREATE_INFO &info, const std::vector<XGL_MEMORY_IMAGE_COPY> &regions)
+    explicit ImageChecker(const XGL_IMAGE_CREATE_INFO &info, const std::vector<XGL_BUFFER_IMAGE_COPY> &regions)
         : info_(info), regions_(regions), pattern_(HASH) {}
     explicit ImageChecker(const XGL_IMAGE_CREATE_INFO &info, const std::vector<XGL_IMAGE_SUBRESOURCE_RANGE> &ranges);
     explicit ImageChecker(const XGL_IMAGE_CREATE_INFO &info);
@@ -67,7 +65,7 @@
     bool check(Buffer &buf) const { return walk(CHECK, buf); }
     bool check(Image &img) const { return walk(CHECK, img); }
 
-    const std::vector<XGL_MEMORY_IMAGE_COPY> &regions() const { return regions_; }
+    const std::vector<XGL_BUFFER_IMAGE_COPY> &regions() const { return regions_; }
 
     static void hash_salt_generate() { hash_salt_++; }
 
@@ -83,18 +81,18 @@
     };
 
     XGL_SIZE buffer_cpp() const;
-    XGL_SUBRESOURCE_LAYOUT buffer_layout(const XGL_MEMORY_IMAGE_COPY &region) const;
+    XGL_SUBRESOURCE_LAYOUT buffer_layout(const XGL_BUFFER_IMAGE_COPY &region) const;
 
     bool walk(Action action, Buffer &buf) const;
     bool walk(Action action, Image &img) const;
-    bool walk_region(Action action, const XGL_MEMORY_IMAGE_COPY &region, const XGL_SUBRESOURCE_LAYOUT &layout, void *data) const;
+    bool walk_region(Action action, const XGL_BUFFER_IMAGE_COPY &region, const XGL_SUBRESOURCE_LAYOUT &layout, void *data) const;
 
     std::vector<uint8_t> pattern_hash(const XGL_IMAGE_SUBRESOURCE &subres, const XGL_OFFSET3D &offset) const;
 
     static uint32_t hash_salt_;
 
     XGL_IMAGE_CREATE_INFO info_;
-    std::vector<XGL_MEMORY_IMAGE_COPY> regions_;
+    std::vector<XGL_BUFFER_IMAGE_COPY> regions_;
 
     Pattern pattern_;
     std::vector<uint8_t> pattern_solid_;
@@ -179,9 +177,9 @@
     // create a region for every mip level in array slice 0
     XGL_GPU_SIZE offset = 0;
     for (XGL_UINT lv = 0; lv < info_.mipLevels; lv++) {
-        XGL_MEMORY_IMAGE_COPY region = {};
+        XGL_BUFFER_IMAGE_COPY region = {};
 
-        region.memOffset = offset;
+        region.bufferOffset = offset;
         region.imageSubresource.mipLevel = lv;
         region.imageSubresource.arraySlice = 0;
         region.imageExtent = Image::extent(info_.extent, lv);
@@ -216,9 +214,9 @@
 
         for (XGL_UINT slice = 1; slice < info_.arraySize; slice++) {
             for (XGL_UINT i = 0; i < slice_region_count; i++) {
-                XGL_MEMORY_IMAGE_COPY region = regions_[i];
+                XGL_BUFFER_IMAGE_COPY region = regions_[i];
 
-                region.memOffset += slice_pitch * slice;
+                region.bufferOffset += slice_pitch * slice;
                 region.imageSubresource.arraySlice = slice;
                 regions_.push_back(region);
             }
@@ -234,8 +232,8 @@
          it != ranges.end(); it++) {
         for (XGL_UINT lv = 0; lv < it->mipLevels; lv++) {
             for (XGL_UINT slice = 0; slice < it->arraySize; slice++) {
-                XGL_MEMORY_IMAGE_COPY region = {};
-                region.memOffset = offset;
+                XGL_BUFFER_IMAGE_COPY region = {};
+                region.bufferOffset = offset;
                 region.imageSubresource = Image::subresource(*it, lv, slice);
                 region.imageExtent = Image::extent(info_.extent, lv);
 
@@ -261,10 +259,10 @@
     return get_format_size(info_.format);
 }
 
-XGL_SUBRESOURCE_LAYOUT ImageChecker::buffer_layout(const XGL_MEMORY_IMAGE_COPY &region) const
+XGL_SUBRESOURCE_LAYOUT ImageChecker::buffer_layout(const XGL_BUFFER_IMAGE_COPY &region) const
 {
     XGL_SUBRESOURCE_LAYOUT layout = {};
-    layout.offset = region.memOffset;
+    layout.offset = region.bufferOffset;
     layout.rowPitch = buffer_cpp() * region.imageExtent.width;
     layout.depthPitch = layout.rowPitch * region.imageExtent.height;
     layout.size = layout.depthPitch * region.imageExtent.depth;
@@ -276,7 +274,7 @@
 {
     XGL_GPU_SIZE size = 0;
 
-    for (std::vector<XGL_MEMORY_IMAGE_COPY>::const_iterator it = regions_.begin();
+    for (std::vector<XGL_BUFFER_IMAGE_COPY>::const_iterator it = regions_.begin();
          it != regions_.end(); it++) {
         const XGL_SUBRESOURCE_LAYOUT layout = buffer_layout(*it);
         if (size < layout.offset + layout.size)
@@ -286,7 +284,7 @@
     return size;
 }
 
-bool ImageChecker::walk_region(Action action, const XGL_MEMORY_IMAGE_COPY &region,
+bool ImageChecker::walk_region(Action action, const XGL_BUFFER_IMAGE_COPY &region,
                                const XGL_SUBRESOURCE_LAYOUT &layout, void *data) const
 {
     for (XGL_INT z = 0; z < region.imageExtent.depth; z++) {
@@ -329,7 +327,7 @@
     if (!data)
         return false;
 
-    std::vector<XGL_MEMORY_IMAGE_COPY>::const_iterator it;
+    std::vector<XGL_BUFFER_IMAGE_COPY>::const_iterator it;
     for (it = regions_.begin(); it != regions_.end(); it++) {
         if (!walk_region(action, *it, buffer_layout(*it), data))
             break;
@@ -346,7 +344,7 @@
     if (!data)
         return false;
 
-    std::vector<XGL_MEMORY_IMAGE_COPY>::const_iterator it;
+    std::vector<XGL_BUFFER_IMAGE_COPY>::const_iterator it;
     for (it = regions_.begin(); it != regions_.end(); it++) {
         if (!walk_region(action, *it, img.subresource_layout(it->imageSubresource), data))
             break;
@@ -487,24 +485,6 @@
         }
     }
 
-    void add_memory_ref(const xgl_testing::GpuMemory &obj, XGL_FLAGS flags)
-    {
-        std::vector<XGL_MEMORY_REF>::iterator it;
-        for (it = mem_refs_.begin(); it != mem_refs_.end(); it++) {
-            if (it->mem == obj.obj())
-                break;
-        }
-
-        if (it == mem_refs_.end()) {
-            XGL_MEMORY_REF ref = {};
-            ref.mem = obj.obj();
-            ref.flags = flags;
-            mem_refs_.push_back(ref);
-        } else {
-            it->flags &= flags;
-        }
-    }
-
     xgl_testing::Device &dev_;
     xgl_testing::Queue &queue_;
     xgl_testing::CmdBuffer cmd_;
@@ -512,9 +492,9 @@
     std::vector<XGL_MEMORY_REF> mem_refs_;
 };
 
-typedef XglCmdBlitTest XglCmdFillMemoryTest;
+typedef XglCmdBlitTest XglCmdFillBufferTest;
 
-TEST_F(XglCmdFillMemoryTest, Basic)
+TEST_F(XglCmdFillBufferTest, Basic)
 {
     xgl_testing::Buffer buf;
 
@@ -522,8 +502,8 @@
     add_memory_ref(buf, 0);
 
     cmd_.begin();
-    xglCmdFillMemory(cmd_.obj(), buf.obj(), 0, 4, 0x11111111);
-    xglCmdFillMemory(cmd_.obj(), buf.obj(), 4, 16, 0x22222222);
+    xglCmdFillBuffer(cmd_.obj(), buf.obj(), 0, 4, 0x11111111);
+    xglCmdFillBuffer(cmd_.obj(), buf.obj(), 4, 16, 0x22222222);
     cmd_.end();
 
     submit_and_done();
@@ -537,7 +517,7 @@
     buf.unmap();
 }
 
-TEST_F(XglCmdFillMemoryTest, Large)
+TEST_F(XglCmdFillBufferTest, Large)
 {
     const XGL_GPU_SIZE size = 32 * 1024 * 1024;
     xgl_testing::Buffer buf;
@@ -546,8 +526,8 @@
     add_memory_ref(buf, 0);
 
     cmd_.begin();
-    xglCmdFillMemory(cmd_.obj(), buf.obj(), 0, size / 2, 0x11111111);
-    xglCmdFillMemory(cmd_.obj(), buf.obj(), size / 2, size / 2, 0x22222222);
+    xglCmdFillBuffer(cmd_.obj(), buf.obj(), 0, size / 2, 0x11111111);
+    xglCmdFillBuffer(cmd_.obj(), buf.obj(), size / 2, size / 2, 0x22222222);
     cmd_.end();
 
     submit_and_done();
@@ -561,7 +541,7 @@
     buf.unmap();
 }
 
-TEST_F(XglCmdFillMemoryTest, Overlap)
+TEST_F(XglCmdFillBufferTest, Overlap)
 {
     xgl_testing::Buffer buf;
 
@@ -569,8 +549,8 @@
     add_memory_ref(buf, 0);
 
     cmd_.begin();
-    xglCmdFillMemory(cmd_.obj(), buf.obj(), 0, 48, 0x11111111);
-    xglCmdFillMemory(cmd_.obj(), buf.obj(), 32, 32, 0x22222222);
+    xglCmdFillBuffer(cmd_.obj(), buf.obj(), 0, 48, 0x11111111);
+    xglCmdFillBuffer(cmd_.obj(), buf.obj(), 32, 32, 0x22222222);
     cmd_.end();
 
     submit_and_done();
@@ -584,7 +564,7 @@
     buf.unmap();
 }
 
-TEST_F(XglCmdFillMemoryTest, MultiAlignments)
+TEST_F(XglCmdFillBufferTest, MultiAlignments)
 {
     xgl_testing::Buffer bufs[9];
     XGL_GPU_SIZE size = 4;
@@ -593,7 +573,7 @@
     for (int i = 0; i < ARRAY_SIZE(bufs); i++) {
         bufs[i].init(dev_, size);
         add_memory_ref(bufs[i], 0);
-        xglCmdFillMemory(cmd_.obj(), bufs[i].obj(), 0, size, 0x11111111);
+        xglCmdFillBuffer(cmd_.obj(), bufs[i].obj(), 0, size, 0x11111111);
         size <<= 1;
     }
     cmd_.end();
@@ -613,9 +593,9 @@
     }
 }
 
-typedef XglCmdBlitTest XglCmdCopyMemoryTest;
+typedef XglCmdBlitTest XglCmdCopyBufferTest;
 
-TEST_F(XglCmdCopyMemoryTest, Basic)
+TEST_F(XglCmdCopyBufferTest, Basic)
 {
     xgl_testing::Buffer src, dst;
 
@@ -629,9 +609,9 @@
     add_memory_ref(dst, 0);
 
     cmd_.begin();
-    XGL_MEMORY_COPY region = {};
+    XGL_BUFFER_COPY region = {};
     region.copySize = 4;
-    xglCmdCopyMemory(cmd_.obj(), src.obj(), dst.obj(), 1, &region);
+    xglCmdCopyBuffer(cmd_.obj(), src.obj(), dst.obj(), 1, &region);
     cmd_.end();
 
     submit_and_done();
@@ -641,7 +621,7 @@
     dst.unmap();
 }
 
-TEST_F(XglCmdCopyMemoryTest, Large)
+TEST_F(XglCmdCopyBufferTest, Large)
 {
     const XGL_GPU_SIZE size = 32 * 1024 * 1024;
     xgl_testing::Buffer src, dst;
@@ -658,9 +638,9 @@
     add_memory_ref(dst, 0);
 
     cmd_.begin();
-    XGL_MEMORY_COPY region = {};
+    XGL_BUFFER_COPY region = {};
     region.copySize = size;
-    xglCmdCopyMemory(cmd_.obj(), src.obj(), dst.obj(), 1, &region);
+    xglCmdCopyBuffer(cmd_.obj(), src.obj(), dst.obj(), 1, &region);
     cmd_.end();
 
     submit_and_done();
@@ -671,9 +651,9 @@
     dst.unmap();
 }
 
-TEST_F(XglCmdCopyMemoryTest, MultiAlignments)
+TEST_F(XglCmdCopyBufferTest, MultiAlignments)
 {
-    const XGL_MEMORY_COPY regions[] = {
+    const XGL_BUFFER_COPY regions[] = {
         /* well aligned */
         {  0,   0,  256 },
         {  0, 256,  128 },
@@ -702,14 +682,14 @@
     add_memory_ref(dst, 0);
 
     cmd_.begin();
-    xglCmdCopyMemory(cmd_.obj(), src.obj(), dst.obj(), ARRAY_SIZE(regions), regions);
+    xglCmdCopyBuffer(cmd_.obj(), src.obj(), dst.obj(), ARRAY_SIZE(regions), regions);
     cmd_.end();
 
     submit_and_done();
 
     data = static_cast<uint8_t *>(dst.map());
     for (int i = 0; i < ARRAY_SIZE(regions); i++) {
-        const XGL_MEMORY_COPY &r = regions[i];
+        const XGL_BUFFER_COPY &r = regions[i];
 
         for (int j = 0; j < r.copySize; j++) {
             EXPECT_EQ(r.srcOffset + j, data[r.destOffset + j]) <<
@@ -720,7 +700,7 @@
     dst.unmap();
 }
 
-TEST_F(XglCmdCopyMemoryTest, RAWHazard)
+TEST_F(XglCmdCopyBufferTest, RAWHazard)
 {
     xgl_testing::Buffer bufs[3];
 
@@ -735,21 +715,21 @@
 
     cmd_.begin();
 
-    xglCmdFillMemory(cmd_.obj(), bufs[0].obj(), 0, 4, 0x11111111);
+    xglCmdFillBuffer(cmd_.obj(), bufs[0].obj(), 0, 4, 0x11111111);
     // is this necessary?
-    XGL_MEMORY_STATE_TRANSITION transition = bufs[0].state_transition(
-            XGL_MEMORY_STATE_DATA_TRANSFER, XGL_MEMORY_STATE_DATA_TRANSFER, 0, 4);
-    xglCmdPrepareMemoryRegions(cmd_.obj(), 1, &transition);
+    XGL_BUFFER_STATE_TRANSITION transition = bufs[0].state_transition(
+            XGL_BUFFER_STATE_DATA_TRANSFER, XGL_BUFFER_STATE_DATA_TRANSFER, 0, 4);
+    xglCmdPrepareBufferRegions(cmd_.obj(), 1, &transition);
 
-    XGL_MEMORY_COPY region = {};
+    XGL_BUFFER_COPY region = {};
     region.copySize = 4;
-    xglCmdCopyMemory(cmd_.obj(), bufs[0].obj(), bufs[1].obj(), 1, &region);
+    xglCmdCopyBuffer(cmd_.obj(), bufs[0].obj(), bufs[1].obj(), 1, &region);
     // is this necessary?
     transition = bufs[1].state_transition(
-            XGL_MEMORY_STATE_DATA_TRANSFER, XGL_MEMORY_STATE_DATA_TRANSFER, 0, 4);
-    xglCmdPrepareMemoryRegions(cmd_.obj(), 1, &transition);
+            XGL_BUFFER_STATE_DATA_TRANSFER, XGL_BUFFER_STATE_DATA_TRANSFER, 0, 4);
+    xglCmdPrepareBufferRegions(cmd_.obj(), 1, &transition);
 
-    xglCmdCopyMemory(cmd_.obj(), bufs[1].obj(), bufs[2].obj(), 1, &region);
+    xglCmdCopyBuffer(cmd_.obj(), bufs[1].obj(), bufs[2].obj(), 1, &region);
     cmd_.end();
 
     submit_and_done();
@@ -806,7 +786,7 @@
 
         // copy in and tile
         cmd_.begin();
-        xglCmdCopyMemoryToImage(cmd_.obj(), in_buf.obj(), img.obj(),
+        xglCmdCopyBufferToImage(cmd_.obj(), in_buf.obj(), img.obj(),
                 checker.regions().size(), &checker.regions()[0]);
         cmd_.end();
 
@@ -830,7 +810,7 @@
 
         // copy out and linearize
         cmd_.begin();
-        xglCmdCopyImageToMemory(cmd_.obj(), img.obj(), out_buf.obj(),
+        xglCmdCopyImageToBuffer(cmd_.obj(), img.obj(), out_buf.obj(),
                 checker.regions().size(), &checker.regions()[0]);
         cmd_.end();
 
@@ -844,7 +824,7 @@
     XGL_FORMAT first_optimal_format_;
 };
 
-class XglCmdCopyMemoryToImageTest : public XglCmdBlitImageTest {
+class XglCmdCopyBufferToImageTest : public XglCmdBlitImageTest {
 protected:
     virtual void SetUp()
     {
@@ -866,7 +846,7 @@
         add_memory_ref(img, 0);
 
         cmd_.begin();
-        xglCmdCopyMemoryToImage(cmd_.obj(), buf.obj(), img.obj(),
+        xglCmdCopyBufferToImage(cmd_.obj(), buf.obj(), img.obj(),
                 checker.regions().size(), &checker.regions()[0]);
         cmd_.end();
 
@@ -875,7 +855,7 @@
         check_dst(img, checker);
     }
 
-    void test_copy_memory_to_image(const XGL_IMAGE_CREATE_INFO &img_info, const std::vector<XGL_MEMORY_IMAGE_COPY> &regions)
+    void test_copy_memory_to_image(const XGL_IMAGE_CREATE_INFO &img_info, const std::vector<XGL_BUFFER_IMAGE_COPY> &regions)
     {
         xgl_testing::ImageChecker checker(img_info, regions);
         test_copy_memory_to_image(img_info, checker);
@@ -888,7 +868,7 @@
     }
 };
 
-TEST_F(XglCmdCopyMemoryToImageTest, Basic)
+TEST_F(XglCmdCopyBufferToImageTest, Basic)
 {
     for (std::vector<xgl_testing::Device::Format>::const_iterator it = test_formats_.begin();
          it != test_formats_.end(); it++) {
@@ -903,7 +883,7 @@
     }
 }
 
-class XglCmdCopyImageToMemoryTest : public XglCmdBlitImageTest {
+class XglCmdCopyImageToBufferTest : public XglCmdBlitImageTest {
 protected:
     virtual void SetUp()
     {
@@ -925,7 +905,7 @@
         add_memory_ref(buf, 0);
 
         cmd_.begin();
-        xglCmdCopyImageToMemory(cmd_.obj(), img.obj(), buf.obj(),
+        xglCmdCopyImageToBuffer(cmd_.obj(), img.obj(), buf.obj(),
                 checker.regions().size(), &checker.regions()[0]);
         cmd_.end();
 
@@ -934,7 +914,7 @@
         checker.check(buf);
     }
 
-    void test_copy_image_to_memory(const XGL_IMAGE_CREATE_INFO &img_info, const std::vector<XGL_MEMORY_IMAGE_COPY> &regions)
+    void test_copy_image_to_memory(const XGL_IMAGE_CREATE_INFO &img_info, const std::vector<XGL_BUFFER_IMAGE_COPY> &regions)
     {
         xgl_testing::ImageChecker checker(img_info, regions);
         test_copy_image_to_memory(img_info, checker);
@@ -947,7 +927,7 @@
     }
 };
 
-TEST_F(XglCmdCopyImageToMemoryTest, Basic)
+TEST_F(XglCmdCopyImageToBufferTest, Basic)
 {
     for (std::vector<xgl_testing::Device::Format>::const_iterator it = test_formats_.begin();
          it != test_formats_.end(); it++) {
@@ -974,19 +954,19 @@
     void test_copy_image(const XGL_IMAGE_CREATE_INFO &src_info, const XGL_IMAGE_CREATE_INFO &dst_info,
                          const std::vector<XGL_IMAGE_COPY> &copies)
     {
-        // convert XGL_IMAGE_COPY to two sets of XGL_MEMORY_IMAGE_COPY
-        std::vector<XGL_MEMORY_IMAGE_COPY> src_regions, dst_regions;
+        // convert XGL_IMAGE_COPY to two sets of XGL_BUFFER_IMAGE_COPY
+        std::vector<XGL_BUFFER_IMAGE_COPY> src_regions, dst_regions;
         XGL_GPU_SIZE src_offset = 0, dst_offset = 0;
         for (std::vector<XGL_IMAGE_COPY>::const_iterator it = copies.begin(); it != copies.end(); it++) {
-            XGL_MEMORY_IMAGE_COPY src_region = {}, dst_region = {};
+            XGL_BUFFER_IMAGE_COPY src_region = {}, dst_region = {};
 
-            src_region.memOffset = src_offset;
+            src_region.bufferOffset = src_offset;
             src_region.imageSubresource = it->srcSubresource;
             src_region.imageOffset = it->srcOffset;
             src_region.imageExtent = it->extent;
             src_regions.push_back(src_region);
 
-            dst_region.memOffset = src_offset;
+            dst_region.bufferOffset = src_offset;
             dst_region.imageSubresource = it->destSubresource;
             dst_region.imageOffset = it->destOffset;
             dst_region.imageExtent = it->extent;
diff --git a/tests/render_tests.cpp b/tests/render_tests.cpp
index bcab74c..3773263 100644
--- a/tests/render_tests.cpp
+++ b/tests/render_tests.cpp
@@ -470,14 +470,14 @@
 
     XglShaderObj vs(m_device,vertShaderText,XGL_SHADER_STAGE_VERTEX, this);
     XglShaderObj ps(m_device,fragShaderText, XGL_SHADER_STAGE_FRAGMENT, this);
-    vs.BindShaderEntitySlotToMemory(0, XGL_SLOT_SHADER_RESOURCE, &constantBuffer);
+    vs.BindShaderEntitySlotToBuffer(0, XGL_SLOT_SHADER_RESOURCE, &constantBuffer);
 
     XglPipelineObj pipelineobj(m_device);
     pipelineobj.AddShader(&vs);
     pipelineobj.AddShader(&ps);
 
     XglDescriptorSetObj descriptorSet(m_device);
-    descriptorSet.AttachMemoryView(&constantBuffer);
+    descriptorSet.AttachBufferView(&constantBuffer);
     m_memoryRefManager.AddMemoryRef(&constantBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
@@ -749,7 +749,7 @@
     ASSERT_NO_FATAL_FAILURE(InitViewport());
 
     XglConstantBufferObj meshBuffer(m_device,sizeof(g_vbData)/sizeof(g_vbData[0]),sizeof(g_vbData[0]), g_vbData);
-    meshBuffer.SetMemoryState(XGL_MEMORY_STATE_GRAPHICS_SHADER_READ_ONLY);
+    meshBuffer.SetBufferState(XGL_BUFFER_STATE_GRAPHICS_SHADER_READ_ONLY);
 
     XglShaderObj vs(m_device,vertShaderText,XGL_SHADER_STAGE_VERTEX, this);
     XglShaderObj ps(m_device,fragShaderText, XGL_SHADER_STAGE_FRAGMENT, this);
@@ -759,7 +759,7 @@
     pipelineobj.AddShader(&ps);
 
     XglDescriptorSetObj descriptorSet(m_device);
-    descriptorSet.AttachMemoryView(&meshBuffer);
+    descriptorSet.AttachBufferView(&meshBuffer);
 
     XGL_VERTEX_INPUT_BINDING_DESCRIPTION vi_binding = {
          sizeof(g_vbData[0]),              // strideInBytes;  Distance between vertices in bytes (0 = no advancement)
@@ -825,7 +825,7 @@
     ASSERT_NO_FATAL_FAILURE(InitViewport());
 
     XglConstantBufferObj meshBuffer(m_device, sizeof(vb_data) / sizeof(vb_data[0]), sizeof(vb_data[0]), vb_data);
-    meshBuffer.SetMemoryState(XGL_MEMORY_STATE_GRAPHICS_SHADER_READ_ONLY);
+    meshBuffer.SetBufferState(XGL_BUFFER_STATE_GRAPHICS_SHADER_READ_ONLY);
 
     XglShaderObj vs(m_device,vertShaderText,XGL_SHADER_STAGE_VERTEX, this);
     XglShaderObj ps(m_device,fragShaderText, XGL_SHADER_STAGE_FRAGMENT, this);
@@ -932,11 +932,11 @@
     ASSERT_NO_FATAL_FAILURE(InitViewport());
 
     XglConstantBufferObj meshBuffer(m_device,sizeof(g_vbData)/sizeof(g_vbData[0]),sizeof(g_vbData[0]), g_vbData);
-    meshBuffer.SetMemoryState(XGL_MEMORY_STATE_GRAPHICS_SHADER_READ_ONLY);
+    meshBuffer.SetBufferState(XGL_BUFFER_STATE_GRAPHICS_SHADER_READ_ONLY);
 
     XglIndexBufferObj indexBuffer(m_device);
     indexBuffer.CreateAndInitBuffer(sizeof(g_idxData)/sizeof(g_idxData[0]), XGL_INDEX_16, g_idxData);
-    indexBuffer.SetMemoryState(XGL_MEMORY_STATE_INDEX_DATA);
+    indexBuffer.SetBufferState(XGL_BUFFER_STATE_INDEX_DATA);
 
     XglShaderObj vs(m_device,vertShaderText,XGL_SHADER_STAGE_VERTEX, this);
     XglShaderObj ps(m_device,fragShaderText, XGL_SHADER_STAGE_FRAGMENT, this);
@@ -1030,7 +1030,7 @@
     ASSERT_NO_FATAL_FAILURE(InitViewport());
 
     XglConstantBufferObj meshBuffer(m_device,sizeof(g_vbData)/sizeof(g_vbData[0]),sizeof(g_vbData[0]), g_vbData);
-    meshBuffer.SetMemoryState(XGL_MEMORY_STATE_GRAPHICS_SHADER_READ_ONLY);
+    meshBuffer.SetBufferState(XGL_BUFFER_STATE_GRAPHICS_SHADER_READ_ONLY);
 
     XglShaderObj vs(m_device,vertShaderText,XGL_SHADER_STAGE_VERTEX, this);
     XglShaderObj ps(m_device,fragShaderText, XGL_SHADER_STAGE_FRAGMENT, this);
@@ -1040,7 +1040,7 @@
     pipelineobj.AddShader(&ps);
 
     XglDescriptorSetObj descriptorSet(m_device);
-    descriptorSet.AttachMemoryView(&meshBuffer);
+    descriptorSet.AttachBufferView(&meshBuffer);
 
     XGL_VERTEX_INPUT_BINDING_DESCRIPTION vi_binding = {
          sizeof(g_vbData[0]),              // strideInBytes;  Distance between vertices in bytes (0 = no advancement)
@@ -1124,7 +1124,7 @@
     ASSERT_NO_FATAL_FAILURE(InitViewport());
 
     XglConstantBufferObj meshBuffer(m_device,sizeof(g_vbData)/sizeof(g_vbData[0]),sizeof(g_vbData[0]), g_vbData);
-    meshBuffer.SetMemoryState(XGL_MEMORY_STATE_GRAPHICS_SHADER_READ_ONLY);
+    meshBuffer.SetBufferState(XGL_BUFFER_STATE_GRAPHICS_SHADER_READ_ONLY);
 
     XglShaderObj vs(m_device,vertShaderText,XGL_SHADER_STAGE_VERTEX, this);
     XglShaderObj ps(m_device,fragShaderText, XGL_SHADER_STAGE_FRAGMENT, this);
@@ -1134,7 +1134,7 @@
     pipelineobj.AddShader(&ps);
 
     XglDescriptorSetObj descriptorSet(m_device);
-    descriptorSet.AttachMemoryView(&meshBuffer);
+    descriptorSet.AttachBufferView(&meshBuffer);
 
     XGL_VERTEX_INPUT_BINDING_DESCRIPTION vi_binding = {
          sizeof(g_vbData[0]),              // strideInBytes;  Distance between vertices in bytes (0 = no advancement)
@@ -1228,7 +1228,7 @@
     ASSERT_NO_FATAL_FAILURE(InitViewport());
 
     XglConstantBufferObj meshBuffer(m_device,sizeof(g_vbData)/sizeof(g_vbData[0]),sizeof(g_vbData[0]), g_vbData);
-    meshBuffer.SetMemoryState(XGL_MEMORY_STATE_GRAPHICS_SHADER_READ_ONLY);
+    meshBuffer.SetBufferState(XGL_BUFFER_STATE_GRAPHICS_SHADER_READ_ONLY);
 
     XglShaderObj vs(m_device,vertShaderText,XGL_SHADER_STAGE_VERTEX, this);
     XglShaderObj ps(m_device,fragShaderText, XGL_SHADER_STAGE_FRAGMENT, this);
@@ -1238,7 +1238,7 @@
     pipelineobj.AddShader(&ps);
 
     XglDescriptorSetObj descriptorSet(m_device);
-    descriptorSet.AttachMemoryView(&meshBuffer);
+    descriptorSet.AttachBufferView(&meshBuffer);
 
     XGL_VERTEX_INPUT_BINDING_DESCRIPTION vi_binding = {
          sizeof(g_vbData[0]),              // strideInBytes;  Distance between vertices in bytes (0 = no advancement)
@@ -1322,7 +1322,7 @@
     ASSERT_NO_FATAL_FAILURE(InitViewport());
 
     XglConstantBufferObj meshBuffer(m_device,sizeof(g_vbData)/sizeof(g_vbData[0]),sizeof(g_vbData[0]), g_vbData);
-    meshBuffer.SetMemoryState(XGL_MEMORY_STATE_GRAPHICS_SHADER_READ_ONLY);
+    meshBuffer.SetBufferState(XGL_BUFFER_STATE_GRAPHICS_SHADER_READ_ONLY);
 
     XglShaderObj vs(m_device,vertShaderText,XGL_SHADER_STAGE_VERTEX, this);
     XglShaderObj ps(m_device,fragShaderText, XGL_SHADER_STAGE_FRAGMENT, this);
@@ -1332,7 +1332,7 @@
     pipelineobj.AddShader(&ps);
 
     XglDescriptorSetObj descriptorSet(m_device);
-    descriptorSet.AttachMemoryView(&meshBuffer);
+    descriptorSet.AttachBufferView(&meshBuffer);
 
     XGL_VERTEX_INPUT_BINDING_DESCRIPTION vi_binding = {
          sizeof(g_vbData[0]),              // strideInBytes;  Distance between vertices in bytes (0 = no advancement)
@@ -1417,7 +1417,7 @@
     XglShaderObj vs(m_device,vertShaderText,XGL_SHADER_STAGE_VERTEX, this);
     XglShaderObj ps(m_device,fragShaderText, XGL_SHADER_STAGE_FRAGMENT, this);
 
-    vs.BindShaderEntitySlotToMemory(0, XGL_SLOT_SHADER_RESOURCE, &MVPBuffer);
+    vs.BindShaderEntitySlotToBuffer(0, XGL_SLOT_SHADER_RESOURCE, &MVPBuffer);
 
     XglPipelineObj pipelineobj(m_device);
     pipelineobj.AddShader(&vs);
@@ -1425,7 +1425,7 @@
 
     // Create descriptor set and attach the constant buffer to it
     XglDescriptorSetObj descriptorSet(m_device);
-    descriptorSet.AttachMemoryView(&MVPBuffer);
+    descriptorSet.AttachBufferView(&MVPBuffer);
 
     m_memoryRefManager.AddMemoryRef(&MVPBuffer);
 
@@ -1562,7 +1562,7 @@
     ASSERT_NO_FATAL_FAILURE(InitViewport());
 
     XglConstantBufferObj meshBuffer(m_device,sizeof(g_vbData)/sizeof(g_vbData[0]),sizeof(g_vbData[0]), g_vbData);
-    meshBuffer.SetMemoryState(XGL_MEMORY_STATE_GRAPHICS_SHADER_READ_ONLY);
+    meshBuffer.SetBufferState(XGL_BUFFER_STATE_GRAPHICS_SHADER_READ_ONLY);
 
     XglShaderObj vs(m_device,vertShaderText,XGL_SHADER_STAGE_VERTEX, this);
     XglShaderObj ps(m_device,fragShaderText, XGL_SHADER_STAGE_FRAGMENT, this);
@@ -1572,7 +1572,7 @@
     pipelineobj.AddShader(&ps);
 
     XglDescriptorSetObj descriptorSet(m_device);
-    descriptorSet.AttachMemoryView(&meshBuffer);
+    descriptorSet.AttachBufferView(&meshBuffer);
 
     XGL_VERTEX_INPUT_BINDING_DESCRIPTION vi_binding = {
          sizeof(g_vbData[0]),              // strideInBytes;  Distance between vertices in bytes (0 = no advancement)
@@ -1655,7 +1655,7 @@
     ASSERT_NO_FATAL_FAILURE(InitViewport());
 
     XglConstantBufferObj meshBuffer(m_device,sizeof(g_vbData)/sizeof(g_vbData[0]),sizeof(g_vbData[0]), g_vbData);
-    meshBuffer.SetMemoryState(XGL_MEMORY_STATE_GRAPHICS_SHADER_READ_ONLY);
+    meshBuffer.SetBufferState(XGL_BUFFER_STATE_GRAPHICS_SHADER_READ_ONLY);
 
     XglShaderObj vs(m_device,vertShaderText,XGL_SHADER_STAGE_VERTEX, this);
     XglShaderObj ps(m_device,fragShaderText, XGL_SHADER_STAGE_FRAGMENT, this);
@@ -1665,7 +1665,7 @@
     pipelineobj.AddShader(&ps);
 
     XglDescriptorSetObj descriptorSet(m_device);
-    descriptorSet.AttachMemoryView(&meshBuffer);
+    descriptorSet.AttachBufferView(&meshBuffer);
 
     XGL_VERTEX_INPUT_BINDING_DESCRIPTION vi_binding = {
          sizeof(g_vbData[0]),              // strideInBytes;  Distance between vertices in bytes (0 = no advancement)
@@ -1756,14 +1756,14 @@
     XglShaderObj vs(m_device,vertShaderText,XGL_SHADER_STAGE_VERTEX, this);
     XglShaderObj ps(m_device,fragShaderText, XGL_SHADER_STAGE_FRAGMENT, this);
 
-    vs.BindShaderEntitySlotToMemory(0, XGL_SLOT_SHADER_RESOURCE, &MVPBuffer);
+    vs.BindShaderEntitySlotToBuffer(0, XGL_SLOT_SHADER_RESOURCE, &MVPBuffer);
 
     XglPipelineObj pipelineobj(m_device);
     pipelineobj.AddShader(&vs);
     pipelineobj.AddShader(&ps);
 
     XglDescriptorSetObj descriptorSet(m_device);
-    descriptorSet.AttachMemoryView(&MVPBuffer);
+    descriptorSet.AttachBufferView(&MVPBuffer);
 
     m_memoryRefManager.AddMemoryRef(&meshBuffer);
     m_memoryRefManager.AddMemoryRef(&MVPBuffer);
@@ -2278,14 +2278,14 @@
                                          1.0, 1.0, 1.0, 1.0 };
 
     XglConstantBufferObj colorBuffer(m_device, valCount, sizeof(bufferVals[0]), (const void*) bufferVals);
-    vs.BindShaderEntitySlotToMemory(0, XGL_SLOT_SHADER_RESOURCE, &colorBuffer);
+    vs.BindShaderEntitySlotToBuffer(0, XGL_SLOT_SHADER_RESOURCE, &colorBuffer);
 
     XglPipelineObj pipelineobj(m_device);
     pipelineobj.AddShader(&vs);
     pipelineobj.AddShader(&ps);
 
     XglDescriptorSetObj descriptorSet(m_device);
-    descriptorSet.AttachMemoryView(&colorBuffer);
+    descriptorSet.AttachBufferView(&colorBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
     XglCommandBufferObj cmdBuffer(m_device);
@@ -2372,26 +2372,26 @@
     const int whiteCount = sizeof(whiteVals) / sizeof(float);
 
     XglConstantBufferObj redBuffer(m_device, redCount, sizeof(redVals[0]), (const void*) redVals);
-    ps.BindShaderEntitySlotToMemory(0, XGL_SLOT_SHADER_RESOURCE, &redBuffer);
+    ps.BindShaderEntitySlotToBuffer(0, XGL_SLOT_SHADER_RESOURCE, &redBuffer);
 
     XglConstantBufferObj greenBuffer(m_device, greenCount, sizeof(greenVals[0]), (const void*) greenVals);
-    ps.BindShaderEntitySlotToMemory(1, XGL_SLOT_SHADER_RESOURCE, &greenBuffer);
+    ps.BindShaderEntitySlotToBuffer(1, XGL_SLOT_SHADER_RESOURCE, &greenBuffer);
 
     XglConstantBufferObj blueBuffer(m_device, blueCount, sizeof(blueVals[0]), (const void*) blueVals);
-    ps.BindShaderEntitySlotToMemory(2, XGL_SLOT_SHADER_RESOURCE, &blueBuffer);
+    ps.BindShaderEntitySlotToBuffer(2, XGL_SLOT_SHADER_RESOURCE, &blueBuffer);
 
     XglConstantBufferObj whiteBuffer(m_device, whiteCount, sizeof(whiteVals[0]), (const void*) whiteVals);
-    ps.BindShaderEntitySlotToMemory(18, XGL_SLOT_SHADER_RESOURCE, &whiteBuffer);
+    ps.BindShaderEntitySlotToBuffer(18, XGL_SLOT_SHADER_RESOURCE, &whiteBuffer);
 
     XglPipelineObj pipelineobj(m_device);
     pipelineobj.AddShader(&vs);
     pipelineobj.AddShader(&ps);
 
     XglDescriptorSetObj descriptorSet(m_device);
-    descriptorSet.AttachMemoryView(&redBuffer);
-    descriptorSet.AttachMemoryView(&greenBuffer);
-    descriptorSet.AttachMemoryView(&blueBuffer);
-    descriptorSet.AttachMemoryView(&whiteBuffer);
+    descriptorSet.AttachBufferView(&redBuffer);
+    descriptorSet.AttachBufferView(&greenBuffer);
+    descriptorSet.AttachBufferView(&blueBuffer);
+    descriptorSet.AttachBufferView(&whiteBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
     XglCommandBufferObj cmdBuffer(m_device);
@@ -2473,26 +2473,26 @@
     const int whiteCount = sizeof(whiteVals) / sizeof(float);
 
     XglConstantBufferObj redBuffer(m_device, redCount, sizeof(redVals[0]), (const void*) redVals);
-    ps.BindShaderEntitySlotToMemory(0, XGL_SLOT_SHADER_RESOURCE, &redBuffer);
+    ps.BindShaderEntitySlotToBuffer(0, XGL_SLOT_SHADER_RESOURCE, &redBuffer);
 
     XglConstantBufferObj greenBuffer(m_device, greenCount, sizeof(greenVals[0]), (const void*) greenVals);
-    ps.BindShaderEntitySlotToMemory(1, XGL_SLOT_SHADER_RESOURCE, &greenBuffer);
+    ps.BindShaderEntitySlotToBuffer(1, XGL_SLOT_SHADER_RESOURCE, &greenBuffer);
 
     XglConstantBufferObj blueBuffer(m_device, blueCount, sizeof(blueVals[0]), (const void*) blueVals);
-    ps.BindShaderEntitySlotToMemory(2, XGL_SLOT_SHADER_RESOURCE, &blueBuffer);
+    ps.BindShaderEntitySlotToBuffer(2, XGL_SLOT_SHADER_RESOURCE, &blueBuffer);
 
     XglConstantBufferObj whiteBuffer(m_device, whiteCount, sizeof(whiteVals[0]), (const void*) whiteVals);
-    ps.BindShaderEntitySlotToMemory(18, XGL_SLOT_SHADER_RESOURCE, &whiteBuffer);
+    ps.BindShaderEntitySlotToBuffer(18, XGL_SLOT_SHADER_RESOURCE, &whiteBuffer);
 
     XglPipelineObj pipelineobj(m_device);
     pipelineobj.AddShader(&vs);
     pipelineobj.AddShader(&ps);
 
     XglDescriptorSetObj descriptorSet(m_device);
-    descriptorSet.AttachMemoryView(&redBuffer);
-    descriptorSet.AttachMemoryView(&greenBuffer);
-    descriptorSet.AttachMemoryView(&blueBuffer);
-    descriptorSet.AttachMemoryView(&whiteBuffer);
+    descriptorSet.AttachBufferView(&redBuffer);
+    descriptorSet.AttachBufferView(&greenBuffer);
+    descriptorSet.AttachBufferView(&blueBuffer);
+    descriptorSet.AttachBufferView(&whiteBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
     XglCommandBufferObj cmdBuffer(m_device);
@@ -2567,7 +2567,7 @@
 
     XglConstantBufferObj meshBuffer(m_device,sizeof(g_vb_solid_face_colors_Data)/sizeof(g_vb_solid_face_colors_Data[0]),
             sizeof(g_vb_solid_face_colors_Data[0]), g_vb_solid_face_colors_Data);
-    meshBuffer.SetMemoryState(XGL_MEMORY_STATE_GRAPHICS_SHADER_READ_ONLY);
+    meshBuffer.SetBufferState(XGL_BUFFER_STATE_GRAPHICS_SHADER_READ_ONLY);
 
 
     const int buf_size = sizeof(MVP) / sizeof(XGL_FLOAT);
@@ -2578,8 +2578,8 @@
     XglSamplerObj sampler(m_device);
     XglTextureObj texture(m_device);
 
-    // vs.BindShaderEntitySlotToMemory(0, XGL_SLOT_VERTEX_INPUT, (XGL_OBJECT) &meshBuffer.m_constantBufferView);
-    vs.BindShaderEntitySlotToMemory(0, XGL_SLOT_SHADER_RESOURCE, &mvpBuffer);
+    // vs.BindShaderEntitySlotToBuffer(0, XGL_SLOT_VERTEX_INPUT, (XGL_OBJECT) &meshBuffer.m_constantBufferView);
+    vs.BindShaderEntitySlotToBuffer(0, XGL_SLOT_SHADER_RESOURCE, &mvpBuffer);
     ps.BindShaderEntitySlotToImage(0, XGL_SLOT_SHADER_TEXTURE_RESOURCE, &texture);
     ps.BindShaderEntitySlotToSampler(0, &sampler);
 
@@ -2589,7 +2589,7 @@
 
     XglDescriptorSetObj descriptorSet(m_device);
 
-    descriptorSet.AttachMemoryView(&mvpBuffer);
+    descriptorSet.AttachBufferView(&mvpBuffer);
     descriptorSet.AttachImageView(&texture);
     descriptorSet.AttachSampler(&sampler);
 
@@ -2698,16 +2698,16 @@
     const int whiteCount = sizeof(whiteVals) / sizeof(float);
 
     XglConstantBufferObj redBuffer(m_device, redCount, sizeof(redVals[0]), (const void*) redVals);
-    ps.BindShaderEntitySlotToMemory(10, XGL_SLOT_SHADER_RESOURCE, &redBuffer);
+    ps.BindShaderEntitySlotToBuffer(10, XGL_SLOT_SHADER_RESOURCE, &redBuffer);
 
     XglConstantBufferObj greenBuffer(m_device, greenCount, sizeof(greenVals[0]), (const void*) greenVals);
-    ps.BindShaderEntitySlotToMemory(15, XGL_SLOT_SHADER_RESOURCE, &greenBuffer);
+    ps.BindShaderEntitySlotToBuffer(15, XGL_SLOT_SHADER_RESOURCE, &greenBuffer);
 
     XglConstantBufferObj blueBuffer(m_device, blueCount, sizeof(blueVals[0]), (const void*) blueVals);
-    ps.BindShaderEntitySlotToMemory(13, XGL_SLOT_SHADER_RESOURCE, &blueBuffer);
+    ps.BindShaderEntitySlotToBuffer(13, XGL_SLOT_SHADER_RESOURCE, &blueBuffer);
 
     XglConstantBufferObj whiteBuffer(m_device, whiteCount, sizeof(whiteVals[0]), (const void*) whiteVals);
-    ps.BindShaderEntitySlotToMemory(17, XGL_SLOT_SHADER_RESOURCE, &whiteBuffer);
+    ps.BindShaderEntitySlotToBuffer(17, XGL_SLOT_SHADER_RESOURCE, &whiteBuffer);
 
     XglSamplerObj sampler0(m_device);
     XglTextureObj texture0(m_device); // Light Red
@@ -2739,10 +2739,10 @@
     pipelineobj.AddShader(&ps);
 
     XglDescriptorSetObj descriptorSet(m_device);
-    descriptorSet.AttachMemoryView(&redBuffer);
-    descriptorSet.AttachMemoryView(&greenBuffer);
-    descriptorSet.AttachMemoryView(&blueBuffer);
-    descriptorSet.AttachMemoryView(&whiteBuffer);
+    descriptorSet.AttachBufferView(&redBuffer);
+    descriptorSet.AttachBufferView(&greenBuffer);
+    descriptorSet.AttachBufferView(&blueBuffer);
+    descriptorSet.AttachBufferView(&whiteBuffer);
     descriptorSet.AttachImageView(&texture0);
     descriptorSet.AttachSampler(&sampler0);
     descriptorSet.AttachImageView(&texture2);
@@ -2836,16 +2836,16 @@
     const int whiteCount = sizeof(whiteVals) / sizeof(float);
 
     XglConstantBufferObj redBuffer(m_device, redCount, sizeof(redVals[0]), (const void*) redVals);
-    ps.BindShaderEntitySlotToMemory(0, XGL_SLOT_SHADER_RESOURCE, &redBuffer);
+    ps.BindShaderEntitySlotToBuffer(0, XGL_SLOT_SHADER_RESOURCE, &redBuffer);
 
     XglConstantBufferObj greenBuffer(m_device, greenCount, sizeof(greenVals[0]), (const void*) greenVals);
-    ps.BindShaderEntitySlotToMemory(1, XGL_SLOT_SHADER_RESOURCE, &greenBuffer);
+    ps.BindShaderEntitySlotToBuffer(1, XGL_SLOT_SHADER_RESOURCE, &greenBuffer);
 
     XglConstantBufferObj blueBuffer(m_device, blueCount, sizeof(blueVals[0]), (const void*) blueVals);
-    ps.BindShaderEntitySlotToMemory(2, XGL_SLOT_SHADER_RESOURCE, &blueBuffer);
+    ps.BindShaderEntitySlotToBuffer(2, XGL_SLOT_SHADER_RESOURCE, &blueBuffer);
 
     XglConstantBufferObj whiteBuffer(m_device, whiteCount, sizeof(whiteVals[0]), (const void*) whiteVals);
-    ps.BindShaderEntitySlotToMemory(3, XGL_SLOT_SHADER_RESOURCE, &whiteBuffer);
+    ps.BindShaderEntitySlotToBuffer(3, XGL_SLOT_SHADER_RESOURCE, &whiteBuffer);
 
     XglSamplerObj sampler0(m_device);
     XglTextureObj texture0(m_device); // Light Red
@@ -2874,10 +2874,10 @@
     pipelineobj.AddShader(&ps);
 
     XglDescriptorSetObj descriptorSet(m_device);
-    descriptorSet.AttachMemoryView(&redBuffer);
-    descriptorSet.AttachMemoryView(&greenBuffer);
-    descriptorSet.AttachMemoryView(&blueBuffer);
-    descriptorSet.AttachMemoryView(&whiteBuffer);
+    descriptorSet.AttachBufferView(&redBuffer);
+    descriptorSet.AttachBufferView(&greenBuffer);
+    descriptorSet.AttachBufferView(&blueBuffer);
+    descriptorSet.AttachBufferView(&whiteBuffer);
     descriptorSet.AttachImageView(&texture0);
     descriptorSet.AttachSampler(&sampler0);
     descriptorSet.AttachImageView(&texture2);
@@ -3136,15 +3136,15 @@
     XglShaderObj ps(m_device,fragShaderText, XGL_SHADER_STAGE_FRAGMENT, this);
 
     XglConstantBufferObj mixedBuffer(m_device, constCount, sizeof(mixedVals[0]), (const void*) mixedVals);
-    vs.BindShaderEntitySlotToMemory(0, XGL_SLOT_SHADER_RESOURCE, &mixedBuffer);
-    ps.BindShaderEntitySlotToMemory(0, XGL_SLOT_SHADER_RESOURCE, &mixedBuffer);
+    vs.BindShaderEntitySlotToBuffer(0, XGL_SLOT_SHADER_RESOURCE, &mixedBuffer);
+    ps.BindShaderEntitySlotToBuffer(0, XGL_SLOT_SHADER_RESOURCE, &mixedBuffer);
 
     XglPipelineObj pipelineobj(m_device);
     pipelineobj.AddShader(&vs);
     pipelineobj.AddShader(&ps);
 
     XglDescriptorSetObj descriptorSet(m_device);
-    descriptorSet.AttachMemoryView(&mixedBuffer);
+    descriptorSet.AttachBufferView(&mixedBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
     XglCommandBufferObj cmdBuffer(m_device);
diff --git a/tests/xglrenderframework.cpp b/tests/xglrenderframework.cpp
index b95b8e9..c144ac4 100644
--- a/tests/xglrenderframework.cpp
+++ b/tests/xglrenderframework.cpp
@@ -236,10 +236,10 @@
 
 }
 
-void XglDescriptorSetObj::AttachMemoryView(XglConstantBufferObj *constantBuffer)
+void XglDescriptorSetObj::AttachBufferView(XglConstantBufferObj *constantBuffer)
 {
-    m_memoryViews.push_back(&constantBuffer->m_constantBufferView);
-    m_memorySlots.push_back(m_nextSlot);
+    m_bufferViews.push_back(&constantBuffer->m_bufferViewInfo);
+    m_bufferSlots.push_back(m_nextSlot);
     m_nextSlot++;
 
 }
@@ -264,7 +264,7 @@
                                                            vector<XGL_DESCRIPTOR_SET_SLOT_TYPE>types,
                                                            vector<void *>objs )
 {
-    int nSlots = m_memorySlots.size() + m_imageSlots.size() + m_samplerSlots.size();
+    int nSlots = m_bufferSlots.size() + m_imageSlots.size() + m_samplerSlots.size();
     m_slotInfo = (XGL_DESCRIPTOR_SLOT_INFO*) malloc( nSlots * sizeof(XGL_DESCRIPTOR_SLOT_INFO) );
     memset(m_slotInfo,0,nSlots*sizeof(XGL_DESCRIPTOR_SLOT_INFO));
 
@@ -275,12 +275,12 @@
 
     for (int i=0; i<slots.size(); i++)
     {
-        for (int j=0; j<m_memorySlots.size(); j++)
+        for (int j=0; j<m_bufferSlots.size(); j++)
         {
-            if ( m_memoryViews[j] == objs[i])
+            if ( m_bufferViews[j] == objs[i])
             {
-                m_slotInfo[m_memorySlots[j]].shaderEntityIndex = slots[i];
-                m_slotInfo[m_memorySlots[j]].slotObjectType = types[i];
+                m_slotInfo[m_bufferSlots[j]].shaderEntityIndex = slots[i];
+                m_slotInfo[m_bufferSlots[j]].slotObjectType = types[i];
             }
         }
         for (int j=0; j<m_imageSlots.size(); j++)
@@ -317,9 +317,9 @@
     begin();
     clear();
 
-    for (int i=0; i<m_memoryViews.size();i++)
+    for (int i=0; i<m_bufferViews.size();i++)
     {
-        attach(m_memorySlots[i], *m_memoryViews[i]);
+        attach(m_bufferSlots[i], *m_bufferViews[i]);
     }
     for (int i=0; i<m_samplers.size();i++)
     {
@@ -350,9 +350,9 @@
     begin();
     clear();
 
-    for (int i=0; i<m_memoryViews.size();i++)
+    for (int i=0; i<m_bufferViews.size();i++)
     {
-        attach(m_memorySlots[i], *m_memoryViews[i]);
+        attach(m_bufferSlots[i], *m_bufferViews[i]);
     }
     for (int i=0; i<m_samplers.size();i++)
     {
@@ -365,7 +365,7 @@
 
     end();
 
-    // bind pipeline, vertex buffer (descriptor set) and WVP (dynamic memory view)
+    // bind pipeline, vertex buffer (descriptor set) and WVP (dynamic buffer view)
     xglCmdBindDescriptorSet(commandBuffer, XGL_PIPELINE_BIND_POINT_GRAPHICS, 0, obj(), 0 );
 }
 
@@ -548,7 +548,7 @@
     m_device = device;
     m_commandBuffer = 0;
 
-    memset(&m_constantBufferView,0,sizeof(m_constantBufferView));
+    memset(&m_bufferViewInfo,0,sizeof(m_bufferViewInfo));
 }
 
 XglConstantBufferObj::XglConstantBufferObj(XglDevice *device, int constantCount, int constantSize, const void* data)
@@ -556,7 +556,7 @@
     m_device = device;
     m_commandBuffer = 0;
 
-    memset(&m_constantBufferView,0,sizeof(m_constantBufferView));
+    memset(&m_bufferViewInfo,0,sizeof(m_bufferViewInfo));
     m_numVertices = constantCount;
     m_stride = constantSize;
 
@@ -567,27 +567,38 @@
     memcpy(pData, data, allocationSize);
     unmap();
 
-    // set up the memory view for the constant buffer
-    this->m_constantBufferView.stride = 16;
-    this->m_constantBufferView.range  = allocationSize;
-    this->m_constantBufferView.offset = 0;
-    this->m_constantBufferView.mem    = obj();
-    this->m_constantBufferView.format.channelFormat = XGL_CH_FMT_R32G32B32A32;
-    this->m_constantBufferView.format.numericFormat = XGL_NUM_FMT_FLOAT;
-    this->m_constantBufferView.state  = XGL_MEMORY_STATE_DATA_TRANSFER;
+    // set up the buffer view for the constant buffer
+    XGL_BUFFER_VIEW_CREATE_INFO view_info = {};
+    view_info.sType = XGL_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO;
+    view_info.buffer = obj();
+    view_info.viewType = XGL_BUFFER_VIEW_TYPED;
+    view_info.stride = 16;
+    view_info.format.channelFormat = XGL_CH_FMT_R32G32B32A32;
+    view_info.format.numericFormat = XGL_NUM_FMT_FLOAT;
+    view_info.channels.r = XGL_CHANNEL_SWIZZLE_R;
+    view_info.channels.g = XGL_CHANNEL_SWIZZLE_G;
+    view_info.channels.b = XGL_CHANNEL_SWIZZLE_B;
+    view_info.channels.a = XGL_CHANNEL_SWIZZLE_A;
+    view_info.offset = 0;
+    view_info.range  = allocationSize;
+    m_bufferView.init(*m_device, view_info);
+
+    this->m_bufferViewInfo.sType = XGL_STRUCTURE_TYPE_BUFFER_VIEW_ATTACH_INFO;
+    this->m_bufferViewInfo.view = m_bufferView.obj();
+    this->m_bufferViewInfo.state = XGL_BUFFER_STATE_DATA_TRANSFER;
 }
 
 void XglConstantBufferObj::Bind(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_SIZE offset, XGL_UINT binding)
 {
-    xglCmdBindVertexData(cmdBuffer, obj(), offset, binding);
+    xglCmdBindVertexBuffer(cmdBuffer, obj(), offset, binding);
 }
 
 
-void XglConstantBufferObj::SetMemoryState(XGL_MEMORY_STATE newState)
+void XglConstantBufferObj::SetBufferState(XGL_BUFFER_STATE newState)
 {
     XGL_RESULT err = XGL_SUCCESS;
 
-    if (this->m_constantBufferView.state == newState)
+    if (this->m_bufferViewInfo.state == newState)
         return;
 
     if (!m_commandBuffer)
@@ -611,12 +622,12 @@
     err = m_commandBuffer->BeginCommandBuffer(&cmd_buf_info);
     ASSERT_XGL_SUCCESS(err);
 
-    XGL_MEMORY_STATE_TRANSITION transition =
-        state_transition(XGL_MEMORY_STATE_DATA_TRANSFER, newState, 0, m_numVertices * m_stride);
+    XGL_BUFFER_STATE_TRANSITION transition =
+        state_transition(XGL_BUFFER_STATE_DATA_TRANSFER, newState, 0, m_numVertices * m_stride);
 
     // write transition to the command buffer
-    m_commandBuffer->PrepareMemoryRegions(1, &transition);
-    this->m_constantBufferView.state = newState;
+    m_commandBuffer->PrepareBufferRegions(1, &transition);
+    this->m_bufferViewInfo.state = newState;
 
     // finish recording the command buffer
     err = m_commandBuffer->EndCommandBuffer();
@@ -626,7 +637,7 @@
     XGL_MEMORY_REF memRefs;
     // this command buffer only uses the vertex buffer memory
     memRefs.flags = 0;
-    memRefs.mem = obj();
+    memRefs.mem = memories()[0];
 
     // submit the command buffer to the universal queue
     XGL_CMD_BUFFER bufferArray[1];
@@ -673,19 +684,30 @@
     memcpy(pData, data, allocationSize);
     unmap();
 
-    // set up the memory view for the constant buffer
-    this->m_constantBufferView.stride = m_stride;
-    this->m_constantBufferView.range  = allocationSize;
-    this->m_constantBufferView.offset = 0;
-    this->m_constantBufferView.mem    = obj();
-    this->m_constantBufferView.format.channelFormat = viewFormat.channelFormat;
-    this->m_constantBufferView.format.numericFormat = viewFormat.numericFormat;
-    this->m_constantBufferView.state  = XGL_MEMORY_STATE_DATA_TRANSFER;
+    // set up the buffer view for the constant buffer
+    XGL_BUFFER_VIEW_CREATE_INFO view_info = {};
+    view_info.sType = XGL_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO;
+    view_info.buffer = obj();
+    view_info.viewType = XGL_BUFFER_VIEW_TYPED;
+    view_info.stride = m_stride;
+    view_info.format.channelFormat = viewFormat.channelFormat;
+    view_info.format.numericFormat = viewFormat.numericFormat;
+    view_info.channels.r = XGL_CHANNEL_SWIZZLE_R;
+    view_info.channels.g = XGL_CHANNEL_SWIZZLE_G;
+    view_info.channels.b = XGL_CHANNEL_SWIZZLE_B;
+    view_info.channels.a = XGL_CHANNEL_SWIZZLE_A;
+    view_info.offset = 0;
+    view_info.range  = allocationSize;
+    m_bufferView.init(*m_device, view_info);
+
+    this->m_bufferViewInfo.sType = XGL_STRUCTURE_TYPE_BUFFER_VIEW_ATTACH_INFO;
+    this->m_bufferViewInfo.view = m_bufferView.obj();
+    this->m_bufferViewInfo.state = XGL_BUFFER_STATE_DATA_TRANSFER;
 }
 
 void XglIndexBufferObj::Bind(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_SIZE offset)
 {
-    xglCmdBindIndexData(cmdBuffer, obj(), offset, m_indexType);
+    xglCmdBindIndexBuffer(cmdBuffer, obj(), offset, m_indexType);
 }
 
 XGL_INDEX_TYPE XglIndexBufferObj::GetIndexType()
@@ -703,8 +725,8 @@
     stageInfo->shader.descriptorSetMapping[0].descriptorCount = 0;
     stageInfo->shader.linkConstBufferCount = 0;
     stageInfo->shader.pLinkConstBufferInfo = XGL_NULL_HANDLE;
-    stageInfo->shader.dynamicMemoryViewMapping.slotObjectType = XGL_SLOT_UNUSED;
-    stageInfo->shader.dynamicMemoryViewMapping.shaderEntityIndex = 0;
+    stageInfo->shader.dynamicBufferViewMapping.slotObjectType = XGL_SLOT_UNUSED;
+    stageInfo->shader.dynamicBufferViewMapping.shaderEntityIndex = 0;
 
     stageInfo->shader.descriptorSetMapping[0].descriptorCount = descriptorSet->GetTotalSlots();
     if (stageInfo->shader.descriptorSetMapping[0].descriptorCount)
@@ -713,15 +735,15 @@
         vector<XGL_DESCRIPTOR_SET_SLOT_TYPE> allTypes;
         vector<void *> allObjs;
 
-        allSlots.reserve(m_memSlots.size() + m_imageSlots.size() + m_samplerSlots.size());
-        allTypes.reserve(m_memTypes.size() + m_imageTypes.size() + m_samplerTypes.size());
-        allObjs.reserve(m_memObjs.size() + m_imageObjs.size() + m_samplerObjs.size());
+        allSlots.reserve(m_bufferSlots.size() + m_imageSlots.size() + m_samplerSlots.size());
+        allTypes.reserve(m_bufferTypes.size() + m_imageTypes.size() + m_samplerTypes.size());
+        allObjs.reserve(m_bufferObjs.size() + m_imageObjs.size() + m_samplerObjs.size());
 
-        if (m_memSlots.size())
+        if (m_bufferSlots.size())
         {
-            allSlots.insert(allSlots.end(), m_memSlots.begin(), m_memSlots.end());
-            allTypes.insert(allTypes.end(), m_memTypes.begin(), m_memTypes.end());
-            allObjs.insert(allObjs.end(), m_memObjs.begin(), m_memObjs.end());
+            allSlots.insert(allSlots.end(), m_bufferSlots.begin(), m_bufferSlots.end());
+            allTypes.insert(allTypes.end(), m_bufferTypes.begin(), m_bufferTypes.end());
+            allObjs.insert(allObjs.end(), m_bufferObjs.begin(), m_bufferObjs.end());
         }
         if (m_imageSlots.size())
         {
@@ -742,11 +764,11 @@
     return stageInfo;
 }
 
-void XglShaderObj::BindShaderEntitySlotToMemory(int slot, XGL_DESCRIPTOR_SET_SLOT_TYPE type, XglConstantBufferObj *constantBuffer)
+void XglShaderObj::BindShaderEntitySlotToBuffer(int slot, XGL_DESCRIPTOR_SET_SLOT_TYPE type, XglConstantBufferObj *constantBuffer)
 {
-    m_memSlots.push_back(slot);
-    m_memTypes.push_back(type);
-    m_memObjs.push_back(&constantBuffer->m_constantBufferView);
+    m_bufferSlots.push_back(slot);
+    m_bufferTypes.push_back(type);
+    m_bufferObjs.push_back(&constantBuffer->m_bufferViewInfo);
 
 }
 
@@ -943,7 +965,7 @@
 
     for (int i=0; i < m_vertexBufferCount; i++)
     {
-        m_vertexBufferObjs[i]->Bind(m_cmdBuffer, m_vertexBufferObjs[i]->m_constantBufferView.offset,  m_vertexBufferBindings[i]);
+        m_vertexBufferObjs[i]->Bind(m_cmdBuffer, 0,  m_vertexBufferBindings[i]);
     }
 }
 
@@ -952,7 +974,9 @@
 }
 
 void XglMemoryRefManager::AddMemoryRef(XglConstantBufferObj *constantBuffer) {
-    m_bufferObjs.push_back(constantBuffer->obj());
+    const std::vector<XGL_GPU_MEMORY> mems = constantBuffer->memories();
+    if (!mems.empty())
+        m_bufferObjs.push_back(mems[0]);
 }
 
 void XglMemoryRefManager::AddMemoryRef(XglTextureObj *texture) {
@@ -1017,9 +1041,9 @@
     return XGL_SUCCESS;
 }
 
-void XglCommandBufferObj::PrepareMemoryRegions(int transitionCount, XGL_MEMORY_STATE_TRANSITION *transitionPtr)
+void XglCommandBufferObj::PrepareBufferRegions(int transitionCount, XGL_BUFFER_STATE_TRANSITION *transitionPtr)
 {
-    xglCmdPrepareMemoryRegions(obj(), transitionCount, transitionPtr);
+    xglCmdPrepareBufferRegions(obj(), transitionCount, transitionPtr);
 }
 
 void XglCommandBufferObj::ClearAllBuffers(XGL_DEPTH_STENCIL_BIND_INFO *depthStencilBinding, XGL_IMAGE depthStencilImage)
@@ -1144,14 +1168,14 @@
 
 void XglCommandBufferObj::BindDescriptorSet(XGL_DESCRIPTOR_SET descriptorSet)
 {
-    // bind pipeline, vertex buffer (descriptor set) and WVP (dynamic memory view)
+    // bind pipeline, vertex buffer (descriptor set) and WVP (dynamic buffer view)
     xglCmdBindDescriptorSet(obj(), XGL_PIPELINE_BIND_POINT_GRAPHICS, 0, descriptorSet, 0 );
 }
 void XglCommandBufferObj::BindIndexBuffer(XglIndexBufferObj *indexBuffer, XGL_UINT offset)
 {
-    xglCmdBindIndexData(obj(), indexBuffer->obj(), offset, indexBuffer->GetIndexType());
+    xglCmdBindIndexBuffer(obj(), indexBuffer->obj(), offset, indexBuffer->GetIndexType());
 }
 void XglCommandBufferObj::BindVertexBuffer(XglConstantBufferObj *vertexBuffer, XGL_UINT offset, XGL_UINT binding)
 {
-    xglCmdBindVertexData(obj(), vertexBuffer->obj(), offset, binding);
+    xglCmdBindVertexBuffer(obj(), vertexBuffer->obj(), offset, binding);
 }
diff --git a/tests/xglrenderframework.h b/tests/xglrenderframework.h
index f17ff4c..421f79d 100644
--- a/tests/xglrenderframework.h
+++ b/tests/xglrenderframework.h
@@ -116,7 +116,7 @@
     XGL_RESULT BeginCommandBuffer(XGL_RENDER_PASS renderpass_obj);
     XGL_RESULT BeginCommandBuffer();
     XGL_RESULT EndCommandBuffer();
-    void PrepareMemoryRegions(int transitionCount, XGL_MEMORY_STATE_TRANSITION *transitionPtr);
+    void PrepareBufferRegions(int transitionCount, XGL_BUFFER_STATE_TRANSITION *transitionPtr);
     void AddRenderTarget(XglImage *renderTarget);
     void AddDepthStencil();
     void ClearAllBuffers();
@@ -138,17 +138,19 @@
 
 };
 
-class XglConstantBufferObj : public xgl_testing::GpuMemory
+class XglConstantBufferObj : public xgl_testing::Buffer
 {
 public:
     XglConstantBufferObj(XglDevice *device);
     XglConstantBufferObj(XglDevice *device, int constantCount, int constantSize, const void* data);
-    void SetMemoryState(XGL_MEMORY_STATE newState);
+    void SetBufferState(XGL_BUFFER_STATE newState);
     void Bind(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_SIZE offset, XGL_UINT binding);
-    XGL_MEMORY_VIEW_ATTACH_INFO     m_constantBufferView;
+
+    XGL_BUFFER_VIEW_ATTACH_INFO     m_bufferViewInfo;
 
 protected:
     XglDevice                      *m_device;
+    xgl_testing::BufferView         m_bufferView;
     int                             m_numVertices;
     int                             m_stride;
     XglCommandBufferObj             *m_commandBuffer;
@@ -258,7 +260,7 @@
 {
 public:
     XglDescriptorSetObj(XglDevice *device);
-    void AttachMemoryView(XglConstantBufferObj* constantBuffer);
+    void AttachBufferView(XglConstantBufferObj* constantBuffer);
     void AttachSampler( XglSamplerObj* sampler);
     void AttachImageView( XglTextureObj* texture);
     void BindCommandBuffer(XGL_CMD_BUFFER commandBuffer);
@@ -271,8 +273,8 @@
     XglDevice                           *m_device;
     XGL_DESCRIPTOR_SLOT_INFO            *m_slotInfo;
     int                                  m_nextSlot;
-    vector<int>                          m_memorySlots;
-    vector<XGL_MEMORY_VIEW_ATTACH_INFO*> m_memoryViews;
+    vector<int>                          m_bufferSlots;
+    vector<XGL_BUFFER_VIEW_ATTACH_INFO*> m_bufferViews;
     vector<int>                          m_samplerSlots;
     vector<XglSamplerObj*>               m_samplers;
     vector<int>                          m_imageSlots;
@@ -285,7 +287,7 @@
 public:
     XglShaderObj(XglDevice *device, const char * shaderText, XGL_PIPELINE_SHADER_STAGE stage, XglRenderFramework *framework);
     XGL_PIPELINE_SHADER_STAGE_CREATE_INFO* GetStageCreateInfo(XglDescriptorSetObj *descriptorSet);
-    void BindShaderEntitySlotToMemory(int slot, XGL_DESCRIPTOR_SET_SLOT_TYPE type, XglConstantBufferObj *constantBuffer);
+    void BindShaderEntitySlotToBuffer(int slot, XGL_DESCRIPTOR_SET_SLOT_TYPE type, XglConstantBufferObj *constantBuffer);
     void BindShaderEntitySlotToImage(int slot, XGL_DESCRIPTOR_SET_SLOT_TYPE type, XglTextureObj *texture);
     void BindShaderEntitySlotToSampler(int slot, XglSamplerObj *sampler);
 
@@ -293,9 +295,9 @@
     XGL_PIPELINE_SHADER_STAGE_CREATE_INFO stage_info;
     XGL_PIPELINE_SHADER_STAGE m_stage;
     XglDevice *m_device;
-    vector<int>    m_memSlots;
-    vector<XGL_DESCRIPTOR_SET_SLOT_TYPE> m_memTypes;
-    vector<XGL_MEMORY_VIEW_ATTACH_INFO*> m_memObjs;
+    vector<int>    m_bufferSlots;
+    vector<XGL_DESCRIPTOR_SET_SLOT_TYPE> m_bufferTypes;
+    vector<XGL_BUFFER_VIEW_ATTACH_INFO*> m_bufferObjs;
     vector<int>    m_samplerSlots;
     vector<XGL_DESCRIPTOR_SET_SLOT_TYPE> m_samplerTypes;
     vector<XglSamplerObj*> m_samplerObjs;
diff --git a/tests/xgltestbinding.cpp b/tests/xgltestbinding.cpp
index 0417732..b738734 100644
--- a/tests/xgltestbinding.cpp
+++ b/tests/xgltestbinding.cpp
@@ -233,6 +233,12 @@
     EXPECT(!alloc_idx && xglBindObjectMemory(obj(), mem.obj(), mem_offset) == XGL_SUCCESS);
 }
 
+void Object::bind_memory(uint32_t alloc_idx, XGL_GPU_SIZE offset, XGL_GPU_SIZE size,
+                         const GpuMemory &mem, XGL_GPU_SIZE mem_offset)
+{
+    EXPECT(!alloc_idx && xglBindObjectMemoryRange(obj(), offset, size, mem.obj(), mem_offset) == XGL_SUCCESS);
+}
+
 void Object::unbind_memory(uint32_t alloc_idx)
 {
     EXPECT(!alloc_idx && xglBindObjectMemory(obj(), XGL_NULL_HANDLE, 0) == XGL_SUCCESS);
@@ -255,6 +261,21 @@
     for (int i = 0; i < mem_reqs.size(); i++) {
         XGL_MEMORY_ALLOC_INFO info = GpuMemory::alloc_info(mem_reqs[i]);
 
+        // prefer CPU visible heaps
+        std::vector<uint32_t> non_visible_heaps;
+        info.heapCount = 0;
+        for (uint32_t j = 0; j < mem_reqs[i].heapCount; j++) {
+            const uint32_t heap = mem_reqs[i].heaps[j];
+            const XGL_MEMORY_HEAP_PROPERTIES &props = dev.heap_properties()[heap];
+
+            if (props.flags & XGL_MEMORY_HEAP_CPU_VISIBLE_BIT)
+                info.heaps[info.heapCount++] = heap;
+            else
+                non_visible_heaps.push_back(heap);
+        }
+        for (std::vector<uint32_t>::const_iterator it = non_visible_heaps.begin(); it != non_visible_heaps.end(); it++)
+            info.heaps[info.heapCount++] = *it;
+
         primary_mem_ = &internal_mems_[i];
 
         internal_mems_[i].init(dev, info);
@@ -496,24 +517,6 @@
     DERIVED_OBJECT_INIT(xglAllocMemory, dev.obj(), &info);
 }
 
-void GpuMemory::init(const Device &dev, XGL_GPU_SIZE size)
-{
-    XGL_MEMORY_ALLOC_INFO info = {};
-    info.sType = XGL_STRUCTURE_TYPE_MEMORY_ALLOC_INFO;
-    info.allocationSize = size;
-    info.memPriority = XGL_MEMORY_PRIORITY_NORMAL;
-
-    // find CPU visible heaps
-    for (XGL_UINT id = 0; id < dev.heap_properties().size(); id++) {
-        const XGL_MEMORY_HEAP_PROPERTIES &heap = dev.heap_properties()[id];
-        if (heap.flags & XGL_MEMORY_HEAP_CPU_VISIBLE_BIT)
-            info.heaps[info.heapCount++] = id;
-    }
-
-    EXPECT(info.heapCount);
-    init(dev, info);
-}
-
 void GpuMemory::init(const Device &dev, size_t size, const void *data)
 {
     DERIVED_OBJECT_INIT(xglPinSystemMemory, dev.obj(), data, size);
@@ -610,6 +613,24 @@
     return err;
 }
 
+void Buffer::init(const Device &dev, const XGL_BUFFER_CREATE_INFO &info)
+{
+    init_no_mem(dev, info);
+    alloc_memory(dev);
+}
+
+void Buffer::init_no_mem(const Device &dev, const XGL_BUFFER_CREATE_INFO &info)
+{
+    DERIVED_OBJECT_INIT(xglCreateBuffer, dev.obj(), &info);
+    create_info_ = info;
+}
+
+void BufferView::init(const Device &dev, const XGL_BUFFER_VIEW_CREATE_INFO &info)
+{
+    DERIVED_OBJECT_INIT(xglCreateBufferView, dev.obj(), &info);
+    alloc_memory(dev);
+}
+
 void Image::init(const Device &dev, const XGL_IMAGE_CREATE_INFO &info)
 {
     init_no_mem(dev, info);
@@ -645,6 +666,12 @@
     }
 }
 
+void Image::bind_memory(uint32_t alloc_idx, const XGL_IMAGE_MEMORY_BIND_INFO &info,
+                        const GpuMemory &mem, XGL_GPU_SIZE mem_offset)
+{
+    EXPECT(!alloc_idx && xglBindImageMemoryRange(obj(), &info, mem.obj(), mem_offset) == XGL_SUCCESS);
+}
+
 XGL_SUBRESOURCE_LAYOUT Image::subresource_layout(const XGL_IMAGE_SUBRESOURCE &subres) const
 {
     const XGL_SUBRESOURCE_INFO_TYPE type = XGL_INFO_TYPE_SUBRESOURCE_LAYOUT;
@@ -752,9 +779,9 @@
     xglAttachImageViewDescriptors(obj(), start_slot, img_views.size(), &img_views[0]);
 }
 
-void DescriptorSet::attach(uint32_t start_slot, const std::vector<XGL_MEMORY_VIEW_ATTACH_INFO> &mem_views)
+void DescriptorSet::attach(uint32_t start_slot, const std::vector<XGL_BUFFER_VIEW_ATTACH_INFO> &buf_views)
 {
-    xglAttachMemoryViewDescriptors(obj(), start_slot, mem_views.size(), &mem_views[0]);
+    xglAttachBufferViewDescriptors(obj(), start_slot, buf_views.size(), &buf_views[0]);
 }
 
 void DescriptorSet::attach(uint32_t start_slot, const std::vector<XGL_DESCRIPTOR_SET_ATTACH_INFO> &sets)
diff --git a/tests/xgltestbinding.h b/tests/xgltestbinding.h
index 0e9e28a..725cb9d 100644
--- a/tests/xgltestbinding.h
+++ b/tests/xgltestbinding.h
@@ -43,6 +43,8 @@
 class QueueSemaphore;
 class Event;
 class QueryPool;
+class Buffer;
+class BufferView;
 class Image;
 class ImageView;
 class ColorAttachmentView;
@@ -127,6 +129,10 @@
     void unbind_memory(uint32_t alloc_idx);
     void unbind_memory();
 
+    // xglBindObjectMemoryRange()
+    void bind_memory(uint32_t alloc_idx, XGL_GPU_SIZE offset, XGL_GPU_SIZE size,
+                     const GpuMemory &mem, XGL_GPU_SIZE mem_offset);
+
     // Unless an object is initialized with init_no_mem(), memories are
     // automatically allocated and bound.  These methods can be used to get
     // the memories (for XGL_MEMORY_REFs), or to map/unmap the primary memory.
@@ -262,13 +268,10 @@
 
 class GpuMemory : public DerivedObject<XGL_GPU_MEMORY, BaseObject> {
 public:
-    explicit GpuMemory() {}
-    explicit GpuMemory(const Device &dev, XGL_GPU_SIZE size) { init(dev, size); }
     ~GpuMemory();
 
     // xglAllocMemory()
     void init(const Device &dev, const XGL_MEMORY_ALLOC_INFO &info);
-    void init(const Device &dev, XGL_GPU_SIZE size);
     // xglPinSystemMemory()
     void init(const Device &dev, size_t size, const void *data);
     // xglOpenSharedMemory()
@@ -290,19 +293,6 @@
     // xglUnmapMemory()
     void unmap() const;
 
-    XGL_MEMORY_STATE_TRANSITION state_transition(XGL_MEMORY_STATE old_state, XGL_MEMORY_STATE new_state,
-                                                 XGL_GPU_SIZE offset, XGL_GPU_SIZE size) const
-    {
-        XGL_MEMORY_STATE_TRANSITION transition = {};
-        transition.sType = XGL_STRUCTURE_TYPE_MEMORY_STATE_TRANSITION;
-        transition.mem = obj();
-        transition.oldState = old_state;
-        transition.newState = new_state;
-        transition.offset = offset;
-        transition.regionSize = size;
-        return transition;
-    }
-
     static XGL_MEMORY_ALLOC_INFO alloc_info(const XGL_MEMORY_REQUIREMENTS &reqs);
 };
 
@@ -353,6 +343,41 @@
     static XGL_QUERY_POOL_CREATE_INFO create_info(XGL_QUERY_TYPE type, uint32_t slot_count);
 };
 
+class Buffer : public DerivedObject<XGL_BUFFER, Object> {
+public:
+    explicit Buffer() {}
+    explicit Buffer(const Device &dev, const XGL_BUFFER_CREATE_INFO &info) { init(dev, info); }
+    explicit Buffer(const Device &dev, XGL_GPU_SIZE size) { init(dev, size); }
+
+    // xglCreateBuffer()
+    void init(const Device &dev, const XGL_BUFFER_CREATE_INFO &info);
+    void init(const Device &dev, XGL_GPU_SIZE size) { init(dev, create_info(size, 0)); }
+    void init_no_mem(const Device &dev, const XGL_BUFFER_CREATE_INFO &info);
+
+    static XGL_BUFFER_CREATE_INFO create_info(XGL_GPU_SIZE size, XGL_FLAGS usage);
+
+    XGL_BUFFER_STATE_TRANSITION state_transition(XGL_BUFFER_STATE old_state, XGL_BUFFER_STATE new_state,
+                                                 XGL_GPU_SIZE offset, XGL_GPU_SIZE size) const
+    {
+        XGL_BUFFER_STATE_TRANSITION transition = {};
+        transition.sType = XGL_STRUCTURE_TYPE_BUFFER_STATE_TRANSITION;
+        transition.buffer = obj();
+        transition.oldState = old_state;
+        transition.newState = new_state;
+        transition.offset = offset;
+        transition.regionSize = size;
+        return transition;
+    }
+private:
+    XGL_BUFFER_CREATE_INFO create_info_;
+};
+
+class BufferView : public DerivedObject<XGL_BUFFER_VIEW, Object> {
+public:
+    // xglCreateBufferView()
+    void init(const Device &dev, const XGL_BUFFER_VIEW_CREATE_INFO &info);
+};
+
 class Image : public DerivedObject<XGL_IMAGE, Object> {
 public:
     explicit Image() : format_features_(0) {}
@@ -364,6 +389,10 @@
     // xglOpenPeerImage()
     void init(const Device &dev, const XGL_PEER_IMAGE_OPEN_INFO &info, const XGL_IMAGE_CREATE_INFO &original_info);
 
+    // xglBindImageMemoryRange()
+    void bind_memory(uint32_t alloc_idx, const XGL_IMAGE_MEMORY_BIND_INFO &info,
+                     const GpuMemory &mem, XGL_GPU_SIZE mem_offset);
+
     // xglGetImageSubresourceInfo()
     XGL_SUBRESOURCE_LAYOUT subresource_layout(const XGL_IMAGE_SUBRESOURCE &subres) const;
 
@@ -483,11 +512,11 @@
         attach(start_slot, std::vector<XGL_IMAGE_VIEW_ATTACH_INFO>(1, view));
     }
 
-    // xglAttachMemoryViewDescriptors()
-    void attach(uint32_t start_slot, const std::vector<XGL_MEMORY_VIEW_ATTACH_INFO> &mem_views);
-    void attach(uint32_t start_slot, const XGL_MEMORY_VIEW_ATTACH_INFO &view)
+    // xglAttachBufferViewDescriptors()
+    void attach(uint32_t start_slot, const std::vector<XGL_BUFFER_VIEW_ATTACH_INFO> &buf_views);
+    void attach(uint32_t start_slot, const XGL_BUFFER_VIEW_ATTACH_INFO &view)
     {
-        attach(start_slot, std::vector<XGL_MEMORY_VIEW_ATTACH_INFO>(1, view));
+        attach(start_slot, std::vector<XGL_BUFFER_VIEW_ATTACH_INFO>(1, view));
     }
 
     // xglAttachNestedDescriptors()
@@ -593,6 +622,15 @@
     return info;
 }
 
+inline XGL_BUFFER_CREATE_INFO Buffer::create_info(XGL_GPU_SIZE size, XGL_FLAGS usage)
+{
+    XGL_BUFFER_CREATE_INFO info = {};
+    info.sType = XGL_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
+    info.size = size;
+    info.usage = usage;
+    return info;
+}
+
 inline XGL_FENCE_CREATE_INFO Fence::create_info(XGL_FLAGS flags)
 {
     XGL_FENCE_CREATE_INFO info = {};
diff --git a/xgl.py b/xgl.py
index 2297f94..ef59f80 100644
--- a/xgl.py
+++ b/xgl.py
@@ -189,6 +189,8 @@
         "XGL_QUEUE",
         "XGL_GPU_MEMORY",
         "XGL_OBJECT",
+        "XGL_BUFFER",
+        "XGL_BUFFER_VIEW",
         "XGL_IMAGE",
         "XGL_IMAGE_VIEW",
         "XGL_COLOR_ATTACHMENT_VIEW",
@@ -210,7 +212,7 @@
         "XGL_EVENT",
         "XGL_QUERY_POOL",
         "XGL_FRAMEBUFFER",
-        "XGL_RENDER_PASS"
+        "XGL_RENDER_PASS",
     ],
     protos=[
         Proto("XGL_RESULT", "InitAndEnumerateGpus",
@@ -312,15 +314,6 @@
              Param("XGL_SIZE", "memSize"),
              Param("XGL_GPU_MEMORY*", "pMem")]),
 
-        Proto("XGL_RESULT", "RemapVirtualMemoryPages",
-            [Param("XGL_DEVICE", "device"),
-             Param("XGL_UINT", "rangeCount"),
-             Param("const XGL_VIRTUAL_MEMORY_REMAP_RANGE*", "pRanges"),
-             Param("XGL_UINT", "preWaitSemaphoreCount"),
-             Param("const XGL_QUEUE_SEMAPHORE*", "pPreWaitSemaphores"),
-             Param("XGL_UINT", "postSignalSemaphoreCount"),
-             Param("const XGL_QUEUE_SEMAPHORE*", "pPostSignalSemaphores")]),
-
         Proto("XGL_RESULT", "GetMultiGpuCompatibility",
             [Param("XGL_PHYSICAL_GPU", "gpu0"),
              Param("XGL_PHYSICAL_GPU", "gpu1"),
@@ -359,7 +352,20 @@
         Proto("XGL_RESULT", "BindObjectMemory",
             [Param("XGL_OBJECT", "object"),
              Param("XGL_GPU_MEMORY", "mem"),
-             Param("XGL_GPU_SIZE", "offset")]),
+             Param("XGL_GPU_SIZE", "memOffset")]),
+
+        Proto("XGL_RESULT", "BindObjectMemoryRange",
+            [Param("XGL_OBJECT", "object"),
+             Param("XGL_GPU_SIZE", "rangeOffset"),
+             Param("XGL_GPU_SIZE", "rangeSize"),
+             Param("XGL_GPU_MEMORY", "mem"),
+             Param("XGL_GPU_SIZE", "memOffset")]),
+
+        Proto("XGL_RESULT", "BindImageMemoryRange",
+            [Param("XGL_IMAGE", "image"),
+             Param("const XGL_IMAGE_MEMORY_BIND_INFO*", "bindInfo"),
+             Param("XGL_GPU_MEMORY", "mem"),
+             Param("XGL_GPU_SIZE", "memOffset")]),
 
         Proto("XGL_RESULT", "CreateFence",
             [Param("XGL_DEVICE", "device"),
@@ -422,6 +428,16 @@
              Param("XGL_SIZE*", "pDataSize"),
              Param("XGL_VOID*", "pData")]),
 
+        Proto("XGL_RESULT", "CreateBuffer",
+            [Param("XGL_DEVICE", "device"),
+             Param("const XGL_BUFFER_CREATE_INFO*", "pCreateInfo"),
+             Param("XGL_BUFFER*", "pBuffer")]),
+
+        Proto("XGL_RESULT", "CreateBufferView",
+            [Param("XGL_DEVICE", "device"),
+             Param("const XGL_BUFFER_VIEW_CREATE_INFO*", "pCreateInfo"),
+             Param("XGL_BUFFER_VIEW*", "pView")]),
+
         Proto("XGL_RESULT", "CreateImage",
             [Param("XGL_DEVICE", "device"),
              Param("const XGL_IMAGE_CREATE_INFO*", "pCreateInfo"),
@@ -509,11 +525,11 @@
              Param("XGL_UINT", "slotCount"),
              Param("const XGL_IMAGE_VIEW_ATTACH_INFO*", "pImageViews")]),
 
-        Proto("XGL_VOID", "AttachMemoryViewDescriptors",
+        Proto("XGL_VOID", "AttachBufferViewDescriptors",
             [Param("XGL_DESCRIPTOR_SET", "descriptorSet"),
              Param("XGL_UINT", "startSlot"),
              Param("XGL_UINT", "slotCount"),
-             Param("const XGL_MEMORY_VIEW_ATTACH_INFO*", "pMemViews")]),
+             Param("const XGL_BUFFER_VIEW_ATTACH_INFO*", "pBufferViews")]),
 
         Proto("XGL_VOID", "AttachNestedDescriptors",
             [Param("XGL_DESCRIPTOR_SET", "descriptorSet"),
@@ -588,27 +604,27 @@
              Param("XGL_DESCRIPTOR_SET", "descriptorSet"),
              Param("XGL_UINT", "slotOffset")]),
 
-        Proto("XGL_VOID", "CmdBindDynamicMemoryView",
+        Proto("XGL_VOID", "CmdBindDynamicBufferView",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
              Param("XGL_PIPELINE_BIND_POINT", "pipelineBindPoint"),
-             Param("const XGL_MEMORY_VIEW_ATTACH_INFO*", "pMemView")]),
+             Param("const XGL_BUFFER_VIEW_ATTACH_INFO*", "pBufferView")]),
 
-        Proto("XGL_VOID", "CmdBindVertexData",
+        Proto("XGL_VOID", "CmdBindVertexBuffer",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
-             Param("XGL_GPU_MEMORY", "mem"),
+             Param("XGL_BUFFER", "buffer"),
              Param("XGL_GPU_SIZE", "offset"),
              Param("XGL_UINT", "binding")]),
 
-        Proto("XGL_VOID", "CmdBindIndexData",
+        Proto("XGL_VOID", "CmdBindIndexBuffer",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
-             Param("XGL_GPU_MEMORY", "mem"),
+             Param("XGL_BUFFER", "buffer"),
              Param("XGL_GPU_SIZE", "offset"),
              Param("XGL_INDEX_TYPE", "indexType")]),
 
-        Proto("XGL_VOID", "CmdPrepareMemoryRegions",
+        Proto("XGL_VOID", "CmdPrepareBufferRegions",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
              Param("XGL_UINT", "transitionCount"),
-             Param("const XGL_MEMORY_STATE_TRANSITION*", "pStateTransitions")]),
+             Param("const XGL_BUFFER_STATE_TRANSITION*", "pStateTransitions")]),
 
         Proto("XGL_VOID", "CmdPrepareImages",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
@@ -632,14 +648,14 @@
 
         Proto("XGL_VOID", "CmdDrawIndirect",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
-             Param("XGL_GPU_MEMORY", "mem"),
+             Param("XGL_BUFFER", "buffer"),
              Param("XGL_GPU_SIZE", "offset"),
              Param("XGL_UINT32", "count"),
              Param("XGL_UINT32", "stride")]),
 
         Proto("XGL_VOID", "CmdDrawIndexedIndirect",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
-             Param("XGL_GPU_MEMORY", "mem"),
+             Param("XGL_BUFFER", "buffer"),
              Param("XGL_GPU_SIZE", "offset"),
              Param("XGL_UINT32", "count"),
              Param("XGL_UINT32", "stride")]),
@@ -652,15 +668,15 @@
 
         Proto("XGL_VOID", "CmdDispatchIndirect",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
-             Param("XGL_GPU_MEMORY", "mem"),
+             Param("XGL_BUFFER", "buffer"),
              Param("XGL_GPU_SIZE", "offset")]),
 
-        Proto("XGL_VOID", "CmdCopyMemory",
+        Proto("XGL_VOID", "CmdCopyBuffer",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
-             Param("XGL_GPU_MEMORY", "srcMem"),
-             Param("XGL_GPU_MEMORY", "destMem"),
+             Param("XGL_BUFFER", "srcBuffer"),
+             Param("XGL_BUFFER", "destBuffer"),
              Param("XGL_UINT", "regionCount"),
-             Param("const XGL_MEMORY_COPY*", "pRegions")]),
+             Param("const XGL_BUFFER_COPY*", "pRegions")]),
 
         Proto("XGL_VOID", "CmdCopyImage",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
@@ -669,19 +685,19 @@
              Param("XGL_UINT", "regionCount"),
              Param("const XGL_IMAGE_COPY*", "pRegions")]),
 
-        Proto("XGL_VOID", "CmdCopyMemoryToImage",
+        Proto("XGL_VOID", "CmdCopyBufferToImage",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
-             Param("XGL_GPU_MEMORY", "srcMem"),
+             Param("XGL_BUFFER", "srcBuffer"),
              Param("XGL_IMAGE", "destImage"),
              Param("XGL_UINT", "regionCount"),
-             Param("const XGL_MEMORY_IMAGE_COPY*", "pRegions")]),
+             Param("const XGL_BUFFER_IMAGE_COPY*", "pRegions")]),
 
-        Proto("XGL_VOID", "CmdCopyImageToMemory",
+        Proto("XGL_VOID", "CmdCopyImageToBuffer",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
              Param("XGL_IMAGE", "srcImage"),
-             Param("XGL_GPU_MEMORY", "destMem"),
+             Param("XGL_BUFFER", "destBuffer"),
              Param("XGL_UINT", "regionCount"),
-             Param("const XGL_MEMORY_IMAGE_COPY*", "pRegions")]),
+             Param("const XGL_BUFFER_IMAGE_COPY*", "pRegions")]),
 
         Proto("XGL_VOID", "CmdCloneImageData",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
@@ -690,16 +706,16 @@
              Param("XGL_IMAGE", "destImage"),
              Param("XGL_IMAGE_STATE", "destImageState")]),
 
-        Proto("XGL_VOID", "CmdUpdateMemory",
+        Proto("XGL_VOID", "CmdUpdateBuffer",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
-             Param("XGL_GPU_MEMORY", "destMem"),
+             Param("XGL_BUFFER", "destBuffer"),
              Param("XGL_GPU_SIZE", "destOffset"),
              Param("XGL_GPU_SIZE", "dataSize"),
              Param("const XGL_UINT32*", "pData")]),
 
-        Proto("XGL_VOID", "CmdFillMemory",
+        Proto("XGL_VOID", "CmdFillBuffer",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
-             Param("XGL_GPU_MEMORY", "destMem"),
+             Param("XGL_BUFFER", "destBuffer"),
              Param("XGL_GPU_SIZE", "destOffset"),
              Param("XGL_GPU_SIZE", "fillSize"),
              Param("XGL_UINT32", "data")]),
@@ -741,9 +757,9 @@
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
              Param("XGL_EVENT", "event")]),
 
-        Proto("XGL_VOID", "CmdMemoryAtomic",
+        Proto("XGL_VOID", "CmdBufferAtomic",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
-             Param("XGL_GPU_MEMORY", "destMem"),
+             Param("XGL_BUFFER", "destBuffer"),
              Param("XGL_GPU_SIZE", "destOffset"),
              Param("XGL_UINT64", "srcData"),
              Param("XGL_ATOMIC_OP", "atomicOp")]),
@@ -768,7 +784,7 @@
         Proto("XGL_VOID", "CmdWriteTimestamp",
             [Param("XGL_CMD_BUFFER", "cmdBuffer"),
              Param("XGL_TIMESTAMP_TYPE", "timestampType"),
-             Param("XGL_GPU_MEMORY", "destMem"),
+             Param("XGL_BUFFER", "destBuffer"),
              Param("XGL_GPU_SIZE", "destOffset")]),
 
         Proto("XGL_VOID", "CmdInitAtomicCounters",
@@ -783,7 +799,7 @@
              Param("XGL_PIPELINE_BIND_POINT", "pipelineBindPoint"),
              Param("XGL_UINT", "startCounter"),
              Param("XGL_UINT", "counterCount"),
-             Param("XGL_GPU_MEMORY", "srcMem"),
+             Param("XGL_BUFFER", "srcBuffer"),
              Param("XGL_GPU_SIZE", "srcOffset")]),
 
         Proto("XGL_VOID", "CmdSaveAtomicCounters",
@@ -791,7 +807,7 @@
              Param("XGL_PIPELINE_BIND_POINT", "pipelineBindPoint"),
              Param("XGL_UINT", "startCounter"),
              Param("XGL_UINT", "counterCount"),
-             Param("XGL_GPU_MEMORY", "destMem"),
+             Param("XGL_BUFFER", "destBuffer"),
              Param("XGL_GPU_SIZE", "destOffset")]),
 
         Proto("XGL_RESULT", "CreateFramebuffer",