@@ -75,6 +75,8 @@ class D3D11Framebuffer : public Framebuffer {
7575 colorSRView->Release ();
7676 if (depthSRView)
7777 depthSRView->Release ();
78+ if (stencilSRView)
79+ stencilSRView->Release ();
7880 if (depthStencilTex)
7981 depthStencilTex->Release ();
8082 if (depthStencilRTView)
@@ -85,6 +87,7 @@ class D3D11Framebuffer : public Framebuffer {
8587 ID3D11RenderTargetView *colorRTView = nullptr ;
8688 ID3D11ShaderResourceView *colorSRView = nullptr ;
8789 ID3D11ShaderResourceView *depthSRView = nullptr ;
90+ ID3D11ShaderResourceView *stencilSRView = nullptr ;
8891 DXGI_FORMAT colorFormat = DXGI_FORMAT_UNKNOWN;
8992
9093 ID3D11Texture2D *depthStencilTex = nullptr ;
@@ -1438,6 +1441,16 @@ void D3D11DrawContext::DrawIndexedClippedBatchUP(const void *vdata, int vertexCo
14381441 context_->PSSetShaderResources (0 , 1 , &view);
14391442 } else {
14401443 ID3D11ShaderResourceView *view = ((D3D11Framebuffer *)draws[i].bindFramebufferAsTex )->colorSRView ;
1444+ switch (draws[i].aspect ) {
1445+ case FB_DEPTH_BIT:
1446+ view = ((D3D11Framebuffer *)draws[i].bindFramebufferAsTex )->depthSRView ;
1447+ break ;
1448+ case FB_STENCIL_BIT:
1449+ view = ((D3D11Framebuffer *)draws[i].bindFramebufferAsTex )->stencilSRView ;
1450+ break ;
1451+ default :
1452+ break ;
1453+ }
14411454 context_->PSSetShaderResources (0 , 1 , &view);
14421455 }
14431456 ID3D11SamplerState *sstate = ((D3D11SamplerState *)draws[i].samplerState )->ss ;
@@ -1550,6 +1563,18 @@ Framebuffer *D3D11DrawContext::CreateFramebuffer(const FramebufferDesc &desc) {
15501563 WARN_LOG (Log::G3D, " Failed to create SRV for depth buffer." );
15511564 fb->depthSRView = nullptr ;
15521565 }
1566+
1567+
1568+ D3D11_SHADER_RESOURCE_VIEW_DESC depthStencilViewDesc{};
1569+ depthStencilViewDesc.Format = DXGI_FORMAT_R24G8_TYPELESS;
1570+ depthStencilViewDesc.Texture2D .MostDetailedMip = 0 ;
1571+ depthStencilViewDesc.Texture2D .MipLevels = 1 ;
1572+ depthStencilViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
1573+ hr = device_->CreateShaderResourceView (fb->depthStencilTex , &depthViewDesc, &fb->stencilSRView );
1574+ if (FAILED (hr)) {
1575+ WARN_LOG (Log::G3D, " Failed to create SRV for depth+stencil buffer." );
1576+ fb->depthSRView = nullptr ;
1577+ }
15531578 }
15541579
15551580 return fb;
0 commit comments