From: Nikolay Sivov Subject: [PATCH] d3dx10/tests: Basic tests for async loaders Message-Id: <1471542345-13757-1-git-send-email-nsivov@codeweavers.com> Date: Thu, 18 Aug 2016 20:45:45 +0300 Signed-off-by: Nikolay Sivov --- dlls/d3dx10_43/async.c | 35 +++++++++++++ dlls/d3dx10_43/d3dx10_43.spec | 10 ++-- dlls/d3dx10_43/tests/d3dx10.c | 111 ++++++++++++++++++++++++++++++++++++++++++ include/d3d10.idl | 2 +- include/d3dx10.h | 16 ++++++ include/d3dx10async.h | 6 +++ 6 files changed, 174 insertions(+), 6 deletions(-) diff --git a/dlls/d3dx10_43/async.c b/dlls/d3dx10_43/async.c index 36110d2..6792c29 100644 --- a/dlls/d3dx10_43/async.c +++ b/dlls/d3dx10_43/async.c @@ -67,3 +67,38 @@ HRESULT WINAPI D3DX10CreateEffectPoolFromFileW(const WCHAR *filename, const D3D1 return E_NOTIMPL; } + +HRESULT WINAPI D3DX10CreateAsyncMemoryLoader(const void *data, SIZE_T data_size, ID3DX10DataLoader **loader) +{ + FIXME("data %p, data_size %lu, loader %p\n", data, data_size, loader); + + return E_NOTIMPL; +} + +HRESULT WINAPI D3DX10CreateAsyncFileLoaderA(const char *filename, ID3DX10DataLoader **loader) +{ + FIXME("filename %s, loader %p\n", debugstr_a(filename), loader); + + return E_NOTIMPL; +} + +HRESULT WINAPI D3DX10CreateAsyncFileLoaderW(const WCHAR *filename, ID3DX10DataLoader **loader) +{ + FIXME("filename %s, loader %p\n", debugstr_w(filename), loader); + + return E_NOTIMPL; +} + +HRESULT WINAPI D3DX10CreateAsyncResourceLoaderA(HMODULE module, const char *resource, ID3DX10DataLoader **loader) +{ + FIXME("module %p, resource %s, loader %p\n", module, debugstr_a(resource), loader); + + return E_NOTIMPL; +} + +HRESULT WINAPI D3DX10CreateAsyncResourceLoaderW(HMODULE module, const WCHAR *resource, ID3DX10DataLoader **loader) +{ + FIXME("module %p, resource %s, loader %p\n", module, debugstr_w(resource), loader); + + return E_NOTIMPL; +} diff --git a/dlls/d3dx10_43/d3dx10_43.spec b/dlls/d3dx10_43/d3dx10_43.spec index 61f16fe..49a6d3a 100644 --- a/dlls/d3dx10_43/d3dx10_43.spec +++ b/dlls/d3dx10_43/d3dx10_43.spec @@ -9,11 +9,11 @@ @ stub D3DX10CreateAsyncCompilerProcessor(str ptr ptr str str long long ptr ptr ptr) @ stub D3DX10CreateAsyncEffectCreateProcessor(str ptr ptr str long long ptr ptr ptr ptr) @ stub D3DX10CreateAsyncEffectPoolCreateProcessor(str ptr ptr str long long ptr ptr ptr) -@ stub D3DX10CreateAsyncFileLoaderA(str ptr) -@ stub D3DX10CreateAsyncFileLoaderW(wstr ptr) -@ stub D3DX10CreateAsyncMemoryLoader(ptr long ptr) -@ stub D3DX10CreateAsyncResourceLoaderA(long str ptr) -@ stub D3DX10CreateAsyncResourceLoaderW(long wstr ptr) +@ stdcall D3DX10CreateAsyncFileLoaderA(str ptr) +@ stdcall D3DX10CreateAsyncFileLoaderW(wstr ptr) +@ stdcall D3DX10CreateAsyncMemoryLoader(ptr long ptr) +@ stdcall D3DX10CreateAsyncResourceLoaderA(long str ptr) +@ stdcall D3DX10CreateAsyncResourceLoaderW(long wstr ptr) @ stub D3DX10CreateAsyncShaderPreprocessProcessor(str ptr ptr ptr ptr ptr) @ stub D3DX10CreateAsyncShaderResourceViewProcessor(ptr ptr ptr) @ stub D3DX10CreateAsyncTextureInfoProcessor(ptr ptr) diff --git a/dlls/d3dx10_43/tests/d3dx10.c b/dlls/d3dx10_43/tests/d3dx10.c index 423ab4d..ff54517 100644 --- a/dlls/d3dx10_43/tests/d3dx10.c +++ b/dlls/d3dx10_43/tests/d3dx10.c @@ -596,7 +596,118 @@ float4 main(float4 color : COLOR) : SV_TARGET ok(!refcount, "Device has %u references left.\n", refcount); } +static void test_D3DX10CreateAsyncMemoryLoader(void) +{ + ID3DX10DataLoader *loader; + SIZE_T size; + DWORD data; + HRESULT hr; + void *ptr; + + hr = D3DX10CreateAsyncMemoryLoader(NULL, 0, NULL); +todo_wine + ok(hr == E_FAIL, "got 0x%08x\n", hr); + + hr = D3DX10CreateAsyncMemoryLoader(NULL, 0, &loader); +todo_wine + ok(hr == E_FAIL, "got 0x%08x\n", hr); + + hr = D3DX10CreateAsyncMemoryLoader(&data, 0, &loader); +todo_wine + ok(hr == S_OK, "got 0x%08x\n", hr); + +if (hr == S_OK) +{ + size = 100; + hr = ID3DX10DataLoader_Decompress(loader, &ptr, &size); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(ptr == &data, "got data pointer %p, original %p\n", ptr, &data); + ok(size == 0, "got data size mismatch\n"); + + /* Load() is no-op */ + hr = ID3DX10DataLoader_Load(loader); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = ID3DX10DataLoader_Destroy(loader); + ok(hr == S_OK, "got 0x%08x\n", hr); + + data = 0; + hr = D3DX10CreateAsyncMemoryLoader(&data, sizeof(data), &loader); + ok(hr == S_OK, "got 0x%08x\n", hr); + + /* Load() is no-op */ + hr = ID3DX10DataLoader_Load(loader); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = ID3DX10DataLoader_Decompress(loader, &ptr, &size); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(ptr == &data, "got data pointer %p, original %p\n", ptr, &data); + ok(size == sizeof(data), "got data size mismatch\n"); + + hr = ID3DX10DataLoader_Destroy(loader); + ok(hr == S_OK, "got 0x%08x\n", hr); +} +} + +static void test_D3DX10CreateAsyncFileLoader(void) +{ + ID3DX10DataLoader *loader; + SIZE_T size; + HRESULT hr; + void *ptr; + + hr = D3DX10CreateAsyncFileLoaderA(NULL, NULL); +todo_wine + ok(hr == E_FAIL, "got 0x%08x\n", hr); + + hr = D3DX10CreateAsyncFileLoaderA(NULL, &loader); +todo_wine + ok(hr == E_FAIL, "got 0x%08x\n", hr); + + /* nonexistent file */ + hr = D3DX10CreateAsyncFileLoaderA("testfilename", &loader); +todo_wine + ok(hr == S_OK, "got 0x%08x\n", hr); + +if (hr == S_OK) +{ + hr = ID3DX10DataLoader_Decompress(loader, &ptr, &size); + ok(hr == E_FAIL, "got 0x%08x\n", hr); + + hr = ID3DX10DataLoader_Load(loader); + ok(hr == D3D10_ERROR_FILE_NOT_FOUND, "got 0x%08x\n", hr); + + hr = ID3DX10DataLoader_Decompress(loader, &ptr, &size); + ok(hr == E_FAIL, "got 0x%08x\n", hr); + + hr = ID3DX10DataLoader_Destroy(loader); + ok(hr == S_OK, "got 0x%08x\n", hr); +} +} + +static void test_D3DX10CreateAsyncResourceLoader(void) +{ + ID3DX10DataLoader *loader; + HRESULT hr; + + hr = D3DX10CreateAsyncResourceLoaderA(NULL, NULL, NULL); +todo_wine + ok(hr == E_FAIL, "got 0x%08x\n", hr); + + hr = D3DX10CreateAsyncResourceLoaderA(NULL, NULL, &loader); +todo_wine + ok(hr == D3DX10_ERR_INVALID_DATA, "got 0x%08x\n", hr); + + /* nonexistent resource */ + hr = D3DX10CreateAsyncResourceLoaderA(NULL, "testresourcename", &loader); +todo_wine + ok(hr == D3DX10_ERR_INVALID_DATA, "got 0x%08x\n", hr); +} + START_TEST(d3dx10) { test_D3DX10UnsetAllDeviceObjects(); + test_D3DX10CreateAsyncMemoryLoader(); + test_D3DX10CreateAsyncFileLoader(); + test_D3DX10CreateAsyncResourceLoader(); } diff --git a/include/d3d10.idl b/include/d3d10.idl index 0ab6ab3..24fd2bf 100644 --- a/include/d3d10.idl +++ b/include/d3d10.idl @@ -242,7 +242,7 @@ const unsigned int D3D_SPEC_DATE_YEAR cpp_quote("#endif") const unsigned int D3D10_APPEND_ALIGNED_ELEMENT = 0xffffffff; -const unsigned int _FACD3D10 = 0x87; +const unsigned int _FACD3D10 = 0x879; const unsigned int _FACD3D10DEBUG = _FACD3D10 + 1; const unsigned int D3D10_FILTER_TYPE_MASK = 0x3; const unsigned int D3D10_SDK_VERSION = 29; diff --git a/include/d3dx10.h b/include/d3dx10.h index fb48723..7062d24 100644 --- a/include/d3dx10.h +++ b/include/d3dx10.h @@ -32,4 +32,20 @@ #include "d3dx10async.h" #include "d3dx10tex.h" +#define _FACDD 0x876 +#define MAKE_DDHRESULT(code) MAKE_HRESULT(1, _FACDD, code) + +enum _D3DX10_ERR +{ + D3DX10_ERR_CANNOT_MODIFY_INDEX_BUFFER = MAKE_DDHRESULT(2900), + D3DX10_ERR_INVALID_MESH = MAKE_DDHRESULT(2901), + D3DX10_ERR_CANNOT_ATTR_SORT = MAKE_DDHRESULT(2902), + D3DX10_ERR_SKINNING_NOT_SUPPORTED = MAKE_DDHRESULT(2903), + D3DX10_ERR_TOO_MANY_INFLUENCES = MAKE_DDHRESULT(2904), + D3DX10_ERR_INVALID_DATA = MAKE_DDHRESULT(2905), + D3DX10_ERR_LOADED_MESH_HAS_NO_DATA = MAKE_DDHRESULT(2906), + D3DX10_ERR_DUPLICATE_NAMED_FRAGMENT = MAKE_DDHRESULT(2907), + D3DX10_ERR_CANNOT_REMOVE_LAST_ITEM = MAKE_DDHRESULT(2908) +}; + #endif diff --git a/include/d3dx10async.h b/include/d3dx10async.h index 364ad12..6663be4 100644 --- a/include/d3dx10async.h +++ b/include/d3dx10async.h @@ -54,4 +54,10 @@ HRESULT WINAPI D3DX10CreateEffectPoolFromMemory(const void *data, SIZE_T datasiz UINT fxflags, ID3D10Device *device, ID3DX10ThreadPump *pump, ID3D10EffectPool **effectpool, ID3D10Blob **errors, HRESULT *hresult); +HRESULT WINAPI D3DX10CreateAsyncFileLoaderW(const WCHAR *filename, ID3DX10DataLoader **loader); +HRESULT WINAPI D3DX10CreateAsyncFileLoaderA(const char *filename, ID3DX10DataLoader **loader); +HRESULT WINAPI D3DX10CreateAsyncMemoryLoader(const void *data, SIZE_T datasize, ID3DX10DataLoader **loader); +HRESULT WINAPI D3DX10CreateAsyncResourceLoaderA(HMODULE module, const char *resource, ID3DX10DataLoader **loader); +HRESULT WINAPI D3DX10CreateAsyncResourceLoaderW(HMODULE module, const WCHAR *resource, ID3DX10DataLoader **loader); + #endif -- 2.8.1