0xbadf00d
0xbadf00d

Reputation: 18218

CreateStateObject returns E_INVALIDARG - How to figure out what precisely the cause is?

I'm trying to compile and run the code published on https://github.com/boksajak/referencePT of the reference path tracer described in Raytracing Gems II. It is based on https://github.com/acmarrs/IntroToDXR. Unfortunately, while the latter is working, the former is not. The call d3d.device->CreateStateObject(&pipelineDesc, IID_PPV_ARGS(&dxr.rtpso)); in CreatePipelineStateObject (see https://github.com/boksajak/referencePT/blob/2cb5fb986ab8734bcaf52c048f8b6b5895e9ce5f/src/Graphics.cpp#L1468) is return E_INVALIDARG? From the output window, I can see that two exceptions are thrown:

Exception thrown at 0x00007FFC5860CF19 in ReferencePT_d.exe: Microsoft C++ exception: _com_error at memory location 0x0000007C766FD798.
Exception thrown at 0x00007FFC5860CF19 in ReferencePT_d.exe: Microsoft C++ exception: _com_error at memory location 0x0000007C766FD7B8.

The suboject descriptions seem totally fine to me. I have no idea what the actual cause is. Do I have any possibility to get a more detailed error description?

In the CreateDevice function, the debug layer is enabled. I've even tried to enable further validation by using the following code instead:

void CreateDevice(D3D12Global &d3d)
{
    uint32_t dxgiFactoryFlags = 0;

#if defined(_DEBUG)
    // Enable the D3D12 debug layer.
    {
        if (SUCCEEDED(D3D12GetDebugInterface(IID_PPV_ARGS(&d3d.debugController))))
        {
            d3d.debugController->EnableDebugLayer();
            d3d.debugController->SetEnableGPUBasedValidation(TRUE);
        }

        dxgiFactoryFlags |= DXGI_CREATE_FACTORY_DEBUG;

        ComPtr<IDXGIInfoQueue> infoQueue;
        if (SUCCEEDED(DXGIGetDebugInterface1(0, IID_PPV_ARGS(infoQueue.ReleaseAndGetAddressOf()))))
        {
            infoQueue->SetBreakOnSeverity(DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR, true);
            infoQueue->SetBreakOnSeverity(DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION, true);
        }
    }
#endif

    // Create a DXGI Factory
    HRESULT hr = CreateDXGIFactory2(dxgiFactoryFlags, IID_PPV_ARGS(&d3d.factory));
    Utils::Validate(hr, L"Error: failed to create DXGI factory!");

    ...

However, I still don't get a more verbose output.

Upvotes: 1

Views: 150

Answers (1)

rngd
rngd

Reputation: 51

Did you try enabling the C define for 16 bit types on the call to the pixel shader compile?

LPCWSTR cDefines[] = { L"-enable-16bit-types" };

Upvotes: 1

Related Questions