| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "impeller/renderer/compute_command.h" | |
| #include <utility> | |
| #include "impeller/base/validation.h" | |
| #include "impeller/core/formats.h" | |
| namespace impeller { | |
| bool ComputeCommand::BindResource(ShaderStage stage, | |
| const ShaderUniformSlot& slot, | |
| const ShaderMetadata& metadata, | |
| const BufferView& view) { | |
| if (stage != ShaderStage::kCompute) { | |
| VALIDATION_LOG << "Use Command for non-compute shader stages."; | |
| return false; | |
| } | |
| if (!view) { | |
| return false; | |
| } | |
| bindings.buffers[slot.ext_res_0] = {.slot = slot, .view = {&metadata, view}}; | |
| return true; | |
| } | |
| bool ComputeCommand::BindResource( | |
| ShaderStage stage, | |
| const SampledImageSlot& slot, | |
| const ShaderMetadata& metadata, | |
| const std::shared_ptr<const Texture>& texture, | |
| const std::shared_ptr<const Sampler>& sampler) { | |
| if (stage != ShaderStage::kCompute) { | |
| VALIDATION_LOG << "Use Command for non-compute shader stages."; | |
| return false; | |
| } | |
| if (!sampler || !sampler->IsValid()) { | |
| return false; | |
| } | |
| if (!texture || !texture->IsValid()) { | |
| return false; | |
| } | |
| if (!slot.HasSampler() || !slot.HasTexture()) { | |
| return true; | |
| } | |
| bindings.sampled_images[slot.sampler_index] = TextureAndSampler{ | |
| .slot = slot, | |
| .texture = {&metadata, texture}, | |
| .sampler = {&metadata, sampler}, | |
| }; | |
| return false; | |
| } | |
| } // namespace impeller |