Когда я очищаю текстуру буфера глубины с помощью cleardepthstencilview, я получаю сообщение об ошибке один раз: < /p>
ID3D12CommandQueue::ExecuteCommandLists: Using ClearDepthStencilView on Command List
(0x000001C4D608F4E0:'Unnamed ID3D12GraphicsCommandList Object'): Resource state (0x0: D3D12_RESOURCE_STATE_[COMMON|PRESENT]) of resource (0x000001C4D608E630:'TestTexture') (subresource: 1)
is invalid for use as a depth buffer. Expected State Bits (all): 0x10: D3D12_RESOURCE_STATE_DEPTH_WRITE, Actual State: 0x0: D3D12_RESOURCE_STATE_[COMMON|PRESENT],
Missing State: 0x10: D3D12_RESOURCE_STATE_DEPTH_WRITE.
< /code>
Эта ошибка, кажется, происходит только в том случае, если я передаю бит d3d12_clear_flag_stencil в функцию.
Текстура создается с помощью следующего описания: < /p>
Dimension D3D12_RESOURCE_DIMENSION_TEXTURE2D (3)
Alignment 0
Width 256
Height 256
DepthOrArraySize 1
MipLevels 1
Format DXGI_FORMAT_R24G8_TYPELESS
SampleDesc {Count=1 Quality=0 }
Layout D3D12_TEXTURE_LAYOUT_UNKNOWN (0)
Flags D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL (2)
< /code>
Я использую dxgi_format_r24g8_typeless, чтобы иметь возможность читать из значений глубины текстуры позже (это не имеет никакого значения, если это DXGI_FORMAT_R24G8_TYPELSE или DXGI_FORMAT_D24_UNORM_S8_UINT Тип) < /p>
amunorm_unorm_s8_uint). DXGI_FORMAT_D24_UNORM_S8_UINT AS FORMAT.
Потому что ресурс находится в состоянии D3D12_Resource_state_common. Я вставляю переходный барьер перед вызовом ClearDepthStencilView, который (должен) устанавливает текстуру в состоянии ресурса d3d12_resource_state_depth_write. Кажется, что D3D12 жалуется на то, что это не так, но когда я отлаживаю свой код.
, как я уже сказал, это смешно, что это происходит только в том случае, если присутствует буфер трафарета.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... tencilview