Frage

I'm trying to create D3D texture 2d with STAGING usage.

Always, it fails with error : "Incorrect parameter" (code 0x80070057)...

I don't understand, I can create other than staging no problem, but can't succeed with this... Please help me before my computer goes flying through the window... Please...

Here is the problematic piece of code :

    int w = 128;
    int h = 128;


    ID3D11Texture2D * tex;
    D3D11_TEXTURE2D_DESC tdesc;
    D3D11_SUBRESOURCE_DATA tbsd;

    ZeroMemory(&tdesc, sizeof(D3D10_TEXTURE2D_DESC));

    WORD *buf = new WORD[128*128];

    for (int i = 0; i < h; i++)
    for (int j = 0; j < w; j++)
    {
            buf[i*128 + j] = (WORD) 0xffffffff;
    }

    tbsd.pSysMem = (void *)buf;
    tbsd.SysMemPitch = w * 4;
    tbsd.SysMemSlicePitch = w * h * 4;

    tdesc.Width = w;
    tdesc.Height = h;
    tdesc.MipLevels = 1;
    tdesc.ArraySize = 1;

    tdesc.SampleDesc.Count = 1;
    tdesc.SampleDesc.Quality = 0;
    tdesc.Usage = D3D11_USAGE_STAGING;
    tdesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    tdesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;

    tdesc.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
//  tdesc.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;  // Does'nt work either...
    tdesc.MiscFlags = 0;

    HRESULT eblah = 0; char tmpstr[128];

    eblah = device->CreateTexture2D(&tdesc, &tbsd, &tex);

    if (FAILED(eblah))
    {
        wsprintfA(tmpstr, "Error code : %lX", eblah); OutputDebugStringA(tmpstr);
        ErrorMessage(eblah);
    }

I've got this as device, earlier in code, in case of : ID3D11Device* device = nullptr; D3D_FEATURE_LEVEL level; ID3D11DeviceContext* context = nullptr;

    HRESULT hr = D3D11CreateDevice(
        nullptr,
        D3D_DRIVER_TYPE::D3D_DRIVER_TYPE_NULL,    // Tried D3D_DRIVER_TYPE_HARDWARE too
        nullptr,
        0,
        nullptr,
        0,
        D3D11_SDK_VERSION,
        &device,
        &level,
        &context
        );
War es hilfreich?

Lösung

Found it :

_ I used D3D11_CREATE_DEVICE_FLAG::D3D11_CREATE_DEVICE_DEBUG flag when creating the device, which gave me very useful debug info. A must have for every beginner !!!

_ tdesc.BindFlags MUST be 0 when creating a ID3D11Texture2D for staging.

_ My computer didn't fly through the window !!!

Nice day to everyone :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top