wined3d: Set WINED3D_BUFFER_CREATEBO in buffer_init().
This commit is contained in:
parent
b9976c3d20
commit
1bd98719e6
|
@ -1098,6 +1098,7 @@ HRESULT buffer_init(struct wined3d_buffer *buffer, IWineD3DDeviceImpl *device,
|
||||||
{
|
{
|
||||||
const struct GlPixelFormatDesc *format_desc = getFormatDescEntry(format, &device->adapter->gl_info);
|
const struct GlPixelFormatDesc *format_desc = getFormatDescEntry(format, &device->adapter->gl_info);
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
|
||||||
|
|
||||||
if (!size)
|
if (!size)
|
||||||
{
|
{
|
||||||
|
@ -1119,6 +1120,30 @@ HRESULT buffer_init(struct wined3d_buffer *buffer, IWineD3DDeviceImpl *device,
|
||||||
TRACE("size %#x, usage %#x, format %s, memory @ %p, iface @ %p.\n", buffer->resource.size, buffer->resource.usage,
|
TRACE("size %#x, usage %#x, format %s, memory @ %p, iface @ %p.\n", buffer->resource.size, buffer->resource.usage,
|
||||||
debug_d3dformat(buffer->resource.format_desc->format), buffer->resource.allocatedMemory, buffer);
|
debug_d3dformat(buffer->resource.format_desc->format), buffer->resource.allocatedMemory, buffer);
|
||||||
|
|
||||||
|
/* Observations show that drawStridedSlow is faster on dynamic VBs than converting +
|
||||||
|
* drawStridedFast (half-life 2 and others).
|
||||||
|
*
|
||||||
|
* Basically converting the vertices in the buffer is quite expensive, and observations
|
||||||
|
* show that drawStridedSlow is faster than converting + uploading + drawStridedFast.
|
||||||
|
* Therefore do not create a VBO for WINED3DUSAGE_DYNAMIC buffers.
|
||||||
|
*/
|
||||||
|
if (!gl_info->supported[ARB_VERTEX_BUFFER_OBJECT])
|
||||||
|
{
|
||||||
|
TRACE("Not creating a vbo because GL_ARB_vertex_buffer is not supported\n");
|
||||||
|
}
|
||||||
|
else if(buffer->resource.pool == WINED3DPOOL_SYSTEMMEM)
|
||||||
|
{
|
||||||
|
TRACE("Not creating a vbo because the vertex buffer is in system memory\n");
|
||||||
|
}
|
||||||
|
else if(buffer->resource.usage & WINED3DUSAGE_DYNAMIC)
|
||||||
|
{
|
||||||
|
TRACE("Not creating a vbo because the buffer has dynamic usage\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer->flags |= WINED3D_BUFFER_CREATEBO;
|
||||||
|
}
|
||||||
|
|
||||||
if (data)
|
if (data)
|
||||||
{
|
{
|
||||||
BYTE *ptr;
|
BYTE *ptr;
|
||||||
|
|
|
@ -520,23 +520,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateVertexBuffer(IWineD3DDevice *ifac
|
||||||
TRACE("Created buffer %p.\n", object);
|
TRACE("Created buffer %p.\n", object);
|
||||||
*ppVertexBuffer = (IWineD3DBuffer *)object;
|
*ppVertexBuffer = (IWineD3DBuffer *)object;
|
||||||
|
|
||||||
/* Observations show that drawStridedSlow is faster on dynamic VBs than converting +
|
|
||||||
* drawStridedFast (half-life 2).
|
|
||||||
*
|
|
||||||
* Basically converting the vertices in the buffer is quite expensive, and observations
|
|
||||||
* show that drawStridedSlow is faster than converting + uploading + drawStridedFast.
|
|
||||||
* Therefore do not create a VBO for WINED3DUSAGE_DYNAMIC buffers.
|
|
||||||
*/
|
|
||||||
if (!This->adapter->gl_info.supported[ARB_VERTEX_BUFFER_OBJECT])
|
|
||||||
{
|
|
||||||
TRACE("Not creating a vbo because GL_ARB_vertex_buffer is not supported\n");
|
|
||||||
} else if(Pool == WINED3DPOOL_SYSTEMMEM) {
|
|
||||||
TRACE("Not creating a vbo because the vertex buffer is in system memory\n");
|
|
||||||
} else if(Usage & WINED3DUSAGE_DYNAMIC) {
|
|
||||||
TRACE("Not creating a vbo because the buffer has dynamic usage\n");
|
|
||||||
} else {
|
|
||||||
object->flags |= WINED3D_BUFFER_CREATEBO;
|
|
||||||
}
|
|
||||||
return WINED3D_OK;
|
return WINED3D_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -560,7 +543,8 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateIndexBuffer(IWineD3DDevice *iface
|
||||||
}
|
}
|
||||||
|
|
||||||
hr = buffer_init(object, This, Length, Usage | WINED3DUSAGE_STATICDECL,
|
hr = buffer_init(object, This, Length, Usage | WINED3DUSAGE_STATICDECL,
|
||||||
WINED3DFMT_UNKNOWN, Pool, GL_ELEMENT_ARRAY_BUFFER_ARB, NULL, parent, parent_ops);
|
WINED3DFMT_UNKNOWN, Pool, GL_ELEMENT_ARRAY_BUFFER_ARB, NULL,
|
||||||
|
parent, parent_ops);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
WARN("Failed to initialize buffer, hr %#x\n", hr);
|
WARN("Failed to initialize buffer, hr %#x\n", hr);
|
||||||
|
@ -570,12 +554,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateIndexBuffer(IWineD3DDevice *iface
|
||||||
|
|
||||||
TRACE("Created buffer %p.\n", object);
|
TRACE("Created buffer %p.\n", object);
|
||||||
|
|
||||||
if (Pool != WINED3DPOOL_SYSTEMMEM && !(Usage & WINED3DUSAGE_DYNAMIC)
|
|
||||||
&& This->adapter->gl_info.supported[ARB_VERTEX_BUFFER_OBJECT])
|
|
||||||
{
|
|
||||||
object->flags |= WINED3D_BUFFER_CREATEBO;
|
|
||||||
}
|
|
||||||
|
|
||||||
*ppIndexBuffer = (IWineD3DBuffer *) object;
|
*ppIndexBuffer = (IWineD3DBuffer *) object;
|
||||||
|
|
||||||
return WINED3D_OK;
|
return WINED3D_OK;
|
||||||
|
|
Loading…
Reference in New Issue