@@ -70,11 +70,11 @@ MetalVertexBufferCache::~MetalVertexBufferCache()
70
70
for (uint32 i = 0 ; i < LATTE_MAX_VERTEX_BUFFERS; i++)
71
71
{
72
72
auto vertexBufferRange = m_bufferRanges[i];
73
- if (vertexBufferRange)
73
+ if (vertexBufferRange. offset != INVALID_OFFSET )
74
74
{
75
- if (vertexBufferRange-> restrideInfo . buffer )
75
+ if (vertexBufferRange. restrideInfo -> buffer )
76
76
{
77
- vertexBufferRange-> restrideInfo . buffer ->release ();
77
+ vertexBufferRange. restrideInfo -> buffer ->release ();
78
78
}
79
79
}
80
80
}
@@ -83,29 +83,30 @@ MetalVertexBufferCache::~MetalVertexBufferCache()
83
83
MetalRestridedBufferRange MetalVertexBufferCache::RestrideBufferIfNeeded (MTL::Buffer* bufferCache, uint32 bufferIndex, size_t stride)
84
84
{
85
85
auto vertexBufferRange = m_bufferRanges[bufferIndex];
86
- auto & restrideInfo = vertexBufferRange-> restrideInfo ;
86
+ auto & restrideInfo = * vertexBufferRange. restrideInfo ;
87
87
88
88
if (stride % 4 == 0 )
89
89
{
90
90
// No restride needed
91
- return {bufferCache, vertexBufferRange-> offset };
91
+ return {bufferCache, vertexBufferRange. offset };
92
92
}
93
93
94
94
if (restrideInfo.memoryInvalidated || stride != restrideInfo.lastStride )
95
95
{
96
96
// TODO: use compute/void vertex function instead
97
97
size_t newStride = Align (stride, 4 );
98
- size_t newSize = vertexBufferRange-> size / stride * newStride;
98
+ size_t newSize = vertexBufferRange. size / stride * newStride;
99
99
restrideInfo.buffer = m_mtlr->GetDevice ()->newBuffer (newSize, MTL::StorageModeShared);
100
100
101
- uint8* oldPtr = (uint8*)bufferCache->contents () + vertexBufferRange-> offset ;
101
+ uint8* oldPtr = (uint8*)bufferCache->contents () + vertexBufferRange. offset ;
102
102
uint8* newPtr = (uint8*)restrideInfo.buffer ->contents ();
103
103
104
- for (size_t elem = 0 ; elem < vertexBufferRange-> size / stride; elem++)
104
+ for (size_t elem = 0 ; elem < vertexBufferRange. size / stride; elem++)
105
105
{
106
106
memcpy (newPtr + elem * newStride, oldPtr + elem * stride, stride);
107
107
}
108
- debug_printf (" Restrided vertex buffer (old stride: %zu, new stride: %zu, old size: %zu, new size: %zu)\n " , stride, newStride, vertexBufferRange->size , newSize);
108
+ // TODO: remove
109
+ debug_printf (" Restrided vertex buffer (old stride: %zu, new stride: %zu, old size: %zu, new size: %zu)\n " , stride, newStride, vertexBufferRange.size , newSize);
109
110
110
111
restrideInfo.memoryInvalidated = false ;
111
112
restrideInfo.lastStride = newStride;
@@ -119,15 +120,15 @@ void MetalVertexBufferCache::MemoryRangeChanged(size_t offset, size_t size)
119
120
for (uint32 i = 0 ; i < LATTE_MAX_VERTEX_BUFFERS; i++)
120
121
{
121
122
auto vertexBufferRange = m_bufferRanges[i];
122
- if (vertexBufferRange)
123
+ if (vertexBufferRange. offset != INVALID_OFFSET )
123
124
{
124
- if ((offset < vertexBufferRange-> offset && (offset + size) < (vertexBufferRange-> offset + vertexBufferRange-> size )) ||
125
- (offset > vertexBufferRange-> offset && (offset + size) > (vertexBufferRange-> offset + vertexBufferRange-> size )))
125
+ if ((offset < vertexBufferRange. offset && (offset + size) < (vertexBufferRange. offset + vertexBufferRange. size )) ||
126
+ (offset > vertexBufferRange. offset && (offset + size) > (vertexBufferRange. offset + vertexBufferRange. size )))
126
127
{
127
128
continue ;
128
129
}
129
130
130
- vertexBufferRange-> restrideInfo . memoryInvalidated = true ;
131
+ vertexBufferRange. restrideInfo -> memoryInvalidated = true ;
131
132
}
132
133
}
133
134
}
0 commit comments