Skip to content

Commit 07af4b2

Browse files
GPU: Fix incorrect block size when D3D12 uniform buffer is rotated (#13469)
1 parent f27dbb2 commit 07af4b2

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

src/gpu/d3d12/SDL_gpu_d3d12.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1183,7 +1183,6 @@ struct D3D12UniformBuffer
11831183
D3D12Buffer *buffer;
11841184
Uint32 writeOffset;
11851185
Uint32 drawOffset;
1186-
Uint32 currentBlockSize;
11871186
};
11881187

11891188
// Forward function declarations
@@ -4494,7 +4493,6 @@ static D3D12UniformBuffer *D3D12_INTERNAL_AcquireUniformBufferFromPool(
44944493

44954494
SDL_UnlockMutex(renderer->acquireUniformBufferLock);
44964495

4497-
uniformBuffer->currentBlockSize = 0;
44984496
uniformBuffer->drawOffset = 0;
44994497
uniformBuffer->writeOffset = 0;
45004498

@@ -4533,6 +4531,7 @@ static void D3D12_INTERNAL_PushUniformData(
45334531
Uint32 length)
45344532
{
45354533
D3D12UniformBuffer *uniformBuffer;
4534+
Uint32 blockSize;
45364535

45374536
if (shaderStage == SDL_GPU_SHADERSTAGE_VERTEX) {
45384537
if (commandBuffer->vertexUniformBuffers[slotIndex] == NULL) {
@@ -4557,13 +4556,13 @@ static void D3D12_INTERNAL_PushUniformData(
45574556
return;
45584557
}
45594558

4560-
uniformBuffer->currentBlockSize =
4559+
blockSize =
45614560
D3D12_INTERNAL_Align(
45624561
length,
45634562
256);
45644563

45654564
// If there is no more room, acquire a new uniform buffer
4566-
if (uniformBuffer->writeOffset + uniformBuffer->currentBlockSize >= UNIFORM_BUFFER_SIZE) {
4565+
if (uniformBuffer->writeOffset + blockSize >= UNIFORM_BUFFER_SIZE) {
45674566
ID3D12Resource_Unmap(
45684567
uniformBuffer->buffer->handle,
45694568
0,
@@ -4593,7 +4592,7 @@ static void D3D12_INTERNAL_PushUniformData(
45934592
data,
45944593
length);
45954594

4596-
uniformBuffer->writeOffset += uniformBuffer->currentBlockSize;
4595+
uniformBuffer->writeOffset += blockSize;
45974596

45984597
if (shaderStage == SDL_GPU_SHADERSTAGE_VERTEX) {
45994598
commandBuffer->needVertexUniformBufferBind[slotIndex] = true;

0 commit comments

Comments
 (0)