매우 멋진 설명! 나는 또한 혼란스러워하고, 당신의 질문과 설명 후에 나에게 분명하다!
그러나 나는이 게시물에 대한 좋은 예를 발견 했으므로이를 공유하고 싶습니다. 그것은 모든 SetShaderResources 유형에 대한 슬롯의 카운터를 시작하는 것 같습니다. 모든 셰이더 (VS, HS, DS, PS)에는 자체 카운터가있는 것으로 보입니다. 여기에 NVidia 예에서 코드 :
Shaderclass 번호 :
pd3dDeviceContext->HSSetShaderResources(0, 2, Resources);
pd3dDeviceContext->HSSetShaderResources(8, 1, &m_pRegularWatertightTexSRV);
pd3dDeviceContext->HSSetShaderResources(9, 1, &m_pQuadWatertightTexSRV);
pd3dDeviceContext->HSSetShaderResources(2, 1, &pHeightMapTextureSRV);
pd3dDeviceContext->DSSetShaderResources(2, 1, &pHeightMapTextureSRV);
pd3dDeviceContext->PSSetShaderResources(2, 1, &pHeightMapTextureSRV);
pd3dDeviceContext->PSSetShaderResources(10, 1, &pNormalMapTextureSRV);
pd3dDeviceContext->PSSetShaderResources(3, 1, &pTexRenderRV11);
처음 두 개의 자원을 들고 있으므로 다음 슬롯된다 (라인 4) 시작 슬롯 (0 + 2 (2)를 추가해야 = 2). 모든 SetShaderResources는 0부터 시작해야하지만 코드의 다른 위치에서이를 수행 할 수 있습니다. 따라서 여기에 DS 및 PS 슬롯이 없습니다. 선을 제거하면 여전히 작동하지만 데이터는 연기됩니다. 이제 HLSL의 처음 4 개가 t0, t1, t8 및 t9 줄에 표시되어 다른 레지스터가 다른 곳에 바인딩되었습니다.
HLSL 코드 :
Texture2D<float> GregoryStencil : register(t0);
Texture2D<uint> Index : register(t1);
Texture2D<float> g_txHeight : register(t2);
Texture2D<float> g_depth : register(t3);
Texture2D g_FloorTexture : register(t4);
Texture2D<float3> regularPatchControlPoints : register(t5);
Texture2D<float3> gregoryPatchControlPoints : register(t6);
Texture2D<float4> g_floorHeight : register(t7);
Texture2D<float2> RegularWatertightUVs : register(t8);
Texture2D<float2> QuadWatertightUVs : register(t9);
Texture2D<float3> g_txNormal : register(t10);
고마워요. 이것은 많은 것들을 지 웁니다 ... 단지 Texture2D tex [10] : register (t0)에서 레지스터 (t1) 또는 레지스터 (t2)를 사용하여 다른 변수를 선언 할 수 없습니다. 그들은 모두 사용하기 때문에 등록 (t9), 맞습니까? (나는 +1, 매우 명시 적 응답, 감사의 말을 해주었습니다.이 마지막 작은 점이 지워지는대로 받아 들일 것입니다.) – l3utterfly
여러 변수를 같은 레지스터에 바인드하려고하면 올바른 것입니다. 컴파일러는이 오류를 "아직 구현되지 않은 레지스터 겹침 의미가 있습니다."라고 알려줍니다. – catflier
감사합니다. 수락 된 대답. – l3utterfly