Krzysztof Wolski
Krzysztof Wolski

Reputation: 111

Creating Texture with initial data DirectX 11

I am trying to implement Variable Rate Shading in the app based on DirectX 11.

I am doing it this way:

UINT dwRtWidth = 2560;
UINT dwRtHeight = 1440;

D3D11_TEXTURE2D_DESC srcDesc;
ZeroMemory(&srcDesc, sizeof(srcDesc));

int sri_w = dwRtWidth / NV_VARIABLE_PIXEL_SHADING_TILE_WIDTH;
int sri_h = dwRtHeight / NV_VARIABLE_PIXEL_SHADING_TILE_HEIGHT;

srcDesc.Width = sri_w;
srcDesc.Height = sri_h;
srcDesc.ArraySize = 1; 
srcDesc.Format = DXGI_FORMAT_R8_UINT;
srcDesc.SampleDesc.Count = 1;
srcDesc.SampleDesc.Quality = 0;
srcDesc.Usage = D3D11_USAGE_DEFAULT;  //Optional
srcDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;   //Optional
srcDesc.CPUAccessFlags = 0;
srcDesc.MiscFlags = 0;



D3D11_SUBRESOURCE_DATA initialData;

UINT* data = (UINT*)malloc(sri_w * sri_h * sizeof(UINT));

for (int i = 0; i < sri_w * sri_h; i++)
    data[i] = (UINT)0;

initialData.pSysMem = data;
initialData.SysMemPitch = sri_w;
//initialData.SysMemSlicePitch = 0;

HRESULT hr = s_device->CreateTexture2D(&srcDesc, &initialData, &pShadingRateSurface);
if (FAILED(hr))
{
    LOG("Texture not created");
    LOG(std::system_category().message(hr));
}       
else
    LOG("Texture created");

When I try to create texture with initial data, it is not being created and HRESULTS gives message: 'The parameter is incorrect'. Doesn't say which one.

When I create texture without initial data it's created successfully.

What's wrong with the initial data? I also tried to use unsigned char instead of UINT as it has 8 bits, but result was the same, texture was not created.

Please help.

Upvotes: 0

Views: 981

Answers (1)

Krzysztof Wolski
Krzysztof Wolski

Reputation: 111

Aftr some time I found a solution to the problem. I needed to add a line:

srcDesc.MipLevels = 1;

With this change the texture was finally created with initial data

Upvotes: 1

Related Questions