Skip to content

Commit 48e73fb

Browse files
committed
Improve handling of Matrix and Vector debug source mappings
1 parent 02c187f commit 48e73fb

File tree

1 file changed

+35
-39
lines changed

1 file changed

+35
-39
lines changed

renderdoc/driver/shaders/dxil/dxil_debug.cpp

+35-39
Original file line numberDiff line numberDiff line change
@@ -7145,7 +7145,7 @@ void Debugger::ParseDebugData()
71457145
usage->rows = rows;
71467146
usage->columns = columns;
71477147

7148-
if(bytesRemaining > 0)
7148+
if((bytesRemaining > 0) && (bytesRemaining != scalar.sizeInBytes * rows * columns))
71497149
{
71507150
if(usage->children.isEmpty())
71517151
{
@@ -7179,6 +7179,8 @@ void Debugger::ParseDebugData()
71797179
}
71807180
RDCASSERTEQUAL(usage->children.size(), rows);
71817181

7182+
// assigning to a vector (row or column)
7183+
uint32_t vecSize = (typeWalk->colMajorMat) ? columns : rows;
71827184
// assigning to a single element
71837185
if(bytesRemaining == scalar.sizeInBytes)
71847186
{
@@ -7224,51 +7226,46 @@ void Debugger::ParseDebugData()
72247226
usage->children[row].emitSourceVar = true;
72257227
}
72267228
}
7227-
else
7229+
// Assigning to a row/col
7230+
else if(bytesRemaining == scalar.sizeInBytes * vecSize)
72287231
{
7229-
// assigning to a vector (row or column)
7230-
uint32_t vecSize = (typeWalk->colMajorMat) ? columns : rows;
7231-
if(bytesRemaining == scalar.sizeInBytes * vecSize)
7232+
uint32_t componentIndex = byteOffset / scalar.sizeInBytes;
7233+
if(typeWalk->colMajorMat)
72327234
{
7233-
uint32_t componentIndex = byteOffset / scalar.sizeInBytes;
7234-
if(typeWalk->colMajorMat)
7235-
{
7236-
uint32_t col = componentIndex % columns;
7237-
RDCASSERT(col < columns, col, columns);
7238-
// one remaining index selects a column within the matrix.
7239-
// source vars are displayed as row-major, need <rows> mappings
7240-
for(uint32_t r = 0; r < rows; ++r)
7241-
{
7242-
RDCASSERTEQUAL(usage->children[r].children.size(), columns);
7243-
usage->children[r].children[col].emitSourceVar =
7244-
!usage->children[r].emitSourceVar;
7245-
usage->children[r].children[col].debugVarSSAName = mapping.debugVarSSAName;
7246-
usage->children[r].children[col].debugVarComponent = r;
7247-
}
7248-
}
7249-
else
7235+
uint32_t col = componentIndex % columns;
7236+
RDCASSERT(col < columns, col, columns);
7237+
// one remaining index selects a column within the matrix.
7238+
// source vars are displayed as row-major, need <rows> mappings
7239+
for(uint32_t r = 0; r < rows; ++r)
72507240
{
7251-
uint32_t row = componentIndex % rows;
7252-
RDCASSERT(row < rows, row, rows);
7253-
RDCASSERTEQUAL(usage->children.size(), rows);
7254-
RDCASSERTEQUAL(usage->children[row].children.size(), columns);
7255-
// one remaining index selects a row within the matrix.
7256-
// source vars are displayed as row-major, need <rows> mappings
7257-
for(uint32_t c = 0; c < columns; ++c)
7258-
{
7259-
usage->children[row].children[c].emitSourceVar =
7260-
!usage->children[row].emitSourceVar;
7261-
usage->children[row].children[c].debugVarSSAName = mapping.debugVarSSAName;
7262-
usage->children[row].children[c].debugVarComponent = c;
7263-
}
7241+
RDCASSERTEQUAL(usage->children[r].children.size(), columns);
7242+
usage->children[r].children[col].emitSourceVar =
7243+
!usage->children[r].emitSourceVar;
7244+
usage->children[r].children[col].debugVarSSAName = mapping.debugVarSSAName;
7245+
usage->children[r].children[col].debugVarComponent = r;
72647246
}
72657247
}
72667248
else
72677249
{
7268-
RDCERR("Unhandled matrix source variable mapping %u %u", bytesRemaining,
7269-
byteOffset);
7250+
uint32_t row = componentIndex % rows;
7251+
RDCASSERT(row < rows, row, rows);
7252+
RDCASSERTEQUAL(usage->children.size(), rows);
7253+
RDCASSERTEQUAL(usage->children[row].children.size(), columns);
7254+
// one remaining index selects a row within the matrix.
7255+
// source vars are displayed as row-major, need <rows> mappings
7256+
for(uint32_t c = 0; c < columns; ++c)
7257+
{
7258+
usage->children[row].children[c].emitSourceVar =
7259+
!usage->children[row].emitSourceVar;
7260+
usage->children[row].children[c].debugVarSSAName = mapping.debugVarSSAName;
7261+
usage->children[row].children[c].debugVarComponent = c;
7262+
}
72707263
}
72717264
}
7265+
else
7266+
{
7267+
RDCERR("Unhandled matrix assignment");
7268+
}
72727269
// try to recombine matrix rows to a single source var display
72737270
for(uint32_t r = 0; r < rows; ++r)
72747271
{
@@ -7313,7 +7310,7 @@ void Debugger::ParseDebugData()
73137310
usage->rows = 1U;
73147311
usage->columns = columns;
73157312

7316-
if(bytesRemaining > 0)
7313+
if(bytesRemaining == scalar.sizeInBytes)
73177314
{
73187315
bytesRemaining -= scalar.sizeInBytes;
73197316
RDCASSERTEQUAL(bytesRemaining, 0);
@@ -7454,7 +7451,6 @@ void Debugger::ParseDebugData()
74547451
}
74557452
else
74567453
{
7457-
RDCASSERTEQUAL(n->rows * n->columns, (uint32_t)n->children.count());
74587454
for(int32_t c = 0; c < n->children.count(); ++c)
74597455
sourceVar.variables.push_back(DebugVariableReference(
74607456
DebugVariableType::Variable,

0 commit comments

Comments
 (0)