mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-08-11 14:39:13 +00:00
Remove the old backend specific implementation for overrides. Use tint SubstituteOverride transform to replace overrides with const expressions and use the updated program at pipeline creation time. This CL also adds support for overrides used as workgroup size and related tests. Workgroup size validation now happens in backend code and at compute pipeline creation time. Bug: dawn:1504 Change-Id: I7df1fe9c3e358caa23235eacd6d13ba0b2998aec Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/99821 Commit-Queue: Shrek Shao <shrekshao@google.com> Reviewed-by: Austin Eng <enga@chromium.org> Kokoro: Kokoro <noreply+kokoro@google.com>
69 lines
2.3 KiB
Objective-C
69 lines
2.3 KiB
Objective-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 SRC_DAWN_NATIVE_METAL_SHADERMODULEMTL_H_
|
|
#define SRC_DAWN_NATIVE_METAL_SHADERMODULEMTL_H_
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "dawn/native/ShaderModule.h"
|
|
|
|
#include "dawn/common/NSRef.h"
|
|
#include "dawn/native/Error.h"
|
|
|
|
#import <Metal/Metal.h>
|
|
|
|
namespace dawn::native {
|
|
struct ProgrammableStage;
|
|
}
|
|
|
|
namespace dawn::native::metal {
|
|
|
|
class Device;
|
|
class PipelineLayout;
|
|
class RenderPipeline;
|
|
|
|
class ShaderModule final : public ShaderModuleBase {
|
|
public:
|
|
static ResultOrError<Ref<ShaderModule>> Create(Device* device,
|
|
const ShaderModuleDescriptor* descriptor,
|
|
ShaderModuleParseResult* parseResult,
|
|
OwnedCompilationMessages* compilationMessages);
|
|
|
|
struct MetalFunctionData {
|
|
NSPRef<id<MTLFunction>> function;
|
|
bool needsStorageBufferLength;
|
|
std::vector<uint32_t> workgroupAllocations;
|
|
MTLSize localWorkgroupSize;
|
|
};
|
|
|
|
MaybeError CreateFunction(SingleShaderStage stage,
|
|
const ProgrammableStage& programmableStage,
|
|
const PipelineLayout* layout,
|
|
MetalFunctionData* out,
|
|
uint32_t sampleMask = 0xFFFFFFFF,
|
|
const RenderPipeline* renderPipeline = nullptr);
|
|
|
|
private:
|
|
ShaderModule(Device* device, const ShaderModuleDescriptor* descriptor);
|
|
~ShaderModule() override;
|
|
MaybeError Initialize(ShaderModuleParseResult* parseResult,
|
|
OwnedCompilationMessages* compilationMessages);
|
|
};
|
|
|
|
} // namespace dawn::native::metal
|
|
|
|
#endif // SRC_DAWN_NATIVE_METAL_SHADERMODULEMTL_H_
|