mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-25 16:06:31 +00:00
Add some utility functions to rdctype::array/str
* Avoids the need to directly reference .elems to cast to const char* for strings, and has begin()/end() for C++11 foreach loops
This commit is contained in:
@@ -130,9 +130,9 @@ void CaptureContext::LoadLogfile(int proxyRenderer, QString replayHost, QString
|
||||
m_CurWinSystem = eWindowingSystem_Xlib;
|
||||
|
||||
// prefer XCB, if supported
|
||||
for(int32_t i = 0; i < m_WinSystems.count; i++)
|
||||
for(WindowingSystem sys : m_WinSystems)
|
||||
{
|
||||
if(m_WinSystems[i] == eWindowingSystem_XCB)
|
||||
if(sys == eWindowingSystem_XCB)
|
||||
{
|
||||
m_CurWinSystem = eWindowingSystem_XCB;
|
||||
break;
|
||||
@@ -146,14 +146,14 @@ void CaptureContext::LoadLogfile(int proxyRenderer, QString replayHost, QString
|
||||
#endif
|
||||
|
||||
r->GetBuffers(&m_BufferList);
|
||||
for(int i = 0; i < m_BufferList.count; i++)
|
||||
m_Buffers[m_BufferList[i].ID] = &m_BufferList[i];
|
||||
for(FetchBuffer &b : m_BufferList)
|
||||
m_Buffers[b.ID] = &b;
|
||||
|
||||
postloadProgress = 0.8f;
|
||||
|
||||
r->GetTextures(&m_TextureList);
|
||||
for(int i = 0; i < m_TextureList.count; i++)
|
||||
m_Textures[m_TextureList[i].ID] = &m_TextureList[i];
|
||||
for(FetchTexture &t : m_TextureList)
|
||||
m_Textures[t.ID] = &t;
|
||||
|
||||
postloadProgress = 0.9f;
|
||||
|
||||
|
||||
@@ -124,8 +124,8 @@ public:
|
||||
void AddMessages(rdctype::array<DebugMessage> &msgs)
|
||||
{
|
||||
UnreadMessageCount += msgs.count;
|
||||
for(int i = 0; i < msgs.count; i++)
|
||||
DebugMessages.push_back(msgs[i]);
|
||||
for(DebugMessage &msg : msgs)
|
||||
DebugMessages.push_back(msg);
|
||||
}
|
||||
|
||||
WindowingSystem m_CurWinSystem;
|
||||
@@ -150,17 +150,17 @@ private:
|
||||
|
||||
const FetchDrawcall *GetDrawcall(const rdctype::array<FetchDrawcall> &draws, uint32_t eventID)
|
||||
{
|
||||
for(int i = 0; i < draws.count; i++)
|
||||
for(const FetchDrawcall &d : draws)
|
||||
{
|
||||
if(draws[i].children.count > 0)
|
||||
if(!d.children.empty())
|
||||
{
|
||||
const FetchDrawcall *draw = GetDrawcall(draws[i].children, eventID);
|
||||
const FetchDrawcall *draw = GetDrawcall(d.children, eventID);
|
||||
if(draw != NULL)
|
||||
return draw;
|
||||
}
|
||||
|
||||
if(draws[i].eventID == eventID)
|
||||
return &draws[i];
|
||||
if(d.eventID == eventID)
|
||||
return &d;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
@@ -252,21 +252,23 @@ ShaderReflection *CommonPipelineState::GetShaderReflection(ShaderStageType stage
|
||||
|
||||
QString CommonPipelineState::GetShaderEntryPoint(ShaderStageType stage)
|
||||
{
|
||||
QString ret;
|
||||
|
||||
if(LogLoaded() && IsLogVK())
|
||||
{
|
||||
switch(stage)
|
||||
{
|
||||
case eShaderStage_Vertex: return m_Vulkan->VS.entryPoint.elems;
|
||||
case eShaderStage_Tess_Control: return m_Vulkan->TCS.entryPoint.elems;
|
||||
case eShaderStage_Tess_Eval: return m_Vulkan->TES.entryPoint.elems;
|
||||
case eShaderStage_Geometry: return m_Vulkan->GS.entryPoint.elems;
|
||||
case eShaderStage_Fragment: return m_Vulkan->FS.entryPoint.elems;
|
||||
case eShaderStage_Compute: return m_Vulkan->CS.entryPoint.elems;
|
||||
case eShaderStage_Vertex: ret = m_Vulkan->VS.entryPoint;
|
||||
case eShaderStage_Tess_Control: ret = m_Vulkan->TCS.entryPoint;
|
||||
case eShaderStage_Tess_Eval: ret = m_Vulkan->TES.entryPoint;
|
||||
case eShaderStage_Geometry: ret = m_Vulkan->GS.entryPoint;
|
||||
case eShaderStage_Fragment: ret = m_Vulkan->FS.entryPoint;
|
||||
case eShaderStage_Compute: ret = m_Vulkan->CS.entryPoint;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
return "";
|
||||
return ret;
|
||||
}
|
||||
|
||||
ResourceId CommonPipelineState::GetShader(ShaderStageType stage)
|
||||
@@ -332,18 +334,20 @@ ResourceId CommonPipelineState::GetShader(ShaderStageType stage)
|
||||
|
||||
QString CommonPipelineState::GetShaderName(ShaderStageType stage)
|
||||
{
|
||||
QString ret;
|
||||
|
||||
if(LogLoaded())
|
||||
{
|
||||
if(IsLogD3D11())
|
||||
{
|
||||
switch(stage)
|
||||
{
|
||||
case eShaderStage_Vertex: return m_D3D11->m_VS.ShaderName.elems;
|
||||
case eShaderStage_Domain: return m_D3D11->m_DS.ShaderName.elems;
|
||||
case eShaderStage_Hull: return m_D3D11->m_HS.ShaderName.elems;
|
||||
case eShaderStage_Geometry: return m_D3D11->m_GS.ShaderName.elems;
|
||||
case eShaderStage_Pixel: return m_D3D11->m_PS.ShaderName.elems;
|
||||
case eShaderStage_Compute: return m_D3D11->m_CS.ShaderName.elems;
|
||||
case eShaderStage_Vertex: ret = m_D3D11->m_VS.ShaderName;
|
||||
case eShaderStage_Domain: ret = m_D3D11->m_DS.ShaderName;
|
||||
case eShaderStage_Hull: ret = m_D3D11->m_HS.ShaderName;
|
||||
case eShaderStage_Geometry: ret = m_D3D11->m_GS.ShaderName;
|
||||
case eShaderStage_Pixel: ret = m_D3D11->m_PS.ShaderName;
|
||||
case eShaderStage_Compute: ret = m_D3D11->m_CS.ShaderName;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
@@ -351,12 +355,12 @@ QString CommonPipelineState::GetShaderName(ShaderStageType stage)
|
||||
{
|
||||
switch(stage)
|
||||
{
|
||||
case eShaderStage_Vertex: return QString(m_D3D12->PipelineName.elems) + " VS";
|
||||
case eShaderStage_Domain: return QString(m_D3D12->PipelineName.elems) + " DS";
|
||||
case eShaderStage_Hull: return QString(m_D3D12->PipelineName.elems) + " HS";
|
||||
case eShaderStage_Geometry: return QString(m_D3D12->PipelineName.elems) + " GS";
|
||||
case eShaderStage_Pixel: return QString(m_D3D12->PipelineName.elems) + " PS";
|
||||
case eShaderStage_Compute: return QString(m_D3D12->PipelineName.elems) + " CS";
|
||||
case eShaderStage_Vertex: ret = QString(m_D3D12->PipelineName) + " VS";
|
||||
case eShaderStage_Domain: ret = QString(m_D3D12->PipelineName) + " DS";
|
||||
case eShaderStage_Hull: ret = QString(m_D3D12->PipelineName) + " HS";
|
||||
case eShaderStage_Geometry: ret = QString(m_D3D12->PipelineName) + " GS";
|
||||
case eShaderStage_Pixel: ret = QString(m_D3D12->PipelineName) + " PS";
|
||||
case eShaderStage_Compute: ret = QString(m_D3D12->PipelineName) + " CS";
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
@@ -364,12 +368,12 @@ QString CommonPipelineState::GetShaderName(ShaderStageType stage)
|
||||
{
|
||||
switch(stage)
|
||||
{
|
||||
case eShaderStage_Vertex: return m_GL->m_VS.ShaderName.elems;
|
||||
case eShaderStage_Tess_Control: return m_GL->m_TCS.ShaderName.elems;
|
||||
case eShaderStage_Tess_Eval: return m_GL->m_TES.ShaderName.elems;
|
||||
case eShaderStage_Geometry: return m_GL->m_GS.ShaderName.elems;
|
||||
case eShaderStage_Fragment: return m_GL->m_FS.ShaderName.elems;
|
||||
case eShaderStage_Compute: return m_GL->m_CS.ShaderName.elems;
|
||||
case eShaderStage_Vertex: ret = m_GL->m_VS.ShaderName;
|
||||
case eShaderStage_Tess_Control: ret = m_GL->m_TCS.ShaderName;
|
||||
case eShaderStage_Tess_Eval: ret = m_GL->m_TES.ShaderName;
|
||||
case eShaderStage_Geometry: ret = m_GL->m_GS.ShaderName;
|
||||
case eShaderStage_Fragment: ret = m_GL->m_FS.ShaderName;
|
||||
case eShaderStage_Compute: ret = m_GL->m_CS.ShaderName;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
@@ -377,18 +381,18 @@ QString CommonPipelineState::GetShaderName(ShaderStageType stage)
|
||||
{
|
||||
switch(stage)
|
||||
{
|
||||
case eShaderStage_Vertex: return m_Vulkan->VS.ShaderName.elems;
|
||||
case eShaderStage_Domain: return m_Vulkan->TCS.ShaderName.elems;
|
||||
case eShaderStage_Hull: return m_Vulkan->TES.ShaderName.elems;
|
||||
case eShaderStage_Geometry: return m_Vulkan->GS.ShaderName.elems;
|
||||
case eShaderStage_Pixel: return m_Vulkan->FS.ShaderName.elems;
|
||||
case eShaderStage_Compute: return m_Vulkan->CS.ShaderName.elems;
|
||||
case eShaderStage_Vertex: ret = m_Vulkan->VS.ShaderName;
|
||||
case eShaderStage_Domain: ret = m_Vulkan->TCS.ShaderName;
|
||||
case eShaderStage_Hull: ret = m_Vulkan->TES.ShaderName;
|
||||
case eShaderStage_Geometry: ret = m_Vulkan->GS.ShaderName;
|
||||
case eShaderStage_Pixel: ret = m_Vulkan->FS.ShaderName;
|
||||
case eShaderStage_Compute: ret = m_Vulkan->CS.ShaderName;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return "";
|
||||
return ret;
|
||||
}
|
||||
|
||||
void CommonPipelineState::GetIBuffer(ResourceId &buf, uint64_t &ByteOffset)
|
||||
@@ -547,12 +551,12 @@ QVector<VertexInputAttribute> CommonPipelineState::GetVertexInputs()
|
||||
QVector<VertexInputAttribute> ret(layouts.count);
|
||||
for(int i = 0; i < layouts.count; i++)
|
||||
{
|
||||
QString semName(layouts[i].SemanticName.elems);
|
||||
QString semName(layouts[i].SemanticName);
|
||||
|
||||
bool needsSemanticIdx = false;
|
||||
for(int j = 0; j < layouts.count; j++)
|
||||
{
|
||||
if(i != j && !semName.compare(QString(layouts[j].SemanticName.elems), Qt::CaseInsensitive))
|
||||
if(i != j && !semName.compare(QString(layouts[j].SemanticName), Qt::CaseInsensitive))
|
||||
{
|
||||
needsSemanticIdx = true;
|
||||
break;
|
||||
@@ -582,7 +586,7 @@ QVector<VertexInputAttribute> CommonPipelineState::GetVertexInputs()
|
||||
rdctype::array<SigParameter> &sig = m_D3D11->m_IA.Bytecode->InputSig;
|
||||
for(int ia = 0; ia < sig.count; ia++)
|
||||
{
|
||||
if(!semName.compare(QString(sig[ia].semanticName.elems), Qt::CaseInsensitive) &&
|
||||
if(!semName.compare(QString(sig[ia].semanticName), Qt::CaseInsensitive) &&
|
||||
sig[ia].semanticIndex == layouts[i].SemanticIndex)
|
||||
{
|
||||
ret[i].Used = true;
|
||||
@@ -603,12 +607,12 @@ QVector<VertexInputAttribute> CommonPipelineState::GetVertexInputs()
|
||||
QVector<VertexInputAttribute> ret(layouts.count);
|
||||
for(int i = 0; i < layouts.count; i++)
|
||||
{
|
||||
QString semName(layouts[i].SemanticName.elems);
|
||||
QString semName(layouts[i].SemanticName);
|
||||
|
||||
bool needsSemanticIdx = false;
|
||||
for(int j = 0; j < layouts.count; j++)
|
||||
{
|
||||
if(i != j && !semName.compare(QString(layouts[j].SemanticName.elems), Qt::CaseInsensitive))
|
||||
if(i != j && !semName.compare(QString(layouts[j].SemanticName), Qt::CaseInsensitive))
|
||||
{
|
||||
needsSemanticIdx = true;
|
||||
break;
|
||||
@@ -638,7 +642,7 @@ QVector<VertexInputAttribute> CommonPipelineState::GetVertexInputs()
|
||||
rdctype::array<SigParameter> &sig = m_D3D12->m_VS.ShaderDetails->InputSig;
|
||||
for(int ia = 0; ia < sig.count; ia++)
|
||||
{
|
||||
if(!semName.compare(QString(sig[ia].semanticName.elems), Qt::CaseInsensitive) &&
|
||||
if(!semName.compare(QString(sig[ia].semanticName), Qt::CaseInsensitive) &&
|
||||
sig[ia].semanticIndex == layouts[i].SemanticIndex)
|
||||
{
|
||||
ret[i].Used = true;
|
||||
@@ -685,7 +689,7 @@ QVector<VertexInputAttribute> CommonPipelineState::GetVertexInputs()
|
||||
int attrib = m_GL->m_VS.BindpointMapping.InputAttributes[i];
|
||||
|
||||
if(attrib >= 0 && attrib < m_GL->m_VS.ShaderDetails->InputSig.count)
|
||||
ret[a].Name = m_GL->m_VS.ShaderDetails->InputSig[attrib].varName.elems;
|
||||
ret[a].Name = m_GL->m_VS.ShaderDetails->InputSig[attrib].varName;
|
||||
|
||||
if(attrib == -1)
|
||||
continue;
|
||||
@@ -767,7 +771,7 @@ QVector<VertexInputAttribute> CommonPipelineState::GetVertexInputs()
|
||||
attrib = m_Vulkan->VS.BindpointMapping.InputAttributes[attrs[i].location];
|
||||
|
||||
if(attrib >= 0 && attrib < m_Vulkan->VS.ShaderDetails->InputSig.count)
|
||||
ret[a].Name = m_Vulkan->VS.ShaderDetails->InputSig[attrib].varName.elems;
|
||||
ret[a].Name = m_Vulkan->VS.ShaderDetails->InputSig[attrib].varName;
|
||||
|
||||
if(attrib == -1)
|
||||
continue;
|
||||
|
||||
@@ -131,8 +131,7 @@ uint EventBrowser::AddDrawcalls(QTreeWidgetItem *parent, const rdctype::array<Fe
|
||||
for(int32_t i = 0; i < draws.count; i++)
|
||||
{
|
||||
QTreeWidgetItem *child = new QTreeWidgetItem(
|
||||
parent,
|
||||
QStringList{QString(draws[i].name.elems), QString("%1").arg(draws[i].eventID), "0.0"});
|
||||
parent, QStringList{QString(draws[i].name), QString("%1").arg(draws[i].eventID), "0.0"});
|
||||
|
||||
lastEID = AddDrawcalls(child, draws[i].children);
|
||||
|
||||
@@ -170,10 +169,10 @@ void EventBrowser::SetDrawcallTimes(QTreeWidgetItem *node,
|
||||
|
||||
duration = -1.0;
|
||||
|
||||
for(int32_t i = 0; i < results.count; i++)
|
||||
for(const CounterResult &r : results)
|
||||
{
|
||||
if(results[i].eventID == eid)
|
||||
duration = results[i].value.d;
|
||||
if(r.eventID == eid)
|
||||
duration = r.value.d;
|
||||
}
|
||||
|
||||
node->setText(COL_DURATION, duration < 0.0f ? "" : QString::number(duration * 1000000.0));
|
||||
|
||||
@@ -176,10 +176,11 @@ QVector<BoundResource> Following::GetOutputTargets(CaptureContext *ctx)
|
||||
if(curDraw->copyDestination != ResourceId())
|
||||
return {BoundResource(curDraw->copyDestination)};
|
||||
|
||||
auto &texlist = ctx->GetTextures();
|
||||
for(int i = 0; i < texlist.count; i++)
|
||||
if((texlist[i].creationFlags & eTextureCreate_SwapBuffer))
|
||||
return {BoundResource(texlist[i].ID)};
|
||||
for(const FetchTexture &tex : ctx->GetTextures())
|
||||
{
|
||||
if(tex.creationFlags & eTextureCreate_SwapBuffer)
|
||||
return {BoundResource(tex.ID)};
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -764,9 +765,9 @@ void TextureViewer::UI_UpdateTextureDetails()
|
||||
QString name;
|
||||
|
||||
if(followtex)
|
||||
name = followtex->name.elems;
|
||||
name = followtex->name;
|
||||
else
|
||||
name = followbuf->name.elems;
|
||||
name = followbuf->name;
|
||||
|
||||
switch(m_Following.Type)
|
||||
{
|
||||
@@ -802,7 +803,7 @@ void TextureViewer::UI_UpdateTextureDetails()
|
||||
ui->renderContainer->setWindowTitle(title);
|
||||
}
|
||||
|
||||
status = QString(current.name.elems) + " - ";
|
||||
status = QString(current.name) + " - ";
|
||||
|
||||
if(current.dimension >= 1)
|
||||
status += QString::number(current.width);
|
||||
@@ -819,7 +820,7 @@ void TextureViewer::UI_UpdateTextureDetails()
|
||||
|
||||
status += QString(" %1 mips").arg(current.mips);
|
||||
|
||||
status += " - " + QString(current.format.strname.elems);
|
||||
status += " - " + QString(current.format.strname);
|
||||
|
||||
if(current.format.compType != m_TexDisplay.typeHint && m_TexDisplay.typeHint != eCompType_None)
|
||||
{
|
||||
@@ -1363,10 +1364,10 @@ void TextureViewer::InitResourcePreview(ResourcePreview *prev, ResourceId id,
|
||||
{
|
||||
if(!fullname.isEmpty())
|
||||
fullname += " = ";
|
||||
fullname += texptr->name.elems;
|
||||
fullname += texptr->name;
|
||||
}
|
||||
if(fullname.isEmpty())
|
||||
fullname = texptr->name.elems;
|
||||
fullname = texptr->name;
|
||||
|
||||
prev->setResourceName(fullname);
|
||||
WId handle = prev->thumbWinId();
|
||||
@@ -1381,10 +1382,10 @@ void TextureViewer::InitResourcePreview(ResourcePreview *prev, ResourceId id,
|
||||
{
|
||||
if(!fullname.isEmpty())
|
||||
fullname += " = ";
|
||||
fullname += bufptr->name.elems;
|
||||
fullname += bufptr->name;
|
||||
}
|
||||
if(fullname.isEmpty())
|
||||
fullname = bufptr->name.elems;
|
||||
fullname = bufptr->name;
|
||||
|
||||
prev->setResourceName(fullname);
|
||||
WId handle = prev->thumbWinId();
|
||||
@@ -1463,7 +1464,7 @@ void TextureViewer::InitStageResourcePreviews(ShaderStageType stage,
|
||||
const ShaderResource &bind = resourceDetails[b];
|
||||
if(bind.bindPoint == idx && bind.IsSRV)
|
||||
{
|
||||
bindName = bind.name.elems;
|
||||
bindName = bind.name;
|
||||
otherBind = true;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -75,8 +75,6 @@ struct array
|
||||
|
||||
T &operator[](size_t i) { return elems[i]; }
|
||||
const T &operator[](size_t i) const { return elems[i]; }
|
||||
// to help simple template specializations for vector/rdctype::array
|
||||
size_t size() { return (size_t)count; }
|
||||
array(const T *const in)
|
||||
{
|
||||
elems = 0;
|
||||
@@ -135,6 +133,14 @@ struct array
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
// provide some of the familiar stl interface
|
||||
size_t size() const { return (size_t)count; }
|
||||
bool empty() const { return count == 0; }
|
||||
T *begin() { return elems ? elems : end(); }
|
||||
T *end() { return elems ? elems + count : NULL; }
|
||||
const T *begin() const { return elems ? elems : end(); }
|
||||
const T *end() const { return elems ? elems + count : NULL; }
|
||||
};
|
||||
|
||||
struct str : public rdctype::array<char>
|
||||
@@ -168,6 +174,9 @@ struct str : public rdctype::array<char>
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
operator const char *() const { return elems ? elems : ""; }
|
||||
const char *c_str() const { return elems ? elems : ""; }
|
||||
};
|
||||
|
||||
}; // namespace rdctype
|
||||
|
||||
Reference in New Issue
Block a user