|
1018 | 1018 | ptPool->tDesc.szStorageTextureBindings +
|
1019 | 1019 | ptPool->tDesc.szAttachmentTextureBindings;
|
1020 | 1020 |
|
1021 |
| - ptPool->szHeapSize = szMaxSets * sizeof(uint32_t); |
| 1021 | + ptPool->szHeapSize = szMaxSets * sizeof(uint64_t); |
1022 | 1022 |
|
1023 | 1023 | MTLHeapDescriptor* ptHeapDescriptor = [MTLHeapDescriptor new];
|
1024 | 1024 | ptHeapDescriptor.storageMode = MTLStorageModeShared;
|
|
1276 | 1276 |
|
1277 | 1277 | // vertex layout
|
1278 | 1278 | MTLVertexDescriptor* vertexDescriptor = [MTLVertexDescriptor vertexDescriptor];
|
1279 |
| - vertexDescriptor.layouts[4].stepRate = 1; |
1280 |
| - vertexDescriptor.layouts[4].stepFunction = MTLVertexStepFunctionPerVertex; |
1281 |
| - vertexDescriptor.layouts[4].stride = ptDescription->atVertexBufferLayouts[0].uByteStride; |
1282 | 1279 |
|
| 1280 | + uint32_t uVertexBufferCount = 0; |
1283 | 1281 | uint32_t uCurrentAttributeCount = 0;
|
1284 |
| - for(uint32_t i = 0; i < PL_MAX_VERTEX_ATTRIBUTES; i++) |
| 1282 | + for(uint32_t uVtxBufferIdx = 0; uVtxBufferIdx < 2; uVtxBufferIdx++) |
1285 | 1283 | {
|
1286 |
| - if(ptDescription->atVertexBufferLayouts[0].atAttributes[i].tFormat == PL_VERTEX_FORMAT_UNKNOWN) |
| 1284 | + if(ptDescription->atVertexBufferLayouts[uVtxBufferIdx].uByteStride == 0) |
1287 | 1285 | break;
|
1288 |
| - vertexDescriptor.attributes[i].bufferIndex = 4; |
1289 |
| - vertexDescriptor.attributes[i].offset = ptDescription->atVertexBufferLayouts[0].atAttributes[i].uByteOffset; |
1290 |
| - vertexDescriptor.attributes[i].format = pl__metal_vertex_format(ptDescription->atVertexBufferLayouts[0].atAttributes[i].tFormat); |
1291 |
| - uCurrentAttributeCount++; |
| 1286 | + |
| 1287 | + for (uint32_t i = 0; i < PL_MAX_VERTEX_ATTRIBUTES; i++) |
| 1288 | + { |
| 1289 | + if(ptDescription->atVertexBufferLayouts[uVtxBufferIdx].atAttributes[i].tFormat == PL_VERTEX_FORMAT_UNKNOWN) |
| 1290 | + break; |
| 1291 | + const uint32_t uLocation = ptDescription->atVertexBufferLayouts[uVtxBufferIdx].bExplicitLocation ? ptDescription->atVertexBufferLayouts[uVtxBufferIdx].atAttributes[i].uLocation : uCurrentAttributeCount; |
| 1292 | + vertexDescriptor.attributes[uLocation].bufferIndex = 4 + uVtxBufferIdx; |
| 1293 | + vertexDescriptor.attributes[uLocation].offset = ptDescription->atVertexBufferLayouts[uVtxBufferIdx].atAttributes[i].uByteOffset; |
| 1294 | + vertexDescriptor.attributes[uLocation].format = pl__metal_vertex_format(ptDescription->atVertexBufferLayouts[uVtxBufferIdx].atAttributes[i].tFormat); |
| 1295 | + uCurrentAttributeCount++; |
| 1296 | + |
| 1297 | + } |
| 1298 | + |
| 1299 | + vertexDescriptor.layouts[4 + uVtxBufferIdx].stepRate = 1; |
| 1300 | + vertexDescriptor.layouts[4 + uVtxBufferIdx].stepFunction = MTLVertexStepFunctionPerVertex; |
| 1301 | + vertexDescriptor.layouts[4 + uVtxBufferIdx].stride = ptDescription->atVertexBufferLayouts[uVtxBufferIdx].uByteStride; |
| 1302 | + uVertexBufferCount++; |
1292 | 1303 | }
|
1293 | 1304 |
|
1294 | 1305 | // prepare preprocessor defines
|
|
0 commit comments