DrawIndexedInstanced on feature_level_9_3?

Started by
4 comments, last by hupsilardee 11 years, 10 months ago
Now apparently DrawIndexedInstanced is supported on feature level 9_3 / vs_4_0_level_9_3, but it seems to be crashing for me, does anybody know why this might be happening? I'm definitely not exceeding the primitive, index or texture repeat restrictions, it's a 33 polygon tree drawn 4 times.
The error is a "Unhandled exception at 0x76cbfc56 in XEngine11.exe: 0x0000087C: 0x87c." Weird that there seems to be no description text
Here is an outline of the setup: Perhaps I have set up the input layout incorrectly?


// Vertex Shader: normal and texcoord parts snipped
VSOutput VSmain(float3 iPos : POSITION0, float3 iNorm : NORMAL0, float2 iTex : TEXCOORD0 ,float3 iInstPos : POSITION1)
{
float4 worldPos = mul(float4(iPos, 1), World);
worldPos.xyz += iInstPos;
float4 viewPos = mul(worldPos, View);
float4 projPos = mul(viewPos, Proj);

VSOutput output;
output.Position = projPos;
return output;
}

// Input layout

D3D11_INPUT_ELEMENT_DESC desc[] =
{
// { name, index, format, slot, offset, class, steprate }

// stream 0
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },

// stream 1
{ "POSITION", 1, DXGI_FORMAT_R32G32B32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
};



I've tried using TEXCOORD1 and NORMAL1 as the semantics for the instance position in the shader but that didnt work. Also, somebody else at the XNA forums seemed to have a similar problem, but theirs was solved by making sure the semantic index was explicitly typed in the shader, which is not my problem.

I remember this was particularly fiddly to achieve in D3D9. Just hoping it doesn't take too long to figure out for D3D11.

EDIT: I tried changing my index buffer to use 32 bit indices (DXGI_FORMAT_R32_UINT). Now the same crash occurs - at the line where the index buffer is bound to the pipeline.
Advertisement
That code you have looks okay...do you have the DEBUG flag enabled for your device?
I had D3D11_CREATE_DEVICE_DEBUG enabled, and in the DX control panel I put D3D9 on debug with maximum output and D3D11 with "Force On" and the project added to the executable list. So it gives me some interesting messages in the output window.

D3D11: Removing Device.
D3D11: WARNING: ID3D11Device::RemoveDevice: Device removal has been triggered for the following reason (DXGI_ERROR_DRIVER_INTERNAL_ERROR: There is strong evidence that the driver has performed an undefined operation; but it may be because the application performed an illegal or undefined operation to begin with.). [ EXECUTION WARNING #379: DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT ]
D3D11: Raising UM Driver Internal Error to continuable exception.First-chance exception at 0x76cbfc56 in XEngine11.exe: 0x0000087C: 0x87c.
Unhandled exception at 0x76cbfc56 in XEngine11.exe: 0x0000087C: 0x87c.
The program '[19512] XEngine11.exe: Native' has exited with code 2172 (0x87c).


So it's a driver error?
Yeah it looks like you crashed the driver somehow. These kinds of things can be hard to track down.
Try verifying against a WARP device with feature level 11 - that will help confirm if it's your code or level 9_3 that's causing you trouble.

Direct3D has need of instancing, but we do not. We have plenty of glVertexAttrib calls.

Good idea. Should have thought of that earlier. As it turns out, the WARP device renders 4 models as expected, so it's level_9_3 causing the problem :(

This topic is closed to new replies.

Advertisement