Буфер глубины в качестве текстуры — «D3D11 ОШИБКА: формат недопустим при создании представления»

Я пытаюсь использовать буфер глубины в качестве текстуры для второго прохода в моем шейдере.

В соответствии с официальная документация («Чтение буфера глубины-трафарета как текстуры» пункт), я установил D3D11_TEXTURE2D_DESC.Format в DXGI_FORMAT_R24G8_TYPELESS (как это было DXGI_FORMAT_D24_UNORM_S8_UINT ранее, когда я не использовал буфер глубины в качестве текстуры):

D3D11_TEXTURE2D_DESC descDepth;
ZeroMemory(&descDepth, sizeof(descDepth));
descDepth.Width = width;
descDepth.Height = height;
descDepth.MipLevels = 1;
descDepth.ArraySize = 1;
descDepth.Format = DXGI_FORMAT_R24G8_TYPELESS; //normally it was DXGI_FORMAT_D24_UNORM_S8_UINT
descDepth.SampleDesc.Count = antiAliasing.getCount();
descDepth.SampleDesc.Quality = antiAliasing.getQuality();
descDepth.Usage = D3D11_USAGE_DEFAULT;
descDepth.BindFlags = D3D11_BIND_DEPTH_STENCIL | D3D11_BIND_SHADER_RESOURCE;
descDepth.CPUAccessFlags = 0;
descDepth.MiscFlags = 0;

ID3D11Texture2D* depthStencil = NULL;
result = device->CreateTexture2D(&descDepth, NULL, &depthStencil);

results удалось. Затем я попытался создать представление ресурса шейдера для моего буфера:

D3D11_SHADER_RESOURCE_VIEW_DESC shaderResourceViewDesc;
//setup the description of the shader resource view
shaderResourceViewDesc.Format = DXGI_FORMAT_R32_FLOAT;
shaderResourceViewDesc.ViewDimension = antiAliasing.isOn() ? D3D11_SRV_DIMENSION_TEXTURE2DMS : D3D11_SRV_DIMENSION_TEXTURE2D;
shaderResourceViewDesc.Texture2D.MostDetailedMip = 0;
shaderResourceViewDesc.Texture2D.MipLevels = 1;

//create the shader resource view.
device->CreateShaderResourceView(depthStencil, &shaderResourceViewDesc, &depthStencilShaderResourceView);

К сожалению, это приводит к ошибке:

D3D11 ОШИБКА: ID3D11Device :: CreateShaderResourceView: Формат (0x29,
R32_FLOAT) недействителен при создании View; это не полностью
квалифицированный формат, который можно преобразовать из формата ресурса (0x2c,
R24G8_TYPELESS). [STATE_CREATION ERROR # 127:
CREATESHADERRESOURCEVIEW_INVALIDFORMAT]

D3D11 ОШИБКА: ID3D11Device :: CreateShaderResourceView: возвращение E_INVALIDARG,
Это означает, что были переданы неверные параметры. [STATE_CREATION ERROR # 131:
CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN]

Я также пытался с DXGI_FORMAT_R24G8_TYPELESS, DXGI_FORMAT_D24_UNORM_S8_UINT а также DXGI_FORMAT_R8G8B8A8_UNORM как shaderResourceViewDesc.Format,

В чем проблема? Я следил за документацией и не вижу ее.

0

Решение

Форматы DXGI_FORMAT_R24G8_TYPELESS а также DXGI_FORMAT_R32_FLOAT не «совместимы с ролями». Этот безымянный формат совместим только с DXGI_FORMAT_D24_UNORM_S8_UINT, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, а также DXGI_FORMAT_X24_TYPELESS_G8_UINT

DXGI_FORMAT_R32_TYPELESS совместим с обоими DXGI_FORMAT_D32_FLOAT а также DXGI_FORMAT_R32_FLOAT

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector