diff --git a/qrenderdoc/Code/CaptureContext.cpp b/qrenderdoc/Code/CaptureContext.cpp index 2d9076b27..a12fd7e23 100644 --- a/qrenderdoc/Code/CaptureContext.cpp +++ b/qrenderdoc/Code/CaptureContext.cpp @@ -438,7 +438,7 @@ EventBrowser *CaptureContext::eventBrowser() m_EventBrowser = new EventBrowser(this, m_MainWindow); m_EventBrowser->setObjectName("eventBrowser"); - m_EventBrowser->setWindowIcon(*m_Icon); + setupDockWindow(m_EventBrowser); return m_EventBrowser; } @@ -450,7 +450,7 @@ APIInspector *CaptureContext::apiInspector() m_APIInspector = new APIInspector(this, m_MainWindow); m_APIInspector->setObjectName("apiInspector"); - m_APIInspector->setWindowIcon(*m_Icon); + setupDockWindow(m_APIInspector); return m_APIInspector; } @@ -462,7 +462,7 @@ TextureViewer *CaptureContext::textureViewer() m_TextureViewer = new TextureViewer(this, m_MainWindow); m_TextureViewer->setObjectName("textureViewer"); - m_TextureViewer->setWindowIcon(*m_Icon); + setupDockWindow(m_TextureViewer); return m_TextureViewer; } @@ -474,7 +474,7 @@ BufferViewer *CaptureContext::meshPreview() m_MeshPreview = new BufferViewer(this, m_MainWindow); m_MeshPreview->setObjectName("meshPreview"); - m_MeshPreview->setWindowIcon(*m_Icon); + setupDockWindow(m_MeshPreview); return m_MeshPreview; } @@ -486,7 +486,7 @@ PipelineStateViewer *CaptureContext::pipelineViewer() m_PipelineViewer = new PipelineStateViewer(this, m_MainWindow); m_PipelineViewer->setObjectName("pipelineViewer"); - m_PipelineViewer->setWindowIcon(*m_Icon); + setupDockWindow(m_PipelineViewer); return m_PipelineViewer; } @@ -588,3 +588,8 @@ void CaptureContext::windowClosed(QWidget *window) else qCritical() << "Unrecognised window being closed: " << window; } + +void CaptureContext::setupDockWindow(QWidget *shad) +{ + shad->setWindowIcon(*m_Icon); +} diff --git a/qrenderdoc/Code/CaptureContext.h b/qrenderdoc/Code/CaptureContext.h index ee61a701e..c9e24efcd 100644 --- a/qrenderdoc/Code/CaptureContext.h +++ b/qrenderdoc/Code/CaptureContext.h @@ -138,6 +138,7 @@ public: BufferViewer *meshPreview(); PipelineStateViewer *pipelineViewer(); CaptureDialog *captureDialog(); + void setupDockWindow(QWidget *shad); bool hasEventBrowser() { return m_EventBrowser != NULL; } bool hasAPIInspector() { return m_APIInspector != NULL; } diff --git a/qrenderdoc/Code/QRDUtils.cpp b/qrenderdoc/Code/QRDUtils.cpp index d04b20ad1..a457caed1 100644 --- a/qrenderdoc/Code/QRDUtils.cpp +++ b/qrenderdoc/Code/QRDUtils.cpp @@ -178,6 +178,60 @@ QString ToQStr(const ShaderStageType stage, const GraphicsAPI apitype) return "Unknown"; } +QString TypeString(const SigParameter &sig) +{ + QString ret = ""; + + if(sig.compType == eCompType_Float) + ret += "float"; + else if(sig.compType == eCompType_UInt || sig.compType == eCompType_UScaled) + ret += "uint"; + else if(sig.compType == eCompType_SInt || sig.compType == eCompType_SScaled) + ret += "int"; + else if(sig.compType == eCompType_UNorm) + ret += "unorm float"; + else if(sig.compType == eCompType_SNorm) + ret += "snorm float"; + else if(sig.compType == eCompType_Depth) + ret += "float"; + + if(sig.compCount > 1) + ret += QString::number(sig.compCount); + + return ret; +} + +QString D3DSemanticString(const SigParameter &sig) +{ + if(sig.systemValue == eAttr_None) + return ToQStr(sig.semanticIdxName); + + QString ret = ToQStr(sig.systemValue); + + // need to include the index if it's a system value semantic that's numbered + if(sig.systemValue == eAttr_ColourOutput || sig.systemValue == eAttr_CullDistance || + sig.systemValue == eAttr_ClipDistance) + ret += QString::number(sig.semanticIndex); + + return ret; +} + +QString GetComponentString(byte mask) +{ + QString ret = ""; + + if((mask & 0x1) > 0) + ret += "R"; + if((mask & 0x2) > 0) + ret += "G"; + if((mask & 0x4) > 0) + ret += "B"; + if((mask & 0x8) > 0) + ret += "A"; + + return ret; +} + bool SaveToJSON(QVariantMap &data, QIODevice &f, const char *magicIdentifier, uint32_t magicVersion) { // marker that this data is valid diff --git a/qrenderdoc/Code/QRDUtils.h b/qrenderdoc/Code/QRDUtils.h index 4ca7fd1bd..6bc86e5df 100644 --- a/qrenderdoc/Code/QRDUtils.h +++ b/qrenderdoc/Code/QRDUtils.h @@ -252,6 +252,45 @@ struct ToStr return "Unknown"; } + static std::string Get(const SystemAttribute &el) + { + switch(el) + { + case eAttr_None: return "None"; + case eAttr_Position: return "Position"; + case eAttr_PointSize: return "Point Size"; + case eAttr_ClipDistance: return "Clip Distance"; + case eAttr_CullDistance: return "Cull Distance"; + case eAttr_RTIndex: return "RT Index"; + case eAttr_ViewportIndex: return "Viewport Index"; + case eAttr_VertexIndex: return "Vertex Index"; + case eAttr_PrimitiveIndex: return "Primitive Index"; + case eAttr_InstanceIndex: return "Instance Index"; + case eAttr_InvocationIndex: return "Invocation Index"; + case eAttr_DispatchSize: return "Dispatch Size"; + case eAttr_DispatchThreadIndex: return "Dispatch Thread Index"; + case eAttr_GroupIndex: return "Group Index"; + case eAttr_GroupFlatIndex: return "Group Flat Index"; + case eAttr_GroupThreadIndex: return "Group Thread Index"; + case eAttr_GSInstanceIndex: return "GS Instance Index"; + case eAttr_OutputControlPointIndex: return "Output Control Point Index"; + case eAttr_DomainLocation: return "Domain Location"; + case eAttr_IsFrontFace: return "Is FrontFace"; + case eAttr_MSAACoverage: return "MSAA Coverage"; + case eAttr_MSAASamplePosition: return "MSAA Sample Position"; + case eAttr_MSAASampleIndex: return "MSAA Sample Index"; + case eAttr_PatchNumVertices: return "Patch NumVertices"; + case eAttr_OuterTessFactor: return "Outer TessFactor"; + case eAttr_InsideTessFactor: return "Inside TessFactor"; + case eAttr_ColourOutput: return "Colour Output"; + case eAttr_DepthOutput: return "Depth Output"; + case eAttr_DepthOutputGreaterEqual: return "Depth Output (GEqual)"; + case eAttr_DepthOutputLessEqual: return "Depth Output (LEqual)"; + default: break; + } + return "Unknown"; + } + static std::string Get(const ShaderBindType &el) { switch(el) @@ -353,6 +392,10 @@ QString RowString(const ShaderVariable &v, uint32_t row); QString VarString(const ShaderVariable &v); QString RowTypeString(const ShaderVariable &v); +QString TypeString(const SigParameter &sig); +QString D3DSemanticString(const SigParameter &sig); +QString GetComponentString(byte mask); + struct Formatter { static void setParams(int minFigures, int maxFigures, int expNegCutoff, int expPosCutoff); diff --git a/qrenderdoc/Code/ScintillaSyntax.cpp b/qrenderdoc/Code/ScintillaSyntax.cpp new file mode 100644 index 000000000..d7d06b91f --- /dev/null +++ b/qrenderdoc/Code/ScintillaSyntax.cpp @@ -0,0 +1,265 @@ +/****************************************************************************** + * The MIT License (MIT) + * + * Copyright (c) 2017 Baldur Karlsson + * + * 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. + ******************************************************************************/ + +#include "ScintillaSyntax.h" +#include "SciLexer.h" +#include "ScintillaEdit.h" + +static const char *hlsl_keywords[2] = { + // keyword set 0: + // Secondary keywords and identifiers + R"EOKEYWORDS( +register packoffset static const + +break continue discard do for if else switch while case default return true false + +abort abs acos all AllMemoryBarrier AllMemoryBarrierWithGroupSync any asdouble asfloat asin asint +asuint atan atan2 ceil clamp clip cos cosh countbits cross D3DCOLORtoUBYTE4 ddx ddx_coarse ddx_fine +ddy ddy_coarse ddy_fine degrees determinant DeviceMemoryBarrier DeviceMemoryBarrierWithGroupSync +distance dot dst errorf EvaluateAttributeAtCentroid EvaluateAttributeAtSample +EvaluateAttributeSnapped exp exp2 f16tof32 f32tof16 faceforward firstbithigh firstbitlow floor fma +fmod frac frexp fwidth GetRenderTargetSampleCount GetRenderTargetSamplePosition GroupMemoryBarrier +GroupMemoryBarrierWithGroupSync InterlockedAdd InterlockedAnd InterlockedCompareExchange +InterlockedCompareStore InterlockedExchange InterlockedMax InterlockedMin InterlockedOr +InterlockedXor isfinite isinf isnan ldexp length lerp lit log log10 log2 mad max min modf msad4 mul +noise normalize pow printf Process2DQuadTessFactorsAvg Process2DQuadTessFactorsMax +Process2DQuadTessFactorsMin ProcessIsolineTessFactors ProcessQuadTessFactorsAvg +ProcessQuadTessFactorsMax ProcessQuadTessFactorsMin ProcessTriTessFactorsAvg +ProcessTriTessFactorsMax ProcessTriTessFactorsMin radians rcp reflect refract reversebits round +rsqrt saturate sign sin sincos sinh smoothstep sqrt step tan tanh tex1D tex1Dbias tex1Dgrad tex1Dlod +tex1Dproj tex2D tex2Dbias tex2Dgrad tex2Dlod tex2Dproj tex3D tex3Dbias tex3Dgrad tex3Dlod tex3Dproj +texCUBE texCUBEbias texCUBEgrad texCUBElod texCUBEproj transpose trunc + +BINORMAL BINORMAL0 BINORMAL1 BINORMAL2 BINORMAL3 BINORMAL4 BINORMAL5 BINORMAL6 BINORMAL7 +BLENDINDICES BLENDINDICES0 BLENDINDICES1 BLENDINDICES2 BLENDINDICES3 BLENDINDICES4 BLENDINDICES5 +BLENDINDICES6 BLENDINDICES7 BLENDWEIGHT BLENDWEIGHT0 BLENDWEIGHT1 BLENDWEIGHT2 BLENDWEIGHT3 +BLENDWEIGHT4 BLENDWEIGHT5 BLENDWEIGHT6 BLENDWEIGHT7 COLOR COLOR0 COLOR1 COLOR2 COLOR3 COLOR4 COLOR5 +COLOR6 COLOR7 NORMAL NORMAL0 NORMAL1 NORMAL2 NORMAL3 NORMAL4 NORMAL5 NORMAL6 NORMAL7 POSITION +POSITION0 POSITION1 POSITION2 POSITION3 POSITION4 POSITION5 POSITION6 POSITION7 POSITIONT PSIZE +PSIZE0 PSIZE1 PSIZE2 PSIZE3 PSIZE4 PSIZE5 PSIZE6 PSIZE7 TANGENT TANGENT0 TANGENT1 TANGENT2 TANGENT3 +TANGENT4 TANGENT5 TANGENT6 TANGENT7 TEXCOORD TEXCOORD0 TEXCOORD1 TEXCOORD2 TEXCOORD3 TEXCOORD4 +TEXCOORD5 TEXCOORD6 TEXCOORD7 TEXCOORD8 TEXCOORD9 TEXCOORD0 TEXCOORD1 TEXCOORD2 TEXCOORD3 TEXCOORD4 +TEXCOORD5 TEXCOORD6 TEXCOORD7 TEXCOORD8 TEXCOORD9 + +SV_Coverage SV_Depth SV_DispatchThreadID SV_DomainLocation SV_GroupID SV_GroupIndex SV_GroupThreadID +SV_GSInstanceID SV_InsideTessFactor SV_IsFrontFace SV_OutputControlPointID SV_POSITION SV_Position +SV_RenderTargetArrayIndex SV_SampleIndex SV_TessFactor SV_ViewportArrayIndex SV_InstanceID +SV_PrimitiveID SV_VertexID SV_TargetID SV_TARGET SV_Target SV_Target0 SV_Target1 SV_Target2 +SV_Target3 SV_Target4 SV_Target5 SV_Target6 SV_Target7 SV_ClipDistance0 SV_ClipDistance1 +SV_ClipDistance2 SV_ClipDistance3 SV_ClipDistance4 SV_ClipDistance5 SV_ClipDistance6 +SV_ClipDistance7 SV_CullDistance0 SV_CullDistance1 SV_CullDistance2 SV_CullDistance3 +SV_CullDistance4 SV_CullDistance5 SV_CullDistance6 SV_CullDistance7 +)EOKEYWORDS", + + // keyword set 1: + // Secondary keywords and identifiers + R"EOKEYWORDS( +bool bool1 bool2 bool3 bool4 bool1x1 bool1x2 bool1x3 bool1x4 bool2x1 bool2x2 bool2x3 bool2x4 bool3x1 +bool3x2 bool3x3 bool3x4 bool4x1 bool4x2 bool4x3 bool4x4 + +int int1 int2 int3 int4 int1x1 int1x2 int1x3 int1x4 int2x1 int2x2 int2x3 int2x4 int3x1 int3x2 int3x3 +int3x4 int4x1 int4x2 int4x3 int4x4 + +uint uint1 uint2 uint3 uint4 uint1x1 uint1x2 uint1x3 uint1x4 uint2x1 uint2x2 uint2x3 uint2x4 uint3x1 +uint3x2 uint3x3 uint3x4 uint4x1 uint4x2 uint4x3 uint4x4 + +UINT UINT2 UINT3 UINT4 + +dword dword1 dword2 dword3 dword4 dword1x1 dword1x2 dword1x3 dword1x4 dword2x1 dword2x2 dword2x3 +dword2x4 dword3x1 dword3x2 dword3x3 dword3x4 dword4x1 dword4x2 dword4x3 dword4x4 + +half half1 half2 half3 half4 half1x1 half1x2 half1x3 half1x4 half2x1 half2x2 half2x3 half2x4 half3x1 +half3x2 half3x3 half3x4 half4x1 half4x2 half4x3 half4x4 + +float float1 float2 float3 float4 float1x1 float1x2 float1x3 float1x4 float2x1 float2x2 float2x3 +float2x4 float3x1 float3x2 float3x3 float3x4 float4x1 float4x2 float4x3 float4x4 + +double double1 double2 double3 double4 double1x1 double1x2 double1x3 double1x4 double2x1 double2x2 +double2x3 double2x4 double3x1 double3x2 double3x3 double3x4 double4x1 double4x2 double4x3 double4x4 + +snorm unorm string void cbuffer struct + +Buffer AppendStructuredBfufer ByteAddressBuffer ConsumeStructuredBuffer StructuredBuffer RWBuffer +RWByteAddressBuffer RWStructuredBuffer RWTexture1D RWTexture1DArray RWTexture2D RWTexture2DArray +RWTexture3D + +InputPatch OutputPatch + +linear centroid nointerpolation noperspective sample + +sampler sampler1D sampler2D sampler3D samplerCUBE SamplerComparisonState SamplerState sampler_state +AddressU AddressV AddressW BorderColor Filter MaxAnisotropy MaxLOD MinLOD MipLODBias ComparisonFunc +ComparisonFilter + +texture Texture1D Texture1DArray Texture2D Texture2DArray Texture2DMS Texture2DMSArray Texture3D +TextureCube +)EOKEYWORDS"}; + +static const char *glsl_keywords[2] = { + // keyword set 0: + // Secondary keywords and identifiers + R"EOKEYWORDS( +in out inout static const + +break continue do for while switch case default if else true false discard return + +radians degrees sin cos tan asin acos atan sinh cosh tanh asinh acosh atanh pow exp log exp2 log2 +sqrt inversesqrt abs sign floor trunc round roundEven ceil fract mod modf min max clamp mix step +smoothstep isnan isinf floatBitsToInt floatBitsToUint intBitsToFloat uintBitsToFloat fma frexp ldexp + +packUnorm2x16 packSnorm2x16 packUnorm4x8 packSnorm4x8 unpackUnorm2x16 unpackSnorm2x16 unpackUnorm4x8 +unpackSnorm4x8 packDouble2x32 unpackDouble2x32 packHalf2x16 unpackHalf2x16 length distance dot cross +normalize faceforward reflect refract matrixCompMult outerProduct transpose determinant inverse +lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not uaddCarry usubBorrow +umulExtended imulExtended bitfieldExtract bitfieldInsert bitfieldReverse bitCount findLSB findMSB + +textureSize textureQueryLod textureQueryLevels textureSamples texture textureProj textureLod +textureOffset texelFetch texelFetchOffset textureProjOffset textureLodOffset textureProjLod +textureProjLodOffset textureGrad textureGradOffset textureProjGrad textureProjGradOffset +textureGather textureGatherOffset textureGatherOffsets + +atomicCounterIncrement atomicCounterDecrement atomicCounter atomicAdd atomicMin atomicMax atomicAnd +atomicOr atomicXor atomicExchange atomicCompSwap + +imageSize imageSamples imageLoad imageStore imageAtomicAdd imageAtomicMin imageAtomicMax +imageAtomicAnd imageAtomicOr imageAtomicXor imageAtomicExchange imageAtomicCompSwap + +dFdx dFdy dFdxFine dFdyFine dFdxCoarse dFdyCoarse fwidth fwidthFine fwidthCoarse +interpolateAtCentroid interpolateAtSample interpolateAtOffset EmitStreamVertex EndStreamPrimitive +EmitVertex EndPrimitive barrier memoryBarrier memoryBarrierAtomicCounter memoryBarrierBuffer +memoryBarrierShared memoryBarrierImage groupMemoryBarrier + +gl_CullDistance gl_FragCoord gl_FragDepth gl_FrontFacing gl_GlobalInvocationID gl_HelperInvocation +gl_in gl_InstanceID gl_InvocationID gl_Layer gl_LocalInvocationID gl_LocalInvocationIndex +gl_MaxPatchVertices gl_NumWorkGroups gl_out gl_PatchVerticesIn gl_PerVertex gl_PointCoord +gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_SampleID gl_SampleMask gl_SampleMaskIn +gl_SamplePosition gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_VertexID gl_ViewportIndex +gl_WorkGroupID gl_WorkGroupSize + +gl_MaxComputeWorkGroupCount gl_MaxComputeWorkGroupSize gl_MaxComputeUniformComponents +gl_MaxComputeTextureImageUnits gl_MaxComputeImageUniforms gl_MaxComputeAtomicCounters +gl_MaxComputeAtomicCounterBuffers gl_MaxVertexAttribs gl_MaxVertexUniformComponents +gl_MaxVaryingComponents gl_MaxVertexOutputComponents gl_MaxGeometryInputComponents +gl_MaxGeometryOutputComponents gl_MaxFragmentInputComponents gl_MaxVertexTextureImageUnits +gl_MaxCombinedTextureImageUnits gl_MaxTextureImageUnits gl_MaxImageUnits +gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedShaderOutputResources gl_MaxImageSamples +gl_MaxVertexImageUniforms gl_MaxTessControlImageUniforms gl_MaxTessEvaluationImageUniforms +gl_MaxGeometryImageUniforms gl_MaxFragmentImageUniforms gl_MaxCombinedImageUniforms +gl_MaxFragmentUniformComponents gl_MaxDrawBuffers gl_MaxClipDistances +gl_MaxGeometryTextureImageUnits gl_MaxGeometryOutputVertices gl_MaxGeometryTotalOutputComponents +gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxTessControlInputComponents +gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits +gl_MaxTessControlUniformComponents gl_MaxTessControlTotalOutputComponents +gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents +gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents +gl_MaxTessPatchComponents gl_MaxPatchVertices gl_MaxTessGenLevel gl_MaxViewports +gl_MaxVertexUniformVectors gl_MaxFragmentUniformVectors gl_MaxVaryingVectors +gl_MaxVertexAtomicCounters gl_MaxTessControlAtomicCounters gl_MaxTessEvaluationAtomicCounters +gl_MaxGeometryAtomicCounters gl_MaxFragmentAtomicCounters gl_MaxCombinedAtomicCounters +gl_MaxAtomicCounterBindings gl_MaxVertexAtomicCounterBuffers gl_MaxTessControlAtomicCounterBuffers +gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxGeometryAtomicCounterBuffers +gl_MaxFragmentAtomicCounterBuffers gl_MaxCombinedAtomicCounterBuffers gl_MaxAtomicCounterBufferSize +gl_MinProgramTexelOffset gl_MaxProgramTexelOffset gl_MaxTransformFeedbackBuffers +gl_MaxTransformFeedbackInterleavedComponents gl_MaxCullDistances gl_MaxCombinedClipAndCullDistances +gl_MaxSamples gl_MaxVertexImageUniforms gl_MaxFragmentImageUniforms gl_MaxComputeImageUniforms +gl_MaxCombinedImageUniforms gl_MaxCombinedShaderOutputResources gl_DepthRangeParameters +gl_DepthRange gl_NumSamples +)EOKEYWORDS", + + // keyword set 1: + // Secondary keywords and identifiers + R"EOKEYWORDS( +float double int void bool + +mat2 mat3 mat4 dmat2 dmat3 dmat4 mat2x2 mat2x3 mat2x4 dmat2x2 dmat2x3 dmat2x4 mat3x2 mat3x3 mat3x4 +dmat3x2 dmat3x3 dmat3x4 mat4x2 mat4x3 mat4x4 dmat4x2 dmat4x3 dmat4x4 vec2 vec3 vec4 ivec2 ivec3 +ivec4 bvec2 bvec3 bvec4 dvec2 dvec3 dvec4 uint uvec2 uvec3 uvec4 + +atomic_uint patch sample buffer subroutine struct + +invariant precise layout + +lowp mediump highp precision attribute uniform varying shared coherent volatile restrict readonly +writeonly centroid flat smooth noperspective + +sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow samplerCubeShadow +sampler1DArray sampler2DArray sampler1DArrayShadow sampler2DArrayShadow isampler1D isampler2D +isampler3D isamplerCube isampler1DArray isampler2DArray usampler1D usampler2D usampler3D +usamplerCube usampler1DArray usampler2DArray sampler2DRect sampler2DRectShadow isampler2DRect +usampler2DRect samplerBuffer isamplerBuffer usamplerBuffer sampler2DMS isampler2DMS usampler2DMS +sampler2DMSArray isampler2DMSArray usampler2DMSArray samplerCubeArray samplerCubeArrayShadow +isamplerCubeArray usamplerCubeArray + +image1D iimage1D uimage1D image2D iimage2D uimage2D image3D iimage3D uimage3D image2DRect +iimage2DRect uimage2DRect imageCube iimageCube uimageCube imageBuffer iimageBuffer uimageBuffer +image1DArray iimage1DArray uimage1DArray image2DArray iimage2DArray uimage2DArray imageCubeArray +iimageCubeArray uimageCubeArray image2DMS iimage2DMS uimage2DMS image2DMSArray iimage2DMSArray +uimage2DMSArray +)EOKEYWORDS"}; + +void ConfigureSyntax(ScintillaEdit *scintilla, int language) +{ + scintilla->setLexer(language); + + bool hlsl = false; + bool glsl = false; + + if(language == SCLEX_HLSL) + { + hlsl = true; + language = SCLEX_CPP; + } + + if(language == SCLEX_GLSL) + { + glsl = true; + language = SCLEX_CPP; + } + + scintilla->setLexer(language); + scintilla->styleSetFont(STYLE_DEFAULT, "Consolas"); + scintilla->styleSetSize(STYLE_DEFAULT, 10); + + if(language == SCLEX_CPP) + { + scintilla->setProperty("lexer.cpp.track.preprocessor", "0"); + + scintilla->styleSetFore(SCE_C_COMMENT, SCINTILLA_COLOUR(0, 150, 0)); + scintilla->styleSetFore(SCE_C_COMMENTDOC, SCINTILLA_COLOUR(0, 150, 0)); + scintilla->styleSetFore(SCE_C_COMMENTLINE, SCINTILLA_COLOUR(0, 150, 0)); + scintilla->styleSetFore(SCE_C_WORD, SCINTILLA_COLOUR(0, 0, 150)); + scintilla->styleSetFore(SCE_C_WORD2, SCINTILLA_COLOUR(0, 0, 150)); + + if(hlsl) + { + scintilla->setKeyWords(0, hlsl_keywords[0]); + scintilla->setKeyWords(1, hlsl_keywords[1]); + } + else if(glsl) + { + scintilla->setKeyWords(0, glsl_keywords[0]); + scintilla->setKeyWords(1, glsl_keywords[1]); + } + } +} diff --git a/qrenderdoc/Code/ScintillaSyntax.h b/qrenderdoc/Code/ScintillaSyntax.h new file mode 100644 index 000000000..2dee3f3a9 --- /dev/null +++ b/qrenderdoc/Code/ScintillaSyntax.h @@ -0,0 +1,34 @@ +/****************************************************************************** + * The MIT License (MIT) + * + * Copyright (c) 2017 Baldur Karlsson + * + * 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. + ******************************************************************************/ + +#pragma once + +#define SCLEX_GLSL 1000 +#define SCLEX_HLSL 1001 + +#define SCINTILLA_COLOUR(r, g, b) (long(r) | (long(g) << 8) | (long(b) << 16)) + +class ScintillaEdit; + +void ConfigureSyntax(ScintillaEdit *scintilla, int language); diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp index 9be58424b..9b9981a35 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp @@ -29,6 +29,7 @@ #include "Windows/BufferViewer.h" #include "Windows/ConstantBufferPreviewer.h" #include "Windows/MainWindow.h" +#include "Windows/ShaderViewer.h" #include "Windows/TextureViewer.h" #include "ui_VulkanPipelineStateViewer.h" @@ -94,6 +95,10 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(CaptureContext *ctx, QWidge { ui->setupUi(this); + RDLabel *shaderLabels[] = { + ui->vsShader, ui->tcsShader, ui->tesShader, ui->gsShader, ui->fsShader, ui->csShader, + }; + QToolButton *viewButtons[] = { ui->vsShaderViewButton, ui->tcsShaderViewButton, ui->tesShaderViewButton, ui->gsShaderViewButton, ui->fsShaderViewButton, ui->csShaderViewButton, @@ -121,6 +126,9 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(CaptureContext *ctx, QWidge for(QToolButton *b : viewButtons) QObject::connect(b, &QToolButton::clicked, this, &VulkanPipelineStateViewer::shaderView_clicked); + for(RDLabel *b : shaderLabels) + QObject::connect(b, &RDLabel::clicked, this, &VulkanPipelineStateViewer::shaderView_clicked); + for(QToolButton *b : editButtons) QObject::connect(b, &QToolButton::clicked, this, &VulkanPipelineStateViewer::shaderEdit_clicked); @@ -2146,6 +2154,8 @@ void VulkanPipelineStateViewer::ubo_itemActivated(QTreeWidgetItem *item, int col ConstantBufferPreviewer *prev = new ConstantBufferPreviewer(m_Ctx, stage->stage, cb.slotIdx, cb.arrayIdx, m_Ctx->mainWindow()); + m_Ctx->setupDockWindow(prev); + ToolWindowManager *manager = ToolWindowManager::managerOf(this); ToolWindowManager::AreaReference ref(ToolWindowManager::RightOf, manager->areaOf(this), 0.3f); @@ -2278,6 +2288,22 @@ void VulkanPipelineStateViewer::vertex_leave(QEvent *e) void VulkanPipelineStateViewer::shaderView_clicked() { + const VulkanPipelineState::ShaderStage *stage = + stageForSender(qobject_cast(QObject::sender())); + + if(stage == NULL || stage->Shader == ResourceId()) + return; + + ShaderReflection *shaderDetails = stage->ShaderDetails; + + ShaderViewer *shad = new ShaderViewer(m_Ctx, shaderDetails, stage->stage, NULL, ""); + + m_Ctx->setupDockWindow(shad); + + ToolWindowManager *manager = ToolWindowManager::managerOf(this); + + ToolWindowManager::AreaReference ref(ToolWindowManager::AddTo, manager->areaOf(this)); + manager->addToolWindow(shad, ref); } void VulkanPipelineStateViewer::shaderEdit_clicked() diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.ui b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.ui index 3b04966dc..7208ce807 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.ui +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.ui @@ -518,7 +518,7 @@ 4 - + 250 @@ -846,7 +846,7 @@ padding: 0px; 4 - + 250 @@ -1174,7 +1174,7 @@ padding: 0px; 4 - + 250 @@ -1502,7 +1502,7 @@ padding: 0px; 4 - + 250 @@ -2493,7 +2493,7 @@ padding: 0px; 4 - + 250 @@ -3434,7 +3434,7 @@ padding: 0px; 4 - + 250 @@ -3733,6 +3733,11 @@ padding: 0px; QTreeWidget
Widgets/Extended/RDTreeWidget.h
+ + RDLabel + QLabel +
Widgets/Extended/RDLabel.h
+
diff --git a/qrenderdoc/Windows/ShaderViewer.cpp b/qrenderdoc/Windows/ShaderViewer.cpp new file mode 100644 index 000000000..3d3ef5f30 --- /dev/null +++ b/qrenderdoc/Windows/ShaderViewer.cpp @@ -0,0 +1,266 @@ +/****************************************************************************** + * The MIT License (MIT) + * + * Copyright (c) 2017 Baldur Karlsson + * + * 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. + ******************************************************************************/ + +#include "ShaderViewer.h" +#include +#include "3rdparty/toolwindowmanager/ToolWindowManager.h" +#include "Code/ScintillaSyntax.h" +#include "SciLexer.h" +#include "ScintillaEdit.h" +#include "ui_ShaderViewer.h" + +ShaderViewer::ShaderViewer(CaptureContext *ctx, ShaderReflection *shader, ShaderStageType stage, + ShaderDebugTrace *trace, const QString &debugContext, QWidget *parent) + : QFrame(parent), ui(new Ui::ShaderViewer), m_Ctx(ctx) +{ + ui->setupUi(this); + + m_ShaderDetails = shader; + m_Trace = trace; + + if(trace != NULL) + setWindowTitle( + QString("Debugging %1 - %2").arg(m_Ctx->CurPipelineState.GetShaderName(stage)).arg(debugContext)); + else + setWindowTitle(m_Ctx->CurPipelineState.GetShaderName(stage)); + + QString disasm = shader != NULL ? ToQStr(shader->Disassembly) : ""; + + { + m_DisassemblyView = MakeEditor("scintillaDisassem", disasm, + m_Ctx->APIProps().pipelineType == eGraphicsAPI_Vulkan); + m_DisassemblyView->setReadOnly(true); + m_DisassemblyView->setWindowTitle(tr("Disassembly")); + + QObject::connect(m_DisassemblyView, &ScintillaEdit::keyPressed, this, + &ShaderViewer::disassembly_keyPressed); + QObject::connect(m_DisassemblyView, &ScintillaEdit::keyPressed, this, + &ShaderViewer::readonly_keyPressed); + + // C# LightCoral + m_DisassemblyView->markerSetBack(CURRENT_MARKER, SCINTILLA_COLOUR(240, 128, 128)); + m_DisassemblyView->markerDefine(CURRENT_MARKER, SC_MARK_SHORTARROW); + + // C# LightSlateGray + m_DisassemblyView->markerSetBack(FINISHED_MARKER, SCINTILLA_COLOUR(119, 136, 153)); + m_DisassemblyView->markerDefine(FINISHED_MARKER, SC_MARK_ROUNDRECT); + + // C# Red + m_DisassemblyView->markerSetBack(BREAKPOINT_MARKER, SCINTILLA_COLOUR(255, 0, 0)); + m_DisassemblyView->markerDefine(BREAKPOINT_MARKER, SC_MARK_CIRCLE); + + m_Scintillas.push_back(m_DisassemblyView); + + ui->docking->addToolWindow(m_DisassemblyView, ToolWindowManager::EmptySpace); + ui->docking->setToolWindowProperties(m_DisassemblyView, ToolWindowManager::HideCloseButton); + } + + if(shader != NULL && shader->DebugInfo.entryFunc.count > 0 && shader->DebugInfo.files.count > 0) + { + if(trace != NULL) + setWindowTitle( + QString("Debug %1() - %2").arg(ToQStr(shader->DebugInfo.entryFunc)).arg(debugContext)); + else + setWindowTitle(ToQStr(shader->DebugInfo.entryFunc)); + + int fileIdx = 0; + + QWidget *sel = m_DisassemblyView; + for(auto &f : shader->DebugInfo.files) + { + QString name = ToQStr(f.first); + QString text = ToQStr(f.second); + + ScintillaEdit *scintilla = MakeEditor("scintilla" + name, text, true); + scintilla->setReadOnly(true); + ((QWidget *)scintilla)->setProperty("name", name); + + QObject::connect(scintilla, &ScintillaEdit::keyPressed, this, + &ShaderViewer::readonly_keyPressed); + + ui->docking->addToolWindow( + scintilla, ToolWindowManager::AreaReference(ToolWindowManager::AddTo, + ui->docking->areaOf(m_DisassemblyView))); + ui->docking->setToolWindowProperties(scintilla, ToolWindowManager::HideCloseButton); + + m_Scintillas.push_back(scintilla); + + if(shader->DebugInfo.entryFile >= 0 && + shader->DebugInfo.entryFile < shader->DebugInfo.files.count) + { + if(fileIdx == shader->DebugInfo.entryFile) + sel = scintilla; + } + else if(text.contains(ToQStr(shader->DebugInfo.entryFunc))) + { + sel = scintilla; + } + + fileIdx++; + } + + // if(shader->DebugInfo.files.count > 2) + // AddFileList(); + + ToolWindowManager::raiseToolWindow(sel); + } + + for(int i = 0; i < ui->inputSig->header()->count(); i++) + ui->inputSig->header()->setSectionResizeMode(i, QHeaderView::ResizeToContents); + + for(int i = 0; i < ui->outputSig->header()->count(); i++) + ui->outputSig->header()->setSectionResizeMode(i, QHeaderView::ResizeToContents); + + if(m_ShaderDetails != NULL) + { + for(SigParameter &s : m_ShaderDetails->InputSig) + { + QString name = s.varName.count == 0 + ? ToQStr(s.semanticName) + : QString("%1 (%2)").arg(ToQStr(s.varName)).arg(ToQStr(s.semanticName)); + if(s.semanticName.count == 0) + name = s.varName; + + QString semIdx = s.needSemanticIndex ? QString::number(s.semanticIndex) : ""; + + ui->inputSig->addTopLevelItem(makeTreeNode( + {name, semIdx, s.regIndex, TypeString(s), ToQStr(s.systemValue), + GetComponentString(s.regChannelMask), GetComponentString(s.channelUsedMask)})); + } + + bool multipleStreams = false; + for(const SigParameter &s : m_ShaderDetails->OutputSig) + { + if(s.stream > 0) + { + multipleStreams = true; + break; + } + } + + for(const SigParameter &s : m_ShaderDetails->OutputSig) + { + QString name = s.varName.count == 0 + ? ToQStr(s.semanticName) + : QString("%1 (%2)").arg(ToQStr(s.varName)).arg(ToQStr(s.semanticName)); + if(s.semanticName.count == 0) + name = s.varName; + + if(multipleStreams) + name = QString("Stream %1 : %2").arg(s.stream).arg(name); + + QString semIdx = s.needSemanticIndex ? QString::number(s.semanticIndex) : ""; + + ui->outputSig->addTopLevelItem(makeTreeNode( + {name, semIdx, s.regIndex, TypeString(s), ToQStr(s.systemValue), + GetComponentString(s.regChannelMask), GetComponentString(s.channelUsedMask)})); + } + } + + ui->inputSig->setWindowTitle(tr("Input Signature")); + ui->docking->addToolWindow( + ui->inputSig, ToolWindowManager::AreaReference(ToolWindowManager::BottomOf, + ui->docking->areaOf(m_DisassemblyView), 0.2f)); + ui->docking->setToolWindowProperties(ui->inputSig, ToolWindowManager::HideCloseButton); + + ui->outputSig->setWindowTitle(tr("Output Signature")); + ui->docking->addToolWindow( + ui->outputSig, ToolWindowManager::AreaReference(ToolWindowManager::RightOf, + ui->docking->areaOf(ui->inputSig), 0.5f)); + ui->docking->setToolWindowProperties(ui->outputSig, ToolWindowManager::HideCloseButton); + + ui->docking->setAllowFloatingWindow(false); + ui->docking->setRubberBandLineWidth(50); + + QHBoxLayout *layout = new QHBoxLayout(this); + layout->addWidget(ui->docking); + + m_Ctx->AddLogViewer(this); +} + +ShaderViewer::~ShaderViewer() +{ + m_Ctx->RemoveLogViewer(this); + delete ui; +} + +void ShaderViewer::OnLogfileLoaded() +{ +} + +void ShaderViewer::OnLogfileClosed() +{ + ToolWindowManager::closeToolWindow(this); +} + +void ShaderViewer::OnEventChanged(uint32_t eventID) +{ +} + +void ShaderViewer::disassembly_keyPressed(QKeyEvent *event) +{ +} + +void ShaderViewer::readonly_keyPressed(QKeyEvent *event) +{ +} + +ScintillaEdit *ShaderViewer::MakeEditor(const QString &name, const QString &text, bool src) +{ + ScintillaEdit *ret = new ScintillaEdit(this); + + ret->setText(text.toUtf8().data()); + + sptr_t numlines = ret->lineCount(); + + int margin0width = 30; + if(numlines > 1000) + margin0width += 6; + if(numlines > 10000) + margin0width += 6; + + ret->setMarginLeft(4); + ret->setMarginWidthN(0, margin0width); + ret->setMarginWidthN(1, 0); + ret->setMarginWidthN(2, 16); + ret->setObjectName(name); + + // C# DarkGreen + ret->indicSetFore(4, SCINTILLA_COLOUR(0, 100, 0)); + ret->indicSetStyle(4, INDIC_ROUNDBOX); + + ConfigureSyntax(ret, + m_Ctx->APIProps().localRenderer == eGraphicsAPI_OpenGL ? SCLEX_GLSL : SCLEX_HLSL); + + ret->setTabWidth(4); + + ret->setScrollWidth(1); + ret->setScrollWidthTracking(true); + + ret->colourise(0, -1); + + ret->emptyUndoBuffer(); + + return ret; +} diff --git a/qrenderdoc/Windows/ShaderViewer.h b/qrenderdoc/Windows/ShaderViewer.h new file mode 100644 index 000000000..9395ff70c --- /dev/null +++ b/qrenderdoc/Windows/ShaderViewer.h @@ -0,0 +1,72 @@ +/****************************************************************************** + * The MIT License (MIT) + * + * Copyright (c) 2017 Baldur Karlsson + * + * 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. + ******************************************************************************/ + +#pragma once + +#include +#include +#include "Code/CaptureContext.h" + +namespace Ui +{ +class ShaderViewer; +} + +struct ShaderDebugTrace; +struct ShaderReflection; +class ScintillaEdit; + +class ShaderViewer : public QFrame, public ILogViewerForm +{ + Q_OBJECT + +public: + explicit ShaderViewer(CaptureContext *ctx, ShaderReflection *shader, ShaderStageType stage, + ShaderDebugTrace *trace, const QString &debugContext, QWidget *parent = 0); + ~ShaderViewer(); + + void OnLogfileLoaded(); + void OnLogfileClosed(); + void OnSelectedEventChanged(uint32_t eventID) {} + void OnEventChanged(uint32_t eventID); + +private slots: + // manual slots + void disassembly_keyPressed(QKeyEvent *event); + void readonly_keyPressed(QKeyEvent *event); + +private: + Ui::ShaderViewer *ui; + CaptureContext *m_Ctx; + ShaderDebugTrace *m_Trace; + ShaderReflection *m_ShaderDetails; + ScintillaEdit *m_DisassemblyView; + QList m_Scintillas; + + static const int CURRENT_MARKER = 0; + static const int BREAKPOINT_MARKER = 1; + static const int FINISHED_MARKER = 2; + + ScintillaEdit *MakeEditor(const QString &name, const QString &text, bool src); +}; diff --git a/qrenderdoc/Windows/ShaderViewer.ui b/qrenderdoc/Windows/ShaderViewer.ui new file mode 100644 index 000000000..d62c03e06 --- /dev/null +++ b/qrenderdoc/Windows/ShaderViewer.ui @@ -0,0 +1,198 @@ + + + ShaderViewer + + + + 0 + 0 + 691 + 427 + + + + Form + + + + + 0 + 0 + 100 + 30 + + + + + + + 60 + 200 + 256 + 192 + + + + QFrame::Panel + + + QFrame::Sunken + + + QAbstractItemView::NoEditTriggers + + + false + + + false + + + true + + + 0 + + + false + + + false + + + true + + + 7 + + + false + + + + Name + + + + + Index + + + + + Reg + + + + + Type + + + + + SysValue + + + + + Mask + + + + + Used + + + + + + + 360 + 200 + 256 + 192 + + + + QFrame::Panel + + + QFrame::Sunken + + + QAbstractItemView::NoEditTriggers + + + false + + + false + + + true + + + 0 + + + false + + + false + + + true + + + 7 + + + false + + + + Name + + + + + Index + + + + + Reg + + + + + Type + + + + + SysValue + + + + + Mask + + + + + Used + + + + + + + ToolWindowManager + QWidget +
ToolWindowManager.h
+
+
+ + +
diff --git a/qrenderdoc/qrenderdoc.pro b/qrenderdoc/qrenderdoc.pro index 1d7defc2d..8cad9129d 100644 --- a/qrenderdoc/qrenderdoc.pro +++ b/qrenderdoc/qrenderdoc.pro @@ -93,40 +93,7 @@ win32 { } } -# Add Scintilla - -# Needed for building -DEFINES += SCINTILLA_QT=1 MAKING_LIBRARY=1 SCI_LEXER=1 -INCLUDEPATH += $$_PRO_FILE_PWD_/3rdparty/scintilla/src -INCLUDEPATH += $$_PRO_FILE_PWD_/3rdparty/scintilla/lexlib - -SOURCES += $$_PRO_FILE_PWD_/3rdparty/scintilla/lexlib/*.cxx \ - $$_PRO_FILE_PWD_/3rdparty/scintilla/lexers/*.cxx \ - $$_PRO_FILE_PWD_/3rdparty/scintilla/src/*.cxx \ - $$_PRO_FILE_PWD_/3rdparty/scintilla/qt/ScintillaEdit/*.cpp \ - $$_PRO_FILE_PWD_/3rdparty/scintilla/qt/ScintillaEditBase/*.cpp - -HEADERS += $$_PRO_FILE_PWD_/3rdparty/scintilla/lexlib/*.h \ - $$_PRO_FILE_PWD_/3rdparty/scintilla/src/*.h \ - $$_PRO_FILE_PWD_/3rdparty/scintilla/qt/ScintillaEdit/*.h \ - $$_PRO_FILE_PWD_/3rdparty/scintilla/qt/ScintillaEditBase/*.h - -# Add ToolWindowManager - -SOURCES += 3rdparty/toolwindowmanager/ToolWindowManager.cpp \ - 3rdparty/toolwindowmanager/ToolWindowManagerArea.cpp \ - 3rdparty/toolwindowmanager/ToolWindowManagerWrapper.cpp - -HEADERS += 3rdparty/toolwindowmanager/ToolWindowManager.h \ - 3rdparty/toolwindowmanager/ToolWindowManagerArea.h \ - 3rdparty/toolwindowmanager/ToolWindowManagerWrapper.h - -# Add FlowLayout - -SOURCES += 3rdparty/flowlayout/FlowLayout.cpp -HEADERS += 3rdparty/flowlayout/FlowLayout.h - -# Add our sources +# Add our sources first so Qt Creator adds new files here SOURCES += Code/qrenderdoc.cpp \ Code/qprocessinfo.cpp \ @@ -134,6 +101,7 @@ SOURCES += Code/qrenderdoc.cpp \ Code/CommonPipelineState.cpp \ Code/PersistantConfig.cpp \ Code/CaptureContext.cpp \ + Code/ScintillaSyntax.cpp \ Windows/Dialogs/AboutDialog.cpp \ Windows/MainWindow.cpp \ Windows/EventBrowser.cpp \ @@ -170,6 +138,7 @@ HEADERS += Code/CaptureContext.h \ Code/RenderManager.h \ Code/PersistantConfig.h \ Code/CommonPipelineState.h \ + Code/ScintillaSyntax.h \ Windows/Dialogs/AboutDialog.h \ Windows/MainWindow.h \ Windows/EventBrowser.h \ @@ -217,6 +186,43 @@ FORMS += Windows/Dialogs/AboutDialog.ui \ Windows/PipelineState/GLPipelineStateViewer.ui \ Windows/ConstantBufferPreviewer.ui \ Widgets/BufferFormatSpecifier.ui \ - Windows/BufferViewer.ui + Windows/BufferViewer.ui \ + Windows/ShaderViewer.ui RESOURCES += resources.qrc + +# Add ToolWindowManager + +SOURCES += 3rdparty/toolwindowmanager/ToolWindowManager.cpp \ + 3rdparty/toolwindowmanager/ToolWindowManagerArea.cpp \ + 3rdparty/toolwindowmanager/ToolWindowManagerWrapper.cpp + +HEADERS += 3rdparty/toolwindowmanager/ToolWindowManager.h \ + 3rdparty/toolwindowmanager/ToolWindowManagerArea.h \ + 3rdparty/toolwindowmanager/ToolWindowManagerWrapper.h + +# Add FlowLayout + +SOURCES += 3rdparty/flowlayout/FlowLayout.cpp +HEADERS += 3rdparty/flowlayout/FlowLayout.h + +# Add Scintilla last as it has extra search paths + +# Needed for building +DEFINES += SCINTILLA_QT=1 MAKING_LIBRARY=1 SCI_LEXER=1 +INCLUDEPATH += $$_PRO_FILE_PWD_/3rdparty/scintilla/src +INCLUDEPATH += $$_PRO_FILE_PWD_/3rdparty/scintilla/lexlib + +SOURCES += $$_PRO_FILE_PWD_/3rdparty/scintilla/lexlib/*.cxx \ + $$_PRO_FILE_PWD_/3rdparty/scintilla/lexers/*.cxx \ + $$_PRO_FILE_PWD_/3rdparty/scintilla/src/*.cxx \ + $$_PRO_FILE_PWD_/3rdparty/scintilla/qt/ScintillaEdit/*.cpp \ + $$_PRO_FILE_PWD_/3rdparty/scintilla/qt/ScintillaEditBase/*.cpp \ + Windows/ShaderViewer.cpp + +HEADERS += $$_PRO_FILE_PWD_/3rdparty/scintilla/lexlib/*.h \ + $$_PRO_FILE_PWD_/3rdparty/scintilla/src/*.h \ + $$_PRO_FILE_PWD_/3rdparty/scintilla/qt/ScintillaEdit/*.h \ + $$_PRO_FILE_PWD_/3rdparty/scintilla/qt/ScintillaEditBase/*.h \ + Windows/ShaderViewer.h + diff --git a/qrenderdoc/qrenderdoc_local.vcxproj b/qrenderdoc/qrenderdoc_local.vcxproj index fda266da9..5e7d81e58 100644 --- a/qrenderdoc/qrenderdoc_local.vcxproj +++ b/qrenderdoc/qrenderdoc_local.vcxproj @@ -489,6 +489,7 @@ + @@ -517,6 +518,7 @@ + @@ -558,6 +560,7 @@ + Level3 @@ -638,6 +641,7 @@ + @@ -652,6 +656,7 @@ + @@ -687,6 +692,7 @@ + @@ -710,6 +716,7 @@ + diff --git a/qrenderdoc/qrenderdoc_local.vcxproj.filters b/qrenderdoc/qrenderdoc_local.vcxproj.filters index 54099965a..c5572c5f9 100644 --- a/qrenderdoc/qrenderdoc_local.vcxproj.filters +++ b/qrenderdoc/qrenderdoc_local.vcxproj.filters @@ -457,6 +457,15 @@ Generated Files + + Windows + + + Generated Files + + + Code + @@ -807,6 +816,15 @@ 3rdparty\Scintilla\qt\ScintillaEdit + + Windows + + + Generated Files + + + Code + @@ -1040,6 +1058,9 @@ Windows + + Windows +