diff --git a/util/test/demos/d3d11/d3d11_simple_triangle.cpp b/util/test/demos/d3d11/d3d11_simple_triangle.cpp index e35ed844e..a1505eb45 100644 --- a/util/test/demos/d3d11/d3d11_simple_triangle.cpp +++ b/util/test/demos/d3d11/d3d11_simple_triangle.cpp @@ -50,10 +50,15 @@ RD_TEST(D3D11_Simple_Triangle, D3D11GraphicsTest) ID3D11Texture2DPtr fltTex = MakeTexture(DXGI_FORMAT_R32G32B32A32_FLOAT, 4, 4).RTV(); ID3D11RenderTargetViewPtr fltRT = MakeRTV(fltTex); + ID3D11Texture2DPtr fltMSTex = + MakeTexture(DXGI_FORMAT_R16G16B16A16_FLOAT, 4, 4).RTV().Multisampled(4); + ID3D11RenderTargetViewPtr fltMSRT = MakeRTV(fltMSTex); + while(Running()) { ClearRenderTargetView(bbRTV, {0.2f, 0.2f, 0.2f, 1.0f}); ClearRenderTargetView(fltRT, {0.2f, 0.2f, 0.2f, 1.0f}); + ClearRenderTargetView(fltMSRT, {0.2f, 0.2f, 0.2f, 1.0f}); IASetVertexBuffer(vb, sizeof(DefaultA2V), 0); ctx->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); diff --git a/util/test/demos/d3d12/d3d12_simple_triangle.cpp b/util/test/demos/d3d12/d3d12_simple_triangle.cpp index 541eb3abb..8d2288cbe 100644 --- a/util/test/demos/d3d12/d3d12_simple_triangle.cpp +++ b/util/test/demos/d3d12/d3d12_simple_triangle.cpp @@ -51,6 +51,11 @@ RD_TEST(D3D12_Simple_Triangle, D3D12GraphicsTest) .RTV() .InitialState(D3D12_RESOURCE_STATE_RENDER_TARGET); + ID3D12ResourcePtr rtvMStex = MakeTexture(DXGI_FORMAT_R16G16B16A16_FLOAT, 4, 4) + .RTV() + .Multisampled(4) + .InitialState(D3D12_RESOURCE_STATE_RENDER_TARGET); + while(Running()) { ID3D12GraphicsCommandListPtr cmd = GetCommandBuffer(); @@ -65,6 +70,7 @@ RD_TEST(D3D12_Simple_Triangle, D3D12GraphicsTest) ClearRenderTargetView(cmd, rtv, {0.2f, 0.2f, 0.2f, 1.0f}); ClearRenderTargetView(cmd, MakeRTV(rtvtex).CreateCPU(1), {0.2f, 0.2f, 0.2f, 1.0f}); + ClearRenderTargetView(cmd, MakeRTV(rtvMStex).CreateCPU(2), {0.2f, 0.2f, 0.2f, 1.0f}); cmd->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); diff --git a/util/test/demos/gl/gl_simple_triangle.cpp b/util/test/demos/gl/gl_simple_triangle.cpp index 297bef49a..63c99ce5a 100644 --- a/util/test/demos/gl/gl_simple_triangle.cpp +++ b/util/test/demos/gl/gl_simple_triangle.cpp @@ -60,6 +60,10 @@ RD_TEST(GL_Simple_Triangle, OpenGLGraphicsTest) textureColourData[i * 4 + c] = col[c]; } + GLuint texMS = MakeTexture(); + glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, texMS); + glTexStorage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 4, GL_RGBA16F, 4, 4, GL_TRUE); + while(Running()) { glClearBufferfv(GL_COLOR, 0, col); @@ -67,6 +71,8 @@ RD_TEST(GL_Simple_Triangle, OpenGLGraphicsTest) glBindTexture(GL_TEXTURE_2D, tex); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGBA, GL_FLOAT, textureColourData); + glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, texMS); + glBindVertexArray(vao); glUseProgram(program); diff --git a/util/test/demos/vk/vk_simple_triangle.cpp b/util/test/demos/vk/vk_simple_triangle.cpp index 237e8b93e..3dacb024d 100644 --- a/util/test/demos/vk/vk_simple_triangle.cpp +++ b/util/test/demos/vk/vk_simple_triangle.cpp @@ -67,6 +67,11 @@ RD_TEST(VK_Simple_Triangle, VulkanGraphicsTest) VK_IMAGE_USAGE_TRANSFER_DST_BIT), VmaAllocationCreateInfo({0, VMA_MEMORY_USAGE_GPU_ONLY})); + AllocatedImage offimgMS( + this, vkh::ImageCreateInfo(4, 4, 0, VK_FORMAT_R16G16B16A16_SFLOAT, + VK_IMAGE_USAGE_TRANSFER_DST_BIT, 1, 1, VK_SAMPLE_COUNT_4_BIT), + VmaAllocationCreateInfo({0, VMA_MEMORY_USAGE_GPU_ONLY})); + while(Running()) { VkCommandBuffer cmd = GetCommandBuffer(); @@ -90,6 +95,16 @@ RD_TEST(VK_Simple_Triangle, VulkanGraphicsTest) vkh::ClearColorValue(0.2f, 0.2f, 0.2f, 1.0f), 1, vkh::ImageSubresourceRange()); + vkh::cmdPipelineBarrier( + cmd, { + vkh::ImageMemoryBarrier(0, VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_UNDEFINED, + VK_IMAGE_LAYOUT_GENERAL, offimgMS.image), + }); + + vkCmdClearColorImage(cmd, offimgMS.image, VK_IMAGE_LAYOUT_GENERAL, + vkh::ClearColorValue(0.2f, 0.2f, 0.2f, 1.0f), 1, + vkh::ImageSubresourceRange()); + vkCmdBeginRenderPass( cmd, vkh::RenderPassBeginInfo(mainWindow->rp, mainWindow->GetFB(), mainWindow->scissor), VK_SUBPASS_CONTENTS_INLINE);