계산 쉐이더에서 깊이 버퍼를 읽을 수 없습니다.Compute 쉐이더에서 깊이 버퍼를 읽을 수 없습니다.
내 hlsl 코드에서 이것을 사용하고 있습니다.
이렇게하면 버퍼를 읽을 수 있습니다.
outputTexture[dispatchThreadId.xy]=gDepthTextures.Load(int3(dispatchThreadId.xy,0));
그리고 렌더링 대상에서 깊이 버퍼를 분리합니다.
ID3D11RenderTargetView *nullView[3]={NULL,NULL,NULL};
g_pImmediateContext->OMSetRenderTargets(3, nullView, NULL);
여전히 출력에서이 오류가 발생합니다.
*D3D11 ERROR: ID3D11DeviceContext::Dispatch: The Shader Resource View dimension declared in the shader code (TEXTURE2D) does not match the view type bound to slot 3 of the Compute Shader unit (BUFFER). This mismatch is invalid if the shader actually uses the view (e.g. it is not skipped due to shader code branching). [ EXECUTION ERROR #354: DEVICE_DRAW_VIEW_DIMENSION_MISMATCH]*
쉐이더 리소스 뷰를 만드는 방법입니다.
// Create depth stencil texture
D3D11_TEXTURE2D_DESC descDepth;
ZeroMemory(&descDepth, sizeof(descDepth));
descDepth.Width = width;
descDepth.Height = height;
descDepth.MipLevels = 1;
descDepth.ArraySize = 1;
descDepth.Format = DXGI_FORMAT_R32_TYPELESS;
descDepth.SampleDesc.Count = 1;
descDepth.SampleDesc.Quality = 0;
descDepth.Usage = D3D11_USAGE_DEFAULT;
descDepth.BindFlags = D3D11_BIND_DEPTH_STENCIL | D3D11_BIND_SHADER_RESOURCE;
descDepth.CPUAccessFlags = 0;
descDepth.MiscFlags = 0;
hr = g_pd3dDevice->CreateTexture2D(&descDepth, NULL, &g_pDepthStencil);
if(FAILED(hr))
return hr;
// Create the depth stencil view
D3D11_DEPTH_STENCIL_VIEW_DESC descDSV;
ZeroMemory(&descDSV, sizeof(descDSV));
descDSV.Format = DXGI_FORMAT_D32_FLOAT;
descDSV.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
descDSV.Texture2D.MipSlice = 0;
hr = g_pd3dDevice->CreateDepthStencilView(g_pDepthStencil, &descDSV, &g_pDepthStencilView);
if(FAILED(hr))
return hr;
// Create depth shader resource view.
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
ZeroMemory(&srvDesc,sizeof(D3D11_SHADER_RESOURCE_VIEW_DESC));
srvDesc.Format=DXGI_FORMAT_R32_UINT;
srvDesc.ViewDimension=D3D11_SRV_DIMENSION_TEXTURE2D;
srvDesc.Texture2D.MostDetailedMip=0;
srvDesc.Texture2D.MipLevels=1;
hr=g_pd3dDevice->CreateShaderResourceView(g_pDepthStencil,&srvDesc,&g_pDepthSRV);
if(FAILED(hr))
return hr;
나는 모든 형식이 더 성공 텍스처 형식 떠 HLSL, float4, UINT, uint4와 함께 here을 언급 노력했다. 어떤 생각?
여전히 "D3D11 오류 : ID3D11DeviceContext :: Dispatch : 셰이더 코드 (TEXTURE2D)에 선언 된 셰이더 리소스 뷰 차원이 Compute Shader 장치 (BUFFER)의 슬롯 3에 바인딩 된 뷰 형식과 일치하지 않습니다.이 불일치가 잘못되었습니다. 셰이더가 실제로 뷰를 사용하는 경우 (예 : 셰이더 코드 분기로 인해 건너 뛴 것은 아닙니다.) [EXECUTION ERROR # 354 : DEVICE_DRAW_VIEW_DIMENSION_MISMATCH] " –
편집 된 대답은 사용자의 깊이가 디스패치 전에 바인딩되지 않은 것으로 보입니다 (float 형식은 여전히 필요합니다. 귀하의 샘플링 방식). – catflier
나는 파견 직전에 이것을 이미하고있다. "g_pImmediateContext-> CSSetShaderResources (3,1, & g_pDepthSRV);" –