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; |     D3D12Buffer *buffer; | ||||||
|     Uint32 writeOffset; |     Uint32 writeOffset; | ||||||
|     Uint32 drawOffset; |     Uint32 drawOffset; | ||||||
|     Uint32 currentBlockSize; |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
| // Forward function declarations | // Forward function declarations | ||||||
| @@ -4498,7 +4497,6 @@ static D3D12UniformBuffer *D3D12_INTERNAL_AcquireUniformBufferFromPool( | |||||||
|  |  | ||||||
|     SDL_UnlockMutex(renderer->acquireUniformBufferLock); |     SDL_UnlockMutex(renderer->acquireUniformBufferLock); | ||||||
|  |  | ||||||
|     uniformBuffer->currentBlockSize = 0; |  | ||||||
|     uniformBuffer->drawOffset = 0; |     uniformBuffer->drawOffset = 0; | ||||||
|     uniformBuffer->writeOffset = 0; |     uniformBuffer->writeOffset = 0; | ||||||
|  |  | ||||||
| @@ -4537,6 +4535,7 @@ static void D3D12_INTERNAL_PushUniformData( | |||||||
|     Uint32 length) |     Uint32 length) | ||||||
| { | { | ||||||
|     D3D12UniformBuffer *uniformBuffer; |     D3D12UniformBuffer *uniformBuffer; | ||||||
|  |     Uint32 blockSize; | ||||||
|  |  | ||||||
|     if (shaderStage == SDL_GPU_SHADERSTAGE_VERTEX) { |     if (shaderStage == SDL_GPU_SHADERSTAGE_VERTEX) { | ||||||
|         if (commandBuffer->vertexUniformBuffers[slotIndex] == NULL) { |         if (commandBuffer->vertexUniformBuffers[slotIndex] == NULL) { | ||||||
| @@ -4561,13 +4560,13 @@ static void D3D12_INTERNAL_PushUniformData( | |||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     uniformBuffer->currentBlockSize = |     blockSize = | ||||||
|         D3D12_INTERNAL_Align( |         D3D12_INTERNAL_Align( | ||||||
|             length, |             length, | ||||||
|             256); |             256); | ||||||
|  |  | ||||||
|     // If there is no more room, acquire a new uniform buffer |     // 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( |         ID3D12Resource_Unmap( | ||||||
|             uniformBuffer->buffer->handle, |             uniformBuffer->buffer->handle, | ||||||
|             0, |             0, | ||||||
| @@ -4597,7 +4596,7 @@ static void D3D12_INTERNAL_PushUniformData( | |||||||
|         data, |         data, | ||||||
|         length); |         length); | ||||||
|  |  | ||||||
|     uniformBuffer->writeOffset += uniformBuffer->currentBlockSize; |     uniformBuffer->writeOffset += blockSize; | ||||||
|  |  | ||||||
|     if (shaderStage == SDL_GPU_SHADERSTAGE_VERTEX) { |     if (shaderStage == SDL_GPU_SHADERSTAGE_VERTEX) { | ||||||
|         commandBuffer->needVertexUniformBufferBind[slotIndex] = true; |         commandBuffer->needVertexUniformBufferBind[slotIndex] = true; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user