st/nine: Align stack for entry points
[mesa.git] / src / gallium / state_trackers / nine / indexbuffer9.c
index 48553fd7451e07c1800363f8db1fd408815d2629..0a31d7e97167239507506a0e26341ecb555e9010 100644 (file)
@@ -40,50 +40,17 @@ NineIndexBuffer9_ctor( struct NineIndexBuffer9 *This,
                        struct NineUnknownParams *pParams,
                        D3DINDEXBUFFER_DESC *pDesc )
 {
-    struct pipe_resource *info = &This->base.info;
     HRESULT hr;
     DBG("This=%p pParams=%p pDesc=%p Usage=%s\n",
          This, pParams, pDesc, nine_D3DUSAGE_to_str(pDesc->Usage));
 
-    This->pipe = pParams->device->pipe;
-
-    info->screen = pParams->device->screen;
-    info->target = PIPE_BUFFER;
-    info->format = PIPE_FORMAT_R8_UNORM;
-    info->width0 = pDesc->Size;
-    info->flags = 0;
-
-    info->bind = PIPE_BIND_INDEX_BUFFER | PIPE_BIND_TRANSFER_WRITE;
-    if (!(pDesc->Usage & D3DUSAGE_WRITEONLY))
-        info->bind |= PIPE_BIND_TRANSFER_READ;
-
-    info->usage = PIPE_USAGE_DEFAULT;
-    if (pDesc->Usage & D3DUSAGE_DYNAMIC)
-        info->usage = PIPE_USAGE_STREAM;
-    if (pDesc->Pool == D3DPOOL_SYSTEMMEM)
-        info->usage = PIPE_USAGE_STAGING;
-
-    /* if (This->desc.Usage & D3DUSAGE_DONOTCLIP) { } */
-    /* if (This->desc.Usage & D3DUSAGE_NONSECURE) { } */
-    /* if (This->desc.Usage & D3DUSAGE_NPATCHES) { } */
-    /* if (This->desc.Usage & D3DUSAGE_POINTS) { } */
-    /* if (This->desc.Usage & D3DUSAGE_RTPATCHES) { } */
-    /* if (This->desc.Usage & D3DUSAGE_SOFTWAREPROCESSING) { } */
-
-    info->height0 = 1;
-    info->depth0 = 1;
-    info->array_size = 1;
-    info->last_level = 0;
-    info->nr_samples = 0;
-
-    hr = NineResource9_ctor(&This->base, pParams, NULL, TRUE, D3DRTYPE_INDEXBUFFER,
-                            pDesc->Pool, pDesc->Usage);
+    hr = NineBuffer9_ctor(&This->base, pParams, D3DRTYPE_INDEXBUFFER,
+                          pDesc->Usage, pDesc->Size, pDesc->Pool);
     if (FAILED(hr))
         return hr;
 
-    This->buffer.buffer = This->base.resource;
+    This->buffer.buffer = NineIndexBuffer9_GetResource(This);
     This->buffer.offset = 0;
-    This->map_count = 0;
 
     switch (pDesc->Format) {
     case D3DFMT_INDEX16: This->buffer.index_size = 2; break;
@@ -103,9 +70,7 @@ NineIndexBuffer9_ctor( struct NineIndexBuffer9 *This,
 void
 NineIndexBuffer9_dtor( struct NineIndexBuffer9 *This )
 {
-    if (This->transfer) { NineIndexBuffer9_Unlock(This); }
-
-    NineResource9_dtor(&This->base);
+    NineBuffer9_dtor(&This->base);
 }
 
 const struct pipe_index_buffer *
@@ -114,69 +79,29 @@ NineIndexBuffer9_GetBuffer( struct NineIndexBuffer9 *This )
     return &This->buffer;
 }
 
-HRESULT WINAPI
+struct pipe_resource *
+NineIndexBuffer9_GetResource( struct NineIndexBuffer9 *This )
+{
+    return NineBuffer9_GetResource(&This->base);
+}
+
+HRESULT NINE_WINAPI
 NineIndexBuffer9_Lock( struct NineIndexBuffer9 *This,
                        UINT OffsetToLock,
                        UINT SizeToLock,
                        void **ppbData,
                        DWORD Flags )
 {
-    struct pipe_box box;
-    void *data;
-    UINT count;
-    const unsigned usage = d3dlock_buffer_to_pipe_transfer_usage(Flags);
-
-    DBG("This=%p OffsetToLock=%u SizeToLock=%u ppbData=%p Flags=%i "
-        "transfer=%p map_count=%u\n", This, OffsetToLock,
-       SizeToLock, ppbData, Flags, This->transfer, This->map_count);
-
-    count = ++This->map_count;
-
-    if (SizeToLock == 0) {
-        SizeToLock = This->desc.Size - OffsetToLock;
-        user_warn(OffsetToLock != 0);
-    }
-
-    u_box_1d(OffsetToLock, SizeToLock, &box);
-
-    if (unlikely(count != 1)) {
-        DBG("Lock has been called on already locked buffer."
-           "Unmapping before mapping again.");
-        This->pipe->transfer_unmap(This->pipe, This->transfer);
-    }
-    data = This->pipe->transfer_map(This->pipe, This->base.resource, 0,
-                                    usage, &box, &This->transfer);
-    if (!This->transfer) {
-        DBG("pipe::transfer_map failed\n"
-            " usage = %u\n"
-            " box.x = %u\n"
-            " box.width = %u\n",
-            usage, box.x, box.width);
-    }
-    *ppbData = data;
-    DBG("Returning memory at %p at address %p\n", *ppbData, ppbData);
-
-    return D3D_OK;
+    return NineBuffer9_Lock(&This->base, OffsetToLock, SizeToLock, ppbData, Flags);
 }
 
-HRESULT WINAPI
+HRESULT NINE_WINAPI
 NineIndexBuffer9_Unlock( struct NineIndexBuffer9 *This )
 {
-    DBG("This=%p\n", This);
-    if (!This->map_count) {
-        DBG("Unmap called without a previous map call.\n");
-        return D3D_OK;
-    }
-    if (--This->map_count) {
-        DBG("Ignoring unmap.\n");
-       return D3D_OK;
-    }
-    This->pipe->transfer_unmap(This->pipe, This->transfer);
-    This->transfer = NULL;
-    return D3D_OK;
+    return NineBuffer9_Unlock(&This->base);
 }
 
-HRESULT WINAPI
+HRESULT NINE_WINAPI
 NineIndexBuffer9_GetDesc( struct NineIndexBuffer9 *This,
                           D3DINDEXBUFFER_DESC *pDesc )
 {