@@ -177,6 +177,7 @@ HRESULT WrappedID3D12Device::CreateStateObject(const D3D12_STATE_OBJECT_DESC *pD
177
177
178
178
rdcarray<ID3D12RootSignature *> rootsigs;
179
179
rdcarray<ID3D12StateObject *> collections;
180
+ size_t numAssocs = 0 ;
180
181
for (size_t i = 0 ; i < subobjects.size (); i++)
181
182
{
182
183
subobjects[i] = pDesc->pSubobjects [i];
@@ -192,28 +193,44 @@ HRESULT WrappedID3D12Device::CreateStateObject(const D3D12_STATE_OBJECT_DESC *pD
192
193
D3D12_EXISTING_COLLECTION_DESC *coll = (D3D12_EXISTING_COLLECTION_DESC *)subobjects[i].pDesc ;
193
194
collections.push_back (coll->pExistingCollection );
194
195
}
196
+ else if (subobjects[i].Type == D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION)
197
+ {
198
+ numAssocs++;
199
+ }
195
200
}
196
201
197
- rdcarray<D3D12_GLOBAL_ROOT_SIGNATURE> rootsigObjs;
202
+ rdcarray<D3D12_GLOBAL_ROOT_SIGNATURE> unwrappedRootsigObjs;
203
+ rdcarray<D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION> rebasedAssocs;
198
204
rdcarray<D3D12_EXISTING_COLLECTION_DESC> collObjs;
199
- rootsigObjs .resize (rootsigs.size ());
205
+ unwrappedRootsigObjs .resize (rootsigs.size ());
200
206
collObjs.resize (collections.size ());
207
+ rebasedAssocs.reserve (numAssocs);
201
208
202
209
for (size_t i = 0 , r = 0 , c = 0 ; i < subobjects.size (); i++)
203
210
{
204
211
if (subobjects[i].Type == D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE ||
205
212
subobjects[i].Type == D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE)
206
213
{
207
214
D3D12_GLOBAL_ROOT_SIGNATURE *rootsig = (D3D12_GLOBAL_ROOT_SIGNATURE *)subobjects[i].pDesc ;
208
- rootsigObjs [r].pGlobalRootSignature = Unwrap (rootsig->pGlobalRootSignature );
209
- subobjects[i].pDesc = &rootsigObjs [r++];
215
+ unwrappedRootsigObjs [r].pGlobalRootSignature = Unwrap (rootsig->pGlobalRootSignature );
216
+ subobjects[i].pDesc = &unwrappedRootsigObjs [r++];
210
217
}
211
218
else if (subobjects[i].Type == D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION)
212
219
{
213
220
D3D12_EXISTING_COLLECTION_DESC *coll = (D3D12_EXISTING_COLLECTION_DESC *)subobjects[i].pDesc ;
214
221
collObjs[c] = *coll;
215
222
collObjs[c].pExistingCollection = Unwrap (collObjs[c].pExistingCollection );
216
223
}
224
+ else if (subobjects[i].Type == D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION)
225
+ {
226
+ D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION assoc =
227
+ *(D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION *)subobjects[i].pDesc ;
228
+
229
+ size_t idx = assoc.pSubobjectToAssociate - pDesc->pSubobjects ;
230
+ assoc.pSubobjectToAssociate = subobjects.data () + idx;
231
+ rebasedAssocs.push_back (assoc);
232
+ subobjects[i].pDesc = &rebasedAssocs.back ();
233
+ }
217
234
}
218
235
219
236
unwrappedDesc.pSubobjects = subobjects.data ();
0 commit comments