mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 01:50:38 +00:00
Add shader viewer (view only - not edit/debug) using Scintilla widget
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
@@ -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<QWidget *>(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()
|
||||
|
||||
@@ -518,7 +518,7 @@
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="vsShader">
|
||||
<widget class="RDLabel" name="vsShader">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
@@ -846,7 +846,7 @@ padding: 0px;</string>
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="tcsShader">
|
||||
<widget class="RDLabel" name="tcsShader">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
@@ -1174,7 +1174,7 @@ padding: 0px;</string>
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="tesShader">
|
||||
<widget class="RDLabel" name="tesShader">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
@@ -1502,7 +1502,7 @@ padding: 0px;</string>
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="gsShader">
|
||||
<widget class="RDLabel" name="gsShader">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
@@ -2493,7 +2493,7 @@ padding: 0px;</string>
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="fsShader">
|
||||
<widget class="RDLabel" name="fsShader">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
@@ -3434,7 +3434,7 @@ padding: 0px;</string>
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="csShader">
|
||||
<widget class="RDLabel" name="csShader">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
@@ -3733,6 +3733,11 @@ padding: 0px;</string>
|
||||
<extends>QTreeWidget</extends>
|
||||
<header>Widgets/Extended/RDTreeWidget.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>RDLabel</class>
|
||||
<extends>QLabel</extends>
|
||||
<header>Widgets/Extended/RDLabel.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources>
|
||||
<include location="../../resources.qrc"/>
|
||||
|
||||
@@ -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 <QHBoxLayout>
|
||||
#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;
|
||||
}
|
||||
@@ -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 <QFrame>
|
||||
#include <QKeyEvent>
|
||||
#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<ScintillaEdit *> 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);
|
||||
};
|
||||
@@ -0,0 +1,198 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>ShaderViewer</class>
|
||||
<widget class="QFrame" name="ShaderViewer">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>691</width>
|
||||
<height>427</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<widget class="ToolWindowManager" name="docking" native="true">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QTreeWidget" name="inputSig">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>60</x>
|
||||
<y>200</y>
|
||||
<width>256</width>
|
||||
<height>192</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Panel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="dragDropOverwriteMode">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="indentation">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="itemsExpandable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="allColumnsShowFocus">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="columnCount">
|
||||
<number>7</number>
|
||||
</property>
|
||||
<property name="cornerButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Name</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Index</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Reg</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Type</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>SysValue</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Mask</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Used</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
<widget class="QTreeWidget" name="outputSig">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>360</x>
|
||||
<y>200</y>
|
||||
<width>256</width>
|
||||
<height>192</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Panel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="dragDropOverwriteMode">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="indentation">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="itemsExpandable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="allColumnsShowFocus">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="columnCount">
|
||||
<number>7</number>
|
||||
</property>
|
||||
<property name="cornerButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Name</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Index</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Reg</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Type</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>SysValue</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Mask</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Used</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>ToolWindowManager</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>ToolWindowManager.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
+41
-35
@@ -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
|
||||
|
||||
|
||||
@@ -489,6 +489,7 @@
|
||||
<ClCompile Include="Code\PersistantConfig.cpp" />
|
||||
<ClCompile Include="Code\qprocessinfo.cpp" />
|
||||
<ClCompile Include="Code\QRDUtils.cpp" />
|
||||
<ClCompile Include="Code\ScintillaSyntax.cpp" />
|
||||
<ClCompile Include="generated\moc_AboutDialog.cpp" />
|
||||
<ClCompile Include="generated\moc_APIInspector.cpp" />
|
||||
<ClCompile Include="generated\moc_BufferFormatSpecifier.cpp" />
|
||||
@@ -517,6 +518,7 @@
|
||||
<ClCompile Include="generated\moc_ScintillaEdit.cpp" />
|
||||
<ClCompile Include="generated\moc_ScintillaEditBase.cpp" />
|
||||
<ClCompile Include="generated\moc_ScintillaQt.cpp" />
|
||||
<ClCompile Include="generated\moc_ShaderViewer.cpp" />
|
||||
<ClCompile Include="generated\moc_TextureGoto.cpp" />
|
||||
<ClCompile Include="generated\moc_TextureSaveDialog.cpp" />
|
||||
<ClCompile Include="generated\moc_TextureViewer.cpp" />
|
||||
@@ -558,6 +560,7 @@
|
||||
<ClCompile Include="Windows\PipelineState\GLPipelineStateViewer.cpp" />
|
||||
<ClCompile Include="Windows\PipelineState\PipelineStateViewer.cpp" />
|
||||
<ClCompile Include="Windows\PipelineState\VulkanPipelineStateViewer.cpp" />
|
||||
<ClCompile Include="Windows\ShaderViewer.cpp" />
|
||||
<ClCompile Include="Windows\TextureViewer.cpp" />
|
||||
<ClCompile Include="3rdparty\toolwindowmanager\ToolWindowManager.cpp">
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
@@ -638,6 +641,7 @@
|
||||
<ClInclude Include="Code\PersistantConfig.h" />
|
||||
<ClInclude Include="Code\qprocessinfo.h" />
|
||||
<ClInclude Include="Code\QRDUtils.h" />
|
||||
<ClInclude Include="Code\ScintillaSyntax.h" />
|
||||
<ClInclude Include="generated\ui_AboutDialog.h" />
|
||||
<ClInclude Include="generated\ui_APIInspector.h" />
|
||||
<ClInclude Include="generated\ui_BufferFormatSpecifier.h" />
|
||||
@@ -652,6 +656,7 @@
|
||||
<ClInclude Include="generated\ui_MainWindow.h" />
|
||||
<ClInclude Include="generated\ui_PipelineStateViewer.h" />
|
||||
<ClInclude Include="generated\ui_ResourcePreview.h" />
|
||||
<ClInclude Include="generated\ui_ShaderViewer.h" />
|
||||
<ClInclude Include="generated\ui_TextureSaveDialog.h" />
|
||||
<ClInclude Include="generated\ui_TextureViewer.h" />
|
||||
<ClInclude Include="generated\ui_ThumbnailStrip.h" />
|
||||
@@ -687,6 +692,7 @@
|
||||
<ClInclude Include="Windows\PipelineState\GLPipelineStateViewer.h" />
|
||||
<ClInclude Include="Windows\PipelineState\PipelineStateViewer.h" />
|
||||
<ClInclude Include="Windows\PipelineState\VulkanPipelineStateViewer.h" />
|
||||
<ClInclude Include="Windows\ShaderViewer.h" />
|
||||
<ClInclude Include="Windows\TextureViewer.h" />
|
||||
<ClInclude Include="3rdparty\toolwindowmanager\ToolWindowManager.h" />
|
||||
<ClInclude Include="3rdparty\toolwindowmanager\ToolWindowManagerArea.h" />
|
||||
@@ -710,6 +716,7 @@
|
||||
<None Include="Windows\PipelineState\GLPipelineStateViewer.ui" />
|
||||
<None Include="Windows\PipelineState\PipelineStateViewer.ui" />
|
||||
<None Include="Windows\PipelineState\VulkanPipelineStateViewer.ui" />
|
||||
<None Include="Windows\ShaderViewer.ui" />
|
||||
<None Include="Windows\TextureViewer.ui" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -457,6 +457,15 @@
|
||||
<ClCompile Include="generated\moc_ScintillaEdit.cpp">
|
||||
<Filter>Generated Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Windows\ShaderViewer.cpp">
|
||||
<Filter>Windows</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="generated\moc_ShaderViewer.cpp">
|
||||
<Filter>Generated Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Code\ScintillaSyntax.cpp">
|
||||
<Filter>Code</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="3rdparty\flowlayout\FlowLayout.h">
|
||||
@@ -807,6 +816,15 @@
|
||||
<ClInclude Include="3rdparty\scintilla\qt\ScintillaEdit\ScintillaEdit.h">
|
||||
<Filter>3rdparty\Scintilla\qt\ScintillaEdit</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Windows\ShaderViewer.h">
|
||||
<Filter>Windows</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="generated\ui_ShaderViewer.h">
|
||||
<Filter>Generated Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Code\ScintillaSyntax.h">
|
||||
<Filter>Code</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="resources.qrc">
|
||||
@@ -1040,6 +1058,9 @@
|
||||
<None Include="Windows\BufferViewer.ui">
|
||||
<Filter>Windows</Filter>
|
||||
</None>
|
||||
<None Include="Windows\ShaderViewer.ui">
|
||||
<Filter>Windows</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="generated\ui_AboutDialog.h">
|
||||
|
||||
Reference in New Issue
Block a user