AnsweredAssumed Answered

No shader tracing support in R7/R9 drivers despite DirectX 11.1/11.2 support?

Question asked by scottiebizzle on Apr 23, 2014

Hi,

 

I'm developing a DirectX11-based shader authoring tools ( http://www.shaderplay.com/screenshot_1.jpg ) and am working on putting in support for shader tracing/debugging similar to PIX for the 360/PC where the user can step through shader code.

 

The shader tracing functionality in available in DirectX 11.1 only and given that I was working with DX 11 hardware, I was actually able to get this working with the DirectX 11.2 API and the DirectX WARP software device type ( D3D_DRIVER_TYPE_WARP ), as well as the D3D_FEATURE_LEVEL_11_1 feature level, and the required D3D11_CREATE_DEVICE_DEBUGGABLE creation flag. This actually worked but as you can imagine it's slow as hell.

 

I noticed AMDs Radeon R7/R9 had full Direct X 11.2 support so I just picked up a XFX R7 260x and XFX R9 270x for testing. The device creation fails to create a D3D_FEATURE_LEVEL_11_1 with the D3D11_CREATE_DEVICE_DEBUGGABLE flag. Shouldn't the DX11.2 hardware support shader tracing? I'm on the latest driver ( 12/17/2013 ), but not the beta ones. Is this something you plan on supporting in upcoming drivers?

 

The following works and has shader tracing capability but is using a software WARP device.

 

D3D_FEATURE_LEVEL FeatureLevels[] = { D3D_FEATURE_LEVEL_11_1 };

HRESULT Result = D3D11CreateDevice( NULL, D3D_DRIVER_TYPE_WARP, NULL, D3D11_CREATE_DEVICE_SINGLETHREADED | D3D11_CREATE_DEVICE_DEBUGGABLE, FeatureLevels, 1, D3D11_SDK_VERSION, &m_D3DDevice, &m_FeatureLevel, &m_D3DDeviceContext );

 

The following fails with result of "0x887a0004 : The specified device interface or feature level is not supported on this system." ( using R9 270x or R7 260x )

 

D3D_FEATURE_LEVEL FeatureLevels[] = { D3D_FEATURE_LEVEL_11_1 };

HRESULT Result = D3D11CreateDevice( NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, D3D11_CREATE_DEVICE_SINGLETHREADED | D3D11_CREATE_DEVICE_DEBUGGABLE, FeatureLevels, 1, D3D11_SDK_VERSION, &m_D3DDevice, &m_FeatureLevel, &m_D3DDeviceContext );

 

The following succeds without D3D11_CREATE_DEVICE_DEBUGGABLE and creates a 11.1 device but without shader tracing.

 

D3D_FEATURE_LEVEL FeatureLevels[] = { D3D_FEATURE_LEVEL_11_1 };

HRESULT Result = D3D11CreateDevice( NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, D3D11_CREATE_DEVICE_SINGLETHREADED, FeatureLevels, 1, D3D11_SDK_VERSION, &m_D3DDevice, &m_FeatureLevel, &m_D3DDeviceContext );

 

Any help would be greatly appreciated, I would really love to get this feature working, especially with NVidia not even supporting 11.1 or 11.2...

 

Cheers,

 

Scott

Outcomes