@@ -1033,38 +1033,24 @@ void reshade::d3d9::device_impl::unmap_texture_region(api::resource resource, ui
10331033void reshade::d3d9::device_impl::update_buffer_region (const void *data, api::resource resource, uint64_t offset, uint64_t size)
10341034{
10351035 assert (resource != 0 );
1036- assert (offset <= std::numeric_limits<UINT>::max () && size <= std::numeric_limits<UINT>::max ());
1036+ assert (offset <= std::numeric_limits<UINT>::max () && ( size == UINT64_MAX || size <= std::numeric_limits<UINT>::max () ));
10371037
10381038 if (data == nullptr )
10391039 return ;
10401040
10411041 const auto object = reinterpret_cast <IDirect3DResource9 *>(resource.handle );
10421042
1043- switch (IDirect3DResource9_GetType (object))
1043+ // 'IDirect3DVertexBuffer9_Lock' and 'IDirect3DIndexBuffer9_Lock' are located at the same virtual function table index and have the same interface
1044+ if (void *mapped_data;
1045+ SUCCEEDED (IDirect3DVertexBuffer9_Lock (
1046+ static_cast <IDirect3DVertexBuffer9 *>(object),
1047+ static_cast <UINT>(offset),
1048+ size != UINT64_MAX ? static_cast <UINT>(size) : 0 ,
1049+ &mapped_data,
1050+ 0 )))
10441051 {
1045- case D3DRTYPE_VERTEXBUFFER:
1046- {
1047- void *mapped_ptr;
1048- if (SUCCEEDED (IDirect3DVertexBuffer9_Lock (static_cast <IDirect3DVertexBuffer9 *>(object), static_cast <UINT>(offset), static_cast <UINT>(size), &mapped_ptr, 0 )))
1049- {
1050- std::memcpy (mapped_ptr, data, static_cast <size_t >(size));
1051- IDirect3DVertexBuffer9_Unlock (static_cast <IDirect3DVertexBuffer9 *>(object));
1052- }
1053- }
1054- break ;
1055- case D3DRTYPE_INDEXBUFFER:
1056- {
1057- void *mapped_ptr;
1058- if (SUCCEEDED (IDirect3DIndexBuffer9_Lock (static_cast <IDirect3DIndexBuffer9 *>(object), static_cast <UINT>(offset), static_cast <UINT>(size), &mapped_ptr, 0 )))
1059- {
1060- std::memcpy (mapped_ptr, data, static_cast <size_t >(size));
1061- IDirect3DIndexBuffer9_Unlock (static_cast <IDirect3DIndexBuffer9 *>(object));
1062- }
1063- }
1064- break ;
1065- default :
1066- assert (false ); // Not implemented
1067- break ;
1052+ std::memcpy (mapped_data, data, static_cast <size_t >(size));
1053+ IDirect3DVertexBuffer9_Unlock (static_cast <IDirect3DVertexBuffer9 *>(object));
10681054 }
10691055}
10701056void reshade::d3d9::device_impl::update_texture_region (const api::subresource_data &data, api::resource resource, uint32_t subresource, const api::subresource_box *box)
@@ -1611,11 +1597,11 @@ bool reshade::d3d9::device_impl::create_pipeline(api::pipeline_layout, uint32_t
16111597 goto exit_failure;
16121598 }
16131599
1614- if (float *data ;
1615- SUCCEEDED (IDirect3DVertexBuffer9_Lock (_default_input_stream.get (), 0 , max_vertices * sizeof (float ), reinterpret_cast <void **>(&data ), 0 )))
1600+ if (float *mapped_data ;
1601+ SUCCEEDED (IDirect3DVertexBuffer9_Lock (_default_input_stream.get (), 0 , max_vertices * sizeof (float ), reinterpret_cast <void **>(&mapped_data ), 0 )))
16161602 {
16171603 for (UINT i = 0 ; i < max_vertices; ++i)
1618- data [i] = static_cast <float >(i);
1604+ mapped_data [i] = static_cast <float >(i);
16191605 IDirect3DVertexBuffer9_Unlock (_default_input_stream.get ());
16201606 }
16211607 }
0 commit comments