update to the latest vertex fetch proposal
authorChia-I Wu <olv@lunarg.com>
Sat, 8 Nov 2014 02:48:20 +0000 (10:48 +0800)
committerCourtney Goeltzenleuchter <courtney@LunarG.com>
Fri, 21 Nov 2014 23:49:39 +0000 (16:49 -0700)
The main difference is that XGL_SLOT_VERTEX_INPUT is replaced by
xglCmdBindVertexData.  This actually simplifies the driver, which can be seen
with:

 $ git show icd/intel/

The new proposal also adds some new formats, but they are ignored for now
because they are marked TBD.

demos/tri.c
include/xgl.h
include/xglLayer.h
layers/api_dump.c
layers/basic_plugin.c
layers/draw_state.c
layers/object_track.c
layers/xgl_string_helper.h
loader/loader.c
xgl.py

index 3d9be2d..8b1f857 100644 (file)
@@ -57,7 +57,6 @@ struct demo {
 
     struct {
         XGL_GPU_MEMORY mem;
-        XGL_MEMORY_VIEW_ATTACH_INFO view;
 
         XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO vi;
         XGL_VERTEX_INPUT_BINDING_DESCRIPTION vi_bindings[1];
@@ -118,6 +117,8 @@ static void demo_draw_build_cmd(struct demo *demo)
 
     xglCmdBindAttachments(demo->cmd, 1, &color_attachment, &depth_stencil);
 
+    xglCmdBindVertexData(demo->cmd, demo->vertices.mem, 0, 0);
+
     clear_range.aspect = XGL_IMAGE_ASPECT_COLOR;
     clear_range.baseMipLevel = 0;
     clear_range.mipLevels = 1;
@@ -446,16 +447,6 @@ static void demo_prepare_vertices(struct demo *demo)
     err = xglUnmapMemory(demo->vertices.mem);
     assert(!err);
 
-    demo->vertices.view.sType = XGL_STRUCTURE_TYPE_MEMORY_VIEW_ATTACH_INFO;
-    demo->vertices.view.pNext = NULL;
-    demo->vertices.view.mem = demo->vertices.mem;
-    demo->vertices.view.offset = 0;
-    demo->vertices.view.range = sizeof(vb);
-    demo->vertices.view.stride = sizeof(vb[0]);
-    demo->vertices.view.format.channelFormat = XGL_CH_FMT_UNDEFINED;
-    demo->vertices.view.format.numericFormat = XGL_NUM_FMT_UNDEFINED;
-    demo->vertices.view.state = XGL_MEMORY_STATE_GRAPHICS_SHADER_READ_ONLY;
-
     demo->vertices.vi.sType = XGL_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO;
     demo->vertices.vi.pNext = NULL;
     demo->vertices.vi.bindingCount = 1;
@@ -482,7 +473,7 @@ static void demo_prepare_descriptor_set(struct demo *demo)
     const XGL_DESCRIPTOR_SET_CREATE_INFO descriptor_set = {
         .sType = XGL_STRUCTURE_TYPE_DESCRIPTOR_SET_CREATE_INFO,
         .pNext = NULL,
-        .slots = DEMO_TEXTURE_COUNT * 2 + 1,
+        .slots = DEMO_TEXTURE_COUNT * 2,
     };
     XGL_RESULT err;
     XGL_UINT i;
@@ -491,7 +482,7 @@ static void demo_prepare_descriptor_set(struct demo *demo)
     assert(!err);
 
     xglBeginDescriptorSetUpdate(demo->dset);
-    xglClearDescriptorSetSlots(demo->dset, 0, DEMO_TEXTURE_COUNT * 2 + 1);
+    xglClearDescriptorSetSlots(demo->dset, 0, DEMO_TEXTURE_COUNT * 2);
 
     for (i = 0; i < DEMO_TEXTURE_COUNT; i++) {
         const XGL_IMAGE_VIEW_ATTACH_INFO image_view = {
@@ -507,8 +498,6 @@ static void demo_prepare_descriptor_set(struct demo *demo)
                 &image_view);
     }
 
-    xglAttachMemoryViewDescriptors(demo->dset, 2 * i, 1, &demo->vertices.view);
-
     xglEndDescriptorSetUpdate(demo->dset);
 }
 
@@ -587,8 +576,7 @@ static void demo_prepare_pipeline(struct demo *demo)
     XGL_PIPELINE_DB_STATE_CREATE_INFO db;
     XGL_PIPELINE_SHADER_STAGE_CREATE_INFO vs;
     XGL_PIPELINE_SHADER_STAGE_CREATE_INFO fs;
-    XGL_DESCRIPTOR_SLOT_INFO vs_slots[DEMO_TEXTURE_COUNT * 2 + 1];
-    XGL_DESCRIPTOR_SLOT_INFO fs_slots[DEMO_TEXTURE_COUNT * 2 + 1];
+    XGL_DESCRIPTOR_SLOT_INFO fs_slots[DEMO_TEXTURE_COUNT * 2];
     XGL_RESULT err;
     XGL_UINT i;
 
@@ -613,10 +601,6 @@ static void demo_prepare_pipeline(struct demo *demo)
     db.sType = XGL_STRUCTURE_TYPE_PIPELINE_DB_STATE_CREATE_INFO;
     db.format = demo->depth.format;
 
-    memset(&vs_slots, 0, sizeof(vs_slots));
-    vs_slots[2 * DEMO_TEXTURE_COUNT].slotObjectType = XGL_SLOT_VERTEX_INPUT;
-    vs_slots[2 * DEMO_TEXTURE_COUNT].shaderEntityIndex = 0;
-
     memset(&fs_slots, 0, sizeof(fs_slots));
     for (i = 0; i < DEMO_TEXTURE_COUNT; i++) {
         fs_slots[2 * i].slotObjectType = XGL_SLOT_SHADER_SAMPLER;
@@ -629,16 +613,13 @@ static void demo_prepare_pipeline(struct demo *demo)
     vs.sType = XGL_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
     vs.shader.stage = XGL_SHADER_STAGE_VERTEX;
     vs.shader.shader = demo_prepare_vs(demo);
-    vs.shader.descriptorSetMapping[0].descriptorCount =
-        DEMO_TEXTURE_COUNT * 2 + 1;
-    vs.shader.descriptorSetMapping[0].pDescriptorInfo = vs_slots;
 
     memset(&fs, 0, sizeof(fs));
     fs.sType = XGL_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
     fs.shader.stage = XGL_SHADER_STAGE_FRAGMENT;
     fs.shader.shader = demo_prepare_fs(demo);
     fs.shader.descriptorSetMapping[0].descriptorCount =
-        DEMO_TEXTURE_COUNT * 2 + 1;
+        DEMO_TEXTURE_COUNT * 2;
     fs.shader.descriptorSetMapping[0].pDescriptorInfo = fs_slots;
 
     pipeline.pNext = (const XGL_VOID *) &vi;
index 25812c9..2ceb566 100644 (file)
@@ -286,10 +286,7 @@ typedef enum _XGL_DESCRIPTOR_SET_SLOT_TYPE
     XGL_SLOT_SHADER_RESOURCE                                = 0x00000001,
     XGL_SLOT_SHADER_UAV                                     = 0x00000002,
     XGL_SLOT_SHADER_SAMPLER                                 = 0x00000003,
-// IMG CHANGE BEGIN - support for vertex input description
-    XGL_SLOT_VERTEX_INPUT                                   = 0x00000004,
-    XGL_SLOT_NEXT_DESCRIPTOR_SET                            = 0x00000005,
-// IMG CHANGE END
+    XGL_SLOT_NEXT_DESCRIPTOR_SET                            = 0x00000004,
 
     XGL_DESCRIPTOR_SET_SLOT_TYPE_BEGIN_RANGE                = XGL_SLOT_UNUSED,
     XGL_DESCRIPTOR_SET_SLOT_TYPE_END_RANGE                  = XGL_SLOT_NEXT_DESCRIPTOR_SET,
@@ -774,7 +771,15 @@ typedef enum _XGL_CHANNEL_FORMAT
 // IMG CHANGE BEGIN - support for vertex input description
     XGL_CH_FMT_R8G8B8                                       = 31,
     XGL_CH_FMT_R16G16B16                                    = 32,
-    XGL_MAX_CH_FMT                                          = XGL_CH_FMT_R16G16B16,
+
+    // optional? TBD'
+    XGL_CH_FMT_B10G10R10A2                                  = 33,
+    XGL_CH_FMT_R64                                          = 34,
+    XGL_CH_FMT_R64G64                                       = 35,
+    XGL_CH_FMT_R64G64B64                                    = 36,
+    XGL_CH_FMT_R64G64B64A64                                 = 37,
+
+    XGL_MAX_CH_FMT                                          = XGL_CH_FMT_R64G64B64A64,
 // IMG CHANGE END
     XGL_MAX_ENUM(_XGL_CHANNEL_FORMAT)
 } XGL_CHANNEL_FORMAT;
@@ -789,7 +794,11 @@ typedef enum _XGL_NUM_FORMAT
     XGL_NUM_FMT_FLOAT                                       = 5,
     XGL_NUM_FMT_SRGB                                        = 6,
     XGL_NUM_FMT_DS                                          = 7,
-    XGL_MAX_NUM_FMT                                         = XGL_NUM_FMT_DS,
+// IMG CHANGE BEGIN - support for vertex input description
+    XGL_NUM_FMT_USCALED                                     = 8,
+    XGL_NUM_FMT_SSCALED                                     = 9,
+    XGL_MAX_NUM_FMT                                         = XGL_NUM_FMT_SSCALED,
+// IMG CHANGE END
     XGL_MAX_ENUM(_XGL_NUM_FORMAT)
 } XGL_NUM_FORMAT;
 
@@ -1437,34 +1446,11 @@ typedef struct _XGL_COMPUTE_PIPELINE_CREATE_INFO
 
 // IMG CHANGE BEGIN - support for vertex input description
 
-// Example descriptor set mapping:
-//
-// {
-//     .descriptorCount = 4;
-//     .pDescriptorInfo[0] =
-//     {
-//         .slotObjectType = XGL_SLOT_VERTEX_INPUT;
-//         .shaderEntityIndex = 2;  // describes XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO.pVertexBindingDescriptions[2]
-//     }
-//     .pDescriptorInfo[1] =
-//     {
-//         .slotObjectType = XGL_SLOT_UNUSED;
-//         .shaderEntityIndex = 0;
-//     }
-//     .pDescriptorInfo[2] =
-//     {
-//         .slotObjectType = XGL_SLOT_VERTEX_INPUT;
-//         .shaderEntityIndex = 0;  // describes XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO.pVertexBindingDescriptions[0]
-//     }
-//     .pDescriptorInfo[3] =
-//     {
-//         .slotObjectType = XGL_SLOT_VERTEX_INPUT;
-//         .shaderEntityIndex = 1;  // describes XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO.pVertexBindingDescriptions[1]
-//     }
-// }
 //
 // The shader inputs are mapped to pVertexAttributeDescriptions using a decoration in the BIL.
 //
+// The binding parameter in xglCmdBindVertexBuffer describes the index into pVertexBindingDescriptions[]
+//
 //
 // Formats allowed for attributes (XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION.format) will be detailed in
 // a table in the specification.
@@ -2192,6 +2178,14 @@ XGL_VOID XGLAPI xglCmdBindDynamicMemoryView(
     XGL_PIPELINE_BIND_POINT                     pipelineBindPoint,
     const XGL_MEMORY_VIEW_ATTACH_INFO*          pMemView);
 
+// IMG CHANGE BEGIN - support for vertex input description
+XGL_VOID XGLAPI xglCmdBindVertexData(
+    XGL_CMD_BUFFER                              cmdBuffer,
+    XGL_GPU_MEMORY                              mem,
+    XGL_GPU_SIZE                                offset,
+    XGL_UINT                                    binding);
+// IMG CHANGE END
+
 XGL_VOID XGLAPI xglCmdBindIndexData(
     XGL_CMD_BUFFER                              cmdBuffer,
     XGL_GPU_MEMORY                              mem,
index 72fcb15..2cfdb16 100644 (file)
@@ -91,6 +91,7 @@ typedef XGL_VOID (XGLAPI *CmdBindPipelineDeltaType)(XGL_CMD_BUFFER cmdBuffer, XG
 typedef XGL_VOID (XGLAPI *CmdBindStateObjectType)(XGL_CMD_BUFFER cmdBuffer, XGL_STATE_BIND_POINT stateBindPoint, XGL_STATE_OBJECT state);
 typedef XGL_VOID (XGLAPI *CmdBindDescriptorSetType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, XGL_UINT index, XGL_DESCRIPTOR_SET descriptorSet, XGL_UINT slotOffset);
 typedef XGL_VOID (XGLAPI *CmdBindDynamicMemoryViewType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, const XGL_MEMORY_VIEW_ATTACH_INFO* pMemView);
+typedef XGL_VOID (XGLAPI *CmdBindVertexDataType)(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY mem, XGL_GPU_SIZE offset, XGL_UINT binding);
 typedef XGL_VOID (XGLAPI *CmdBindIndexDataType)(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY mem, XGL_GPU_SIZE offset, XGL_INDEX_TYPE indexType);
 typedef XGL_VOID (XGLAPI *CmdBindAttachmentsType)(XGL_CMD_BUFFER cmdBuffer, XGL_UINT colorAttachmentCount, const XGL_COLOR_ATTACHMENT_BIND_INFO* pColorAttachments, const XGL_DEPTH_STENCIL_BIND_INFO* pDepthStencilAttachment);
 typedef XGL_VOID (XGLAPI *CmdPrepareMemoryRegionsType)(XGL_CMD_BUFFER cmdBuffer, XGL_UINT transitionCount, const XGL_MEMORY_STATE_TRANSITION* pStateTransitions);
@@ -221,6 +222,7 @@ typedef struct _XGL_LAYER_DISPATCH_TABLE
     CmdBindStateObjectType CmdBindStateObject;
     CmdBindDescriptorSetType CmdBindDescriptorSet;
     CmdBindDynamicMemoryViewType CmdBindDynamicMemoryView;
+    CmdBindVertexDataType CmdBindVertexData;
     CmdBindIndexDataType CmdBindIndexData;
     CmdBindAttachmentsType CmdBindAttachments;
     CmdPrepareMemoryRegionsType CmdPrepareMemoryRegions;
index ef6ea30..7896544 100644 (file)
@@ -194,6 +194,8 @@ static void initLayerTable()
     nextTable.CmdBindDescriptorSet = fpCmdBindDescriptorSet;
     CmdBindDynamicMemoryViewType fpCmdBindDynamicMemoryView = fpNextGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (XGL_CHAR *) "xglCmdBindDynamicMemoryView");
     nextTable.CmdBindDynamicMemoryView = fpCmdBindDynamicMemoryView;
+    CmdBindVertexDataType fpCmdBindVertexData = fpNextGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (XGL_CHAR *) "xglCmdBindVertexData");
+    nextTable.CmdBindVertexData = fpCmdBindVertexData;
     CmdBindIndexDataType fpCmdBindIndexData = fpNextGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (XGL_CHAR *) "xglCmdBindIndexData");
     nextTable.CmdBindIndexData = fpCmdBindIndexData;
     CmdBindAttachmentsType fpCmdBindAttachments = fpNextGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (XGL_CHAR *) "xglCmdBindAttachments");
@@ -998,6 +1000,12 @@ XGL_LAYER_EXPORT XGL_VOID XGLAPI xglCmdBindDynamicMemoryView(XGL_CMD_BUFFER cmdB
     }
 }
 
+XGL_LAYER_EXPORT XGL_VOID XGLAPI xglCmdBindVertexData(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY mem, XGL_GPU_SIZE offset, XGL_UINT binding)
+{
+    nextTable.CmdBindVertexData(cmdBuffer, mem, offset, binding);
+    printf("xglCmdBindVertexData(cmdBuffer = %p, mem = %p, offset = %i, binding = %d)\n", (void*)cmdBuffer, (void*)mem, offset, binding);
+}
+
 XGL_LAYER_EXPORT XGL_VOID XGLAPI xglCmdBindIndexData(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY mem, XGL_GPU_SIZE offset, XGL_INDEX_TYPE indexType)
 {
     nextTable.CmdBindIndexData(cmdBuffer, mem, offset, indexType);
@@ -1507,6 +1515,8 @@ XGL_LAYER_EXPORT XGL_VOID* XGLAPI xglGetProcAddr(XGL_PHYSICAL_GPU gpu, const XGL
         return xglCmdBindDescriptorSet;
     else if (!strncmp("xglCmdBindDynamicMemoryView", (const char *) funcName, sizeof("xglCmdBindDynamicMemoryView")))
         return xglCmdBindDynamicMemoryView;
+    else if (!strncmp("xglCmdBindVertexData", (const char *) funcName, sizeof("xglCmdBindVertexData")))
+        return xglCmdBindVertexData;
     else if (!strncmp("xglCmdBindIndexData", (const char *) funcName, sizeof("xglCmdBindIndexData")))
         return xglCmdBindIndexData;
     else if (!strncmp("xglCmdBindAttachments", (const char *) funcName, sizeof("xglCmdBindAttachments")))
index 4126e3e..ac8362d 100644 (file)
@@ -92,6 +92,7 @@ static void initLayerTable()
     myTable.CmdBindStateObject = fpGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (const XGL_CHAR *) "xglCmdBindStateObject");
     myTable.CmdBindDescriptorSet = fpGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (const XGL_CHAR *) "xglCmdBindDescriptorSet");
     myTable.CmdBindDynamicMemoryView = fpGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (const XGL_CHAR *) "xglCmdBindDynamicMemoryView");
+    myTable.CmdBindVertexData = fpGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (const XGL_CHAR *) "xglCmdBindVertexData");
     myTable.CmdBindIndexData = fpGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (const XGL_CHAR *) "xglCmdBindIndexData");
     myTable.CmdBindAttachments = fpGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (const XGL_CHAR *) "xglCmdBindAttachments");
     myTable.CmdPrepareMemoryRegions = fpGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (const XGL_CHAR *) "xglCmdPrepareMemoryRegions");
@@ -337,6 +338,8 @@ XGL_LAYER_EXPORT XGL_VOID * XGLAPI xglGetProcAddr(XGL_PHYSICAL_GPU gpu, const XG
         return myTable.CmdBindDescriptorSet;
     else if (!strncmp("xglCmdBindDynamicMemoryView", (const char *) pName, sizeof ("xglCmdBindDynamicMemoryView")))
         return myTable.CmdBindDynamicMemoryView;
+    else if (!strncmp("xglCmdBindVertexData", (const char *) pName, sizeof ("xglCmdBindVertexData")))
+        return myTable.CmdBindVertexData;
     else if (!strncmp("xglCmdBindIndexData", (const char *) pName, sizeof ("xglCmdBindIndexData")))
         return myTable.CmdBindIndexData;
     else if (!strncmp("xglCmdBindAttachments", (const char *) pName, sizeof ("xglCmdBindAttachments")))
index 89f0f04..8a2e4c7 100644 (file)
@@ -354,10 +354,6 @@ static XGL_BOOL verifyShaderSlotMapping(const XGL_UINT slot, const XGL_UINT slot
             if (MAPPING_SAMPLER != slotBinding)
                 error = XGL_TRUE;
             break;
-        case XGL_SLOT_VERTEX_INPUT:
-            if (MAPPING_MEMORY != slotBinding)
-                error = XGL_TRUE;
-            break;
         case XGL_SLOT_SHADER_UAV:
             if (MAPPING_MEMORY != slotBinding)
                 error = XGL_TRUE;
@@ -602,6 +598,8 @@ static void initLayerTable()
     nextTable.CmdBindDescriptorSet = fpCmdBindDescriptorSet;
     CmdBindDynamicMemoryViewType fpCmdBindDynamicMemoryView = fpNextGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (XGL_CHAR *) "xglCmdBindDynamicMemoryView");
     nextTable.CmdBindDynamicMemoryView = fpCmdBindDynamicMemoryView;
+    CmdBindVertexDataType fpCmdBindVertexData = fpNextGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (XGL_CHAR *) "xglCmdBindVertexData");
+    nextTable.CmdBindVertexData = fpCmdBindVertexData;
     CmdBindIndexDataType fpCmdBindIndexData = fpNextGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (XGL_CHAR *) "xglCmdBindIndexData");
     nextTable.CmdBindIndexData = fpCmdBindIndexData;
     CmdBindAttachmentsType fpCmdBindAttachments = fpNextGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (XGL_CHAR *) "xglCmdBindAttachments");
@@ -1248,6 +1246,11 @@ XGL_LAYER_EXPORT XGL_VOID XGLAPI xglCmdBindDynamicMemoryView(XGL_CMD_BUFFER cmdB
     nextTable.CmdBindDynamicMemoryView(cmdBuffer, pipelineBindPoint, pMemView);
 }
 
+XGL_LAYER_EXPORT XGL_VOID XGLAPI xglCmdBindVertexData(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY mem, XGL_GPU_SIZE offset, XGL_UINT binding)
+{
+    nextTable.CmdBindVertexData(cmdBuffer, mem, offset, binding);
+}
+
 XGL_LAYER_EXPORT XGL_VOID XGLAPI xglCmdBindIndexData(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY mem, XGL_GPU_SIZE offset, XGL_INDEX_TYPE indexType)
 {
     nextTable.CmdBindIndexData(cmdBuffer, mem, offset, indexType);
index 07b617d..e0be185 100644 (file)
@@ -252,6 +252,8 @@ static void initLayerTable()
     nextTable.CmdBindDescriptorSet = fpCmdBindDescriptorSet;
     CmdBindDynamicMemoryViewType fpCmdBindDynamicMemoryView = fpNextGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (XGL_CHAR *) "xglCmdBindDynamicMemoryView");
     nextTable.CmdBindDynamicMemoryView = fpCmdBindDynamicMemoryView;
+    CmdBindVertexDataType fpCmdBindVertexData = fpNextGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (XGL_CHAR *) "xglCmdBindVertexData");
+    nextTable.CmdBindVertexData = fpCmdBindVertexData;
     CmdBindIndexDataType fpCmdBindIndexData = fpNextGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (XGL_CHAR *) "xglCmdBindIndexData");
     nextTable.CmdBindIndexData = fpCmdBindIndexData;
     CmdBindAttachmentsType fpCmdBindAttachments = fpNextGPA((XGL_PHYSICAL_GPU) pCurObj->nextObject, (XGL_CHAR *) "xglCmdBindAttachments");
@@ -988,6 +990,13 @@ XGL_LAYER_EXPORT XGL_VOID XGLAPI xglCmdBindDynamicMemoryView(XGL_CMD_BUFFER cmdB
     nextTable.CmdBindDynamicMemoryView(cmdBuffer, pipelineBindPoint, pMemView);
 }
 
+XGL_LAYER_EXPORT XGL_VOID XGLAPI xglCmdBindVertexData(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY mem, XGL_GPU_SIZE offset, XGL_UINT binding)
+{
+    ll_increment_use_count((XGL_VOID*)cmdBuffer);
+    printf("OBJ[%llu] : USING cmdBuffer object %p (%lu total uses)\n", object_track_index++, (void*)cmdBuffer, ll_get_obj_uses((XGL_VOID*)cmdBuffer));
+    nextTable.CmdBindVertexData(cmdBuffer, mem, offset, binding);
+}
+
 XGL_LAYER_EXPORT XGL_VOID XGLAPI xglCmdBindIndexData(XGL_CMD_BUFFER cmdBuffer, XGL_GPU_MEMORY mem, XGL_GPU_SIZE offset, XGL_INDEX_TYPE indexType)
 {
     ll_increment_use_count((XGL_VOID*)cmdBuffer);
index c61a21c..f1edc90 100644 (file)
@@ -166,9 +166,6 @@ static const char* string_XGL_DESCRIPTOR_SET_SLOT_TYPE(XGL_DESCRIPTOR_SET_SLOT_T
     case XGL_SLOT_UNUSED:
         return "XGL_SLOT_UNUSED";
 
-    case XGL_SLOT_VERTEX_INPUT:
-        return "XGL_SLOT_VERTEX_INPUT";
-
     default:
         return "Unhandled XGL_DESCRIPTOR_SET_SLOT_TYPE";
     }
index 6bfba28..3f8efdb 100644 (file)
@@ -525,6 +525,7 @@ static void loader_init_dispatch_table(XGL_LAYER_DISPATCH_TABLE *tab, GetProcAdd
     tab->CmdBindStateObject = fpGPA(gpu, (const XGL_CHAR *) "xglCmdBindStateObject");
     tab->CmdBindDescriptorSet = fpGPA(gpu, (const XGL_CHAR *) "xglCmdBindDescriptorSet");
     tab->CmdBindDynamicMemoryView = fpGPA(gpu, (const XGL_CHAR *) "xglCmdBindDynamicMemoryView");
+    tab->CmdBindVertexData = fpGPA(gpu, (const XGL_CHAR *) "xglCmdBindVertexData");
     tab->CmdBindIndexData = fpGPA(gpu, (const XGL_CHAR *) "xglCmdBindIndexData");
     tab->CmdBindAttachments = fpGPA(gpu, (const XGL_CHAR *) "xglCmdBindAttachments");
     tab->CmdPrepareMemoryRegions = fpGPA(gpu, (const XGL_CHAR *) "xglCmdPrepareMemoryRegions");
@@ -980,6 +981,8 @@ LOADER_EXPORT XGL_VOID * XGLAPI xglGetProcAddr(XGL_PHYSICAL_GPU gpu, const XGL_C
         return disp_table->CmdBindDescriptorSet;
     else if (!strncmp("xglCmdBindDynamicMemoryView", (const char *) pName, sizeof ("xglCmdBindDynamicMemoryView")))
         return disp_table->CmdBindDynamicMemoryView;
+    else if (!strncmp("xglCmdBindVertexData", (const char *) pName, sizeof ("xglCmdBindVertexData")))
+        return disp_table->CmdBindVertexData;
     else if (!strncmp("xglCmdBindIndexData", (const char *) pName, sizeof ("xglCmdBindIndexData")))
         return disp_table->CmdBindIndexData;
     else if (!strncmp("xglCmdBindAttachments", (const char *) pName, sizeof ("xglCmdBindAttachments")))
diff --git a/xgl.py b/xgl.py
index 3f4f90f..033d85f 100644 (file)
--- a/xgl.py
+++ b/xgl.py
@@ -466,6 +466,12 @@ core = (
          Param("XGL_PIPELINE_BIND_POINT", "pipelineBindPoint"),
          Param("const XGL_MEMORY_VIEW_ATTACH_INFO*", "pMemView"))),
 
+    Proto("XGL_VOID", "CmdBindVertexData",
+        (Param("XGL_CMD_BUFFER", "cmdBuffer"),
+         Param("XGL_GPU_MEMORY", "mem"),
+         Param("XGL_GPU_SIZE", "offset"),
+         Param("XGL_UINT", "binding"))),
+
     Proto("XGL_VOID", "CmdBindIndexData",
         (Param("XGL_CMD_BUFFER", "cmdBuffer"),
          Param("XGL_GPU_MEMORY", "mem"),
@@ -814,6 +820,7 @@ icd_dispatch_table = (
     "CmdBindStateObject",
     "CmdBindDescriptorSet",
     "CmdBindDynamicMemoryView",
+    "CmdBindVertexData",
     "CmdBindIndexData",
     "CmdBindAttachments",
     "CmdPrepareMemoryRegions",