mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-07-07 21:55:53 +00:00
This patch supports [[num_workgroups]] on D3D12 for DispatchIndirect by appending the values of [[num_workgroups]] at the end of the scratch buffer for indirect dispatch validation and setting them as the root constants in the command signature. With this patch, for every DispatchIndirect call: - On D3D12: 1. Validation enabled, [[num_workgroups]] is used The dispatch indirect buffer needs to be validated, duplicated and be written into a scratch buffer (size: 6 * uint32_t). 2. Validation enabled, [[num_workgroups]] isn't used The dispatch indirect buffer needs to be validated and be written into a scratch buffer (size: 3 * uint32_t). 3. Validation disabled, [[num_workgroups]] is used The dispatch indirect buffer needs to be duplicated and be written into a scratch buffer (size: 6 * uint32_t). 4. Validation disabled, [[num_workgroups]] isn't used Neither transformations or scratch buffers are needed for the dispatch call. - On the other backends: 1. Validation enabled, The dispatch indirect buffer needs to be validated and be written into a scratch buffer (size: 3 * uint32_t). 2. Validation disabled, Neither transformations or scratch buffers are needed for the dispatch call. BUG=dawn:839 TEST=dawn_end2end_tests Change-Id: I4105f1b2e3c12f6df6e487ed535a627fbb342344 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/68843 Reviewed-by: Austin Eng <enga@chromium.org> Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
59 lines
1.8 KiB
C++
59 lines
1.8 KiB
C++
// Copyright 2017 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_COMPUTEPIPELINED3D12_H_
|
|
#define DAWNNATIVE_D3D12_COMPUTEPIPELINED3D12_H_
|
|
|
|
#include "dawn_native/ComputePipeline.h"
|
|
|
|
#include "dawn_native/d3d12/d3d12_platform.h"
|
|
|
|
namespace dawn_native { namespace d3d12 {
|
|
|
|
class Device;
|
|
|
|
class ComputePipeline final : public ComputePipelineBase {
|
|
public:
|
|
static Ref<ComputePipeline> CreateUninitialized(
|
|
Device* device,
|
|
const ComputePipelineDescriptor* descriptor);
|
|
static void InitializeAsync(Ref<ComputePipelineBase> computePipeline,
|
|
WGPUCreateComputePipelineAsyncCallback callback,
|
|
void* userdata);
|
|
ComputePipeline() = delete;
|
|
|
|
ID3D12PipelineState* GetPipelineState() const;
|
|
|
|
MaybeError Initialize() override;
|
|
|
|
// Dawn API
|
|
void SetLabelImpl() override;
|
|
|
|
bool UsesNumWorkgroups() const;
|
|
|
|
ComPtr<ID3D12CommandSignature> GetDispatchIndirectCommandSignature();
|
|
|
|
private:
|
|
~ComputePipeline() override;
|
|
|
|
void DestroyImpl() override;
|
|
|
|
using ComputePipelineBase::ComputePipelineBase;
|
|
ComPtr<ID3D12PipelineState> mPipelineState;
|
|
};
|
|
|
|
}} // namespace dawn_native::d3d12
|
|
|
|
#endif // DAWNNATIVE_D3D12_COMPUTEPIPELINED3D12_H_
|