From 70d430c0fb3dd7832265815cde48866fada1eb3b Mon Sep 17 00:00:00 2001 From: dan sinclair Date: Fri, 28 Sep 2018 16:12:38 -0400 Subject: Initial commit of Amber for open source Amber is a multi-API shader test framework. Amber lets you capture and communicate shader bugs with the fluidity and ease of a scripting flow: * No graphics API programming is required. * WIP: Supports Vulkan and [Dawn][Dawn] graphics APIs. * A single text string (or file) maps to a single graphics API pipeline test case. The text includes: * Input data, including buffers and images. * Shaders. * Expectations for the result of running the pipeline. * Shaders can be expressed in binary form (as hex), in SPIR-V assembly, or in a higher level shader language. * After executing the pipeline, result buffers and images can be saved to output files. This is not an officially supported Google product. --- src/vulkan/descriptor.h | 92 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 src/vulkan/descriptor.h (limited to 'src/vulkan/descriptor.h') diff --git a/src/vulkan/descriptor.h b/src/vulkan/descriptor.h new file mode 100644 index 0000000..ea24733 --- /dev/null +++ b/src/vulkan/descriptor.h @@ -0,0 +1,92 @@ +// Copyright 2018 The Amber 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_VULKAN_DESCRIPTOR_H_ +#define SRC_VULKAN_DESCRIPTOR_H_ + +#include + +#include "amber/result.h" +#include "vulkan/vulkan.h" + +namespace amber { +namespace vulkan { + +enum class DescriptorType : uint8_t { + kStorageImage = 0, + kSampler, + kSampledImage, + kCombinedImageSampler, + kUniformTexelBuffer, + kStorageTexelBuffer, + kStorageBuffer, + kUniformBuffer, + kDynamicUniformBuffer, + kDynamicStorageBuffer, + kInputAttachment, +}; + +VkDescriptorType ToVkDescriptorType(DescriptorType type); + +class Descriptor { + public: + Descriptor(DescriptorType type, uint32_t desc_set, uint32_t binding); + + ~Descriptor(); + + uint32_t GetDescriptorSet() const { return descriptor_set_; } + uint32_t GetBinding() const { return binding_; } + bool operator<(const Descriptor& r) { + if (descriptor_set_ == r.descriptor_set_) + return binding_ < r.binding_; + return descriptor_set_ < r.descriptor_set_; + } + + DescriptorType GetType() const { return type_; } + + bool IsStorageImage() const { return type_ == DescriptorType::kStorageImage; } + bool IsSampler() const { return type_ == DescriptorType::kSampler; } + bool IsSampledImage() const { return type_ == DescriptorType::kSampledImage; } + bool IsCombinedImageSampler() const { + return type_ == DescriptorType::kCombinedImageSampler; + } + bool IsUniformTexelBuffer() const { + return type_ == DescriptorType::kUniformTexelBuffer; + } + bool IsStorageTexelBuffer() const { + return type_ == DescriptorType::kStorageTexelBuffer; + } + bool IsStorageBuffer() const { + return type_ == DescriptorType::kStorageBuffer; + } + bool IsUniformBuffer() const { + return type_ == DescriptorType::kUniformBuffer; + } + bool IsDynamicUniformBuffer() const { + return type_ == DescriptorType::kDynamicUniformBuffer; + } + bool IsDynamicStorageBuffer() const { + return type_ == DescriptorType::kDynamicStorageBuffer; + } + + private: + DescriptorType type_ = DescriptorType::kSampledImage; + uint32_t descriptor_set_ = 0; + uint32_t binding_ = 0; +}; + +} // namespace vulkan +} // namespace amber + +#endif // SRC_VULKAN_DESCRIPTOR_H_ -- cgit v1.2.3