@@ -163,6 +163,34 @@ TEST(ClearRenderTargetTest, AsRenderTarget)
163163}
164164
165165
166+ TEST (ClearRenderTargetTest, AsUnboundRenderTarget)
167+ {
168+ GPUTestingEnvironment* pEnv = GPUTestingEnvironment::GetInstance ();
169+ IRenderDevice* pDevice = pEnv->GetDevice ();
170+ const RenderDeviceInfo& DeviceInfo = pDevice->GetDeviceInfo ();
171+ if (!(DeviceInfo.IsD3DDevice () || DeviceInfo.IsVulkanDevice ()))
172+ {
173+ GTEST_SKIP () << " Clearing unbound render target is only supported in Direct3D and Vulkan" ;
174+ }
175+
176+ ISwapChain* pSwapChain = pEnv->GetSwapChain ();
177+ IDeviceContext* pContext = pEnv->GetDeviceContext ();
178+
179+ GPUTestingEnvironment::ScopedReset EnvironmentAutoReset;
180+
181+ constexpr float ClearColor[] = {0 .25f , 0 .5f , 0 .75f , 1 .0f };
182+ ReferenceClear (ClearColor);
183+
184+ pContext->SetRenderTargets (0 , nullptr , nullptr , RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
185+ pContext->ClearRenderTarget (pSwapChain->GetCurrentBackBufferRTV (), ClearColor, RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
186+
187+ pSwapChain->Present ();
188+
189+ TestSwapChainCInterface (pSwapChain);
190+ }
191+
192+
193+
166194TEST (ClearRenderTargetTest, ClearAfterClear)
167195{
168196 GPUTestingEnvironment* pEnv = GPUTestingEnvironment::GetInstance ();
@@ -184,6 +212,46 @@ TEST(ClearRenderTargetTest, ClearAfterClear)
184212}
185213
186214
215+
216+ TEST (ClearRenderTargetTest, UnboundClearAfterClear)
217+ {
218+ GPUTestingEnvironment* pEnv = GPUTestingEnvironment::GetInstance ();
219+ IRenderDevice* pDevice = pEnv->GetDevice ();
220+ const RenderDeviceInfo& DeviceInfo = pDevice->GetDeviceInfo ();
221+ if (!(DeviceInfo.IsD3DDevice () || DeviceInfo.IsVulkanDevice ()))
222+ {
223+ GTEST_SKIP () << " Clearing unbound render target is only supported in Direct3D and Vulkan" ;
224+ }
225+
226+ ISwapChain* pSwapChain = pEnv->GetSwapChain ();
227+ IDeviceContext* pContext = pEnv->GetDeviceContext ();
228+
229+ GPUTestingEnvironment::ScopedReset EnvironmentAutoReset;
230+
231+ constexpr float ClearColor0[] = {0 .125f , 0 .5f , 0 .75f , 1 .0f };
232+ constexpr float ClearColor1[] = {0 .25f , 0 .75f , 0 .875f , 1 .0f };
233+ ReferenceClear (ClearColor0);
234+
235+ ITextureView* pRTVs[] = {pSwapChain->GetCurrentBackBufferRTV ()};
236+ pContext->SetRenderTargets (1 , pRTVs, nullptr , RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
237+ pContext->ClearRenderTarget (pRTVs[0 ], ClearColor0, RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
238+
239+ TextureDesc TexDesc;
240+ TexDesc.Name = " ClearRenderTargetTest.UnboundClearAfterClear" ;
241+ TexDesc.Type = RESOURCE_DIM_TEX_2D;
242+ TexDesc.Width = 512 ;
243+ TexDesc.Height = 512 ;
244+ TexDesc.Format = TEX_FORMAT_RGBA8_UNORM;
245+ TexDesc.BindFlags = BIND_RENDER_TARGET;
246+ RefCntAutoPtr<ITexture> pTex;
247+ pEnv->GetDevice ()->CreateTexture (TexDesc, nullptr , &pTex);
248+ ASSERT_NE (pTex, nullptr );
249+ pContext->ClearRenderTarget (pTex->GetDefaultView (TEXTURE_VIEW_RENDER_TARGET), ClearColor1, RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
250+
251+ pSwapChain->Present ();
252+ }
253+
254+
187255TEST (ClearRenderTargetTest, ResetRTsAfterClear)
188256{
189257 GPUTestingEnvironment* pEnv = GPUTestingEnvironment::GetInstance ();
0 commit comments