diff --git a/gfx/d3d9/d3d.cpp b/gfx/d3d9/d3d.cpp index 31a493df2d..c2998c296a 100644 --- a/gfx/d3d9/d3d.cpp +++ b/gfx/d3d9/d3d.cpp @@ -1239,10 +1239,12 @@ static void d3d_overlay_render(void *data, overlay_t *overlay) if (!overlay->vert_buf) { - D3DDevice_CreateVertexBuffers(d3d->dev, sizeof(vert), - d3d->dev->GetSoftwareVertexProcessing() ? - D3DUSAGE_SOFTWAREPROCESSING : 0, 0, D3DPOOL_MANAGED, - &overlay->vert_buf, NULL); + overlay->vert_buf = (LPDIRECT3DVERTEXBUFFER)d3d_vertex_buffer_new( + d3d->dev, sizeof(vert), d3d->dev->GetSoftwareVertexProcessing() ? + D3DUSAGE_SOFTWAREPROCESSING : 0, 0, D3DPOOL_MANAGED, NULL); + + if (!overlay->vert_buf) + return; } for (i = 0; i < 4; i++) diff --git a/gfx/d3d9/d3d_wrapper.c b/gfx/d3d9/d3d_wrapper.c index 2a2609f738..4d90fd90ec 100644 --- a/gfx/d3d9/d3d_wrapper.c +++ b/gfx/d3d9/d3d_wrapper.c @@ -40,19 +40,27 @@ void d3d_swap(void *data, LPDIRECT3DDEVICE dev) #endif } -HRESULT d3d_create_vertex_buffer(LPDIRECT3DDEVICE dev, +LPDIRECT3DVERTEXBUFFER d3d_vertex_buffer_new(LPDIRECT3DDEVICE dev, unsigned length, unsigned usage, unsigned fvf, - D3DPOOL pool, LPDIRECT3DVERTEXBUFFER vert_buf, void *handle) + D3DPOOL pool, void *handle) { + HRESULT hr; + LPDIRECT3DVERTEXBUFFER buf; + #if defined(_XBOX1) - return IDirect3DDevice8_CreateVertexBuffer(dev, length, usage, fvf, pool, - &vert_buf); + hr = IDirect3DDevice8_CreateVertexBuffer(dev, length, usage, fvf, pool, + &buf); #elif defined(_XBOX360) - return IDirect3DDevice9_CreateVertexBuffer(dev, length, usage, fvf, pool, - &vert_buf, NULL); + hr = IDirect3DDevice9_CreateVertexBuffer(dev, length, usage, fvf, pool, + &buf, NULL); #else - return dev->CreateVertexBuffer(length, usage, fvf, pool, &vert_buf, NULL); + hr = dev->CreateVertexBuffer(length, usage, fvf, pool, &buf, NULL); #endif + + if (FAILED(hr)) + return NULL; + + return buf; } void d3d_set_stream_source(LPDIRECT3DDEVICE dev, unsigned stream_no, diff --git a/gfx/d3d9/d3d_wrapper.h b/gfx/d3d9/d3d_wrapper.h index 25180aced9..5b7b2440b1 100644 --- a/gfx/d3d9/d3d_wrapper.h +++ b/gfx/d3d9/d3d_wrapper.h @@ -22,9 +22,9 @@ void d3d_swap(void *data, LPDIRECT3DDEVICE dev); -HRESULT d3d_create_vertex_buffer(LPDIRECT3DDEVICE dev, +LPDIRECT3DVERTEXBUFFER d3d_vertex_buffer_new(LPDIRECT3DDEVICE dev, unsigned length, unsigned usage, unsigned fvf, - D3DPOOL pool, LPDIRECT3DVERTEXBUFFER vert_buf, void *handle); + D3DPOOL pool, void *handle); void d3d_set_stream_source(LPDIRECT3DDEVICE dev, unsigned stream_no, LPDIRECT3DVERTEXBUFFER stream_vertbuf, unsigned offset_bytes, diff --git a/gfx/d3d9/render_chain.cpp b/gfx/d3d9/render_chain.cpp index ab40453d8e..13c5faf93f 100644 --- a/gfx/d3d9/render_chain.cpp +++ b/gfx/d3d9/render_chain.cpp @@ -156,13 +156,11 @@ bool renderchain_add_pass(void *data, const LinkInfo *info) if (!renderchain_init_shader_fvf(chain, &pass)) return false; - if (FAILED(D3DDevice_CreateVertexBuffers(d3dr, 4 * sizeof(Vertex), - d3dr->GetSoftwareVertexProcessing() - ? D3DUSAGE_SOFTWAREPROCESSING : 0, - 0, - D3DPOOL_DEFAULT, - &pass.vertex_buf, - NULL))) + pass.vertex_buf = (LPDIRECT3DVERTEXBUFFER)d3d_vertex_buffer_new(d3dr, 4 * sizeof(Vertex), + d3dr->GetSoftwareVertexProcessing() ? D3DUSAGE_SOFTWAREPROCESSING : 0, + 0, D3DPOOL_DEFAULT, NULL); + + if (!pass.vertex_buf) return false; if (FAILED(d3dr->CreateTexture(info->tex_w, info->tex_h, 1,