From: Nikolay Sivov nsivov@codeweavers.com
--- dlls/d3d10core/tests/d3d10core.c | 6 ++++++ dlls/d3d11/device.c | 4 ++++ dlls/d3d11/tests/d3d11.c | 6 ++++++ 3 files changed, 16 insertions(+)
diff --git a/dlls/d3d10core/tests/d3d10core.c b/dlls/d3d10core/tests/d3d10core.c index 15f306f9559..3d8a5621a49 100644 --- a/dlls/d3d10core/tests/d3d10core.c +++ b/dlls/d3d10core/tests/d3d10core.c @@ -3890,14 +3890,20 @@ void main(point float4 vin[1] : POSITION, inout TriangleStream<gs_out> vout) refcount = ID3D10VertexShader_Release(vs); ok(!refcount, "Vertex shader has %u references left.\n", refcount);
+ vs = (void *)0xdeadbeef; hr = ID3D10Device_CreateVertexShader(device, vs_2_0, sizeof(vs_2_0), &vs); ok(hr == E_INVALIDARG, "Created a SM2 vertex shader, hr %#x\n", hr); + ok(!vs, "Unexpected pointer %p.\n", vs);
+ vs = (void *)0xdeadbeef; hr = ID3D10Device_CreateVertexShader(device, vs_3_0, sizeof(vs_3_0), &vs); ok(hr == E_INVALIDARG, "Created a SM3 vertex shader, hr %#x\n", hr); + ok(!vs, "Unexpected pointer %p.\n", vs);
+ vs = (void *)0xdeadbeef; hr = ID3D10Device_CreateVertexShader(device, ps_4_0, sizeof(ps_4_0), &vs); ok(hr == E_INVALIDARG, "Created a SM4 vertex shader from a pixel shader source, hr %#x\n", hr); + ok(!vs, "Unexpected pointer %p.\n", vs);
/* pixel shader */ expected_refcount = get_refcount(device) + 1; diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c index 263613911f8..c1207bf7bc9 100644 --- a/dlls/d3d11/device.c +++ b/dlls/d3d11/device.c @@ -3469,6 +3469,8 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CreateVertexShader(ID3D11Device2 * TRACE("iface %p, byte_code %p, byte_code_length %Iu, class_linkage %p, shader %p.\n", iface, byte_code, byte_code_length, class_linkage, shader);
+ *shader = NULL; + if (class_linkage) FIXME("Class linkage is not implemented yet.\n");
@@ -6176,6 +6178,8 @@ static HRESULT STDMETHODCALLTYPE d3d10_device_CreateVertexShader(ID3D10Device1 * TRACE("iface %p, byte_code %p, byte_code_length %Iu, shader %p.\n", iface, byte_code, byte_code_length, shader);
+ *shader = NULL; + if (FAILED(hr = d3d_vertex_shader_create(device, byte_code, byte_code_length, &object))) return hr;
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c index 8225237568f..7ba39cc3447 100644 --- a/dlls/d3d11/tests/d3d11.c +++ b/dlls/d3d11/tests/d3d11.c @@ -4849,14 +4849,20 @@ static void test_create_shader(const D3D_FEATURE_LEVEL feature_level) ID3D11PixelShader_Release(ps);
/* vertex shader */ + vs = (void *)0xdeadbeef; hr = ID3D11Device_CreateVertexShader(device, vs_2_0, sizeof(vs_2_0), NULL, &vs); ok(hr == E_INVALIDARG, "Feature level %#x: Got unexpected hr %#lx.\n", feature_level, hr); + ok(!vs, "Unexpected pointer %p.\n", vs);
+ vs = (void *)0xdeadbeef; hr = ID3D11Device_CreateVertexShader(device, vs_3_0, sizeof(vs_3_0), NULL, &vs); ok(hr == E_INVALIDARG, "Feature level %#x: Got unexpected hr %#lx.\n", feature_level, hr); + ok(!vs, "Unexpected pointer %p.\n", vs);
+ vs = (void *)0xdeadbeef; hr = ID3D11Device_CreateVertexShader(device, ps_4_0, sizeof(ps_4_0), NULL, &vs); ok(hr == E_INVALIDARG, "Feature level %#x: Got unexpected hr %#lx.\n", feature_level, hr); + ok(!vs, "Unexpected pointer %p.\n", vs);
expected_refcount = get_refcount(device) + (feature_level >= D3D_FEATURE_LEVEL_10_0); hr = ID3D11Device_CreateVertexShader(device, vs_4_0, sizeof(vs_4_0), NULL, &vs);