From d18557239fe535046e1850db8598986392a7c521 Mon Sep 17 00:00:00 2001 From: valeriog Date: Fri, 31 Oct 2014 19:40:16 +0100 Subject: [PATCH 1/2] Added visualization of rasterizer state for OpenGL. --- renderdoc/api/replay/gl_pipestate.h | 37 + renderdoc/api/replay/replay_enums.h | 2 + renderdoc/driver/gl/gl_renderstate.cpp | 15 +- renderdoc/driver/gl/gl_renderstate.h | 3 +- renderdoc/driver/gl/gl_replay.cpp | 84 +++ renderdocui/Interop/Enums.cs | 2 + renderdocui/Interop/GLPipelineState.cs | 41 ++ .../GLPipelineStateViewer.Designer.cs | 648 ++++++++---------- .../PipelineState/GLPipelineStateViewer.cs | 52 +- 9 files changed, 527 insertions(+), 357 deletions(-) diff --git a/renderdoc/api/replay/gl_pipestate.h b/renderdoc/api/replay/gl_pipestate.h index 9939dc46e..97f208cd6 100644 --- a/renderdoc/api/replay/gl_pipestate.h +++ b/renderdoc/api/replay/gl_pipestate.h @@ -89,6 +89,43 @@ struct GLPipelineState }; rdctype::array UniformBuffers; + struct Rasterizer + { + struct Viewport + { + Viewport() : Left(0.0f), Bottom(0.0f), Width(0.0f), Height(0.0f), MinDepth(0.0f), MaxDepth(0.0f) {} + float Left, Bottom; + float Width, Height; + double MinDepth, MaxDepth; + }; + rdctype::array Viewports; + + struct Scissor + { + Scissor() : Left(0), Bottom(0), Width(0), Height(0), Enabled(false) {} + int32_t Left, Bottom; + int32_t Width, Height; + bool32 Enabled; + }; + rdctype::array Scissors; + + struct RasterizerState + { + RasterizerState() + : FillMode(eFill_Solid), CullMode(eCull_None), FrontCCW(false), DepthBias(0), + SlopeScaledDepthBias(0.0f), DepthClamp(false), + MultisampleEnable(false), AntialiasedLineEnable(false) {} + TriangleFillMode FillMode; + TriangleCullMode CullMode; + bool32 FrontCCW; + float DepthBias; + float SlopeScaledDepthBias; + bool32 DepthClamp; + bool32 MultisampleEnable; + bool32 AntialiasedLineEnable; + } m_State; + } m_Rasterizer; + struct FrameBuffer { FrameBuffer() : FBO(), Depth(), Stencil() {} diff --git a/renderdoc/api/replay/replay_enums.h b/renderdoc/api/replay/replay_enums.h index 5d00902fd..bd1e00d77 100644 --- a/renderdoc/api/replay/replay_enums.h +++ b/renderdoc/api/replay/replay_enums.h @@ -346,6 +346,7 @@ enum TriangleFillMode { eFill_Solid = 0, eFill_Wireframe, + eFill_Point, }; enum TriangleCullMode @@ -353,6 +354,7 @@ enum TriangleCullMode eCull_None = 0, eCull_Front, eCull_Back, + eCull_FrontAndBack, }; enum ReplayCreateStatus diff --git a/renderdoc/driver/gl/gl_renderstate.cpp b/renderdoc/driver/gl/gl_renderstate.cpp index 51116d69b..1f06e9a35 100644 --- a/renderdoc/driver/gl/gl_renderstate.cpp +++ b/renderdoc/driver/gl/gl_renderstate.cpp @@ -70,7 +70,6 @@ void GLRenderState::FetchState() eGL_SAMPLE_ALPHA_TO_ONE, eGL_SAMPLE_COVERAGE, eGL_SAMPLE_MASK, - eGL_SCISSOR_TEST, eGL_STENCIL_TEST, eGL_TEXTURE_CUBE_MAP_SEAMLESS, }; @@ -153,7 +152,10 @@ void GLRenderState::FetchState() m_Real->glGetFloati_v(eGL_VIEWPORT, i, &Viewports[i].x); for(GLuint i=0; i < (GLuint)ARRAY_COUNT(Scissors); i++) + { m_Real->glGetIntegeri_v(eGL_SCISSOR_BOX, i, &Scissors[i].x); + Scissors[i].enabled = (m_Real->glIsEnabledi(eGL_SCISSOR_TEST, i) == GL_TRUE); + } m_Real->glGetIntegerv(eGL_DRAW_FRAMEBUFFER_BINDING, (GLint *)&DrawFBO); m_Real->glGetIntegerv(eGL_READ_FRAMEBUFFER_BINDING, (GLint *)&ReadFBO); @@ -256,7 +258,6 @@ void GLRenderState::ApplyState() eGL_SAMPLE_ALPHA_TO_ONE, eGL_SAMPLE_COVERAGE, eGL_SAMPLE_MASK, - eGL_SCISSOR_TEST, eGL_STENCIL_TEST, eGL_TEXTURE_CUBE_MAP_SEAMLESS, }; @@ -329,7 +330,15 @@ void GLRenderState::ApplyState() m_Real->glViewportArrayv(0, ARRAY_COUNT(Viewports), &Viewports[0].x); - m_Real->glScissorArrayv(0, ARRAY_COUNT(Scissors), &Scissors[0].x); + for (GLuint s = 0; s < (GLuint)ARRAY_COUNT(Scissors); ++s) + { + m_Real->glScissorIndexedv(s, &Scissors[s].x); + + if (Scissors[s].enabled) + m_Real->glEnablei(eGL_SCISSOR_TEST, s); + else + m_Real->glDisablei(eGL_SCISSOR_TEST, s); + } m_Real->glBindFramebuffer(eGL_READ_FRAMEBUFFER, ReadFBO); m_Real->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, DrawFBO); diff --git a/renderdoc/driver/gl/gl_renderstate.h b/renderdoc/driver/gl/gl_renderstate.h index 86b49db26..616737ea6 100644 --- a/renderdoc/driver/gl/gl_renderstate.h +++ b/renderdoc/driver/gl/gl_renderstate.h @@ -67,7 +67,7 @@ struct GLRenderState eEnabled_SampleAlphaToOne, eEnabled_SampleCoverage, eEnabled_SampleMask, - eEnabled_ScissorTest, + //eEnabled_ScissorTest, handled below with scissor values eEnabled_StencilTest, eEnabled_TexCubeSeamless, eEnabled_Count, @@ -131,6 +131,7 @@ struct GLRenderState struct Scissor { int32_t x, y, width, height; + bool enabled; } Scissors[16]; GLuint ReadFBO, DrawFBO; diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index 42ec32c7c..f450ed1fd 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -1093,6 +1093,90 @@ void GLReplay::SavePipelineState() } } + + // Vertex post processing and rasterization + + RDCCOMPILE_ASSERT(ARRAY_COUNT(rs.Viewports) == ARRAY_COUNT(rs.DepthRanges), "GL Viewport count does not match depth ranges count"); + create_array_uninit(pipe.m_Rasterizer.Viewports, ARRAY_COUNT(rs.Viewports)); + for (int32_t v = 0; v < pipe.m_Rasterizer.Viewports.count; ++v) + { + pipe.m_Rasterizer.Viewports[v].Left = rs.Viewports[v].x; + pipe.m_Rasterizer.Viewports[v].Bottom = rs.Viewports[v].y; + pipe.m_Rasterizer.Viewports[v].Width = rs.Viewports[v].width; + pipe.m_Rasterizer.Viewports[v].Height = rs.Viewports[v].height; + pipe.m_Rasterizer.Viewports[v].MinDepth = rs.DepthRanges[v].nearZ; + pipe.m_Rasterizer.Viewports[v].MaxDepth = rs.DepthRanges[v].farZ; + } + + create_array_uninit(pipe.m_Rasterizer.Scissors, ARRAY_COUNT(rs.Scissors)); + for (int32_t s = 0; s < pipe.m_Rasterizer.Scissors.count; ++s) + { + pipe.m_Rasterizer.Scissors[s].Left = rs.Scissors[s].x; + pipe.m_Rasterizer.Scissors[s].Bottom = rs.Scissors[s].y; + pipe.m_Rasterizer.Scissors[s].Width = rs.Scissors[s].width; + pipe.m_Rasterizer.Scissors[s].Height = rs.Scissors[s].height; + pipe.m_Rasterizer.Scissors[s].Enabled = rs.Scissors[s].enabled; + } + + int polygonOffsetEnableEnum; + switch (rs.PolygonMode) + { + default: + RDCWARN("Unexpected value for POLYGON_MODE"); + case eGL_FILL: + pipe.m_Rasterizer.m_State.FillMode = eFill_Solid; + polygonOffsetEnableEnum = GLRenderState::eEnabled_PolyOffsetFill; + break; + case eGL_LINES: + pipe.m_Rasterizer.m_State.FillMode = eFill_Wireframe; + polygonOffsetEnableEnum = GLRenderState::eEnabled_PolyOffsetLine; + break; + case eGL_POINT: + pipe.m_Rasterizer.m_State.FillMode = eFill_Point; + polygonOffsetEnableEnum = GLRenderState::eEnabled_PolyOffsetPoint; + break; + } + if (rs.Enabled[polygonOffsetEnableEnum]) + { + pipe.m_Rasterizer.m_State.DepthBias = rs.PolygonOffset[1]; + pipe.m_Rasterizer.m_State.SlopeScaledDepthBias = rs.PolygonOffset[0]; + } + else + { + pipe.m_Rasterizer.m_State.DepthBias = 0.0f; + pipe.m_Rasterizer.m_State.SlopeScaledDepthBias = 0.0f; + } + + if (rs.Enabled[GLRenderState::eEnabled_CullFace]) + { + switch (rs.CullFace) + { + default: + RDCWARN("Unexpected value for CULL_FACE"); + case eGL_BACK: + pipe.m_Rasterizer.m_State.CullMode = eCull_Back; + break; + case eGL_FRONT: + pipe.m_Rasterizer.m_State.CullMode = eCull_Front; + break; + case eGL_FRONT_AND_BACK: + pipe.m_Rasterizer.m_State.CullMode = eCull_FrontAndBack; + break; + } + } + else + { + pipe.m_Rasterizer.m_State.CullMode = eCull_None; + } + + RDCASSERT(rs.FrontFace == eGL_CCW || rs.FrontFace == eGL_CW); + pipe.m_Rasterizer.m_State.FrontCCW = rs.FrontFace == eGL_CCW; + pipe.m_Rasterizer.m_State.DepthClamp = rs.Enabled[GLRenderState::eEnabled_DepthClamp]; + pipe.m_Rasterizer.m_State.MultisampleEnable = rs.Enabled[GLRenderState::eEnabled_Multisample]; + pipe.m_Rasterizer.m_State.AntialiasedLineEnable = rs.Enabled[GLRenderState::eEnabled_LineSmooth]; + + // Frame buffer + GLuint curFBO = 0; gl.glGetIntegerv(eGL_DRAW_FRAMEBUFFER_BINDING, (GLint*)&curFBO); diff --git a/renderdocui/Interop/Enums.cs b/renderdocui/Interop/Enums.cs index 5a080430d..81e1c7f43 100644 --- a/renderdocui/Interop/Enums.cs +++ b/renderdocui/Interop/Enums.cs @@ -351,6 +351,7 @@ namespace renderdoc { Solid = 0, Wireframe, + Point }; public enum TriangleCullMode @@ -358,6 +359,7 @@ namespace renderdoc None = 0, Front, Back, + FrontAndBack, }; public enum ReplayCreateStatus diff --git a/renderdocui/Interop/GLPipelineState.cs b/renderdocui/Interop/GLPipelineState.cs index b8cdde6a8..c935cff81 100644 --- a/renderdocui/Interop/GLPipelineState.cs +++ b/renderdocui/Interop/GLPipelineState.cs @@ -119,6 +119,47 @@ namespace renderdoc [CustomMarshalAs(CustomUnmanagedType.TemplatedArray)] public Buffer[] UniformBuffers; + [StructLayout(LayoutKind.Sequential)] + public class Rasterizer + { + [StructLayout(LayoutKind.Sequential)] + public class Viewport + { + public float Left, Bottom; + public float Width, Height; + public double MinDepth, MaxDepth; + }; + [CustomMarshalAs(CustomUnmanagedType.TemplatedArray)] + public Viewport[] Viewports; + + [StructLayout(LayoutKind.Sequential)] + public class Scissor + { + public Int32 Left, Bottom; + public Int32 Width, Height; + public bool Enabled; + }; + [CustomMarshalAs(CustomUnmanagedType.TemplatedArray)] + public Scissor[] Scissors; + + [StructLayout(LayoutKind.Sequential)] + public class RasterizerState + { + public TriangleFillMode FillMode; + public TriangleCullMode CullMode; + public bool FrontCCW; + public float DepthBias; + public float SlopeScaledDepthBias; + public bool DepthClamp; + public bool MultisampleEnable; + public bool AntialiasedLineEnable; + }; + [CustomMarshalAs(CustomUnmanagedType.CustomClass)] + public RasterizerState m_State; + }; + [CustomMarshalAs(CustomUnmanagedType.CustomClass)] + public Rasterizer m_RS; + [StructLayout(LayoutKind.Sequential)] public class FrameBuffer { diff --git a/renderdocui/Windows/PipelineState/GLPipelineStateViewer.Designer.cs b/renderdocui/Windows/PipelineState/GLPipelineStateViewer.Designer.cs index b3b6ca1f5..37406d860 100644 --- a/renderdocui/Windows/PipelineState/GLPipelineStateViewer.Designer.cs +++ b/renderdocui/Windows/PipelineState/GLPipelineStateViewer.Designer.cs @@ -183,96 +183,97 @@ TreelistView.TreeListColumn treeListColumn142 = new TreelistView.TreeListColumn("Y", "Y"); TreelistView.TreeListColumn treeListColumn143 = new TreelistView.TreeListColumn("Width", "Width"); TreelistView.TreeListColumn treeListColumn144 = new TreelistView.TreeListColumn("Height", "Height"); - TreelistView.TreeListColumn treeListColumn145 = new TreelistView.TreeListColumn("Slot", "Slot"); - TreelistView.TreeListColumn treeListColumn146 = new TreelistView.TreeListColumn("Interface", "Interface"); - TreelistView.TreeListColumn treeListColumn147 = new TreelistView.TreeListColumn("Instance", "Instance"); - TreelistView.TreeListColumn treeListColumn148 = new TreelistView.TreeListColumn("Slot", "Slot"); - TreelistView.TreeListColumn treeListColumn149 = new TreelistView.TreeListColumn("Resource", "Resource"); - TreelistView.TreeListColumn treeListColumn150 = new TreelistView.TreeListColumn("Type", "Type"); - TreelistView.TreeListColumn treeListColumn151 = new TreelistView.TreeListColumn("Width", "Width"); - TreelistView.TreeListColumn treeListColumn152 = new TreelistView.TreeListColumn("Height", "Height"); - TreelistView.TreeListColumn treeListColumn153 = new TreelistView.TreeListColumn("Depth", "Depth"); - TreelistView.TreeListColumn treeListColumn154 = new TreelistView.TreeListColumn("Array Size", "Array Size"); - TreelistView.TreeListColumn treeListColumn155 = new TreelistView.TreeListColumn("Format", "Format"); - TreelistView.TreeListColumn treeListColumn156 = new TreelistView.TreeListColumn("Go", "Go"); - TreelistView.TreeListColumn treeListColumn157 = new TreelistView.TreeListColumn("Slot", "Slot"); - TreelistView.TreeListColumn treeListColumn158 = new TreelistView.TreeListColumn("Addressing", "Addressing"); - TreelistView.TreeListColumn treeListColumn159 = new TreelistView.TreeListColumn("Border", "Border"); - TreelistView.TreeListColumn treeListColumn160 = new TreelistView.TreeListColumn("Comparison", "Comparison"); - TreelistView.TreeListColumn treeListColumn161 = new TreelistView.TreeListColumn("Filter", "Filter"); - TreelistView.TreeListColumn treeListColumn162 = new TreelistView.TreeListColumn("Max Aniso", "Max Aniso"); - TreelistView.TreeListColumn treeListColumn163 = new TreelistView.TreeListColumn("Min LOD", "Min LOD"); - TreelistView.TreeListColumn treeListColumn164 = new TreelistView.TreeListColumn("Max LOD", "Max LOD"); - TreelistView.TreeListColumn treeListColumn165 = new TreelistView.TreeListColumn("Mip Bias", "Mip Bias"); - TreelistView.TreeListColumn treeListColumn166 = new TreelistView.TreeListColumn("Slot", "Slot"); - TreelistView.TreeListColumn treeListColumn167 = new TreelistView.TreeListColumn("Buffer", "Buffer"); - TreelistView.TreeListColumn treeListColumn168 = new TreelistView.TreeListColumn("Vec. Offset", "Vec. Offset"); - TreelistView.TreeListColumn treeListColumn169 = new TreelistView.TreeListColumn("Vec. Count", "Vec. Count"); - TreelistView.TreeListColumn treeListColumn170 = new TreelistView.TreeListColumn("Number of Variables", "Number of Variables"); - TreelistView.TreeListColumn treeListColumn171 = new TreelistView.TreeListColumn("Byte Size", "Byte Size"); - TreelistView.TreeListColumn treeListColumn172 = new TreelistView.TreeListColumn("Go", "Go"); - TreelistView.TreeListColumn treeListColumn173 = new TreelistView.TreeListColumn("Slot", "Slot"); - TreelistView.TreeListColumn treeListColumn174 = new TreelistView.TreeListColumn("Resource", "Resource"); - TreelistView.TreeListColumn treeListColumn175 = new TreelistView.TreeListColumn("Type", "Type"); - TreelistView.TreeListColumn treeListColumn176 = new TreelistView.TreeListColumn("Width", "Width"); - TreelistView.TreeListColumn treeListColumn177 = new TreelistView.TreeListColumn("Height", "Height"); - TreelistView.TreeListColumn treeListColumn178 = new TreelistView.TreeListColumn("Depth", "Depth"); - TreelistView.TreeListColumn treeListColumn179 = new TreelistView.TreeListColumn("Array Size", "Array Size"); - TreelistView.TreeListColumn treeListColumn180 = new TreelistView.TreeListColumn("Format", "Format"); - TreelistView.TreeListColumn treeListColumn181 = new TreelistView.TreeListColumn("Go", "Go"); - TreelistView.TreeListColumn treeListColumn182 = new TreelistView.TreeListColumn("Slot", "Slot"); - TreelistView.TreeListColumn treeListColumn183 = new TreelistView.TreeListColumn("Enabled", "Enabled"); - TreelistView.TreeListColumn treeListColumn184 = new TreelistView.TreeListColumn("Logic", "Logic"); - TreelistView.TreeListColumn treeListColumn185 = new TreelistView.TreeListColumn("Blend Src", "Blend Src"); - TreelistView.TreeListColumn treeListColumn186 = new TreelistView.TreeListColumn("Blend Dst", "Blend Dst"); - TreelistView.TreeListColumn treeListColumn187 = new TreelistView.TreeListColumn("Blend Op", "Blend Op"); - TreelistView.TreeListColumn treeListColumn188 = new TreelistView.TreeListColumn("Alpha Blend Src", "Alpha Blend Src"); - TreelistView.TreeListColumn treeListColumn189 = new TreelistView.TreeListColumn("Alpha Blend Dst", "Alpha Blend Dst"); - TreelistView.TreeListColumn treeListColumn190 = new TreelistView.TreeListColumn("Alpha Blend Op", "Alpha Blend Op"); - TreelistView.TreeListColumn treeListColumn191 = new TreelistView.TreeListColumn("Logic Op", "Logic Op"); - TreelistView.TreeListColumn treeListColumn192 = new TreelistView.TreeListColumn("Write Mask", "Write Mask"); - TreelistView.TreeListColumn treeListColumn193 = new TreelistView.TreeListColumn("Face", "Face"); - TreelistView.TreeListColumn treeListColumn194 = new TreelistView.TreeListColumn("Func", "Func"); - TreelistView.TreeListColumn treeListColumn195 = new TreelistView.TreeListColumn("Fail Op", "Fail Op"); - TreelistView.TreeListColumn treeListColumn196 = new TreelistView.TreeListColumn("Depth Fail Op", "Depth Fail Op"); - TreelistView.TreeListColumn treeListColumn197 = new TreelistView.TreeListColumn("Pass Op", "Pass Op"); - TreelistView.TreeListColumn treeListColumn198 = new TreelistView.TreeListColumn("Slot", "Slot"); - TreelistView.TreeListColumn treeListColumn199 = new TreelistView.TreeListColumn("Resource", "Resource"); - TreelistView.TreeListColumn treeListColumn200 = new TreelistView.TreeListColumn("Type", "Type"); - TreelistView.TreeListColumn treeListColumn201 = new TreelistView.TreeListColumn("Width", "Width"); - TreelistView.TreeListColumn treeListColumn202 = new TreelistView.TreeListColumn("Height", "Height"); - TreelistView.TreeListColumn treeListColumn203 = new TreelistView.TreeListColumn("Depth", "Depth"); - TreelistView.TreeListColumn treeListColumn204 = new TreelistView.TreeListColumn("Array Size", "Array Size"); - TreelistView.TreeListColumn treeListColumn205 = new TreelistView.TreeListColumn("Format", "Format"); - TreelistView.TreeListColumn treeListColumn206 = new TreelistView.TreeListColumn("Go", "Go"); - TreelistView.TreeListColumn treeListColumn207 = new TreelistView.TreeListColumn("Slot", "Slot"); - TreelistView.TreeListColumn treeListColumn208 = new TreelistView.TreeListColumn("Interface", "Interface"); - TreelistView.TreeListColumn treeListColumn209 = new TreelistView.TreeListColumn("Instance", "Instance"); - TreelistView.TreeListColumn treeListColumn210 = new TreelistView.TreeListColumn("Slot", "Slot"); - TreelistView.TreeListColumn treeListColumn211 = new TreelistView.TreeListColumn("Resource", "Resource"); - TreelistView.TreeListColumn treeListColumn212 = new TreelistView.TreeListColumn("Type", "Type"); - TreelistView.TreeListColumn treeListColumn213 = new TreelistView.TreeListColumn("Width", "Width"); - TreelistView.TreeListColumn treeListColumn214 = new TreelistView.TreeListColumn("Height", "Height"); - TreelistView.TreeListColumn treeListColumn215 = new TreelistView.TreeListColumn("Depth", "Depth"); - TreelistView.TreeListColumn treeListColumn216 = new TreelistView.TreeListColumn("Array Size", "Array Size"); - TreelistView.TreeListColumn treeListColumn217 = new TreelistView.TreeListColumn("Format", "Format"); - TreelistView.TreeListColumn treeListColumn218 = new TreelistView.TreeListColumn("Go", "Go"); - TreelistView.TreeListColumn treeListColumn219 = new TreelistView.TreeListColumn("Slot", "Slot"); - TreelistView.TreeListColumn treeListColumn220 = new TreelistView.TreeListColumn("Addressing", "Addressing"); - TreelistView.TreeListColumn treeListColumn221 = new TreelistView.TreeListColumn("Border", "Border"); - TreelistView.TreeListColumn treeListColumn222 = new TreelistView.TreeListColumn("Comparison", "Comparison"); - TreelistView.TreeListColumn treeListColumn223 = new TreelistView.TreeListColumn("Filter", "Filter"); - TreelistView.TreeListColumn treeListColumn224 = new TreelistView.TreeListColumn("Max Aniso", "Max Aniso"); - TreelistView.TreeListColumn treeListColumn225 = new TreelistView.TreeListColumn("Min LOD", "Min LOD"); - TreelistView.TreeListColumn treeListColumn226 = new TreelistView.TreeListColumn("Max LOD", "Max LOD"); - TreelistView.TreeListColumn treeListColumn227 = new TreelistView.TreeListColumn("Mip Bias", "Mip Bias"); - TreelistView.TreeListColumn treeListColumn228 = new TreelistView.TreeListColumn("Slot", "Slot"); - TreelistView.TreeListColumn treeListColumn229 = new TreelistView.TreeListColumn("Buffer", "Buffer"); - TreelistView.TreeListColumn treeListColumn230 = new TreelistView.TreeListColumn("Vec. Offset", "Vec. Offset"); - TreelistView.TreeListColumn treeListColumn231 = new TreelistView.TreeListColumn("Vec. Count", "Vec. Count"); - TreelistView.TreeListColumn treeListColumn232 = new TreelistView.TreeListColumn("Number of Variables", "Number of Variables"); - TreelistView.TreeListColumn treeListColumn233 = new TreelistView.TreeListColumn("Byte Size", "Byte Size"); - TreelistView.TreeListColumn treeListColumn234 = new TreelistView.TreeListColumn("Go", "Go"); + TreelistView.TreeListColumn treeListColumn145 = new TreelistView.TreeListColumn("Enabled", "Enabled"); + TreelistView.TreeListColumn treeListColumn146 = new TreelistView.TreeListColumn("Slot", "Slot"); + TreelistView.TreeListColumn treeListColumn147 = new TreelistView.TreeListColumn("Interface", "Interface"); + TreelistView.TreeListColumn treeListColumn148 = new TreelistView.TreeListColumn("Instance", "Instance"); + TreelistView.TreeListColumn treeListColumn149 = new TreelistView.TreeListColumn("Slot", "Slot"); + TreelistView.TreeListColumn treeListColumn150 = new TreelistView.TreeListColumn("Resource", "Resource"); + TreelistView.TreeListColumn treeListColumn151 = new TreelistView.TreeListColumn("Type", "Type"); + TreelistView.TreeListColumn treeListColumn152 = new TreelistView.TreeListColumn("Width", "Width"); + TreelistView.TreeListColumn treeListColumn153 = new TreelistView.TreeListColumn("Height", "Height"); + TreelistView.TreeListColumn treeListColumn154 = new TreelistView.TreeListColumn("Depth", "Depth"); + TreelistView.TreeListColumn treeListColumn155 = new TreelistView.TreeListColumn("Array Size", "Array Size"); + TreelistView.TreeListColumn treeListColumn156 = new TreelistView.TreeListColumn("Format", "Format"); + TreelistView.TreeListColumn treeListColumn157 = new TreelistView.TreeListColumn("Go", "Go"); + TreelistView.TreeListColumn treeListColumn158 = new TreelistView.TreeListColumn("Slot", "Slot"); + TreelistView.TreeListColumn treeListColumn159 = new TreelistView.TreeListColumn("Addressing", "Addressing"); + TreelistView.TreeListColumn treeListColumn160 = new TreelistView.TreeListColumn("Border", "Border"); + TreelistView.TreeListColumn treeListColumn161 = new TreelistView.TreeListColumn("Comparison", "Comparison"); + TreelistView.TreeListColumn treeListColumn162 = new TreelistView.TreeListColumn("Filter", "Filter"); + TreelistView.TreeListColumn treeListColumn163 = new TreelistView.TreeListColumn("Max Aniso", "Max Aniso"); + TreelistView.TreeListColumn treeListColumn164 = new TreelistView.TreeListColumn("Min LOD", "Min LOD"); + TreelistView.TreeListColumn treeListColumn165 = new TreelistView.TreeListColumn("Max LOD", "Max LOD"); + TreelistView.TreeListColumn treeListColumn166 = new TreelistView.TreeListColumn("Mip Bias", "Mip Bias"); + TreelistView.TreeListColumn treeListColumn167 = new TreelistView.TreeListColumn("Slot", "Slot"); + TreelistView.TreeListColumn treeListColumn168 = new TreelistView.TreeListColumn("Buffer", "Buffer"); + TreelistView.TreeListColumn treeListColumn169 = new TreelistView.TreeListColumn("Vec. Offset", "Vec. Offset"); + TreelistView.TreeListColumn treeListColumn170 = new TreelistView.TreeListColumn("Vec. Count", "Vec. Count"); + TreelistView.TreeListColumn treeListColumn171 = new TreelistView.TreeListColumn("Number of Variables", "Number of Variables"); + TreelistView.TreeListColumn treeListColumn172 = new TreelistView.TreeListColumn("Byte Size", "Byte Size"); + TreelistView.TreeListColumn treeListColumn173 = new TreelistView.TreeListColumn("Go", "Go"); + TreelistView.TreeListColumn treeListColumn174 = new TreelistView.TreeListColumn("Slot", "Slot"); + TreelistView.TreeListColumn treeListColumn175 = new TreelistView.TreeListColumn("Resource", "Resource"); + TreelistView.TreeListColumn treeListColumn176 = new TreelistView.TreeListColumn("Type", "Type"); + TreelistView.TreeListColumn treeListColumn177 = new TreelistView.TreeListColumn("Width", "Width"); + TreelistView.TreeListColumn treeListColumn178 = new TreelistView.TreeListColumn("Height", "Height"); + TreelistView.TreeListColumn treeListColumn179 = new TreelistView.TreeListColumn("Depth", "Depth"); + TreelistView.TreeListColumn treeListColumn180 = new TreelistView.TreeListColumn("Array Size", "Array Size"); + TreelistView.TreeListColumn treeListColumn181 = new TreelistView.TreeListColumn("Format", "Format"); + TreelistView.TreeListColumn treeListColumn182 = new TreelistView.TreeListColumn("Go", "Go"); + TreelistView.TreeListColumn treeListColumn183 = new TreelistView.TreeListColumn("Slot", "Slot"); + TreelistView.TreeListColumn treeListColumn184 = new TreelistView.TreeListColumn("Enabled", "Enabled"); + TreelistView.TreeListColumn treeListColumn185 = new TreelistView.TreeListColumn("Logic", "Logic"); + TreelistView.TreeListColumn treeListColumn186 = new TreelistView.TreeListColumn("Blend Src", "Blend Src"); + TreelistView.TreeListColumn treeListColumn187 = new TreelistView.TreeListColumn("Blend Dst", "Blend Dst"); + TreelistView.TreeListColumn treeListColumn188 = new TreelistView.TreeListColumn("Blend Op", "Blend Op"); + TreelistView.TreeListColumn treeListColumn189 = new TreelistView.TreeListColumn("Alpha Blend Src", "Alpha Blend Src"); + TreelistView.TreeListColumn treeListColumn190 = new TreelistView.TreeListColumn("Alpha Blend Dst", "Alpha Blend Dst"); + TreelistView.TreeListColumn treeListColumn191 = new TreelistView.TreeListColumn("Alpha Blend Op", "Alpha Blend Op"); + TreelistView.TreeListColumn treeListColumn192 = new TreelistView.TreeListColumn("Logic Op", "Logic Op"); + TreelistView.TreeListColumn treeListColumn193 = new TreelistView.TreeListColumn("Write Mask", "Write Mask"); + TreelistView.TreeListColumn treeListColumn194 = new TreelistView.TreeListColumn("Face", "Face"); + TreelistView.TreeListColumn treeListColumn195 = new TreelistView.TreeListColumn("Func", "Func"); + TreelistView.TreeListColumn treeListColumn196 = new TreelistView.TreeListColumn("Fail Op", "Fail Op"); + TreelistView.TreeListColumn treeListColumn197 = new TreelistView.TreeListColumn("Depth Fail Op", "Depth Fail Op"); + TreelistView.TreeListColumn treeListColumn198 = new TreelistView.TreeListColumn("Pass Op", "Pass Op"); + TreelistView.TreeListColumn treeListColumn199 = new TreelistView.TreeListColumn("Slot", "Slot"); + TreelistView.TreeListColumn treeListColumn200 = new TreelistView.TreeListColumn("Resource", "Resource"); + TreelistView.TreeListColumn treeListColumn201 = new TreelistView.TreeListColumn("Type", "Type"); + TreelistView.TreeListColumn treeListColumn202 = new TreelistView.TreeListColumn("Width", "Width"); + TreelistView.TreeListColumn treeListColumn203 = new TreelistView.TreeListColumn("Height", "Height"); + TreelistView.TreeListColumn treeListColumn204 = new TreelistView.TreeListColumn("Depth", "Depth"); + TreelistView.TreeListColumn treeListColumn205 = new TreelistView.TreeListColumn("Array Size", "Array Size"); + TreelistView.TreeListColumn treeListColumn206 = new TreelistView.TreeListColumn("Format", "Format"); + TreelistView.TreeListColumn treeListColumn207 = new TreelistView.TreeListColumn("Go", "Go"); + TreelistView.TreeListColumn treeListColumn208 = new TreelistView.TreeListColumn("Slot", "Slot"); + TreelistView.TreeListColumn treeListColumn209 = new TreelistView.TreeListColumn("Interface", "Interface"); + TreelistView.TreeListColumn treeListColumn210 = new TreelistView.TreeListColumn("Instance", "Instance"); + TreelistView.TreeListColumn treeListColumn211 = new TreelistView.TreeListColumn("Slot", "Slot"); + TreelistView.TreeListColumn treeListColumn212 = new TreelistView.TreeListColumn("Resource", "Resource"); + TreelistView.TreeListColumn treeListColumn213 = new TreelistView.TreeListColumn("Type", "Type"); + TreelistView.TreeListColumn treeListColumn214 = new TreelistView.TreeListColumn("Width", "Width"); + TreelistView.TreeListColumn treeListColumn215 = new TreelistView.TreeListColumn("Height", "Height"); + TreelistView.TreeListColumn treeListColumn216 = new TreelistView.TreeListColumn("Depth", "Depth"); + TreelistView.TreeListColumn treeListColumn217 = new TreelistView.TreeListColumn("Array Size", "Array Size"); + TreelistView.TreeListColumn treeListColumn218 = new TreelistView.TreeListColumn("Format", "Format"); + TreelistView.TreeListColumn treeListColumn219 = new TreelistView.TreeListColumn("Go", "Go"); + TreelistView.TreeListColumn treeListColumn220 = new TreelistView.TreeListColumn("Slot", "Slot"); + TreelistView.TreeListColumn treeListColumn221 = new TreelistView.TreeListColumn("Addressing", "Addressing"); + TreelistView.TreeListColumn treeListColumn222 = new TreelistView.TreeListColumn("Border", "Border"); + TreelistView.TreeListColumn treeListColumn223 = new TreelistView.TreeListColumn("Comparison", "Comparison"); + TreelistView.TreeListColumn treeListColumn224 = new TreelistView.TreeListColumn("Filter", "Filter"); + TreelistView.TreeListColumn treeListColumn225 = new TreelistView.TreeListColumn("Max Aniso", "Max Aniso"); + TreelistView.TreeListColumn treeListColumn226 = new TreelistView.TreeListColumn("Min LOD", "Min LOD"); + TreelistView.TreeListColumn treeListColumn227 = new TreelistView.TreeListColumn("Max LOD", "Max LOD"); + TreelistView.TreeListColumn treeListColumn228 = new TreelistView.TreeListColumn("Mip Bias", "Mip Bias"); + TreelistView.TreeListColumn treeListColumn229 = new TreelistView.TreeListColumn("Slot", "Slot"); + TreelistView.TreeListColumn treeListColumn230 = new TreelistView.TreeListColumn("Buffer", "Buffer"); + TreelistView.TreeListColumn treeListColumn231 = new TreelistView.TreeListColumn("Vec. Offset", "Vec. Offset"); + TreelistView.TreeListColumn treeListColumn232 = new TreelistView.TreeListColumn("Vec. Count", "Vec. Count"); + TreelistView.TreeListColumn treeListColumn233 = new TreelistView.TreeListColumn("Number of Variables", "Number of Variables"); + TreelistView.TreeListColumn treeListColumn234 = new TreelistView.TreeListColumn("Byte Size", "Byte Size"); + TreelistView.TreeListColumn treeListColumn235 = new TreelistView.TreeListColumn("Go", "Go"); this.pipeFlow = new renderdocui.Controls.PipelineFlowchart(); this.flowLayoutPanel6 = new System.Windows.Forms.FlowLayoutPanel(); this.toolStrip1 = new System.Windows.Forms.ToolStrip(); @@ -361,15 +362,9 @@ this.tableLayoutPanel14 = new System.Windows.Forms.TableLayoutPanel(); this.groupBox31 = new System.Windows.Forms.GroupBox(); this.tableLayoutPanel8 = new System.Windows.Forms.TableLayoutPanel(); - this.forcedSampleCount = new System.Windows.Forms.Label(); - this.label14 = new System.Windows.Forms.Label(); this.frontCCW = new System.Windows.Forms.PictureBox(); this.cullMode = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); this.depthBias = new System.Windows.Forms.Label(); - this.depthBiasClamp = new System.Windows.Forms.Label(); - this.slopeScaledBias = new System.Windows.Forms.Label(); this.label18 = new System.Windows.Forms.Label(); this.label19 = new System.Windows.Forms.Label(); this.label20 = new System.Windows.Forms.Label(); @@ -379,6 +374,8 @@ this.scissorEnable = new System.Windows.Forms.PictureBox(); this.lineAAEnable = new System.Windows.Forms.PictureBox(); this.label23 = new System.Windows.Forms.Label(); + this.slopeScaledBias = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); this.groupBox32 = new System.Windows.Forms.GroupBox(); this.viewports = new TreelistView.TreeListView(); this.scissors = new TreelistView.TreeListView(); @@ -1371,7 +1368,7 @@ this.flowLayoutPanel4.Size = new System.Drawing.Size(1145, 25); this.flowLayoutPanel4.TabIndex = 25; // - // hsShader + // tesShader // this.tesShader.Anchor = System.Windows.Forms.AnchorStyles.Left; this.tesShader.AutoSize = true; @@ -1381,7 +1378,7 @@ this.tesShader.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); this.tesShader.Location = new System.Drawing.Point(3, 3); this.tesShader.MinimumSize = new System.Drawing.Size(300, 2); - this.tesShader.Name = "hsShader"; + this.tesShader.Name = "tesShader"; this.tesShader.Size = new System.Drawing.Size(300, 15); this.tesShader.TabIndex = 24; this.tesShader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -1389,12 +1386,12 @@ this.tesShader.MouseEnter += new System.EventHandler(this.shaderCog_MouseEnter); this.tesShader.MouseLeave += new System.EventHandler(this.shaderCog_MouseLeave); // - // hsShaderCog + // tesShaderCog // this.tesShaderCog.Cursor = System.Windows.Forms.Cursors.Hand; this.tesShaderCog.Image = global::renderdocui.Properties.Resources.action; this.tesShaderCog.Location = new System.Drawing.Point(309, 3); - this.tesShaderCog.Name = "hsShaderCog"; + this.tesShaderCog.Name = "tesShaderCog"; this.tesShaderCog.Size = new System.Drawing.Size(16, 16); this.tesShaderCog.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; this.tesShaderCog.TabIndex = 25; @@ -1428,7 +1425,7 @@ this.groupBox11.TabStop = false; this.groupBox11.Text = "Class Instances"; // - // hsClasses + // tesClasses // treeListColumn44.AutoSizeMinSize = 0; treeListColumn44.Width = 50; @@ -1444,7 +1441,7 @@ this.tesClasses.Cursor = System.Windows.Forms.Cursors.Arrow; this.tesClasses.Dock = System.Windows.Forms.DockStyle.Fill; this.tesClasses.Location = new System.Drawing.Point(3, 16); - this.tesClasses.Name = "hsClasses"; + this.tesClasses.Name = "tesClasses"; this.tesClasses.RowOptions.ItemHeight = 20; this.tesClasses.RowOptions.ShowHeader = false; this.tesClasses.Size = new System.Drawing.Size(1145, 116); @@ -1468,7 +1465,7 @@ this.groupBox12.TabStop = false; this.groupBox12.Text = "Resources"; // - // hsResources + // tesResources // treeListColumn47.AutoSizeMinSize = 0; treeListColumn47.Width = 120; @@ -1504,7 +1501,7 @@ this.tesResources.GridLineColour = System.Drawing.SystemColors.ControlDark; this.tesResources.Location = new System.Drawing.Point(3, 16); this.tesResources.MultiSelect = false; - this.tesResources.Name = "hsResources"; + this.tesResources.Name = "tesResources"; this.tesResources.RowOptions.HoverHighlight = true; this.tesResources.RowOptions.ItemHeight = 20; this.tesResources.RowOptions.ShowHeader = false; @@ -1532,7 +1529,7 @@ this.groupBox14.TabStop = false; this.groupBox14.Text = "Samplers"; // - // hsSamplers + // tesSamplers // treeListColumn56.AutoSizeMinSize = 0; treeListColumn56.Width = 120; @@ -1568,7 +1565,7 @@ this.tesSamplers.GridLineColour = System.Drawing.SystemColors.ControlDark; this.tesSamplers.Location = new System.Drawing.Point(3, 16); this.tesSamplers.MultiSelect = false; - this.tesSamplers.Name = "hsSamplers"; + this.tesSamplers.Name = "tesSamplers"; this.tesSamplers.RowOptions.HoverHighlight = true; this.tesSamplers.RowOptions.ItemHeight = 20; this.tesSamplers.RowOptions.ShowHeader = false; @@ -1594,7 +1591,7 @@ this.groupBox15.TabStop = false; this.groupBox15.Text = "Constant Buffers"; // - // hsCBuffers + // tesCBuffers // treeListColumn65.AutoSizeMinSize = 0; treeListColumn65.Width = 120; @@ -1624,7 +1621,7 @@ this.tesCBuffers.GridLineColour = System.Drawing.SystemColors.ControlDark; this.tesCBuffers.Location = new System.Drawing.Point(3, 16); this.tesCBuffers.MultiSelect = false; - this.tesCBuffers.Name = "hsCBuffers"; + this.tesCBuffers.Name = "tesCBuffers"; this.tesCBuffers.RowOptions.HoverHighlight = true; this.tesCBuffers.RowOptions.ItemHeight = 20; this.tesCBuffers.RowOptions.ShowHeader = false; @@ -1706,7 +1703,7 @@ this.flowLayoutPanel5.Size = new System.Drawing.Size(1145, 25); this.flowLayoutPanel5.TabIndex = 25; // - // dsShader + // tcsShader // this.tcsShader.Anchor = System.Windows.Forms.AnchorStyles.Left; this.tcsShader.AutoSize = true; @@ -1716,7 +1713,7 @@ this.tcsShader.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); this.tcsShader.Location = new System.Drawing.Point(3, 3); this.tcsShader.MinimumSize = new System.Drawing.Size(300, 2); - this.tcsShader.Name = "dsShader"; + this.tcsShader.Name = "tcsShader"; this.tcsShader.Size = new System.Drawing.Size(300, 15); this.tcsShader.TabIndex = 24; this.tcsShader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -1724,12 +1721,12 @@ this.tcsShader.MouseEnter += new System.EventHandler(this.shaderCog_MouseEnter); this.tcsShader.MouseLeave += new System.EventHandler(this.shaderCog_MouseLeave); // - // dsShaderCog + // tcsShaderCog // this.tcsShaderCog.Cursor = System.Windows.Forms.Cursors.Hand; this.tcsShaderCog.Image = global::renderdocui.Properties.Resources.action; this.tcsShaderCog.Location = new System.Drawing.Point(309, 3); - this.tcsShaderCog.Name = "dsShaderCog"; + this.tcsShaderCog.Name = "tcsShaderCog"; this.tcsShaderCog.Size = new System.Drawing.Size(16, 16); this.tcsShaderCog.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; this.tcsShaderCog.TabIndex = 25; @@ -1763,7 +1760,7 @@ this.groupBox17.TabStop = false; this.groupBox17.Text = "Class Instances"; // - // dsClasses + // tcsClasses // treeListColumn72.AutoSizeMinSize = 0; treeListColumn72.Width = 50; @@ -1779,7 +1776,7 @@ this.tcsClasses.Cursor = System.Windows.Forms.Cursors.Arrow; this.tcsClasses.Dock = System.Windows.Forms.DockStyle.Fill; this.tcsClasses.Location = new System.Drawing.Point(3, 16); - this.tcsClasses.Name = "dsClasses"; + this.tcsClasses.Name = "tcsClasses"; this.tcsClasses.RowOptions.ItemHeight = 20; this.tcsClasses.RowOptions.ShowHeader = false; this.tcsClasses.Size = new System.Drawing.Size(1145, 116); @@ -1803,7 +1800,7 @@ this.groupBox18.TabStop = false; this.groupBox18.Text = "Resources"; // - // dsResources + // tcsResources // treeListColumn75.AutoSizeMinSize = 0; treeListColumn75.Width = 120; @@ -1839,7 +1836,7 @@ this.tcsResources.GridLineColour = System.Drawing.SystemColors.ControlDark; this.tcsResources.Location = new System.Drawing.Point(3, 16); this.tcsResources.MultiSelect = false; - this.tcsResources.Name = "dsResources"; + this.tcsResources.Name = "tcsResources"; this.tcsResources.RowOptions.HoverHighlight = true; this.tcsResources.RowOptions.ItemHeight = 20; this.tcsResources.RowOptions.ShowHeader = false; @@ -1867,7 +1864,7 @@ this.groupBox20.TabStop = false; this.groupBox20.Text = "Samplers"; // - // dsSamplers + // tcsSamplers // treeListColumn84.AutoSizeMinSize = 0; treeListColumn84.Width = 120; @@ -1903,7 +1900,7 @@ this.tcsSamplers.GridLineColour = System.Drawing.SystemColors.ControlDark; this.tcsSamplers.Location = new System.Drawing.Point(3, 16); this.tcsSamplers.MultiSelect = false; - this.tcsSamplers.Name = "dsSamplers"; + this.tcsSamplers.Name = "tcsSamplers"; this.tcsSamplers.RowOptions.HoverHighlight = true; this.tcsSamplers.RowOptions.ItemHeight = 20; this.tcsSamplers.RowOptions.ShowHeader = false; @@ -1929,7 +1926,7 @@ this.groupBox21.TabStop = false; this.groupBox21.Text = "Constant Buffers"; // - // dsCBuffers + // tcsCBuffers // treeListColumn93.AutoSizeMinSize = 0; treeListColumn93.Width = 120; @@ -1959,7 +1956,7 @@ this.tcsCBuffers.GridLineColour = System.Drawing.SystemColors.ControlDark; this.tcsCBuffers.Location = new System.Drawing.Point(3, 16); this.tcsCBuffers.MultiSelect = false; - this.tcsCBuffers.Name = "dsCBuffers"; + this.tcsCBuffers.Name = "tcsCBuffers"; this.tcsCBuffers.RowOptions.HoverHighlight = true; this.tcsCBuffers.RowOptions.ItemHeight = 20; this.tcsCBuffers.RowOptions.ShowHeader = false; @@ -2412,17 +2409,11 @@ this.tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); this.tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); this.tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 598F)); - this.tableLayoutPanel8.Controls.Add(this.forcedSampleCount, 7, 1); - this.tableLayoutPanel8.Controls.Add(this.label14, 6, 1); + this.tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 681F)); this.tableLayoutPanel8.Controls.Add(this.frontCCW, 5, 0); this.tableLayoutPanel8.Controls.Add(this.cullMode, 3, 0); this.tableLayoutPanel8.Controls.Add(label1, 0, 1); - this.tableLayoutPanel8.Controls.Add(this.label2, 2, 1); - this.tableLayoutPanel8.Controls.Add(this.label5, 4, 1); this.tableLayoutPanel8.Controls.Add(this.depthBias, 1, 1); - this.tableLayoutPanel8.Controls.Add(this.depthBiasClamp, 3, 1); - this.tableLayoutPanel8.Controls.Add(this.slopeScaledBias, 5, 1); this.tableLayoutPanel8.Controls.Add(label15, 0, 0); this.tableLayoutPanel8.Controls.Add(label16, 2, 0); this.tableLayoutPanel8.Controls.Add(label17, 4, 0); @@ -2435,6 +2426,8 @@ this.tableLayoutPanel8.Controls.Add(this.scissorEnable, 3, 2); this.tableLayoutPanel8.Controls.Add(this.lineAAEnable, 7, 2); this.tableLayoutPanel8.Controls.Add(this.label23, 6, 2); + this.tableLayoutPanel8.Controls.Add(this.slopeScaledBias, 3, 1); + this.tableLayoutPanel8.Controls.Add(this.label5, 2, 1); this.tableLayoutPanel8.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel8.Location = new System.Drawing.Point(3, 16); this.tableLayoutPanel8.Name = "tableLayoutPanel8"; @@ -2446,29 +2439,6 @@ this.tableLayoutPanel8.Size = new System.Drawing.Size(1145, 78); this.tableLayoutPanel8.TabIndex = 0; // - // forcedSampleCount - // - this.forcedSampleCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.forcedSampleCount.AutoSize = true; - this.forcedSampleCount.BackColor = System.Drawing.Color.Transparent; - this.forcedSampleCount.Font = new System.Drawing.Font("Tahoma", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.forcedSampleCount.Location = new System.Drawing.Point(539, 28); - this.forcedSampleCount.Name = "forcedSampleCount"; - this.forcedSampleCount.Size = new System.Drawing.Size(18, 19); - this.forcedSampleCount.TabIndex = 24; - this.forcedSampleCount.Text = "0"; - this.forcedSampleCount.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // label14 - // - this.label14.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(420, 31); - this.label14.Name = "label14"; - this.label14.Size = new System.Drawing.Size(112, 13); - this.label14.TabIndex = 23; - this.label14.Text = "Forced Sample Count:"; - // // frontCCW // this.frontCCW.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); @@ -2501,26 +2471,6 @@ label1.TabIndex = 0; label1.Text = "Depth Bias:"; // - // label2 - // - this.label2.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(124, 31); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(94, 13); - this.label2.TabIndex = 1; - this.label2.Text = "Depth Bias Clamp:"; - // - // label5 - // - this.label5.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(278, 31); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(96, 13); - this.label5.TabIndex = 2; - this.label5.Text = "Slope-Scaled Bias:"; - // // depthBias // this.depthBias.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); @@ -2534,32 +2484,6 @@ this.depthBias.Text = "0"; this.depthBias.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // - // depthBiasClamp - // - this.depthBiasClamp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.depthBiasClamp.AutoSize = true; - this.depthBiasClamp.BackColor = System.Drawing.Color.Transparent; - this.depthBiasClamp.Font = new System.Drawing.Font("Tahoma", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.depthBiasClamp.Location = new System.Drawing.Point(225, 28); - this.depthBiasClamp.Name = "depthBiasClamp"; - this.depthBiasClamp.Size = new System.Drawing.Size(46, 19); - this.depthBiasClamp.TabIndex = 4; - this.depthBiasClamp.Text = "0.0"; - this.depthBiasClamp.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // slopeScaledBias - // - this.slopeScaledBias.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.slopeScaledBias.AutoSize = true; - this.slopeScaledBias.BackColor = System.Drawing.Color.Transparent; - this.slopeScaledBias.Font = new System.Drawing.Font("Tahoma", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.slopeScaledBias.Location = new System.Drawing.Point(381, 28); - this.slopeScaledBias.Name = "slopeScaledBias"; - this.slopeScaledBias.Size = new System.Drawing.Size(32, 19); - this.slopeScaledBias.TabIndex = 5; - this.slopeScaledBias.Text = "0.0"; - this.slopeScaledBias.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // // label15 // label15.Anchor = System.Windows.Forms.AnchorStyles.Right; @@ -2685,6 +2609,29 @@ this.label23.TabIndex = 12; this.label23.Text = "Line AA:"; // + // slopeScaledBias + // + this.slopeScaledBias.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.slopeScaledBias.AutoSize = true; + this.slopeScaledBias.BackColor = System.Drawing.Color.Transparent; + this.slopeScaledBias.Font = new System.Drawing.Font("Tahoma", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.slopeScaledBias.Location = new System.Drawing.Point(227, 28); + this.slopeScaledBias.Name = "slopeScaledBias"; + this.slopeScaledBias.Size = new System.Drawing.Size(46, 19); + this.slopeScaledBias.TabIndex = 5; + this.slopeScaledBias.Text = "0.0"; + this.slopeScaledBias.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label5 + // + this.label5.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(124, 31); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(96, 13); + this.label5.TabIndex = 2; + this.label5.Text = "Slope-Scaled Bias:"; + // // groupBox32 // this.groupBox32.Controls.Add(this.viewports); @@ -2761,12 +2708,15 @@ treeListColumn144.AutoSize = true; treeListColumn144.AutoSizeMinSize = 50; treeListColumn144.Width = 50; + treeListColumn145.AutoSizeMinSize = 0; + treeListColumn145.Width = 50; this.scissors.Columns.AddRange(new TreelistView.TreeListColumn[] { treeListColumn140, treeListColumn141, treeListColumn142, treeListColumn143, - treeListColumn144}); + treeListColumn144, + treeListColumn145}); this.scissors.Cursor = System.Windows.Forms.Cursors.Arrow; this.scissors.Dock = System.Windows.Forms.DockStyle.Fill; this.scissors.GridLineColour = System.Drawing.SystemColors.ControlDark; @@ -2849,7 +2799,7 @@ this.flowLayoutPanel1.Size = new System.Drawing.Size(1145, 25); this.flowLayoutPanel1.TabIndex = 25; // - // psShader + // fsShader // this.fsShader.Anchor = System.Windows.Forms.AnchorStyles.Left; this.fsShader.AutoSize = true; @@ -2859,7 +2809,7 @@ this.fsShader.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); this.fsShader.Location = new System.Drawing.Point(3, 3); this.fsShader.MinimumSize = new System.Drawing.Size(300, 2); - this.fsShader.Name = "psShader"; + this.fsShader.Name = "fsShader"; this.fsShader.Size = new System.Drawing.Size(300, 15); this.fsShader.TabIndex = 24; this.fsShader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -2867,12 +2817,12 @@ this.fsShader.MouseEnter += new System.EventHandler(this.shaderCog_MouseEnter); this.fsShader.MouseLeave += new System.EventHandler(this.shaderCog_MouseLeave); // - // psShaderCog + // fsShaderCog // this.fsShaderCog.Cursor = System.Windows.Forms.Cursors.Hand; this.fsShaderCog.Image = global::renderdocui.Properties.Resources.action; this.fsShaderCog.Location = new System.Drawing.Point(309, 3); - this.fsShaderCog.Name = "psShaderCog"; + this.fsShaderCog.Name = "fsShaderCog"; this.fsShaderCog.Size = new System.Drawing.Size(16, 16); this.fsShaderCog.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; this.fsShaderCog.TabIndex = 25; @@ -2906,23 +2856,23 @@ this.groupBox19.TabStop = false; this.groupBox19.Text = "Class Instances"; // - // psClasses + // fsClasses // - treeListColumn145.AutoSizeMinSize = 0; - treeListColumn145.Width = 50; treeListColumn146.AutoSizeMinSize = 0; - treeListColumn146.Width = 200; - treeListColumn147.AutoSize = true; - treeListColumn147.AutoSizeMinSize = 50; - treeListColumn147.Width = 60; + treeListColumn146.Width = 50; + treeListColumn147.AutoSizeMinSize = 0; + treeListColumn147.Width = 200; + treeListColumn148.AutoSize = true; + treeListColumn148.AutoSizeMinSize = 50; + treeListColumn148.Width = 60; this.fsClasses.Columns.AddRange(new TreelistView.TreeListColumn[] { - treeListColumn145, treeListColumn146, - treeListColumn147}); + treeListColumn147, + treeListColumn148}); this.fsClasses.Cursor = System.Windows.Forms.Cursors.Arrow; this.fsClasses.Dock = System.Windows.Forms.DockStyle.Fill; this.fsClasses.Location = new System.Drawing.Point(3, 16); - this.fsClasses.Name = "psClasses"; + this.fsClasses.Name = "fsClasses"; this.fsClasses.RowOptions.ItemHeight = 20; this.fsClasses.RowOptions.ShowHeader = false; this.fsClasses.Size = new System.Drawing.Size(1145, 116); @@ -2946,29 +2896,28 @@ this.groupBox28.TabStop = false; this.groupBox28.Text = "Resources"; // - // psResources + // fsResources // - treeListColumn148.AutoSizeMinSize = 0; - treeListColumn148.Width = 120; - treeListColumn149.AutoSize = true; - treeListColumn149.AutoSizeMinSize = 150; - treeListColumn149.Width = 50; - treeListColumn150.AutoSizeMinSize = 0; - treeListColumn150.Width = 75; + treeListColumn149.AutoSizeMinSize = 0; + treeListColumn149.Width = 120; + treeListColumn150.AutoSize = true; + treeListColumn150.AutoSizeMinSize = 150; + treeListColumn150.Width = 50; treeListColumn151.AutoSizeMinSize = 0; - treeListColumn151.Width = 50; + treeListColumn151.Width = 75; treeListColumn152.AutoSizeMinSize = 0; treeListColumn152.Width = 50; treeListColumn153.AutoSizeMinSize = 0; treeListColumn153.Width = 50; treeListColumn154.AutoSizeMinSize = 0; - treeListColumn154.Width = 75; + treeListColumn154.Width = 50; treeListColumn155.AutoSizeMinSize = 0; - treeListColumn155.Width = 200; + treeListColumn155.Width = 75; treeListColumn156.AutoSizeMinSize = 0; - treeListColumn156.Width = 25; + treeListColumn156.Width = 200; + treeListColumn157.AutoSizeMinSize = 0; + treeListColumn157.Width = 25; this.fsResources.Columns.AddRange(new TreelistView.TreeListColumn[] { - treeListColumn148, treeListColumn149, treeListColumn150, treeListColumn151, @@ -2976,13 +2925,14 @@ treeListColumn153, treeListColumn154, treeListColumn155, - treeListColumn156}); + treeListColumn156, + treeListColumn157}); this.fsResources.Cursor = System.Windows.Forms.Cursors.Arrow; this.fsResources.Dock = System.Windows.Forms.DockStyle.Fill; this.fsResources.GridLineColour = System.Drawing.SystemColors.ControlDark; this.fsResources.Location = new System.Drawing.Point(3, 16); this.fsResources.MultiSelect = false; - this.fsResources.Name = "psResources"; + this.fsResources.Name = "fsResources"; this.fsResources.RowOptions.HoverHighlight = true; this.fsResources.RowOptions.ItemHeight = 20; this.fsResources.RowOptions.ShowHeader = false; @@ -3010,29 +2960,28 @@ this.groupBox29.TabStop = false; this.groupBox29.Text = "Samplers"; // - // psSamplers + // fsSamplers // - treeListColumn157.AutoSizeMinSize = 0; - treeListColumn157.Width = 120; - treeListColumn158.AutoSizeMinSize = 100; - treeListColumn158.Width = 150; - treeListColumn159.AutoSizeMinSize = 0; - treeListColumn159.Width = 80; + treeListColumn158.AutoSizeMinSize = 0; + treeListColumn158.Width = 120; + treeListColumn159.AutoSizeMinSize = 100; + treeListColumn159.Width = 150; treeListColumn160.AutoSizeMinSize = 0; - treeListColumn160.Width = 100; + treeListColumn160.Width = 80; treeListColumn161.AutoSizeMinSize = 0; - treeListColumn161.Width = 150; + treeListColumn161.Width = 100; treeListColumn162.AutoSizeMinSize = 0; - treeListColumn162.Width = 60; + treeListColumn162.Width = 150; treeListColumn163.AutoSizeMinSize = 0; treeListColumn163.Width = 60; treeListColumn164.AutoSizeMinSize = 0; treeListColumn164.Width = 60; - treeListColumn165.AutoSize = true; - treeListColumn165.AutoSizeMinSize = 50; - treeListColumn165.Width = 50; + treeListColumn165.AutoSizeMinSize = 0; + treeListColumn165.Width = 60; + treeListColumn166.AutoSize = true; + treeListColumn166.AutoSizeMinSize = 50; + treeListColumn166.Width = 50; this.fsSamplers.Columns.AddRange(new TreelistView.TreeListColumn[] { - treeListColumn157, treeListColumn158, treeListColumn159, treeListColumn160, @@ -3040,13 +2989,14 @@ treeListColumn162, treeListColumn163, treeListColumn164, - treeListColumn165}); + treeListColumn165, + treeListColumn166}); this.fsSamplers.Cursor = System.Windows.Forms.Cursors.Arrow; this.fsSamplers.Dock = System.Windows.Forms.DockStyle.Fill; this.fsSamplers.GridLineColour = System.Drawing.SystemColors.ControlDark; this.fsSamplers.Location = new System.Drawing.Point(3, 16); this.fsSamplers.MultiSelect = false; - this.fsSamplers.Name = "psSamplers"; + this.fsSamplers.Name = "fsSamplers"; this.fsSamplers.RowOptions.HoverHighlight = true; this.fsSamplers.RowOptions.ItemHeight = 20; this.fsSamplers.RowOptions.ShowHeader = false; @@ -3072,37 +3022,37 @@ this.groupBox30.TabStop = false; this.groupBox30.Text = "Constant Buffers"; // - // psCBuffers + // fsCBuffers // - treeListColumn166.AutoSizeMinSize = 0; - treeListColumn166.Width = 120; - treeListColumn167.AutoSize = true; - treeListColumn167.AutoSizeMinSize = 100; - treeListColumn167.Width = 50; - treeListColumn168.AutoSizeMinSize = 0; - treeListColumn168.Width = 75; + treeListColumn167.AutoSizeMinSize = 0; + treeListColumn167.Width = 120; + treeListColumn168.AutoSize = true; + treeListColumn168.AutoSizeMinSize = 100; + treeListColumn168.Width = 50; treeListColumn169.AutoSizeMinSize = 0; treeListColumn169.Width = 75; treeListColumn170.AutoSizeMinSize = 0; - treeListColumn170.Width = 120; + treeListColumn170.Width = 75; treeListColumn171.AutoSizeMinSize = 0; - treeListColumn171.Width = 200; + treeListColumn171.Width = 120; treeListColumn172.AutoSizeMinSize = 0; - treeListColumn172.Width = 25; + treeListColumn172.Width = 200; + treeListColumn173.AutoSizeMinSize = 0; + treeListColumn173.Width = 25; this.fsCBuffers.Columns.AddRange(new TreelistView.TreeListColumn[] { - treeListColumn166, treeListColumn167, treeListColumn168, treeListColumn169, treeListColumn170, treeListColumn171, - treeListColumn172}); + treeListColumn172, + treeListColumn173}); this.fsCBuffers.Cursor = System.Windows.Forms.Cursors.Arrow; this.fsCBuffers.Dock = System.Windows.Forms.DockStyle.Fill; this.fsCBuffers.GridLineColour = System.Drawing.SystemColors.ControlDark; this.fsCBuffers.Location = new System.Drawing.Point(3, 16); this.fsCBuffers.MultiSelect = false; - this.fsCBuffers.Name = "psCBuffers"; + this.fsCBuffers.Name = "fsCBuffers"; this.fsCBuffers.RowOptions.HoverHighlight = true; this.fsCBuffers.RowOptions.ItemHeight = 20; this.fsCBuffers.RowOptions.ShowHeader = false; @@ -3170,27 +3120,26 @@ // // targetOutputs // - treeListColumn173.AutoSizeMinSize = 0; - treeListColumn173.Width = 50; - treeListColumn174.AutoSize = true; - treeListColumn174.AutoSizeMinSize = 150; + treeListColumn174.AutoSizeMinSize = 0; treeListColumn174.Width = 50; - treeListColumn175.AutoSizeMinSize = 0; - treeListColumn175.Width = 75; + treeListColumn175.AutoSize = true; + treeListColumn175.AutoSizeMinSize = 150; + treeListColumn175.Width = 50; treeListColumn176.AutoSizeMinSize = 0; - treeListColumn176.Width = 50; + treeListColumn176.Width = 75; treeListColumn177.AutoSizeMinSize = 0; treeListColumn177.Width = 50; treeListColumn178.AutoSizeMinSize = 0; treeListColumn178.Width = 50; treeListColumn179.AutoSizeMinSize = 0; - treeListColumn179.Width = 75; + treeListColumn179.Width = 50; treeListColumn180.AutoSizeMinSize = 0; - treeListColumn180.Width = 200; + treeListColumn180.Width = 75; treeListColumn181.AutoSizeMinSize = 0; - treeListColumn181.Width = 25; + treeListColumn181.Width = 200; + treeListColumn182.AutoSizeMinSize = 0; + treeListColumn182.Width = 25; this.targetOutputs.Columns.AddRange(new TreelistView.TreeListColumn[] { - treeListColumn173, treeListColumn174, treeListColumn175, treeListColumn176, @@ -3198,7 +3147,8 @@ treeListColumn178, treeListColumn179, treeListColumn180, - treeListColumn181}); + treeListColumn181, + treeListColumn182}); this.targetOutputs.Cursor = System.Windows.Forms.Cursors.Arrow; this.targetOutputs.Dock = System.Windows.Forms.DockStyle.Fill; this.targetOutputs.GridLineColour = System.Drawing.SystemColors.ControlDark; @@ -3233,31 +3183,30 @@ // // blendOperations // - treeListColumn182.AutoSizeMinSize = 0; - treeListColumn182.Width = 50; treeListColumn183.AutoSizeMinSize = 0; treeListColumn183.Width = 50; treeListColumn184.AutoSizeMinSize = 0; treeListColumn184.Width = 50; treeListColumn185.AutoSizeMinSize = 0; - treeListColumn185.Width = 100; + treeListColumn185.Width = 50; treeListColumn186.AutoSizeMinSize = 0; treeListColumn186.Width = 100; treeListColumn187.AutoSizeMinSize = 0; - treeListColumn187.Width = 135; + treeListColumn187.Width = 100; treeListColumn188.AutoSizeMinSize = 0; - treeListColumn188.Width = 100; + treeListColumn188.Width = 135; treeListColumn189.AutoSizeMinSize = 0; treeListColumn189.Width = 100; treeListColumn190.AutoSizeMinSize = 0; treeListColumn190.Width = 100; treeListColumn191.AutoSizeMinSize = 0; - treeListColumn191.Width = 80; - treeListColumn192.AutoSize = true; - treeListColumn192.AutoSizeMinSize = 60; - treeListColumn192.Width = 60; + treeListColumn191.Width = 100; + treeListColumn192.AutoSizeMinSize = 0; + treeListColumn192.Width = 80; + treeListColumn193.AutoSize = true; + treeListColumn193.AutoSizeMinSize = 60; + treeListColumn193.Width = 60; this.blendOperations.Columns.AddRange(new TreelistView.TreeListColumn[] { - treeListColumn182, treeListColumn183, treeListColumn184, treeListColumn185, @@ -3267,7 +3216,8 @@ treeListColumn189, treeListColumn190, treeListColumn191, - treeListColumn192}); + treeListColumn192, + treeListColumn193}); this.blendOperations.Cursor = System.Windows.Forms.Cursors.Arrow; this.blendOperations.Dock = System.Windows.Forms.DockStyle.Fill; this.blendOperations.GridLineColour = System.Drawing.SystemColors.ControlDark; @@ -3684,23 +3634,23 @@ // // stencilFuncs // - treeListColumn193.AutoSizeMinSize = 0; - treeListColumn193.Width = 50; treeListColumn194.AutoSizeMinSize = 0; - treeListColumn194.Width = 60; + treeListColumn194.Width = 50; treeListColumn195.AutoSizeMinSize = 0; - treeListColumn195.Width = 75; + treeListColumn195.Width = 60; treeListColumn196.AutoSizeMinSize = 0; treeListColumn196.Width = 75; - treeListColumn197.AutoSize = true; - treeListColumn197.AutoSizeMinSize = 50; + treeListColumn197.AutoSizeMinSize = 0; treeListColumn197.Width = 75; + treeListColumn198.AutoSize = true; + treeListColumn198.AutoSizeMinSize = 50; + treeListColumn198.Width = 75; this.stencilFuncs.Columns.AddRange(new TreelistView.TreeListColumn[] { - treeListColumn193, treeListColumn194, treeListColumn195, treeListColumn196, - treeListColumn197}); + treeListColumn197, + treeListColumn198}); this.stencilFuncs.Cursor = System.Windows.Forms.Cursors.Arrow; this.stencilFuncs.Location = new System.Drawing.Point(3, 33); this.stencilFuncs.Name = "stencilFuncs"; @@ -3770,27 +3720,26 @@ // // csUAVs // - treeListColumn198.AutoSizeMinSize = 0; - treeListColumn198.Width = 120; - treeListColumn199.AutoSize = true; - treeListColumn199.AutoSizeMinSize = 150; - treeListColumn199.Width = 50; - treeListColumn200.AutoSizeMinSize = 0; - treeListColumn200.Width = 75; + treeListColumn199.AutoSizeMinSize = 0; + treeListColumn199.Width = 120; + treeListColumn200.AutoSize = true; + treeListColumn200.AutoSizeMinSize = 150; + treeListColumn200.Width = 50; treeListColumn201.AutoSizeMinSize = 0; - treeListColumn201.Width = 50; + treeListColumn201.Width = 75; treeListColumn202.AutoSizeMinSize = 0; treeListColumn202.Width = 50; treeListColumn203.AutoSizeMinSize = 0; treeListColumn203.Width = 50; treeListColumn204.AutoSizeMinSize = 0; - treeListColumn204.Width = 75; + treeListColumn204.Width = 50; treeListColumn205.AutoSizeMinSize = 0; - treeListColumn205.Width = 200; + treeListColumn205.Width = 75; treeListColumn206.AutoSizeMinSize = 0; - treeListColumn206.Width = 25; + treeListColumn206.Width = 200; + treeListColumn207.AutoSizeMinSize = 0; + treeListColumn207.Width = 25; this.csUAVs.Columns.AddRange(new TreelistView.TreeListColumn[] { - treeListColumn198, treeListColumn199, treeListColumn200, treeListColumn201, @@ -3798,7 +3747,8 @@ treeListColumn203, treeListColumn204, treeListColumn205, - treeListColumn206}); + treeListColumn206, + treeListColumn207}); this.csUAVs.Cursor = System.Windows.Forms.Cursors.Arrow; this.csUAVs.Dock = System.Windows.Forms.DockStyle.Fill; this.csUAVs.GridLineColour = System.Drawing.SystemColors.ControlDark; @@ -3834,17 +3784,17 @@ // // csClasses // - treeListColumn207.AutoSizeMinSize = 0; - treeListColumn207.Width = 50; treeListColumn208.AutoSizeMinSize = 0; - treeListColumn208.Width = 200; - treeListColumn209.AutoSize = true; - treeListColumn209.AutoSizeMinSize = 50; - treeListColumn209.Width = 60; + treeListColumn208.Width = 50; + treeListColumn209.AutoSizeMinSize = 0; + treeListColumn209.Width = 200; + treeListColumn210.AutoSize = true; + treeListColumn210.AutoSizeMinSize = 50; + treeListColumn210.Width = 60; this.csClasses.Columns.AddRange(new TreelistView.TreeListColumn[] { - treeListColumn207, treeListColumn208, - treeListColumn209}); + treeListColumn209, + treeListColumn210}); this.csClasses.Cursor = System.Windows.Forms.Cursors.Arrow; this.csClasses.Dock = System.Windows.Forms.DockStyle.Fill; this.csClasses.Location = new System.Drawing.Point(3, 16); @@ -4045,27 +3995,26 @@ // // csResources // - treeListColumn210.AutoSizeMinSize = 0; - treeListColumn210.Width = 120; - treeListColumn211.AutoSize = true; - treeListColumn211.AutoSizeMinSize = 150; - treeListColumn211.Width = 50; - treeListColumn212.AutoSizeMinSize = 0; - treeListColumn212.Width = 75; + treeListColumn211.AutoSizeMinSize = 0; + treeListColumn211.Width = 120; + treeListColumn212.AutoSize = true; + treeListColumn212.AutoSizeMinSize = 150; + treeListColumn212.Width = 50; treeListColumn213.AutoSizeMinSize = 0; - treeListColumn213.Width = 50; + treeListColumn213.Width = 75; treeListColumn214.AutoSizeMinSize = 0; treeListColumn214.Width = 50; treeListColumn215.AutoSizeMinSize = 0; treeListColumn215.Width = 50; treeListColumn216.AutoSizeMinSize = 0; - treeListColumn216.Width = 75; + treeListColumn216.Width = 50; treeListColumn217.AutoSizeMinSize = 0; - treeListColumn217.Width = 200; + treeListColumn217.Width = 75; treeListColumn218.AutoSizeMinSize = 0; - treeListColumn218.Width = 25; + treeListColumn218.Width = 200; + treeListColumn219.AutoSizeMinSize = 0; + treeListColumn219.Width = 25; this.csResources.Columns.AddRange(new TreelistView.TreeListColumn[] { - treeListColumn210, treeListColumn211, treeListColumn212, treeListColumn213, @@ -4073,7 +4022,8 @@ treeListColumn215, treeListColumn216, treeListColumn217, - treeListColumn218}); + treeListColumn218, + treeListColumn219}); this.csResources.Cursor = System.Windows.Forms.Cursors.Arrow; this.csResources.Dock = System.Windows.Forms.DockStyle.Fill; this.csResources.GridLineColour = System.Drawing.SystemColors.ControlDark; @@ -4108,27 +4058,26 @@ // // csSamplers // - treeListColumn219.AutoSizeMinSize = 0; - treeListColumn219.Width = 120; - treeListColumn220.AutoSizeMinSize = 100; - treeListColumn220.Width = 150; - treeListColumn221.AutoSizeMinSize = 0; - treeListColumn221.Width = 80; + treeListColumn220.AutoSizeMinSize = 0; + treeListColumn220.Width = 120; + treeListColumn221.AutoSizeMinSize = 100; + treeListColumn221.Width = 150; treeListColumn222.AutoSizeMinSize = 0; - treeListColumn222.Width = 100; + treeListColumn222.Width = 80; treeListColumn223.AutoSizeMinSize = 0; - treeListColumn223.Width = 150; + treeListColumn223.Width = 100; treeListColumn224.AutoSizeMinSize = 0; - treeListColumn224.Width = 60; + treeListColumn224.Width = 150; treeListColumn225.AutoSizeMinSize = 0; treeListColumn225.Width = 60; treeListColumn226.AutoSizeMinSize = 0; treeListColumn226.Width = 60; - treeListColumn227.AutoSize = true; - treeListColumn227.AutoSizeMinSize = 50; - treeListColumn227.Width = 50; + treeListColumn227.AutoSizeMinSize = 0; + treeListColumn227.Width = 60; + treeListColumn228.AutoSize = true; + treeListColumn228.AutoSizeMinSize = 50; + treeListColumn228.Width = 50; this.csSamplers.Columns.AddRange(new TreelistView.TreeListColumn[] { - treeListColumn219, treeListColumn220, treeListColumn221, treeListColumn222, @@ -4136,7 +4085,8 @@ treeListColumn224, treeListColumn225, treeListColumn226, - treeListColumn227}); + treeListColumn227, + treeListColumn228}); this.csSamplers.Cursor = System.Windows.Forms.Cursors.Arrow; this.csSamplers.Dock = System.Windows.Forms.DockStyle.Fill; this.csSamplers.GridLineColour = System.Drawing.SystemColors.ControlDark; @@ -4169,29 +4119,29 @@ // // csCBuffers // - treeListColumn228.AutoSizeMinSize = 0; - treeListColumn228.Width = 120; - treeListColumn229.AutoSize = true; - treeListColumn229.AutoSizeMinSize = 100; - treeListColumn229.Width = 50; - treeListColumn230.AutoSizeMinSize = 0; - treeListColumn230.Width = 75; + treeListColumn229.AutoSizeMinSize = 0; + treeListColumn229.Width = 120; + treeListColumn230.AutoSize = true; + treeListColumn230.AutoSizeMinSize = 100; + treeListColumn230.Width = 50; treeListColumn231.AutoSizeMinSize = 0; treeListColumn231.Width = 75; treeListColumn232.AutoSizeMinSize = 0; - treeListColumn232.Width = 120; + treeListColumn232.Width = 75; treeListColumn233.AutoSizeMinSize = 0; - treeListColumn233.Width = 200; + treeListColumn233.Width = 120; treeListColumn234.AutoSizeMinSize = 0; - treeListColumn234.Width = 25; + treeListColumn234.Width = 200; + treeListColumn235.AutoSizeMinSize = 0; + treeListColumn235.Width = 25; this.csCBuffers.Columns.AddRange(new TreelistView.TreeListColumn[] { - treeListColumn228, treeListColumn229, treeListColumn230, treeListColumn231, treeListColumn232, treeListColumn233, - treeListColumn234}); + treeListColumn234, + treeListColumn235}); this.csCBuffers.Cursor = System.Windows.Forms.Cursors.Arrow; this.csCBuffers.Dock = System.Windows.Forms.DockStyle.Fill; this.csCBuffers.GridLineColour = System.Drawing.SystemColors.ControlDark; @@ -4450,10 +4400,8 @@ private TreelistView.TreeListView inputLayouts; private System.Windows.Forms.GroupBox groupBox31; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel8; - private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label5; private System.Windows.Forms.Label depthBias; - private System.Windows.Forms.Label depthBiasClamp; private System.Windows.Forms.Label slopeScaledBias; private System.Windows.Forms.Label label18; private System.Windows.Forms.Label label19; @@ -4608,8 +4556,6 @@ private System.Windows.Forms.PictureBox gsShaderEdit; private System.Windows.Forms.PictureBox psShaderEdit; private System.Windows.Forms.PictureBox csShaderEdit; - private System.Windows.Forms.Label forcedSampleCount; - private System.Windows.Forms.Label label14; private System.Windows.Forms.PictureBox meshView; } } \ No newline at end of file diff --git a/renderdocui/Windows/PipelineState/GLPipelineStateViewer.cs b/renderdocui/Windows/PipelineState/GLPipelineStateViewer.cs index b0ff9f133..8f4dfb70d 100644 --- a/renderdocui/Windows/PipelineState/GLPipelineStateViewer.cs +++ b/renderdocui/Windows/PipelineState/GLPipelineStateViewer.cs @@ -118,8 +118,7 @@ namespace renderdocui.Windows.PipelineState multisampleEnable.Image = tick; depthClip.Image = tick; - depthBias.Text = "0"; - depthBiasClamp.Text = "0.0"; + depthBias.Text = "0.0"; slopeScaledBias.Text = "0.0"; viewports.Nodes.Clear(); @@ -613,14 +612,63 @@ namespace renderdocui.Windows.PipelineState viewports.BeginUpdate(); viewports.Nodes.Clear(); + if (state.m_RS.Viewports != null) + { + int i = 0; + foreach (var v in state.m_RS.Viewports) + { + if (v.Width != v.Height || v.Width != 0 || v.Height != 0 || showEmpty.Checked) + { + var node = viewports.Nodes.Add(new object[] { i, v.Left, v.Bottom, v.Width, v.Height, v.MinDepth, v.MaxDepth }); + + if (v.Width == v.Height && v.Width == 0 && v.Height == 0) + EmptyRow(node); + } + + i++; + } + } viewports.NodesSelection.Clear(); viewports.EndUpdate(); + bool anyScissorEnable = false; + scissors.BeginUpdate(); scissors.Nodes.Clear(); + if (state.m_RS.Scissors != null) + { + int i = 0; + foreach (var s in state.m_RS.Scissors) + { + if (s.Width != 0 || s.Height != 0 || showEmpty.Checked) + { + var node = scissors.Nodes.Add(new object[] { i, s.Left, s.Bottom, s.Width, s.Height, s.Enabled }); + + if (s.Width == 0 && s.Height == 0) + EmptyRow(node); + } + + if (s.Enabled) + anyScissorEnable = true; + + i++; + } + } scissors.NodesSelection.Clear(); scissors.EndUpdate(); + fillMode.Text = state.m_RS.m_State.FillMode.ToString(); + cullMode.Text = state.m_RS.m_State.CullMode.ToString(); + frontCCW.Image = state.m_RS.m_State.FrontCCW ? tick : cross; + + scissorEnable.Image = anyScissorEnable ? tick : cross; + lineAAEnable.Image = state.m_RS.m_State.AntialiasedLineEnable ? tick : cross; + multisampleEnable.Image = state.m_RS.m_State.MultisampleEnable ? tick : cross; + + depthClip.Image = state.m_RS.m_State.DepthClamp ? cross : tick; + depthBias.Text = Formatter.Format(state.m_RS.m_State.DepthBias); + slopeScaledBias.Text = Formatter.Format(state.m_RS.m_State.SlopeScaledDepthBias); + //////////////////////////////////////////////// // Output Merger From baa530eb5f80e2ee4461907fc28487a20f25e8c9 Mon Sep 17 00:00:00 2001 From: valeriog Date: Fri, 31 Oct 2014 19:47:42 +0100 Subject: [PATCH 2/2] Add visualization of most missing OpenGL texture types (cube maps, texture arrays, stencil, 1D/3D textures, integer textures), take selected mip level into account and point sampling when required. --- renderdoc/data/glsl/debuguniforms.h | 84 ++++++++ renderdoc/data/glsl/texdisplay.frag | 293 ++++++++++++++++++++++++---- renderdoc/data/renderdoc.rc | 1 + renderdoc/data/resource.h | 1 + renderdoc/driver/gl/gl_debug.cpp | 152 +++++++++++---- renderdoc/driver/gl/gl_replay.h | 2 - renderdoc/renderdoc.vcxproj | 1 + renderdoc/renderdoc.vcxproj.filters | 3 + 8 files changed, 466 insertions(+), 71 deletions(-) create mode 100644 renderdoc/data/glsl/debuguniforms.h diff --git a/renderdoc/data/glsl/debuguniforms.h b/renderdoc/data/glsl/debuguniforms.h new file mode 100644 index 000000000..d25c95326 --- /dev/null +++ b/renderdoc/data/glsl/debuguniforms.h @@ -0,0 +1,84 @@ +/****************************************************************************** + * The MIT License (MIT) + * + * Copyright (c) 2014 Crytek + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + ******************************************************************************/ + +// use some preprocessor hacks to compile the same header in both GLSL and C++ so we can define +// classes that represent a whole cbuffer +#if defined(__cplusplus) + +#define uniform struct +#define vec2 Vec2f +#define vec3 Vec3f +#define vec4 Vec4f + +#define BINDING(b) + +#else + +#version 420 core + +#define BINDING(b) layout (binding = b, std140) + +#endif + +BINDING(0) uniform texdisplay +{ + vec2 Position; + float Scale; + float HDRMul; + + vec4 Channels; + + float RangeMinimum; + float InverseRangeSize; + float MipLevel; + int FlipY; + + vec3 TextureResolutionPS; + int OutputDisplayFormat; + + vec2 OutputRes; + int RawOutput; + float Slice; +}; + +// some constants available to both C++ and GLSL for configuring display +#define CUBEMAP_FACE_POS_X 0 +#define CUBEMAP_FACE_NEG_X 1 +#define CUBEMAP_FACE_POS_Y 2 +#define CUBEMAP_FACE_NEG_Y 3 +#define CUBEMAP_FACE_POS_Z 4 +#define CUBEMAP_FACE_NEG_Z 5 + +#define RESTYPE_TEX1D 0x1 +#define RESTYPE_TEX2D 0x2 +#define RESTYPE_TEX3D 0x3 +#define RESTYPE_TEXCUBE 0x4 +#define RESTYPE_TEX1DARRAY 0x5 +#define RESTYPE_TEX2DARRAY 0x6 +#define RESTYPE_TEXCUBEARRAY 0x7 + +#define TEXDISPLAY_TYPEMASK 0x7 +#define TEXDISPLAY_UINT_TEX 0x8 +#define TEXDISPLAY_SINT_TEX 0x10 + diff --git a/renderdoc/data/glsl/texdisplay.frag b/renderdoc/data/glsl/texdisplay.frag index 493e32cfc..fc7477cd2 100644 --- a/renderdoc/data/glsl/texdisplay.frag +++ b/renderdoc/data/glsl/texdisplay.frag @@ -22,52 +22,269 @@ * THE SOFTWARE. ******************************************************************************/ -#version 420 core +layout (binding = 1) uniform sampler1D tex1D; +layout (binding = 2) uniform sampler2D tex2D; +layout (binding = 3) uniform sampler3D tex3D; +layout (binding = 4) uniform samplerCube texCube; +layout (binding = 5) uniform sampler1DArray tex1DArray; +layout (binding = 6) uniform sampler2DArray tex2DArray; +layout (binding = 7) uniform samplerCubeArray texCubeArray; -layout (binding = 0, std140) uniform texdisplay -{ - vec2 Position; - float Scale; - float HDRMul; +layout (binding = 9) uniform usampler1D texUInt1D; +layout (binding = 10) uniform usampler2D texUInt2D; +layout (binding = 11) uniform usampler3D texUInt3D; +layout (binding = 13) uniform usampler1DArray texUInt1DArray; +layout (binding = 14) uniform usampler2DArray texUInt2DArray; - vec4 Channels; +layout (binding = 16) uniform isampler1D texSInt1D; +layout (binding = 17) uniform isampler2D texSInt2D; +layout (binding = 18) uniform isampler3D texSInt3D; +layout (binding = 20) uniform isampler1DArray texSInt1DArray; +layout (binding = 21) uniform isampler2DArray texSInt2DArray; - float RangeMinimum; - float InverseRangeSize; - float MipLevel; - int FlipY; - - vec3 TextureResolutionPS; - int OutputDisplayFormat; - - vec2 OutputRes; - int RawOutput; - float Slice; -}; - -layout (binding = 0) uniform sampler2D tex0; layout (location = 0) out vec4 color_out; +vec3 CalcCubeCoord(vec2 uv, int face) +{ + // Map UVs to [-0.5, 0.5] and rotate + uv -= vec2(0.5); + vec3 coord; + if (face == CUBEMAP_FACE_POS_X) + coord = vec3(0.5, uv.y, -uv.x); + else if (face == CUBEMAP_FACE_NEG_X) + coord = vec3(-0.5, -uv.y, uv.x); + else if (face == CUBEMAP_FACE_POS_Y) + coord = vec3(uv.x, 0.5, uv.y); + else if (face == CUBEMAP_FACE_NEG_Y) + coord = vec3(uv.x, -0.5, -uv.y); + else if (face == CUBEMAP_FACE_POS_Z) + coord = vec3(uv.x, -uv.y, 0.5); + else // face == CUBEMAP_FACE_NEG_Z + coord = vec3(-uv.x, -uv.y, -0.5); + return coord; +} + +uvec4 SampleTextureUInt4(vec2 pos, int type, bool flipY, int mipLevel, float slice) +{ + uvec4 col; + if (type == RESTYPE_TEX1D) + { + int size = textureSize(texUInt1D, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size) discard; + + col = texelFetch(texUInt1D, int(pos.x), mipLevel); + } + else if (type == RESTYPE_TEX1DARRAY) + { + ivec2 size = textureSize(texUInt1DArray, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size.x) discard; + + col = texelFetch(texUInt1DArray, ivec2(pos.x, slice), mipLevel); + } + else if (type == RESTYPE_TEX2D) + { + ivec2 size = textureSize(texUInt2D, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size.x || pos.y > size.y) discard; + + if (flipY) + pos.y = size.y - pos.y; + + col = texelFetch(texUInt2D, ivec2(pos), mipLevel); + } + else if (type == RESTYPE_TEX2DARRAY) + { + ivec3 size = textureSize(texUInt2DArray, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size.x || pos.y > size.y) discard; + + col = texelFetch(texUInt2DArray, ivec3(pos, slice), mipLevel); + } + else // if (type == RESTYPE_TEX3D) + { + ivec3 size = textureSize(texUInt3D, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size.x || pos.y > size.y) discard; + + col = texelFetch(texUInt3D, ivec3(pos, slice), mipLevel); + } + + return col; +} + +ivec4 SampleTextureSInt4(vec2 pos, int type, bool flipY, int mipLevel, float slice) +{ + ivec4 col; + if (type == RESTYPE_TEX1D) +{ + int size = textureSize(texSInt1D, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size) discard; + + col = texelFetch(texSInt1D, int(pos.x), mipLevel); + } + else if (type == RESTYPE_TEX1DARRAY) + { + ivec2 size = textureSize(texSInt1DArray, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size.x) discard; + + col = texelFetch(texSInt1DArray, ivec2(pos.x, slice), mipLevel); + } + else if (type == RESTYPE_TEX2D) + { + ivec2 size = textureSize(texSInt2D, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size.x || pos.y > size.y) discard; + + if (flipY) + pos.y = size.y - pos.y; + + col = texelFetch(texSInt2D, ivec2(pos), mipLevel); + } + else if (type == RESTYPE_TEX2DARRAY) + { + ivec3 size = textureSize(texSInt2DArray, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size.x || pos.y > size.y) discard; + + col = texelFetch(texSInt2DArray, ivec3(pos, slice), mipLevel); + } + else // if (type == RESTYPE_TEX3D) + { + ivec3 size = textureSize(texSInt3D, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size.x || pos.y > size.y) discard; + + col = texelFetch(texSInt3D, ivec3(pos, slice), mipLevel); + } + + return col; +} + + +vec4 SampleTextureFloat4(vec2 pos, int type, bool flipY, bool linearSample, int mipLevel, float slice) +{ + vec4 col; + if (type == RESTYPE_TEX1D) + { + int size = textureSize(tex1D, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size) discard; + + if (linearSample) + col = texture(tex1D, pos.x / size); + else + col = texelFetch(tex1D, int(pos.x), mipLevel); + } + else if (type == RESTYPE_TEX1DARRAY) + { + ivec2 size = textureSize(tex1DArray, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size.x) discard; + + if (linearSample) + col = texture(tex1DArray, vec2(pos.x / size.x, slice)); + else + col = texelFetch(tex1DArray, ivec2(pos.x, slice), mipLevel); + } + else if (type == RESTYPE_TEX2D) + { + ivec2 size = textureSize(tex2D, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size.x || pos.y > size.y) discard; + + if (flipY) + pos.y = size.y - pos.y; + + if (linearSample) + col = texture(tex2D, pos / size); + else + col = texelFetch(tex2D, ivec2(pos), mipLevel); + } + else if (type == RESTYPE_TEX2DARRAY) + { + ivec3 size = textureSize(tex2DArray, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size.x || pos.y > size.y) discard; + + if (flipY) + pos.y = size.y - pos.y; + + if (linearSample) + col = texture(tex2DArray, vec3(pos / size.xy, slice)); + else + col = texelFetch(tex2DArray, ivec3(pos, slice), mipLevel); + } + else if (type == RESTYPE_TEX3D) + { + ivec3 size = textureSize(tex3D, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size.x || pos.y > size.y) discard; + + if (flipY) + pos.y = size.y - pos.y; + + if (linearSample) + col = texture(tex3D, vec3(pos / size.xy, slice)); + else + col = texelFetch(tex3D, ivec3(pos, slice), mipLevel); + } + else if (type == RESTYPE_TEXCUBE) + { + ivec2 size = textureSize(texCube, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size.x || pos.y > size.y) discard; + + if (flipY) + pos.y = size.y - pos.y; + + vec3 cubeCoord = CalcCubeCoord(pos / size, int(slice)); + + if (linearSample) + col = texture(texCube, cubeCoord); + else + col = textureLod(texCube, cubeCoord, mipLevel); + } + else // type == RESTYPE_TEXCUBEARRAY + { + ivec3 size = textureSize(texCubeArray, mipLevel); + if (pos.x < 0 || pos.y < 0 || pos.x > size.x || pos.y > size.y) discard; + + if (flipY) + pos.y = size.y - pos.y; + + vec3 cubeCoord = CalcCubeCoord(pos / size.xy, int(slice) % 6); + vec4 arrayCoord = vec4(cubeCoord, int(Slice) / 6); + + if (linearSample) + col = texture(texCubeArray, arrayCoord); + else + col = textureLod(texCubeArray, arrayCoord, mipLevel); + } + + return col; +} + void main(void) { + bool uintTex = (OutputDisplayFormat & TEXDISPLAY_UINT_TEX) != 0; + bool sintTex = (OutputDisplayFormat & TEXDISPLAY_SINT_TEX) != 0; + + vec4 col; + uvec4 ucol; + ivec4 scol; + // calc screen co-ords with origin top left, modified by Position vec2 scr = vec2(gl_FragCoord.x, OutputRes.y - gl_FragCoord.y) - Position.xy; - // calc UVs in texture - vec2 uv = scr/(textureSize(tex0,0)*Scale); - - // discard if we're rendering outside input texture - if(uv.x < 0 || uv.y < 0 || uv.x > 1 || uv.y > 1) discard; - // sample the texture. - // TODO: handle uint/sint/float textures (OutputDisplayFormat). - // TODO: Use MipLevel and Slice parameters - // TODO: Sample from a point or linear sampler depending on if we're - // upscaling (point) or downscaling mip 0 (linear) - vec4 col = texture(tex0, vec2(uv.x, FlipY > 0 ? uv.y : 1.0f-uv.y)); + if (uintTex) + { + ucol = SampleTextureUInt4(scr / Scale, OutputDisplayFormat & TEXDISPLAY_TYPEMASK, FlipY == 0, int(MipLevel), Slice); + } + else if (sintTex) + { + scol = SampleTextureSInt4(scr / Scale, OutputDisplayFormat & TEXDISPLAY_TYPEMASK, FlipY == 0, int(MipLevel), Slice); + } + else + { + col = SampleTextureFloat4(scr / Scale, OutputDisplayFormat & TEXDISPLAY_TYPEMASK, FlipY == 0, (Scale < 1.0 && MipLevel == 0.0), int(MipLevel), Slice); + } if(RawOutput != 0) { + if (uintTex) + color_out = uintBitsToFloat(ucol); + else if (sintTex) + color_out = intBitsToFloat(scol); + else color_out = col; return; } @@ -75,9 +292,19 @@ void main(void) // RGBM encoding if(HDRMul > 0.0f) { - col = vec4(col.rgb * col.a * HDRMul, 1.0f); + if (uintTex) + col = vec4(ucol.rgb * ucol.a * uint(HDRMul), 1.0); + else if (sintTex) + col = vec4(scol.rgb * scol.a * int(HDRMul), 1.0); + else + col = vec4(col.rgb * col.a * HDRMul, 1.0); } + if (uintTex) + col = vec4(ucol); + else if (sintTex) + col = vec4(scol); + col = ((col - RangeMinimum)*InverseRangeSize); col = mix(vec4(0,0,0,1), col, Channels); diff --git a/renderdoc/data/renderdoc.rc b/renderdoc/data/renderdoc.rc index 6b2c7aadc..c683aa9f3 100644 --- a/renderdoc/data/renderdoc.rc +++ b/renderdoc/data/renderdoc.rc @@ -116,6 +116,7 @@ RESOURCE_checkerboard_frag TYPE_EMBED "glsl/checkerboard.frag" RESOURCE_generic_vert TYPE_EMBED "glsl/generic.vert" RESOURCE_generic_frag TYPE_EMBED "glsl/generic.frag" RESOURCE_mesh_vert TYPE_EMBED "glsl/mesh.vert" +RESOURCE_debuguniforms_h TYPE_EMBED "glsl/debuguniforms.h" RESOURCE_sourcecodepro_ttf TYPE_EMBED "sourcecodepro.ttf" diff --git a/renderdoc/data/resource.h b/renderdoc/data/resource.h index b3006168c..0033b58d1 100644 --- a/renderdoc/data/resource.h +++ b/renderdoc/data/resource.h @@ -18,6 +18,7 @@ #define RESOURCE_generic_vert 205 #define RESOURCE_generic_frag 206 #define RESOURCE_mesh_vert 207 +#define RESOURCE_debuguniforms_h 208 #define RESOURCE_sourcecodepro_ttf 301 diff --git a/renderdoc/driver/gl/gl_debug.cpp b/renderdoc/driver/gl/gl_debug.cpp index 9dc1c5c2a..81a8d6cdc 100644 --- a/renderdoc/driver/gl/gl_debug.cpp +++ b/renderdoc/driver/gl/gl_debug.cpp @@ -79,6 +79,8 @@ GLuint GLReplay::CreateShaderProgram(const char *vsSrc, const char *psSrc) return ret; } +#include "data/glsl/debuguniforms.h" + void GLReplay::InitDebugData() { if(m_pDriver == NULL) return; @@ -96,7 +98,8 @@ void GLReplay::InitDebugData() DebugData.blitProg = CreateShaderProgram(DebugData.blitvsSource.c_str(), DebugData.blitfsSource.c_str()); - string texfs = GetEmbeddedResource(texdisplay_frag); + string texfs = GetEmbeddedResource(debuguniforms_h); + texfs += GetEmbeddedResource(texdisplay_frag); DebugData.texDisplayProg = CreateShaderProgram(DebugData.blitvsSource.c_str(), texfs.c_str()); @@ -150,7 +153,7 @@ void GLReplay::InitDebugData() for(size_t i=0; i < ARRAY_COUNT(DebugData.UBOs); i++) { gl.glBindBuffer(eGL_UNIFORM_BUFFER, DebugData.UBOs[i]); - gl.glBufferData(eGL_UNIFORM_BUFFER, Debug_UBOSize, NULL, eGL_DYNAMIC_DRAW); + gl.glBufferData(eGL_UNIFORM_BUFFER, sizeof(texdisplay), NULL, eGL_DYNAMIC_DRAW); } DebugData.overlayTexWidth = DebugData.overlayTexHeight = 0; @@ -220,6 +223,8 @@ void GLReplay::PickPixel(ResourceId texture, uint32_t x, uint32_t y, uint32_t sl bool GLReplay::RenderTexture(TextureDisplay cfg) { + FetchTexture tex = GetTexture(cfg.texid); + MakeCurrentReplayContext(m_DebugCtx); WrappedOpenGL &gl = *m_pDriver; @@ -228,42 +233,102 @@ bool GLReplay::RenderTexture(TextureDisplay cfg) auto &texDetails = m_pDriver->m_Textures[cfg.texid]; - gl.glActiveTexture(eGL_TEXTURE0); - gl.glBindTexture(eGL_TEXTURE_2D, texDetails.resource.name); + int resType; + switch (texDetails.curType) + { + case eGL_TEXTURE_1D: + resType = RESTYPE_TEX1D; + break; + default: + RDCWARN("Unexpected texture type"); + case eGL_TEXTURE_2D: + resType = RESTYPE_TEX2D; + break; + case eGL_TEXTURE_3D: + resType = RESTYPE_TEX3D; + break; + case eGL_TEXTURE_CUBE_MAP: + resType = RESTYPE_TEXCUBE; + break; + case eGL_TEXTURE_1D_ARRAY: + resType = RESTYPE_TEX1DARRAY; + break; + case eGL_TEXTURE_2D_ARRAY: + resType = RESTYPE_TEX2DARRAY; + break; + case eGL_TEXTURE_CUBE_MAP_ARRAY: + resType = RESTYPE_TEXCUBEARRAY; + break; + } - if(cfg.mip == 0 && cfg.scale < 1.0f) - gl.glBindSampler(0, DebugData.linearSampler); + RDCGLenum dsTexMode = eGL_NONE; + if (tex.creationFlags & eTextureCreate_DSV) + { + if (cfg.Green) + { + dsTexMode = eGL_STENCIL_INDEX; + + // Stencil texture sampling is not normalized in OpenGL + resType |= TEXDISPLAY_UINT_TEX; + float rangeScale; + switch (tex.format.rawType) + { + case eGL_STENCIL_INDEX1: + rangeScale = 1.0f; + break; + case eGL_STENCIL_INDEX4: + rangeScale = 16.0f; + break; + default: + RDCWARN("Unexpected raw format for stencil visualization"); + case eGL_DEPTH24_STENCIL8: + case eGL_DEPTH32F_STENCIL8: + case eGL_STENCIL_INDEX8: + rangeScale = 256.0f; + break; + case eGL_STENCIL_INDEX16: + rangeScale = 65536.0f; + break; + } + cfg.rangemin *= rangeScale; + cfg.rangemax *= rangeScale; + } + else + dsTexMode = eGL_DEPTH_COMPONENT; + } else - gl.glBindSampler(0, DebugData.pointSampler); + { + switch (tex.format.compType) + { + case eCompType_UInt: + resType |= TEXDISPLAY_UINT_TEX; + break; + case eCompType_SNorm: + resType |= TEXDISPLAY_SINT_TEX; + break; + } + } + gl.glActiveTexture((RDCGLenum)(eGL_TEXTURE0 + resType)); + gl.glBindTexture(texDetails.curType, texDetails.resource.name); + + GLint origDSTexMode = eGL_DEPTH_COMPONENT; + if (dsTexMode != eGL_NONE) + { + gl.glGetTexParameteriv(texDetails.curType, eGL_DEPTH_STENCIL_TEXTURE_MODE, &origDSTexMode); + gl.glTexParameteri(texDetails.curType, eGL_DEPTH_STENCIL_TEXTURE_MODE, dsTexMode); + } + + if(cfg.mip == 0 && cfg.scale < 1.0f && dsTexMode == eGL_NONE) + gl.glBindSampler(resType, DebugData.linearSampler); + else + gl.glBindSampler(resType, DebugData.pointSampler); + GLint tex_x = texDetails.width, tex_y = texDetails.height, tex_z = texDetails.depth; gl.glBindBufferBase(eGL_UNIFORM_BUFFER, 0, DebugData.UBOs[0]); - struct uboData - { - Vec2f Position; - float Scale; - float HDRMul; - - Vec4f Channels; - - float RangeMinimum; - float InverseRangeSize; - float MipLevel; - int32_t FlipY; - - Vec3f TextureResolutionPS; - int32_t OutputDisplayFormat; - - Vec2f OutputRes; - int32_t RawOutput; - float Slice; - }; - - uboData *ubo = (uboData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(uboData), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); - - RDCCOMPILE_ASSERT(sizeof(uboData) <= Debug_UBOSize, "UBO data is too big"); + texdisplay *ubo = (texdisplay *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(texdisplay), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); float x = cfg.offx; float y = cfg.offy; @@ -297,17 +362,29 @@ bool GLReplay::RenderTexture(TextureDisplay cfg) if(cfg.rangemax <= cfg.rangemin) cfg.rangemax += 0.00001f; - ubo->Channels.x = cfg.Red ? 1.0f : 0.0f; - ubo->Channels.y = cfg.Green ? 1.0f : 0.0f; - ubo->Channels.z = cfg.Blue ? 1.0f : 0.0f; - ubo->Channels.w = cfg.Alpha ? 1.0f : 0.0f; + if (dsTexMode == eGL_NONE) + { + ubo->Channels.x = cfg.Red ? 1.0f : 0.0f; + ubo->Channels.y = cfg.Green ? 1.0f : 0.0f; + ubo->Channels.z = cfg.Blue ? 1.0f : 0.0f; + ubo->Channels.w = cfg.Alpha ? 1.0f : 0.0f; + } + else + { + // Both depth and stencil texture mode use the red channel + ubo->Channels.x = 1.0f; + ubo->Channels.y = 0.0f; + ubo->Channels.z = 0.0f; + ubo->Channels.w = 0.0f; + } ubo->RangeMinimum = cfg.rangemin; ubo->InverseRangeSize = 1.0f/(cfg.rangemax-cfg.rangemin); ubo->MipLevel = (float)cfg.mip; + ubo->Slice = (float)cfg.sliceFace; - ubo->OutputDisplayFormat = 0x2; // 2d. Unused for now + ubo->OutputDisplayFormat = resType; ubo->RawOutput = cfg.rawoutput ? 1 : 0; @@ -335,6 +412,9 @@ bool GLReplay::RenderTexture(TextureDisplay cfg) gl.glBindSampler(0, 0); + if (dsTexMode != eGL_NONE) + gl.glTexParameteri(texDetails.curType, eGL_DEPTH_STENCIL_TEXTURE_MODE, origDSTexMode); + return true; } diff --git a/renderdoc/driver/gl/gl_replay.h b/renderdoc/driver/gl/gl_replay.h index ad246daad..8e9fee97b 100644 --- a/renderdoc/driver/gl/gl_replay.h +++ b/renderdoc/driver/gl/gl_replay.h @@ -205,8 +205,6 @@ class GLReplay : public IReplayDriver GLuint emptyVAO; } DebugData; - - static const size_t Debug_UBOSize = 64 * sizeof(Vec4f); void InitDebugData(); diff --git a/renderdoc/renderdoc.vcxproj b/renderdoc/renderdoc.vcxproj index 16d999d7c..6f5eb9063 100644 --- a/renderdoc/renderdoc.vcxproj +++ b/renderdoc/renderdoc.vcxproj @@ -248,6 +248,7 @@ + diff --git a/renderdoc/renderdoc.vcxproj.filters b/renderdoc/renderdoc.vcxproj.filters index d05b1aed0..de2499724 100644 --- a/renderdoc/renderdoc.vcxproj.filters +++ b/renderdoc/renderdoc.vcxproj.filters @@ -240,6 +240,9 @@ Resources\hlsl + + Resources\glsl + Drivers\OpenGL