2
0
Branimir Karadžić 8 жил өмнө
parent
commit
e69f69e0cd

+ 1 - 1
examples/common/example-glue.cpp

@@ -297,7 +297,7 @@ void showExampleDialog(entry::AppI* _app, const char* _errorText)
 						ImVec4 gpuColor(0.5f, 0.5f, 1.0f, 1.0f);
 						ImVec4 gpuColor(0.5f, 0.5f, 1.0f, 1.0f);
 
 
 						const float itemHeight = ImGui::GetTextLineHeightWithSpacing();
 						const float itemHeight = ImGui::GetTextLineHeightWithSpacing();
-						const float itemHeightWithSpacing = ImGui::GetFrameHeight();
+						const float itemHeightWithSpacing = ImGui::GetFrameHeightWithSpacing();
 						const double toCpuMs = 1000.0/double(stats->cpuTimerFreq);
 						const double toCpuMs = 1000.0/double(stats->cpuTimerFreq);
 						const double toGpuMs = 1000.0/double(stats->gpuTimerFreq);
 						const double toGpuMs = 1000.0/double(stats->gpuTimerFreq);
 						const float  scale   = 3.0f;
 						const float  scale   = 3.0f;

+ 27 - 20
src/renderer_d3d12.cpp

@@ -3026,10 +3026,14 @@ data.NumQualityLevels = 0;
 		IDXGIFactory4*   m_factory;
 		IDXGIFactory4*   m_factory;
 		IDXGISwapChain3* m_swapChain;
 		IDXGISwapChain3* m_swapChain;
 		ID3D12InfoQueue* m_infoQueue;
 		ID3D12InfoQueue* m_infoQueue;
-#else
+#elif BX_PLATFORM_WINRT
 		IDXGIAdapter*    m_adapter;
 		IDXGIAdapter*    m_adapter;
 		IDXGIFactory4*   m_factory;
 		IDXGIFactory4*   m_factory;
 		IDXGISwapChain1* m_swapChain;
 		IDXGISwapChain1* m_swapChain;
+#else
+		IDXGIAdapter*    m_adapter;
+		IDXGIFactory2*   m_factory;
+		IDXGISwapChain1* m_swapChain;
 #endif // BX_PLATFORM_WINDOWS
 #endif // BX_PLATFORM_WINDOWS
 
 
 		int64_t m_presentElapsed;
 		int64_t m_presentElapsed;
@@ -4322,30 +4326,33 @@ data.NumQualityLevels = 0;
 					{
 					{
 						if (convert)
 						if (convert)
 						{
 						{
-							const uint32_t pitch = bx::strideAlign(width*bpp / 8,  D3D12_TEXTURE_DATA_PITCH_ALIGNMENT);
-							const uint32_t slice = bx::strideAlign(pitch * height, D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT);
+							const uint32_t pitch = bx::strideAlign(bx::max<uint32_t>(width,  4)*bpp/8, D3D12_TEXTURE_DATA_PITCH_ALIGNMENT);
+							const uint32_t slice = bx::strideAlign(bx::max<uint32_t>(height, 4)*pitch, D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT);
+							const uint32_t size  = slice*depth;
 
 
-							uint8_t* temp = (uint8_t*)BX_ALLOC(g_allocator, slice);
+							uint8_t* temp = (uint8_t*)BX_ALLOC(g_allocator, size);
 							bimg::imageDecodeToBgra8(temp
 							bimg::imageDecodeToBgra8(temp
 									, mip.m_data
 									, mip.m_data
 									, mip.m_width
 									, mip.m_width
 									, mip.m_height
 									, mip.m_height
-									, pitch, mip.m_format
+									, pitch
+									, mip.m_format
 									);
 									);
 
 
 							srd[kk].pData      = temp;
 							srd[kk].pData      = temp;
 							srd[kk].RowPitch   = pitch;
 							srd[kk].RowPitch   = pitch;
 							srd[kk].SlicePitch = slice;
 							srd[kk].SlicePitch = slice;
-							totalSize += slice;
+							totalSize += size;
 						}
 						}
 						else if (compressed)
 						else if (compressed)
 						{
 						{
-							uint32_t pitch = bx::strideAlign( (mip.m_width /blockInfo.blockWidth )*mip.m_blockSize, D3D12_TEXTURE_DATA_PITCH_ALIGNMENT);
-							uint32_t slice = bx::strideAlign( (mip.m_height/blockInfo.blockHeight)*pitch,           D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT);
+							const uint32_t pitch = bx::strideAlign( (mip.m_width /blockInfo.blockWidth )*mip.m_blockSize, D3D12_TEXTURE_DATA_PITCH_ALIGNMENT);
+							const uint32_t slice = bx::strideAlign( (mip.m_height/blockInfo.blockHeight)*pitch,           D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT);
+							const uint32_t size  = slice*depth;
 
 
-							uint8_t* temp = (uint8_t*)BX_ALLOC(g_allocator, slice);
+							uint8_t* temp = (uint8_t*)BX_ALLOC(g_allocator, size);
 							bimg::imageCopy(temp
 							bimg::imageCopy(temp
-									, mip.m_height/blockInfo.blockHeight
+									,  mip.m_height/blockInfo.blockHeight
 									, (mip.m_width /blockInfo.blockWidth )*mip.m_blockSize
 									, (mip.m_width /blockInfo.blockWidth )*mip.m_blockSize
 									, mip.m_data
 									, mip.m_data
 									, pitch
 									, pitch
@@ -4354,17 +4361,18 @@ data.NumQualityLevels = 0;
 							srd[kk].pData      = temp;
 							srd[kk].pData      = temp;
 							srd[kk].RowPitch   = pitch;
 							srd[kk].RowPitch   = pitch;
 							srd[kk].SlicePitch = slice;
 							srd[kk].SlicePitch = slice;
-							totalSize += slice;
+							totalSize += size;
 						}
 						}
 						else
 						else
 						{
 						{
 							const uint32_t pitch = bx::strideAlign(mip.m_width*mip.m_bpp / 8, D3D12_TEXTURE_DATA_PITCH_ALIGNMENT);
 							const uint32_t pitch = bx::strideAlign(mip.m_width*mip.m_bpp / 8, D3D12_TEXTURE_DATA_PITCH_ALIGNMENT);
-							const uint32_t slice = bx::strideAlign(pitch * mip.m_height,      D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT);
+							const uint32_t slice = bx::strideAlign(mip.m_height*pitch,        D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT);
+							const uint32_t size  = slice*depth;
 
 
-							uint8_t* temp = (uint8_t*)BX_ALLOC(g_allocator, slice);
+							uint8_t* temp = (uint8_t*)BX_ALLOC(g_allocator, slice*depth);
 							bimg::imageCopy(temp
 							bimg::imageCopy(temp
 									, mip.m_height
 									, mip.m_height
-									, mip.m_width*mip.m_bpp / 8
+									, mip.m_width*mip.m_bpp/8
 									, mip.m_data
 									, mip.m_data
 									, pitch
 									, pitch
 									);
 									);
@@ -4372,16 +4380,15 @@ data.NumQualityLevels = 0;
 							srd[kk].pData = temp;
 							srd[kk].pData = temp;
 							srd[kk].RowPitch   = pitch;
 							srd[kk].RowPitch   = pitch;
 							srd[kk].SlicePitch = slice;
 							srd[kk].SlicePitch = slice;
-							totalSize += slice;
+							totalSize += size;
 						}
 						}
 
 
-						srd[kk].SlicePitch = mip.m_height*srd[kk].RowPitch;
 						++kk;
 						++kk;
 					}
 					}
 					else
 					else
 					{
 					{
 						const uint32_t pitch = bx::strideAlign(width*bpp / 8, D3D12_TEXTURE_DATA_PITCH_ALIGNMENT);
 						const uint32_t pitch = bx::strideAlign(width*bpp / 8, D3D12_TEXTURE_DATA_PITCH_ALIGNMENT);
-						const uint32_t slice = bx::strideAlign(pitch * height, D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT);
+						const uint32_t slice = bx::strideAlign(height*pitch,  D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT);
 						totalSize += slice;
 						totalSize += slice;
 					}
 					}
 
 
@@ -4579,7 +4586,7 @@ data.NumQualityLevels = 0;
 			{
 			{
 				ID3D12Resource* staging = createCommittedResource(s_renderD3D12->m_device, HeapProperty::Upload, totalSize);
 				ID3D12Resource* staging = createCommittedResource(s_renderD3D12->m_device, HeapProperty::Upload, totalSize);
 
 
-				setState(commandList,D3D12_RESOURCE_STATE_COPY_DEST);
+				setState(commandList, D3D12_RESOURCE_STATE_COPY_DEST);
 
 
 				uint64_t result = UpdateSubresources(commandList
 				uint64_t result = UpdateSubresources(commandList
 					, m_ptr
 					, m_ptr
@@ -4635,7 +4642,7 @@ data.NumQualityLevels = 0;
 
 
 	void TextureD3D12::update(ID3D12GraphicsCommandList* _commandList, uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem)
 	void TextureD3D12::update(ID3D12GraphicsCommandList* _commandList, uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem)
 	{
 	{
-		setState(_commandList, D3D12_RESOURCE_STATE_COPY_DEST);
+		D3D12_RESOURCE_STATES state = setState(_commandList, D3D12_RESOURCE_STATE_COPY_DEST);
 
 
 		const uint32_t subres = _mip + (_side * m_numMips);
 		const uint32_t subres = _mip + (_side * m_numMips);
 		const uint32_t bpp    = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(m_textureFormat) );
 		const uint32_t bpp    = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(m_textureFormat) );
@@ -4684,7 +4691,7 @@ data.NumQualityLevels = 0;
 		D3D12_TEXTURE_COPY_LOCATION src = { staging, D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT,  { layout } };
 		D3D12_TEXTURE_COPY_LOCATION src = { staging, D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT,  { layout } };
 		_commandList->CopyTextureRegion(&dst, _rect.m_x, _rect.m_y, 0, &src, &box);
 		_commandList->CopyTextureRegion(&dst, _rect.m_x, _rect.m_y, 0, &src, &box);
 
 
-		setState(_commandList, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
+		setState(_commandList, state);
 
 
 		s_renderD3D12->m_cmd.release(staging);
 		s_renderD3D12->m_cmd.release(staging);
 	}
 	}