mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-08-03 18:55:39 +00:00
This is the first patch to implement 3D texture copy. It starts with implementation for 3D texture copy on D3D12 backend with the simplest case: copy to the entire 3D texture. And texture's width is aligned with 256 bytes. The implementation for 3d texture copy might be inaccurate/incorrect in some functions for complicated cases. But don't panic. The previous implementation is also incorrect because many functions assumes that we are copying to/from 2D textures only. And I will incrementally fix the incorrect functions via upcoming tests for 3d texture copy. BUG: dawn:547 Change-Id: I588b09fc8d0f0398e0798573415ba3a6a3f576fc Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/45980 Reviewed-by: Austin Eng <enga@chromium.org> Commit-Queue: Yunchao He <yunchao.he@intel.com>
104 lines
5.3 KiB
C++
104 lines
5.3 KiB
C++
// Copyright 2019 The Dawn Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#ifndef DAWNNATIVE_D3D12_UTILSD3D12_H_
|
|
#define DAWNNATIVE_D3D12_UTILSD3D12_H_
|
|
|
|
#include "dawn_native/Commands.h"
|
|
#include "dawn_native/d3d12/BufferD3D12.h"
|
|
#include "dawn_native/d3d12/TextureCopySplitter.h"
|
|
#include "dawn_native/d3d12/TextureD3D12.h"
|
|
#include "dawn_native/d3d12/d3d12_platform.h"
|
|
#include "dawn_native/dawn_platform.h"
|
|
|
|
namespace dawn_native { namespace d3d12 {
|
|
|
|
ResultOrError<std::wstring> ConvertStringToWstring(const char* str);
|
|
|
|
D3D12_COMPARISON_FUNC ToD3D12ComparisonFunc(wgpu::CompareFunction func);
|
|
|
|
D3D12_TEXTURE_COPY_LOCATION ComputeTextureCopyLocationForTexture(const Texture* texture,
|
|
uint32_t level,
|
|
uint32_t slice,
|
|
Aspect aspect);
|
|
|
|
D3D12_TEXTURE_COPY_LOCATION ComputeBufferLocationForCopyTextureRegion(
|
|
const Texture* texture,
|
|
ID3D12Resource* bufferResource,
|
|
const Extent3D& bufferSize,
|
|
const uint64_t offset,
|
|
const uint32_t rowPitch,
|
|
Aspect aspect);
|
|
D3D12_BOX ComputeD3D12BoxFromOffsetAndSize(const Origin3D& offset, const Extent3D& copySize);
|
|
|
|
bool IsTypeless(DXGI_FORMAT format);
|
|
|
|
void RecordCopyBufferToTextureFromTextureCopySplit(ID3D12GraphicsCommandList* commandList,
|
|
const Texture2DCopySplit& baseCopySplit,
|
|
ID3D12Resource* bufferResource,
|
|
uint64_t baseOffset,
|
|
uint64_t bufferBytesPerRow,
|
|
Texture* texture,
|
|
uint32_t textureMiplevel,
|
|
uint32_t textureSlice,
|
|
Aspect aspect);
|
|
|
|
void CopyBufferTo2DTextureWithCopySplit(CommandRecordingContext* commandContext,
|
|
const TextureCopy& textureCopy,
|
|
ID3D12Resource* bufferResource,
|
|
const uint64_t offset,
|
|
const uint32_t bytesPerRow,
|
|
const uint32_t rowsPerImage,
|
|
const Extent3D& copySize,
|
|
Texture* texture,
|
|
Aspect aspect);
|
|
|
|
void CopyBufferTo3DTexture(CommandRecordingContext* commandContext,
|
|
const TextureCopy& textureCopy,
|
|
ID3D12Resource* bufferResource,
|
|
const uint64_t offset,
|
|
const uint32_t bytesPerRow,
|
|
const uint32_t rowsPerImage,
|
|
const Extent3D& copySize,
|
|
Texture* texture,
|
|
Aspect aspect);
|
|
|
|
void RecordCopyTextureToBufferFromTextureCopySplit(ID3D12GraphicsCommandList* commandList,
|
|
const Texture2DCopySplit& baseCopySplit,
|
|
Buffer* buffer,
|
|
uint64_t baseOffset,
|
|
uint64_t bufferBytesPerRow,
|
|
Texture* texture,
|
|
uint32_t textureMiplevel,
|
|
uint32_t textureSlice,
|
|
Aspect aspect);
|
|
|
|
void Copy2DTextureToBufferWithCopySplit(ID3D12GraphicsCommandList* commandList,
|
|
const TextureCopy& textureCopy,
|
|
const BufferCopy& bufferCopy,
|
|
Texture* texture,
|
|
Buffer* buffer,
|
|
const Extent3D& copySize);
|
|
|
|
void Copy3DTextureToBuffer(ID3D12GraphicsCommandList* commandList,
|
|
const TextureCopy& textureCopy,
|
|
const BufferCopy& bufferCopy,
|
|
Texture* texture,
|
|
Buffer* buffer,
|
|
const Extent3D& copySize);
|
|
|
|
}} // namespace dawn_native::d3d12
|
|
|
|
#endif // DAWNNATIVE_D3D12_UTILSD3D12_H_
|