{"id":2703,"date":"2011-11-08T14:20:53","date_gmt":"2011-11-08T14:20:53","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vcblog\/2011\/11\/08\/game-debugging-in-visual-studio-11\/"},"modified":"2021-10-04T14:17:55","modified_gmt":"2021-10-04T14:17:55","slug":"game-debugging-in-visual-studio-11","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/game-debugging-in-visual-studio-11\/","title":{"rendered":"Game Debugging in Visual Studio 11"},"content":{"rendered":"<p>Hi! I am <strong>Amit Mohindra<\/strong>, a Program Manager on the Visual C++ team.<\/p>\n<p>We believe Metro style games and graphics-intensive apps present a huge opportunity for developers on new devices such as tablets. The primary API for accessing the full power of the underlying graphics hardware on Windows is <strong>DirectX 11<\/strong> (including <strong>Direct3D<\/strong> and <strong>Direct2D<\/strong>).<\/p>\n<p>One of the most significant innovations we have brought to Visual Studio 11 is a series of tools for assisting you in developing Direct3D games. We made a quick video of some of these features on Channel9 (<a href=\"https:\/\/channel9.msdn.com\/posts\/Visual-Studio-vNext-DirectX-11-Development-Experience\" target=\"_blank\" rel=\"noopener\">link<\/a>). In this post, I will walk through our debugging &amp; diagnostics support for D3D.<\/p>\n<p>The new <strong>Graphics Debugger<\/strong> in Visual Studio is a debugging and analysis tool that captures detailed information from a Direct3D application as it executes. You can use it to:<\/p>\n<ul>\n<li>Capture rendered frames for later inspection and analysis.<\/li>\n<li>View DirectX events and their effects on the application.<\/li>\n<li>View 3D meshes before and after vertex shader transformations.<\/li>\n<li>Discover which DirectX events contribute to the color of a specific pixel.<\/li>\n<li>Jump directly to the location in source code for a particular DirectX call<\/li>\n<\/ul>\n<p>Let\u2019s try to hypothetically solve a simple problem step by step using the graphics debugger. For this blog the game we\u2019re working on is a rotating Die game. Here is what it should look like.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/0842.image_1B76EA9E.png\"><img decoding=\"async\" class=\"size-full wp-image-29065 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/0842.image_1B76EA9E.png\" alt=\"Image 0842 image 1B76EA9E\" width=\"628\" height=\"394\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/0842.image_1B76EA9E.png 628w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/0842.image_1B76EA9E-300x188.png 300w\" sizes=\"(max-width: 628px) 100vw, 628px\" \/><\/a><\/p>\n<p>However, when we run the application we find out that the Die does not get rendered in the game.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/2260.image6_092E23DC.png\"><img decoding=\"async\" class=\"size-full wp-image-29070 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/2260.image6_092E23DC.png\" alt=\"Image 2260 image6 092E23DC\" width=\"628\" height=\"394\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/2260.image6_092E23DC.png 628w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/2260.image6_092E23DC-300x188.png 300w\" sizes=\"(max-width: 628px) 100vw, 628px\" \/><\/a><\/p>\n<p>To start debugging this game, right-click on the project in Solution Explorer and set \u201cEnable Graphics Capture\u201d to \u201cYes\u201d in the Debugging node.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/0844.image9_1D474065.png\"><img decoding=\"async\" class=\"size-full wp-image-29067 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/0844.image9_1D474065.png\" alt=\"Image 0844 image9 1D474065\" width=\"628\" height=\"444\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/0844.image9_1D474065.png 628w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/0844.image9_1D474065-300x212.png 300w\" sizes=\"(max-width: 628px) 100vw, 628px\" \/><\/a><\/p>\n<p>Now, F5 to start debugging your application and you will notice that the game now has some fundamental statistics displayed in the top left corner. This indicates that VS is ready to capture diagnostic information from the game for you to investigate the rendering issues.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/6215.image12_5D1126EA.png\"><img decoding=\"async\" class=\"size-full wp-image-29074 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/6215.image12_5D1126EA.png\" alt=\"Image 6215 image12 5D1126EA\" width=\"624\" height=\"161\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/6215.image12_5D1126EA.png 624w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/6215.image12_5D1126EA-300x77.png 300w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/a><\/p>\n<p>In order to capture a frame, just hit the \u201cPrint Screen\u201d key. You can repeat this as often as you like; each frame will show up in Visual Studio as part of the \u201cGraphics Experiment.vsglog\u201d file. The log file contains all the information required for you to debug the rendering issues. The file by default is located in a temporary location, but you can choose to save the file and share it with other developers.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/1512.image15_18D0BF9E.png\"><img decoding=\"async\" class=\"size-full wp-image-29068 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/1512.image15_18D0BF9E.png\" alt=\"Image 1512 image15 18D0BF9E\" width=\"628\" height=\"394\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/1512.image15_18D0BF9E.png 628w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/1512.image15_18D0BF9E-300x188.png 300w\" sizes=\"(max-width: 628px) 100vw, 628px\" \/><\/a><\/p>\n<p>Let\u2019s dig further into what\u2019s going on by analyzing the captured frame in Visual Studio. To understand it better I want to know what got drawn when I called the \u201c<span style=\"font-family: Courier New;\">DrawIndexed<\/span>\u201d API in my code.<\/p>\n<p>To inspect the \u201c<span style=\"font-family: Courier New;\">DrawIndexed<\/span>\u201d call right-click on the frame thumbnail and select \u201cEvents List\u201d from the context menu to bring up the events list window.<\/p>\n<p>The <b>Graphics Event List window<\/b> lists all the DirectX events captured by running a program under the VS debugger. It also simulates the events under the graphics debugger, re-running the commands using the same inputs as used by the running program. In the search box you could type \u201cDraw\u201d to filter the list to show the DirectX draw calls. Clicking through the draw calls you will be able to see in the frame window (on the right) how that frame was drawn piece by piece.<\/p>\n<p>In the search box in this window type \u201c<span style=\"font-family: Courier New;\">Draw<\/span>\u201d, this will filter the list to show the draw calls made by the game. Select the \u201c<span style=\"font-family: Courier New;\">DrawIndexed<\/span>\u201d call in the events list and check to see in the frame window if something gets rendered.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/2260.image18_thumb_4F4171A0.png\"><img decoding=\"async\" class=\"size-full wp-image-29071 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/2260.image18_thumb_4F4171A0.png\" alt=\"Image 2260 image18 thumb 4F4171A0\" width=\"644\" height=\"404\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/2260.image18_thumb_4F4171A0.png 644w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/2260.image18_thumb_4F4171A0-300x188.png 300w\" sizes=\"(max-width: 644px) 100vw, 644px\" \/><\/a><\/p>\n<p>Unfortunately in this scenario as seen above nothing is rendered so we need to continue our debugging process. A <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/bb205117(VS.85).aspx\" target=\"_blank\" rel=\"noopener\">draw API<\/a> (<span style=\"font-family: Courier New;\">DrawIndexed<\/span>) submits work to the rendering pipeline. So let\u2019s inspect the rendering pipeline to see if something was submitted as part of the \u201c<span style=\"font-family: Courier New;\">DrawIndexed<\/span>\u201d call. In order to see what was going on in the graphics pipeline when the draw call was executed, right-click on the call in the events list and bring up the pipeline viewer by selecting \u201cPipeline Viewer\u201d from the context menu.<\/p>\n<p>The <b>Graphics pipeline viewer<\/b> shows the different stages in the graphics pipeline and how those stages modify your model.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/1524.image21_thumb_3DF32B6C.png\"><img decoding=\"async\" class=\"size-full wp-image-29069 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/1524.image21_thumb_3DF32B6C.png\" alt=\"Image 1524 image21 thumb 3DF32B6C\" width=\"644\" height=\"404\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/1524.image21_thumb_3DF32B6C.png 644w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/1524.image21_thumb_3DF32B6C-300x188.png 300w\" sizes=\"(max-width: 644px) 100vw, 644px\" \/><\/a><\/p>\n<p>The viewer shows four different views of the mesh data; these correspond to four different stages in the pipeline<\/p>\n<p>&nbsp;<\/p>\n<table style=\"width: 100%;\" border=\"1\" cellspacing=\"0\" cellpadding=\"2\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"30%\"><strong>View<\/strong><\/td>\n<td valign=\"top\" width=\"70%\"><strong>Description<\/strong><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">Pre-Vertex Shader<\/td>\n<td valign=\"top\">View the mesh vertices before the vertex shader. The camera is pointed at the center of the object.<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">Post Vertex Shader<\/td>\n<td valign=\"top\">View the mesh vertices after the vertex shader. The camera is pointed at the center of the object.<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">Geometry Shader\n(not seen in this example as it is not used)<\/td>\n<td valign=\"top\">View the mesh vertices after the geometry shader. The camera is pointed at the center of the object. If there is no geometry shader assigned, this view is blank (a solid shade of light gray).<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">View Port<\/td>\n<td valign=\"top\">View the mesh vertices in screen space. The camera is set up identical to the camera in the target program.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Note there are other stages in the graphics pipeline which are not represented in this view. For more on the new graphics pipeline stages in DirectX 11, see <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ff476340(v=VS.85).aspx#Pipeline_Stages\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<p>In the graphics pipeline view you can see that something is being drawn that looks like the Die that the application wanted to render. It seems from the figure above that the \u201c<span style=\"font-family: Courier New;\">Die<\/span>\u201d (cube) structure is going through the graphics pipeline correctly indicating that the shaders are functioning correctly (they aren\u2019t modifying the original structure in a way that would prevent them from being rendered).<\/p>\n<p>At this point we need to continue debugging and take a look elsewhere. It could be that the pixels being overwritten or discarded. To verify this hypothesis lets go take a look at the pixels in the center of the frame (where the Die is supposed to be rendered). In the frame buffer window click in the center to first select a pixel and then right click and choose \u201cPixel History\u201d from the context menu.<\/p>\n<p>The <b>Graphics<\/b> <b>Pixel History window<\/b> displays the activities that contribute to the color of the selected pixel in the current frame. It contains information about how the pixel was modified by each DirectX event in the pixel history window. This includes the initial frame buffer state, followed by the intermediate draw events of rendering and the final result.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/4251.image24_thumb_6F8129B2.png\"><img decoding=\"async\" class=\"size-full wp-image-29072 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/4251.image24_thumb_6F8129B2.png\" alt=\"Image 4251 image24 thumb 6F8129B2\" width=\"644\" height=\"403\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/4251.image24_thumb_6F8129B2.png 644w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/4251.image24_thumb_6F8129B2-300x188.png 300w\" sizes=\"(max-width: 644px) 100vw, 644px\" \/><\/a><\/p>\n<p>We can see from the \u201cPixel History\u201d window that the frame buffer color for the pixel was blue, and then the pixel shader applied a different color (grey) to the pixel. However, the final color is still blue. The desired pixel color being rendered is not getting applied at all. This is an indication that the blend state might not be set correctly. Blend state controls how color and alpha values are blended when combining rendered data with existing render target data. To inspect the blend state, right click on the pixel and choose \u201cObject Table\u201d from the context menu. This will pop up the \u201cGraphics Object Table\u201d window.<\/p>\n<p>The <strong>Graphics Object Table<\/strong> displays Direct3D objects created by the target program. Any object that contains state information can be viewed by double clicking on the object in the table.<\/p>\n<p>Sort the object table (by \u201cType\u201d) and then scroll to the list of \u201cD3D11 Blend State\u201d object. Double click on the \u201cD3D11 Blend State\u201d object will the lowest valid (not N\/A) \u201cUsage Age\u201d. \u201cUsage Age\u201d helps scope the object to investigate in relation to the selected draw call, lower the usage age the more relevant it is. Double click on the blend state object with the lowest usage age and it will open a document with details of the object inside Visual Studio.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/7713.image27_thumb_210F27F9.png\"><img decoding=\"async\" class=\"size-full wp-image-29076 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/7713.image27_thumb_210F27F9.png\" alt=\"Image 7713 image27 thumb 210F27F9\" width=\"644\" height=\"370\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/7713.image27_thumb_210F27F9.png 644w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/7713.image27_thumb_210F27F9-300x172.png 300w\" sizes=\"(max-width: 644px) 100vw, 644px\" \/><\/a><\/p>\n<p>From the picture above we can see:<\/p>\n<div id=\"scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c7509a03-2d9c-4f92-8418-46f392044b67\" class=\"wlWriterEditableSmartContent\" style=\"margin: 0px; padding: 0px; float: none;\">\n<div style=\"border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;\">\n<div style=\"background-color: #ffffff; overflow: auto; padding: 2px 5px;\">\u00a0\u00a0\u00a0\u00a0<span style=\"background: #ffffff; color: #000000;\">Blend Source = D3D11_BLEND_ZERO; <\/span><span style=\"background: #ffffff; color: #008000;\">\/\/Source represents the color output by the pixel shader on which blend operation is performed<\/span>\n<span style=\"background: #ffffff; color: #000000;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"background: #ffffff; color: #000000;\">Blend Destination = D3D11_BLEND_ONE; <\/span><span style=\"background: #ffffff; color: #008000;\">\/\/Destination represents the color of the frame on which blend operation is performed<\/span>\n<span style=\"background: #ffffff; color: #000000;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"background: #ffffff; color: #000000;\">Blend Op = D3D11_BLEND_ADD; <\/span><span style=\"background: #ffffff; color: #008000;\">\/\/Blend operation to perform with the source and destination.<\/span><\/div>\n<\/div>\n<\/div>\n<p>We can see from this that the blend state for the source is being masked since it is set to zero (<span style=\"font-family: Courier New;\">D3D11_BLEND_ZERO<\/span>) and the blend state for the destination is set to one (<span style=\"font-family: Courier New;\">D3D11_BLEND_ONE<\/span>). This causes the background color to come out as the primary color after blending thus we don\u2019t see the Die being rendered. The values should be switched such that the output of the pixel shader is primary output of the blending operation.<\/p>\n<div id=\"scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:74978ad2-362f-4a8e-ab70-e844920c645b\" class=\"wlWriterEditableSmartContent\" style=\"margin: 0px; padding: 0px; float: none;\">\n<div style=\"border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;\">\n<div style=\"background-color: #ffffff; overflow: auto; padding: 2px 5px;\">\u00a0\u00a0\u00a0\u00a0<span style=\"background: #ffffff; color: #000000;\">Blend Source = D3D11_BLEND_ONE; <\/span>\n<span style=\"background: #ffffff; color: #000000;\">\u00a0\u00a0\u00a0\u00a0Blend Destination = D3D11_BLEND_ZERO;<\/span>\n<span style=\"background: #ffffff; color: #000000;\">\u00a0\u00a0\u00a0\u00a0Blend Op = D3D11_BLEND_ADD; <\/span><\/div>\n<\/div>\n<\/div>\n<p>To find out where the blend state is being set we can go back to the event list window and filter the event list to look for \u201c<span style=\"font-family: Courier New;\">blendstate<\/span>\u201d since the event list lists all the DirectX events that transpired for the captured frame. Once you filter you can see calls to \u201c<span style=\"font-family: Courier New;\">OMSetBlendState<\/span>\u201d. \u201c<span style=\"font-family: Courier New;\">OMSetBlendState<\/span>\u201d is the call that sets the blend state. To get to the source code where this call is being made right click on the \u201c<span style=\"font-family: Courier New;\">OMSetBlendState<\/span>\u201d call and chose \u201cCall Stack\u201d from the context menu to bring up the \u201cGraphics Call Stack\u201d window<\/p>\n<p>The<b> Graphics Event Callstack<\/b> window ties the DirectX events to the C++ source code being debugged.<\/p>\n<p>Double click on the first call in the call stack and it takes you to the \u201c<span style=\"font-family: Courier New;\">OMSetBlendState<\/span>\u201d call in the code. A few lines above the \u201c<span style=\"font-family: Courier New;\">OMBlendState<\/span>\u201d call and you will notice the lines of code where source and destination blend values are set.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/7713.image_thumb_2BCF0FFF.png\"><img decoding=\"async\" class=\"size-full wp-image-29075 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/7713.image_thumb_2BCF0FFF.png\" alt=\"Image 7713 image thumb 2BCF0FFF\" width=\"644\" height=\"312\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/7713.image_thumb_2BCF0FFF.png 644w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/7713.image_thumb_2BCF0FFF-300x145.png 300w\" sizes=\"(max-width: 644px) 100vw, 644px\" \/><\/a><\/p>\n<p>Switch the two states by changing the code to reflect the following:<\/p>\n<div id=\"scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:dbaac399-d4de-4724-a29e-8286746b451f\" class=\"wlWriterEditableSmartContent\" style=\"margin: 0px; padding: 0px; float: none;\">\n<div style=\"border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;\">\n<div style=\"background-color: #ffffff; overflow: auto; padding: 2px 5px;\">\u00a0\u00a0\u00a0\u00a0<span style=\"background: #ffffff; color: #000000;\">blenddesc.RenderTarget[0].SrcBlend=D3D11_BLEND_ONE;<\/span>\n<span style=\"background: #ffffff; color: #000000;\">\u00a0\u00a0\u00a0\u00a0blenddesc.RenderTarget[0].DestBlend=D3D11_BLEND_ZERO;<\/span><\/div>\n<\/div>\n<\/div>\n<p>Build and Run.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/5661.image_2275DB7C.png\"><img decoding=\"async\" class=\"size-full wp-image-29073 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/5661.image_2275DB7C.png\" alt=\"Image 5661 image 2275DB7C\" width=\"628\" height=\"394\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/5661.image_2275DB7C.png 628w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2011\/11\/5661.image_2275DB7C-300x188.png 300w\" sizes=\"(max-width: 628px) 100vw, 628px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3>Summary:<\/h3>\n<p>Game development isn\u2019t easy and we think tools should help you make use of the underlying DirectX platform. In this release, we are excited to bring this new type of diagnostics experience directly into Visual Studio. <b>These features are still under development and could potentially change or not even be included in our final product<\/b>. These features are only available of Visual Studio Professional and above SKU\u2019s.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hi! I am Amit Mohindra, a Program Manager on the Visual C++ team. We believe Metro style games and graphics-intensive apps present a huge opportunity for developers on new devices such as tablets. The primary API for accessing the full power of the underlying graphics hardware on Windows is DirectX 11 (including Direct3D and Direct2D). [&hellip;]<\/p>\n","protected":false},"author":289,"featured_media":35994,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[55,110,106],"class_list":["post-2703","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cplusplus","tag-debugging","tag-games","tag-graphics"],"acf":[],"blog_post_summary":"<p>Hi! I am Amit Mohindra, a Program Manager on the Visual C++ team. We believe Metro style games and graphics-intensive apps present a huge opportunity for developers on new devices such as tablets. The primary API for accessing the full power of the underlying graphics hardware on Windows is DirectX 11 (including Direct3D and Direct2D). [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/2703","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/users\/289"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/comments?post=2703"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/2703\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media\/35994"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media?parent=2703"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=2703"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=2703"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}