From 54ad900f53215c1b85e1b95c56bab2b211469fb9 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 9 Feb 2015 22:38:44 +0000 Subject: [PATCH] Set parameters for custom shaders, and update template & snippet buttons * RENDERDOC_TextureType has different value meanings for the different types on GL - need to update the docs to reflect this. --- renderdoc/driver/gl/gl_debug.cpp | 14 ++++ renderdocui/Windows/ShaderViewer.cs | 110 ++++++++++++++++++++------- renderdocui/Windows/TextureViewer.cs | 27 ++++++- 3 files changed, 123 insertions(+), 28 deletions(-) diff --git a/renderdoc/driver/gl/gl_debug.cpp b/renderdoc/driver/gl/gl_debug.cpp index 4778825ae..d4955844f 100644 --- a/renderdoc/driver/gl/gl_debug.cpp +++ b/renderdoc/driver/gl/gl_debug.cpp @@ -1091,6 +1091,20 @@ bool GLReplay::RenderTextureInternal(TextureDisplay cfg, bool blendAlpha) { GLuint customProg = gl.GetResourceManager()->GetCurrentResource(cfg.CustomShader).name; gl.glUseProgramStages(DebugData.texDisplayPipe, eGL_FRAGMENT_SHADER_BIT, customProg); + + GLint loc = -1; + + loc = gl.glGetUniformLocation(customProg, "RENDERDOC_TexDim"); + if(loc >= 0) + gl.glProgramUniform4ui(customProg, loc, texDetails.width, texDetails.height, texDetails.depth, m_CachedTextures[cfg.texid].mips); + + loc = gl.glGetUniformLocation(customProg, "RENDERDOC_SelectedMip"); + if(loc >= 0) + gl.glProgramUniform1ui(customProg, loc, cfg.mip); + + loc = gl.glGetUniformLocation(customProg, "RENDERDOC_TextureType"); + if(loc >= 0) + gl.glProgramUniform1ui(customProg, loc, resType); } gl.glBindProgramPipeline(DebugData.texDisplayPipe); diff --git a/renderdocui/Windows/ShaderViewer.cs b/renderdocui/Windows/ShaderViewer.cs index b5443c19b..91c43484c 100644 --- a/renderdocui/Windows/ShaderViewer.cs +++ b/renderdocui/Windows/ShaderViewer.cs @@ -178,6 +178,9 @@ namespace renderdocui.Windows m_SaveCallback = saveCallback; m_CloseCallback = closeCallback; + if (m_Core.LogLoaded) + pointLinearSamplersToolStripMenuItem.Visible = (m_Core.APIProps.pipelineType == APIPipelineStateType.D3D11); + DockContent sel = null; foreach (var f in files) @@ -1096,11 +1099,13 @@ namespace renderdocui.Windows public void OnLogfileClosed() { + pointLinearSamplersToolStripMenuItem.Visible = true; Close(); } public void OnLogfileLoaded() { + pointLinearSamplersToolStripMenuItem.Visible = (m_Core.APIProps.pipelineType == APIPipelineStateType.D3D11); } public void OnEventSelected(UInt32 frameID, UInt32 eventID) @@ -1386,7 +1391,10 @@ namespace renderdocui.Windows if (CurrentScintilla == null) return; - CurrentScintilla.InsertText(0, "uint4 RENDERDOC_TexDim; // xyz == width, height, depth. w == # mips" + Environment.NewLine + Environment.NewLine); + if (m_Core.APIProps.pipelineType == APIPipelineStateType.D3D11) + CurrentScintilla.InsertText(0, "uint4 RENDERDOC_TexDim; // xyz == width, height, depth. w == # mips" + Environment.NewLine + Environment.NewLine); + else if (m_Core.APIProps.pipelineType == APIPipelineStateType.OpenGL) + CurrentScintilla.InsertText(0, "uvec4 RENDERDOC_TexDim; // xyz == width, height, depth. w == # mips" + Environment.NewLine + Environment.NewLine); CurrentScintilla.CurrentPos = 0; } @@ -1404,7 +1412,10 @@ namespace renderdocui.Windows if (CurrentScintilla == null) return; - CurrentScintilla.InsertText(0, "uint RENDERDOC_TextureType; // 1 = 1D, 2 = 2D, 3 = 3D, 4 = Depth, 5 = Depth + Stencil, 6 = Depth (MS), 7 = Depth + Stencil (MS)" + Environment.NewLine + Environment.NewLine); + if(m_Core.APIProps.pipelineType == APIPipelineStateType.D3D11) + CurrentScintilla.InsertText(0, "uint RENDERDOC_TextureType; // 1 = 1D, 2 = 2D, 3 = 3D, 4 = Depth, 5 = Depth + Stencil, 6 = Depth (MS), 7 = Depth + Stencil (MS)" + Environment.NewLine + Environment.NewLine); + else if (m_Core.APIProps.pipelineType == APIPipelineStateType.OpenGL) + CurrentScintilla.InsertText(0, "uint RENDERDOC_TextureType; // 1 = 1D, 2 = 2D, 3 = 3D, 4 = Cube, 5 = 1DArray, 6 = 2DArray, 7 = CubeArray, 8 = Rect, 9 = Buffer, 10 = 2DMS" + Environment.NewLine + Environment.NewLine); CurrentScintilla.CurrentPos = 0; } @@ -1413,10 +1424,13 @@ namespace renderdocui.Windows if (CurrentScintilla == null) return; - CurrentScintilla.InsertText(0, "// Samplers" + Environment.NewLine + - "SamplerState pointSampler : register(s0);" + Environment.NewLine + - "SamplerState linearSampler : register(s1);" + Environment.NewLine + - "// End Samplers" + Environment.NewLine + Environment.NewLine); + if (m_Core.APIProps.pipelineType == APIPipelineStateType.D3D11) + { + CurrentScintilla.InsertText(0, "// Samplers" + Environment.NewLine + + "SamplerState pointSampler : register(s0);" + Environment.NewLine + + "SamplerState linearSampler : register(s1);" + Environment.NewLine + + "// End Samplers" + Environment.NewLine + Environment.NewLine); + } CurrentScintilla.CurrentPos = 0; } @@ -1425,27 +1439,69 @@ namespace renderdocui.Windows if (CurrentScintilla == null) return; - CurrentScintilla.InsertText(0, "// Textures" + Environment.NewLine + - "Texture1DArray texDisplayTex1DArray : register(t1);" + Environment.NewLine + - "Texture2DArray texDisplayTex2DArray : register(t2);" + Environment.NewLine + - "Texture3D texDisplayTex3D : register(t3);" + Environment.NewLine + - "Texture2DArray texDisplayTexDepthArray : register(t4);" + Environment.NewLine + - "Texture2DArray texDisplayTexStencilArray : register(t5);" + Environment.NewLine + - "Texture2DMSArray texDisplayTexDepthMSArray : register(t6);" + Environment.NewLine + - "Texture2DMSArray texDisplayTexStencilMSArray : register(t7);" + Environment.NewLine + - "Texture2DArray texDisplayTexCubeArray : register(t8);" + Environment.NewLine + - "Texture2DMSArray texDisplayTex2DMSArray : register(t9);" + Environment.NewLine + - "" + Environment.NewLine + - "Texture1DArray texDisplayUIntTex1DArray : register(t11);" + Environment.NewLine + - "Texture2DArray texDisplayUIntTex2DArray : register(t12);" + Environment.NewLine + - "Texture3D texDisplayUIntTex3D : register(t13);" + Environment.NewLine + - "Texture2DMSArray texDisplayUIntTex2DMSArray : register(t19);" + Environment.NewLine + - "" + Environment.NewLine + - "Texture1DArray texDisplayIntTex1DArray : register(t21);" + Environment.NewLine + - "Texture2DArray texDisplayIntTex2DArray : register(t22);" + Environment.NewLine + - "Texture3D texDisplayIntTex3D : register(t23);" + Environment.NewLine + - "Texture2DMSArray texDisplayIntTex2DMSArray : register(t29);" + Environment.NewLine + - "// End Textures" + Environment.NewLine + Environment.NewLine); + if (m_Core.APIProps.pipelineType == APIPipelineStateType.D3D11) + { + CurrentScintilla.InsertText(0, "// Textures" + Environment.NewLine + + "Texture1DArray texDisplayTex1DArray : register(t1);" + Environment.NewLine + + "Texture2DArray texDisplayTex2DArray : register(t2);" + Environment.NewLine + + "Texture3D texDisplayTex3D : register(t3);" + Environment.NewLine + + "Texture2DArray texDisplayTexDepthArray : register(t4);" + Environment.NewLine + + "Texture2DArray texDisplayTexStencilArray : register(t5);" + Environment.NewLine + + "Texture2DMSArray texDisplayTexDepthMSArray : register(t6);" + Environment.NewLine + + "Texture2DMSArray texDisplayTexStencilMSArray : register(t7);" + Environment.NewLine + + "Texture2DArray texDisplayTexCubeArray : register(t8);" + Environment.NewLine + + "Texture2DMSArray texDisplayTex2DMSArray : register(t9);" + Environment.NewLine + + "" + Environment.NewLine + + "Texture1DArray texDisplayUIntTex1DArray : register(t11);" + Environment.NewLine + + "Texture2DArray texDisplayUIntTex2DArray : register(t12);" + Environment.NewLine + + "Texture3D texDisplayUIntTex3D : register(t13);" + Environment.NewLine + + "Texture2DMSArray texDisplayUIntTex2DMSArray : register(t19);" + Environment.NewLine + + "" + Environment.NewLine + + "Texture1DArray texDisplayIntTex1DArray : register(t21);" + Environment.NewLine + + "Texture2DArray texDisplayIntTex2DArray : register(t22);" + Environment.NewLine + + "Texture3D texDisplayIntTex3D : register(t23);" + Environment.NewLine + + "Texture2DMSArray texDisplayIntTex2DMSArray : register(t29);" + Environment.NewLine + + "// End Textures" + Environment.NewLine + Environment.NewLine); + } + else if (m_Core.APIProps.pipelineType == APIPipelineStateType.OpenGL) + { + CurrentScintilla.InsertText(0, "// Textures" + Environment.NewLine + + "// Unsigned int samplers" + Environment.NewLine + + "layout (binding = 1) uniform usampler1D texUInt1D;" + Environment.NewLine + + "layout (binding = 2) uniform usampler2D texUInt2D;" + Environment.NewLine + + "layout (binding = 3) uniform usampler3D texUInt3D;" + Environment.NewLine + + "// cube = 4" + Environment.NewLine + + "layout (binding = 5) uniform usampler1DArray texUInt1DArray;" + Environment.NewLine + + "layout (binding = 6) uniform usampler2DArray texUInt2DArray;" + Environment.NewLine + + "// cube array = 7" + Environment.NewLine + + "layout (binding = 8) uniform usampler2DRect texUInt2DRect;" + Environment.NewLine + + "layout (binding = 9) uniform usamplerBuffer texUIntBuffer;" + Environment.NewLine + + "layout (binding = 10) uniform usampler2DMS texUInt2DMS;" + Environment.NewLine + + "" + Environment.NewLine + + "// Int samplers" + Environment.NewLine + + "layout (binding = 1) uniform isampler1D texSInt1D;" + Environment.NewLine + + "layout (binding = 2) uniform isampler2D texSInt2D;" + Environment.NewLine + + "layout (binding = 3) uniform isampler3D texSInt3D;" + Environment.NewLine + + "// cube = 4" + Environment.NewLine + + "layout (binding = 5) uniform isampler1DArray texSInt1DArray;" + Environment.NewLine + + "layout (binding = 6) uniform isampler2DArray texSInt2DArray;" + Environment.NewLine + + "// cube array = 7" + Environment.NewLine + + "layout (binding = 8) uniform isampler2DRect texSInt2DRect;" + Environment.NewLine + + "layout (binding = 9) uniform isamplerBuffer texSIntBuffer;" + Environment.NewLine + + "layout (binding = 10) uniform isampler2DMS texSInt2DMS;" + Environment.NewLine + + "" + Environment.NewLine + + "// Floating point samplers" + Environment.NewLine + + "layout (binding = 1) uniform sampler1D tex1D;" + Environment.NewLine + + "layout (binding = 2) uniform sampler2D tex2D;" + Environment.NewLine + + "layout (binding = 3) uniform sampler3D tex3D;" + Environment.NewLine + + "layout (binding = 4) uniform samplerCube texCube;" + Environment.NewLine + + "layout (binding = 5) uniform sampler1DArray tex1DArray;" + Environment.NewLine + + "layout (binding = 6) uniform sampler2DArray tex2DArray;" + Environment.NewLine + + "layout (binding = 7) uniform samplerCubeArray texCubeArray;" + Environment.NewLine + + "layout (binding = 8) uniform sampler2DRect tex2DRect;" + Environment.NewLine + + "layout (binding = 9) uniform samplerBuffer texBuffer;" + Environment.NewLine + + "layout (binding = 10) uniform sampler2DMS tex2DMS;" + Environment.NewLine + Environment.NewLine); + } CurrentScintilla.CurrentPos = 0; } diff --git a/renderdocui/Windows/TextureViewer.cs b/renderdocui/Windows/TextureViewer.cs index bfa15cfd4..c89942868 100644 --- a/renderdocui/Windows/TextureViewer.cs +++ b/renderdocui/Windows/TextureViewer.cs @@ -602,7 +602,32 @@ namespace renderdocui.Windows } var path = Path.Combine(Core.ConfigDirectory, customShader.Text + m_Core.APIProps.ShaderExtension); - File.WriteAllText(path, "float4 main(float4 pos : SV_Position, float4 uv : TEXCOORD0) : SV_Target0\n{\n\treturn float4(0,0,0,1);\n}\n"); + + string src = ""; + + if (m_Core.APIProps.pipelineType == APIPipelineStateType.D3D11) + { + src = String.Format( + "float4 main(float4 pos : SV_Position, float4 uv : TEXCOORD0) : SV_Target0{0}" + + "{{{0}" + + " return float4(0,0,0,1);{0}" + + "}}{0}" + , Environment.NewLine); + } + else if (m_Core.APIProps.pipelineType == APIPipelineStateType.OpenGL) + { + src = String.Format( + "#version 420 core{0}" + + "layout (location = 0) out vec4 color_out;{0}" + + "void main(){0}" + + "{{{0}" + + " color_out = vec4(0,0,0,1);{0}" + + "}}{0}" + , Environment.NewLine); + } + + File.WriteAllText(path, src); + // auto-open edit window customEdit_Click(sender, e);