[PATCH] d3dx10: Parially implement async data loaders interfaces
Nikolay Sivov
bunglehead at gmail.com
Sun Nov 6 15:30:17 CST 2016
On 07.11.2016 0:23, Matteo Bruni wrote:
> 2016-11-06 19:45 GMT+01:00 Nikolay Sivov <nsivov at codeweavers.com>:
>> Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
>> ---
>> dlls/d3dx10_43/async.c | 296 ++++++++++++++++++++++++++++++++++++++++--
>> dlls/d3dx10_43/tests/d3dx10.c | 36 ++---
>> 2 files changed, 306 insertions(+), 26 deletions(-)
>>
>> diff --git a/dlls/d3dx10_43/async.c b/dlls/d3dx10_43/async.c
>> index f49eb92..a9cbde5 100644
>> --- a/dlls/d3dx10_43/async.c
>> +++ b/dlls/d3dx10_43/async.c
>
>> +/* Memory data loader. */
>> +static HRESULT WINAPI memorydataloader_Load(ID3DX10DataLoader *loader)
>> +{
>> + TRACE("loader %p\n", loader);
>
> We usually put a period at the end of trace messages.
> By the way, these comments don't add much IMO, it's pretty clear where
> each interface implementation starts and ends.
Ok.
>
>> +static HRESULT WINAPI memorydataloader_Decompress(ID3DX10DataLoader *iface, void **data, SIZE_T *size)
>> +{
>> + struct asyncdataloader *loader = impl_from_ID3DX10DataLoader(iface);
>> +
>> + FIXME("loader %p, data %p, size %p semi-stub\n", loader, data, size);
>> +
>> + *data = loader->data;
>> + *size = loader->size;
>> +
>> + return S_OK;
>> +}
>
> Why the fixme? What's still missing here?
My understanding is that it should detect certain types of compression
and actually decompress if needed.
>
>> +static HRESULT WINAPI filedataloader_Load(ID3DX10DataLoader *iface)
>> +{
>> + struct asyncdataloader *loader = impl_from_ID3DX10DataLoader(iface);
>> + HANDLE mapping;
>> +
>> + TRACE("loader %p\n", loader);
>> +
>> + if (loader->u.file == INVALID_HANDLE_VALUE)
>> + return D3D10_ERROR_FILE_NOT_FOUND;
>> +
>> + if (loader->data)
>> + return S_OK;
>> +
>> + GetFileSize(loader->u.file, (DWORD*)&loader->size);
>> + mapping = CreateFileMappingW(loader->u.file, NULL, PAGE_READONLY, 0, 0, NULL);
>> + if (!mapping)
>> + return E_FAIL;
>> +
>> + loader->data = MapViewOfFile(mapping, FILE_MAP_READ, 0, 0, 0);
>> + CloseHandle(mapping);
>> + if (!loader->data)
>> + return E_FAIL;
>> +
>> + return S_OK;
>> +}
>
> Creating and keeping a file mapping open might not be correct. What
> happens on Windows if e.g. you try to delete the file after Load() but
> before Decompress()? The issue might also be between Decompress() and
> Destroy().
Sure, that should be easy enough to test.
>
> I guess I'd like some more tests for the file and the resource loaders...
>
>> + if (!(rsrc = FindResourceA(module, resource, (LPSTR)RT_RCDATA)))
>
> Please avoid LPtypes and casting away const, here and below.
>
Ok.
More information about the wine-devel
mailing list