mirror of
				https://github.com/libsdl-org/SDL.git
				synced 2025-10-26 12:27:44 +00:00 
			
		
		
		
	GPU: Fix incorrect block size when D3D12 uniform buffer is rotated (#13469)
(cherry picked from commit 07af4b237b)
			
			
This commit is contained in:
		 Evan Hemsley
					Evan Hemsley
				
			
				
					committed by
					
						 Sam Lantinga
						Sam Lantinga
					
				
			
			
				
	
			
			
			 Sam Lantinga
						Sam Lantinga
					
				
			
						parent
						
							46ec859bd1
						
					
				
				
					commit
					a65fbb0211
				
			| @@ -1194,7 +1194,6 @@ struct D3D12UniformBuffer | ||||
|     D3D12Buffer *buffer; | ||||
|     Uint32 writeOffset; | ||||
|     Uint32 drawOffset; | ||||
|     Uint32 currentBlockSize; | ||||
| }; | ||||
|  | ||||
| // Forward function declarations | ||||
| @@ -4498,7 +4497,6 @@ static D3D12UniformBuffer *D3D12_INTERNAL_AcquireUniformBufferFromPool( | ||||
|  | ||||
|     SDL_UnlockMutex(renderer->acquireUniformBufferLock); | ||||
|  | ||||
|     uniformBuffer->currentBlockSize = 0; | ||||
|     uniformBuffer->drawOffset = 0; | ||||
|     uniformBuffer->writeOffset = 0; | ||||
|  | ||||
| @@ -4537,6 +4535,7 @@ static void D3D12_INTERNAL_PushUniformData( | ||||
|     Uint32 length) | ||||
| { | ||||
|     D3D12UniformBuffer *uniformBuffer; | ||||
|     Uint32 blockSize; | ||||
|  | ||||
|     if (shaderStage == SDL_GPU_SHADERSTAGE_VERTEX) { | ||||
|         if (commandBuffer->vertexUniformBuffers[slotIndex] == NULL) { | ||||
| @@ -4561,13 +4560,13 @@ static void D3D12_INTERNAL_PushUniformData( | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     uniformBuffer->currentBlockSize = | ||||
|     blockSize = | ||||
|         D3D12_INTERNAL_Align( | ||||
|             length, | ||||
|             256); | ||||
|  | ||||
|     // If there is no more room, acquire a new uniform buffer | ||||
|     if (uniformBuffer->writeOffset + uniformBuffer->currentBlockSize >= UNIFORM_BUFFER_SIZE) { | ||||
|     if (uniformBuffer->writeOffset + blockSize >= UNIFORM_BUFFER_SIZE) { | ||||
|         ID3D12Resource_Unmap( | ||||
|             uniformBuffer->buffer->handle, | ||||
|             0, | ||||
| @@ -4597,7 +4596,7 @@ static void D3D12_INTERNAL_PushUniformData( | ||||
|         data, | ||||
|         length); | ||||
|  | ||||
|     uniformBuffer->writeOffset += uniformBuffer->currentBlockSize; | ||||
|     uniformBuffer->writeOffset += blockSize; | ||||
|  | ||||
|     if (shaderStage == SDL_GPU_SHADERSTAGE_VERTEX) { | ||||
|         commandBuffer->needVertexUniformBufferBind[slotIndex] = true; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user