Rename MVKDescriptorBinding to MVKDescriptor, including subclasses.

This commit is contained in:
Bill Hollings 2020-01-15 11:48:27 -05:00
parent 3a56901460
commit 3a1b19be51
6 changed files with 277 additions and 280 deletions

View File

@ -157,10 +157,10 @@
A95B7D6A1D3EE486003183D3 /* MVKCommandEncoderState.h in Headers */ = {isa = PBXBuildFile; fileRef = A95B7D671D3EE486003183D3 /* MVKCommandEncoderState.h */; };
A95B7D6B1D3EE486003183D3 /* MVKCommandEncoderState.mm in Sources */ = {isa = PBXBuildFile; fileRef = A95B7D681D3EE486003183D3 /* MVKCommandEncoderState.mm */; };
A95B7D6C1D3EE486003183D3 /* MVKCommandEncoderState.mm in Sources */ = {isa = PBXBuildFile; fileRef = A95B7D681D3EE486003183D3 /* MVKCommandEncoderState.mm */; };
A966A5DF23C535D000BBF9B4 /* MVKDescriptorBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = A966A5DC23C535D000BBF9B4 /* MVKDescriptorBinding.h */; };
A966A5E023C535D000BBF9B4 /* MVKDescriptorBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = A966A5DC23C535D000BBF9B4 /* MVKDescriptorBinding.h */; };
A966A5E123C535D000BBF9B4 /* MVKDescriptorBinding.mm in Sources */ = {isa = PBXBuildFile; fileRef = A966A5DE23C535D000BBF9B4 /* MVKDescriptorBinding.mm */; };
A966A5E223C535D000BBF9B4 /* MVKDescriptorBinding.mm in Sources */ = {isa = PBXBuildFile; fileRef = A966A5DE23C535D000BBF9B4 /* MVKDescriptorBinding.mm */; };
A966A5DF23C535D000BBF9B4 /* MVKDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A966A5DC23C535D000BBF9B4 /* MVKDescriptor.h */; };
A966A5E023C535D000BBF9B4 /* MVKDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A966A5DC23C535D000BBF9B4 /* MVKDescriptor.h */; };
A966A5E123C535D000BBF9B4 /* MVKDescriptor.mm in Sources */ = {isa = PBXBuildFile; fileRef = A966A5DE23C535D000BBF9B4 /* MVKDescriptor.mm */; };
A966A5E223C535D000BBF9B4 /* MVKDescriptor.mm in Sources */ = {isa = PBXBuildFile; fileRef = A966A5DE23C535D000BBF9B4 /* MVKDescriptor.mm */; };
A981494D1FB6A3F7005F00B4 /* MVKBaseObject.mm in Sources */ = {isa = PBXBuildFile; fileRef = A98149411FB6A3F7005F00B4 /* MVKBaseObject.mm */; };
A981494E1FB6A3F7005F00B4 /* MVKBaseObject.mm in Sources */ = {isa = PBXBuildFile; fileRef = A98149411FB6A3F7005F00B4 /* MVKBaseObject.mm */; };
A981494F1FB6A3F7005F00B4 /* MVKBaseObject.h in Headers */ = {isa = PBXBuildFile; fileRef = A98149421FB6A3F7005F00B4 /* MVKBaseObject.h */; };
@ -377,8 +377,8 @@
A95870F71C90D29F009EB096 /* MVKCommandResourceFactory.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MVKCommandResourceFactory.mm; sourceTree = "<group>"; };
A95B7D671D3EE486003183D3 /* MVKCommandEncoderState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVKCommandEncoderState.h; sourceTree = "<group>"; };
A95B7D681D3EE486003183D3 /* MVKCommandEncoderState.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MVKCommandEncoderState.mm; sourceTree = "<group>"; };
A966A5DC23C535D000BBF9B4 /* MVKDescriptorBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVKDescriptorBinding.h; sourceTree = "<group>"; };
A966A5DE23C535D000BBF9B4 /* MVKDescriptorBinding.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MVKDescriptorBinding.mm; sourceTree = "<group>"; };
A966A5DC23C535D000BBF9B4 /* MVKDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVKDescriptor.h; sourceTree = "<group>"; };
A966A5DE23C535D000BBF9B4 /* MVKDescriptor.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MVKDescriptor.mm; sourceTree = "<group>"; };
A98149411FB6A3F7005F00B4 /* MVKBaseObject.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MVKBaseObject.mm; sourceTree = "<group>"; };
A98149421FB6A3F7005F00B4 /* MVKBaseObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVKBaseObject.h; sourceTree = "<group>"; };
A98149431FB6A3F7005F00B4 /* MVKEnvironment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVKEnvironment.h; sourceTree = "<group>"; };
@ -489,8 +489,8 @@
children = (
A94FB77F1C7DFB4800632CA3 /* MVKBuffer.h */,
A94FB7801C7DFB4800632CA3 /* MVKBuffer.mm */,
A966A5DC23C535D000BBF9B4 /* MVKDescriptorBinding.h */,
A966A5DE23C535D000BBF9B4 /* MVKDescriptorBinding.mm */,
A966A5DC23C535D000BBF9B4 /* MVKDescriptor.h */,
A966A5DE23C535D000BBF9B4 /* MVKDescriptor.mm */,
A94FB7811C7DFB4800632CA3 /* MVKDescriptorSet.h */,
A94FB7821C7DFB4800632CA3 /* MVKDescriptorSet.mm */,
A94FB7831C7DFB4800632CA3 /* MVKDevice.h */,
@ -703,7 +703,7 @@
A94FB7F01C7DFB4800632CA3 /* MVKImage.h in Headers */,
4553AEFD2251617100E8EBCD /* MVKBlockObserver.h in Headers */,
A94FB7B81C7DFB4800632CA3 /* MVKCmdTransfer.h in Headers */,
A966A5DF23C535D000BBF9B4 /* MVKDescriptorBinding.h in Headers */,
A966A5DF23C535D000BBF9B4 /* MVKDescriptor.h in Headers */,
A94FB7C81C7DFB4800632CA3 /* MVKCmdDraw.h in Headers */,
A94FB7D01C7DFB4800632CA3 /* MVKCommandBuffer.h in Headers */,
A9E53DF32100B302002781DD /* MTLRenderPassDescriptor+MoltenVK.h in Headers */,
@ -772,7 +772,7 @@
A94FB7F11C7DFB4800632CA3 /* MVKImage.h in Headers */,
4553AEFE2251617100E8EBCD /* MVKBlockObserver.h in Headers */,
A94FB7B91C7DFB4800632CA3 /* MVKCmdTransfer.h in Headers */,
A966A5E023C535D000BBF9B4 /* MVKDescriptorBinding.h in Headers */,
A966A5E023C535D000BBF9B4 /* MVKDescriptor.h in Headers */,
A94FB7C91C7DFB4800632CA3 /* MVKCmdDraw.h in Headers */,
A94FB7D11C7DFB4800632CA3 /* MVKCommandBuffer.h in Headers */,
A9E53DF42100B302002781DD /* MTLRenderPassDescriptor+MoltenVK.h in Headers */,
@ -1014,7 +1014,7 @@
A98149551FB6A3F7005F00B4 /* MVKFoundation.cpp in Sources */,
A94FB7E61C7DFB4800632CA3 /* MVKDevice.mm in Sources */,
A9E53DF52100B302002781DD /* MTLRenderPassDescriptor+MoltenVK.m in Sources */,
A966A5E123C535D000BBF9B4 /* MVKDescriptorBinding.mm in Sources */,
A966A5E123C535D000BBF9B4 /* MVKDescriptor.mm in Sources */,
A94FB7FA1C7DFB4800632CA3 /* MVKPipeline.mm in Sources */,
A94FB8021C7DFB4800632CA3 /* MVKQueue.mm in Sources */,
A9E53DD72100B197002781DD /* MTLSamplerDescriptor+MoltenVK.m in Sources */,
@ -1071,7 +1071,7 @@
A98149561FB6A3F7005F00B4 /* MVKFoundation.cpp in Sources */,
A94FB7E71C7DFB4800632CA3 /* MVKDevice.mm in Sources */,
A9E53DF62100B302002781DD /* MTLRenderPassDescriptor+MoltenVK.m in Sources */,
A966A5E223C535D000BBF9B4 /* MVKDescriptorBinding.mm in Sources */,
A966A5E223C535D000BBF9B4 /* MVKDescriptor.mm in Sources */,
A94FB7FB1C7DFB4800632CA3 /* MVKPipeline.mm in Sources */,
A94FB8031C7DFB4800632CA3 /* MVKQueue.mm in Sources */,
A9E53DD82100B197002781DD /* MTLSamplerDescriptor+MoltenVK.m in Sources */,

View File

@ -1,5 +1,5 @@
/*
* MVKDescriptorBinding.h
* MVKDescriptor.h
*
* Copyright (c) 2015-2020 The Brenwill Workshop Ltd. (http://www.brenwill.com)
*
@ -22,7 +22,7 @@
#include "MVKVector.h"
#include <vector>
class MVKDescriptorBinding;
class MVKDescriptor;
class MVKDescriptorSet;
class MVKDescriptorSetLayout;
class MVKCommandEncoder;
@ -30,7 +30,7 @@ class MVKCommandEncoder;
#pragma mark MVKShaderStageResourceBinding
/** Indicates the Metal resource indexes used by a single shader stage in a descriptor binding. */
/** Indicates the Metal resource indexes used by a single shader stage in a descriptor. */
typedef struct MVKShaderStageResourceBinding {
uint32_t bufferIndex = 0;
uint32_t textureIndex = 0;
@ -44,7 +44,7 @@ typedef struct MVKShaderStageResourceBinding {
#pragma mark MVKShaderResourceBinding
/** Indicates the Metal resource indexes used by each shader stage in a descriptor binding. */
/** Indicates the Metal resource indexes used by each shader stage in a descriptor. */
typedef struct MVKShaderResourceBinding {
MVKShaderStageResourceBinding stages[kMVKShaderStageMax];
@ -93,7 +93,7 @@ public:
MVKVector<uint32_t>& dynamicOffsets,
uint32_t* pDynamicOffsetIndex);
/** Encodes this binding layout and the specified descriptor binding on the specified command encoder immediately. */
/** Encodes this binding layout and the specified descriptor on the specified command encoder immediately. */
void push(MVKCommandEncoder* cmdEncoder,
uint32_t& dstArrayElement,
uint32_t& descriptorCount,
@ -118,9 +118,8 @@ public:
protected:
friend class MVKDescriptorSet;
friend class MVKDescriptorBinding;
MVKDescriptorBinding* newDescriptorBinding();
MVKDescriptor* newDescriptor();
void initMetalResourceIndexOffsets(MVKShaderStageResourceBinding* pBindingIndexes,
MVKShaderStageResourceBinding* pDescSetCounts,
const VkDescriptorSetLayoutBinding* pBinding);
@ -135,10 +134,10 @@ protected:
#pragma mark -
#pragma mark MVKDescriptorBinding
#pragma mark MVKDescriptor
/** Represents a Vulkan descriptor binding. */
class MVKDescriptorBinding : public MVKBaseObject {
/** Represents a Vulkan descriptor. */
class MVKDescriptor : public MVKBaseObject {
public:
@ -189,10 +188,10 @@ public:
#pragma mark -
#pragma mark MVKBufferDescriptorBinding
#pragma mark MVKBufferDescriptor
/** Represents a Vulkan descriptor binding tracking a buffer. */
class MVKBufferDescriptorBinding : public MVKDescriptorBinding {
/** Represents a Vulkan descriptor tracking a buffer. */
class MVKBufferDescriptor : public MVKDescriptor {
public:
void bind(MVKCommandEncoder* cmdEncoder,
@ -217,7 +216,7 @@ public:
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* inlineUniformBlock) override;
~MVKBufferDescriptorBinding();
~MVKBufferDescriptor();
protected:
MVKBuffer* _mvkBuffer = nullptr;
@ -227,10 +226,10 @@ protected:
#pragma mark -
#pragma mark MVKInlineUniformDescriptorBinding
#pragma mark MVKInlineUniformDescriptor
/** Represents a Vulkan descriptor binding tracking an inline block of uniform data. */
class MVKInlineUniformDescriptorBinding : public MVKDescriptorBinding {
/** Represents a Vulkan descriptor tracking an inline block of uniform data. */
class MVKInlineUniformDescriptor : public MVKDescriptor {
public:
void bind(MVKCommandEncoder* cmdEncoder,
@ -255,7 +254,7 @@ public:
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* inlineUniformBlock) override;
~MVKInlineUniformDescriptorBinding();
~MVKInlineUniformDescriptor();
protected:
id<MTLBuffer> _mtlBuffer = nil;
@ -264,10 +263,10 @@ protected:
#pragma mark -
#pragma mark MVKImageDescriptorBinding
#pragma mark MVKImageDescriptor
/** Represents a Vulkan descriptor binding tracking an image. */
class MVKImageDescriptorBinding : public MVKDescriptorBinding {
/** Represents a Vulkan descriptor tracking an image. */
class MVKImageDescriptor : public MVKDescriptor {
public:
void bind(MVKCommandEncoder* cmdEncoder,
@ -292,7 +291,7 @@ public:
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* inlineUniformBlock) override;
~MVKImageDescriptorBinding();
~MVKImageDescriptor();
protected:
MVKImageView* _mvkImageView = nullptr;
@ -301,16 +300,16 @@ protected:
#pragma mark -
#pragma mark MVKSamplerDescriptorBindingMixin
#pragma mark MVKSamplerDescriptorMixin
/**
* This mixin class adds the ability for a descriptor binding to track a sampler.
* This mixin class adds the ability for a descriptor to track a sampler.
*
* As a mixin, this class should only be used as a component of multiple inheritance.
* Any class that inherits from this class should also inherit from MVKDescriptorBinding.
* Any class that inherits from this class should also inherit from MVKDescriptor.
* This requirement is to avoid the diamond problem of multiple inheritance.
*/
class MVKSamplerDescriptorBindingMixin {
class MVKSamplerDescriptorMixin {
protected:
void bind(MVKCommandEncoder* cmdEncoder,
@ -337,7 +336,7 @@ protected:
void setLayout(MVKDescriptorSetLayoutBinding* dslBinding, uint32_t index);
virtual ~MVKSamplerDescriptorBindingMixin();
virtual ~MVKSamplerDescriptorMixin();
MVKSampler* _mvkSampler = nullptr;
bool _hasDynamicSampler = true;
@ -345,11 +344,10 @@ protected:
#pragma mark -
#pragma mark MVKSamplerDescriptorBinding
#pragma mark MVKSamplerDescriptor
/** Represents a Vulkan descriptor binding tracking a sampler. */
class MVKSamplerDescriptorBinding : public MVKDescriptorBinding,
public MVKSamplerDescriptorBindingMixin {
/** Represents a Vulkan descriptor tracking a sampler. */
class MVKSamplerDescriptor : public MVKDescriptor, public MVKSamplerDescriptorMixin {
public:
void bind(MVKCommandEncoder* cmdEncoder,
@ -380,11 +378,10 @@ public:
#pragma mark -
#pragma mark MVKCombinedImageSamplerDescriptorBinding
#pragma mark MVKCombinedImageSamplerDescriptor
/** Represents a Vulkan descriptor binding tracking a combined image and sampler. */
class MVKCombinedImageSamplerDescriptorBinding : public MVKImageDescriptorBinding,
public MVKSamplerDescriptorBindingMixin {
/** Represents a Vulkan descriptor tracking a combined image and sampler. */
class MVKCombinedImageSamplerDescriptor : public MVKImageDescriptor, public MVKSamplerDescriptorMixin {
public:
void bind(MVKCommandEncoder* cmdEncoder,
@ -415,10 +412,10 @@ public:
#pragma mark -
#pragma mark MVKTexelBufferDescriptorBinding
#pragma mark MVKTexelBufferDescriptor
/** Represents a Vulkan descriptor binding tracking a texel buffer. */
class MVKTexelBufferDescriptorBinding : public MVKDescriptorBinding {
/** Represents a Vulkan descriptor tracking a texel buffer. */
class MVKTexelBufferDescriptor : public MVKDescriptor {
public:
void bind(MVKCommandEncoder* cmdEncoder,
@ -443,7 +440,7 @@ public:
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* inlineUniformBlock) override;
~MVKTexelBufferDescriptorBinding();
~MVKTexelBufferDescriptor();
protected:
MVKBufferView* _mvkBufferView = nullptr;

View File

@ -1,5 +1,5 @@
/*
* MVKDescriptorBinding.mm
* MVKDescriptor.mm
*
* Copyright (c) 2015-2020 The Brenwill Workshop Ltd. (http://www.brenwill.com)
*
@ -16,7 +16,7 @@
* limitations under the License.
*/
#include "MVKDescriptorBinding.h"
#include "MVKDescriptor.h"
#include "MVKDescriptorSet.h"
#include "MVKBuffer.h"
@ -94,38 +94,38 @@ uint32_t MVKDescriptorSetLayoutBinding::bind(MVKCommandEncoder* cmdEncoder,
uint32_t descCnt = _info.descriptorCount;
for (uint32_t descIdx = 0; descIdx < descCnt; descIdx++) {
MVKDescriptorBinding* descBinding = descSet->getDescriptorBinding(descStartIndex + descIdx);
descBinding->bind(cmdEncoder, _info.descriptorType, descIdx, _applyToStage,
mtlIdxs, dynamicOffsets, pDynamicOffsetIndex);
MVKDescriptor* mvkDesc = descSet->getDescriptor(descStartIndex + descIdx);
mvkDesc->bind(cmdEncoder, _info.descriptorType, descIdx, _applyToStage,
mtlIdxs, dynamicOffsets, pDynamicOffsetIndex);
}
return descCnt;
}
MVKDescriptorBinding* MVKDescriptorSetLayoutBinding::newDescriptorBinding() {
MVKDescriptor* MVKDescriptorSetLayoutBinding::newDescriptor() {
switch (_info.descriptorType) {
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
return new MVKBufferDescriptorBinding();
return new MVKBufferDescriptor();
case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT:
return new MVKInlineUniformDescriptorBinding();
return new MVKInlineUniformDescriptor();
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
return new MVKImageDescriptorBinding();
return new MVKImageDescriptor();
case VK_DESCRIPTOR_TYPE_SAMPLER:
return new MVKSamplerDescriptorBinding();
return new MVKSamplerDescriptor();
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
return new MVKCombinedImageSamplerDescriptorBinding();
return new MVKCombinedImageSamplerDescriptor();
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
return new MVKTexelBufferDescriptorBinding();
return new MVKTexelBufferDescriptor();
default:
return nullptr;
@ -470,16 +470,16 @@ void MVKDescriptorSetLayoutBinding::initMetalResourceIndexOffsets(MVKShaderStage
#pragma mark -
#pragma mark MVKBufferDescriptorBinding
#pragma mark MVKBufferDescriptor
// A null cmdEncoder can be passed to perform a validation pass
void MVKBufferDescriptorBinding::bind(MVKCommandEncoder* cmdEncoder,
VkDescriptorType descriptorType,
uint32_t descriptorIndex,
bool stages[],
MVKShaderResourceBinding& mtlIndexes,
MVKVector<uint32_t>& dynamicOffsets,
uint32_t* pDynamicOffsetIndex) {
void MVKBufferDescriptor::bind(MVKCommandEncoder* cmdEncoder,
VkDescriptorType descriptorType,
uint32_t descriptorIndex,
bool stages[],
MVKShaderResourceBinding& mtlIndexes,
MVKVector<uint32_t>& dynamicOffsets,
uint32_t* pDynamicOffsetIndex) {
MVKMTLBufferBinding bb;
NSUInteger bufferDynamicOffset = 0;
@ -514,11 +514,11 @@ void MVKBufferDescriptorBinding::bind(MVKCommandEncoder* cmdEncoder,
}
}
void MVKBufferDescriptorBinding::write(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t srcIndex,
size_t stride,
const void* pData) {
void MVKBufferDescriptor::write(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t srcIndex,
size_t stride,
const void* pData) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
@ -541,13 +541,13 @@ void MVKBufferDescriptorBinding::write(MVKDescriptorSet* mvkDescSet,
}
}
void MVKBufferDescriptorBinding::read(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t dstIndex,
VkDescriptorImageInfo* pImageInfo,
VkDescriptorBufferInfo* pBufferInfo,
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* pInlineUniformBlock) {
void MVKBufferDescriptor::read(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t dstIndex,
VkDescriptorImageInfo* pImageInfo,
VkDescriptorBufferInfo* pBufferInfo,
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* pInlineUniformBlock) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
@ -565,22 +565,22 @@ void MVKBufferDescriptorBinding::read(MVKDescriptorSet* mvkDescSet,
}
}
MVKBufferDescriptorBinding::~MVKBufferDescriptorBinding() {
MVKBufferDescriptor::~MVKBufferDescriptor() {
if (_mvkBuffer) { _mvkBuffer->release(); }
}
#pragma mark -
#pragma mark MVKInlineUniformDescriptorBinding
#pragma mark MVKInlineUniformDescriptor
// A null cmdEncoder can be passed to perform a validation pass
void MVKInlineUniformDescriptorBinding::bind(MVKCommandEncoder* cmdEncoder,
VkDescriptorType descriptorType,
uint32_t descriptorIndex,
bool stages[],
MVKShaderResourceBinding& mtlIndexes,
MVKVector<uint32_t>& dynamicOffsets,
uint32_t* pDynamicOffsetIndex) {
void MVKInlineUniformDescriptor::bind(MVKCommandEncoder* cmdEncoder,
VkDescriptorType descriptorType,
uint32_t descriptorIndex,
bool stages[],
MVKShaderResourceBinding& mtlIndexes,
MVKVector<uint32_t>& dynamicOffsets,
uint32_t* pDynamicOffsetIndex) {
MVKMTLBufferBinding bb;
switch (descriptorType) {
@ -605,11 +605,11 @@ void MVKInlineUniformDescriptorBinding::bind(MVKCommandEncoder* cmdEncoder,
}
}
void MVKInlineUniformDescriptorBinding::write(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t srcIndex,
size_t stride,
const void* pData) {
void MVKInlineUniformDescriptor::write(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t srcIndex,
size_t stride,
const void* pData) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT: {
const auto& srcInlineUniformBlock = get<VkWriteDescriptorSetInlineUniformBlockEXT>(pData, stride, srcIndex);
@ -633,13 +633,13 @@ void MVKInlineUniformDescriptorBinding::write(MVKDescriptorSet* mvkDescSet,
}
}
void MVKInlineUniformDescriptorBinding::read(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t dstIndex,
VkDescriptorImageInfo* pImageInfo,
VkDescriptorBufferInfo* pBufferInfo,
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* pInlineUniformBlock) {
void MVKInlineUniformDescriptor::read(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t dstIndex,
VkDescriptorImageInfo* pImageInfo,
VkDescriptorBufferInfo* pBufferInfo,
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* pInlineUniformBlock) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT: {
auto& dstInlineUniformBlock = pInlineUniformBlock[dstIndex];
@ -659,22 +659,22 @@ void MVKInlineUniformDescriptorBinding::read(MVKDescriptorSet* mvkDescSet,
}
}
MVKInlineUniformDescriptorBinding::~MVKInlineUniformDescriptorBinding() {
MVKInlineUniformDescriptor::~MVKInlineUniformDescriptor() {
[_mtlBuffer release];
}
#pragma mark -
#pragma mark MVKImageDescriptorBinding
#pragma mark MVKImageDescriptor
// A null cmdEncoder can be passed to perform a validation pass
void MVKImageDescriptorBinding::bind(MVKCommandEncoder* cmdEncoder,
VkDescriptorType descriptorType,
uint32_t descriptorIndex,
bool stages[],
MVKShaderResourceBinding& mtlIndexes,
MVKVector<uint32_t>& dynamicOffsets,
uint32_t* pDynamicOffsetIndex) {
void MVKImageDescriptor::bind(MVKCommandEncoder* cmdEncoder,
VkDescriptorType descriptorType,
uint32_t descriptorIndex,
bool stages[],
MVKShaderResourceBinding& mtlIndexes,
MVKVector<uint32_t>& dynamicOffsets,
uint32_t* pDynamicOffsetIndex) {
MVKMTLTextureBinding tb;
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
@ -707,11 +707,11 @@ void MVKImageDescriptorBinding::bind(MVKCommandEncoder* cmdEncoder,
}
}
void MVKImageDescriptorBinding::write(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t srcIndex,
size_t stride,
const void* pData) {
void MVKImageDescriptor::write(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t srcIndex,
size_t stride,
const void* pData) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
@ -734,13 +734,13 @@ void MVKImageDescriptorBinding::write(MVKDescriptorSet* mvkDescSet,
}
}
void MVKImageDescriptorBinding::read(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t dstIndex,
VkDescriptorImageInfo* pImageInfo,
VkDescriptorBufferInfo* pBufferInfo,
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* pInlineUniformBlock) {
void MVKImageDescriptor::read(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t dstIndex,
VkDescriptorImageInfo* pImageInfo,
VkDescriptorBufferInfo* pBufferInfo,
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* pInlineUniformBlock) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
@ -757,22 +757,22 @@ void MVKImageDescriptorBinding::read(MVKDescriptorSet* mvkDescSet,
}
}
MVKImageDescriptorBinding::~MVKImageDescriptorBinding() {
MVKImageDescriptor::~MVKImageDescriptor() {
if (_mvkImageView) { _mvkImageView->release(); }
}
#pragma mark -
#pragma mark MVKSamplerDescriptorBindingMixin
#pragma mark MVKSamplerDescriptorMixin
// A null cmdEncoder can be passed to perform a validation pass
void MVKSamplerDescriptorBindingMixin::bind(MVKCommandEncoder* cmdEncoder,
VkDescriptorType descriptorType,
uint32_t descriptorIndex,
bool stages[],
MVKShaderResourceBinding& mtlIndexes,
MVKVector<uint32_t>& dynamicOffsets,
uint32_t* pDynamicOffsetIndex) {
void MVKSamplerDescriptorMixin::bind(MVKCommandEncoder* cmdEncoder,
VkDescriptorType descriptorType,
uint32_t descriptorIndex,
bool stages[],
MVKShaderResourceBinding& mtlIndexes,
MVKVector<uint32_t>& dynamicOffsets,
uint32_t* pDynamicOffsetIndex) {
MVKMTLSamplerStateBinding sb;
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_SAMPLER:
@ -798,11 +798,11 @@ void MVKSamplerDescriptorBindingMixin::bind(MVKCommandEncoder* cmdEncoder,
}
}
void MVKSamplerDescriptorBindingMixin::write(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t srcIndex,
size_t stride,
const void* pData) {
void MVKSamplerDescriptorMixin::write(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t srcIndex,
size_t stride,
const void* pData) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_SAMPLER:
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: {
@ -829,13 +829,13 @@ void MVKSamplerDescriptorBindingMixin::write(MVKDescriptorSet* mvkDescSet,
}
}
void MVKSamplerDescriptorBindingMixin::read(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t dstIndex,
VkDescriptorImageInfo* pImageInfo,
VkDescriptorBufferInfo* pBufferInfo,
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* pInlineUniformBlock) {
void MVKSamplerDescriptorMixin::read(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t dstIndex,
VkDescriptorImageInfo* pImageInfo,
VkDescriptorBufferInfo* pBufferInfo,
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* pInlineUniformBlock) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_SAMPLER:
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: {
@ -849,7 +849,7 @@ void MVKSamplerDescriptorBindingMixin::read(MVKDescriptorSet* mvkDescSet,
}
}
void MVKSamplerDescriptorBindingMixin::setLayout(MVKDescriptorSetLayoutBinding* dslBinding, uint32_t index) {
void MVKSamplerDescriptorMixin::setLayout(MVKDescriptorSetLayoutBinding* dslBinding, uint32_t index) {
auto* oldSamp = _mvkSampler;
_mvkSampler = nullptr;
@ -876,92 +876,26 @@ void MVKSamplerDescriptorBindingMixin::setLayout(MVKDescriptorSetLayoutBinding*
if (oldSamp) { oldSamp->release(); }
}
MVKSamplerDescriptorBindingMixin::~MVKSamplerDescriptorBindingMixin() {
MVKSamplerDescriptorMixin::~MVKSamplerDescriptorMixin() {
if (_mvkSampler) { _mvkSampler->release(); }
}
#pragma mark -
#pragma mark MVKSamplerDescriptorBinding
#pragma mark MVKSamplerDescriptor
// A null cmdEncoder can be passed to perform a validation pass
void MVKSamplerDescriptorBinding::bind(MVKCommandEncoder* cmdEncoder,
VkDescriptorType descriptorType,
uint32_t descriptorIndex,
bool stages[],
MVKShaderResourceBinding& mtlIndexes,
MVKVector<uint32_t>& dynamicOffsets,
uint32_t* pDynamicOffsetIndex) {
void MVKSamplerDescriptor::bind(MVKCommandEncoder* cmdEncoder,
VkDescriptorType descriptorType,
uint32_t descriptorIndex,
bool stages[],
MVKShaderResourceBinding& mtlIndexes,
MVKVector<uint32_t>& dynamicOffsets,
uint32_t* pDynamicOffsetIndex) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_SAMPLER: {
MVKSamplerDescriptorBindingMixin::bind(cmdEncoder, descriptorType, descriptorIndex, stages,
mtlIndexes, dynamicOffsets, pDynamicOffsetIndex);
break;
}
default:
break;
}
}
void MVKSamplerDescriptorBinding::write(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t srcIndex,
size_t stride,
const void* pData) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_SAMPLER: {
MVKSamplerDescriptorBindingMixin::write(mvkDescSet, descriptorType, srcIndex, stride, pData);
break;
}
default:
break;
}
}
void MVKSamplerDescriptorBinding::read(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t dstIndex,
VkDescriptorImageInfo* pImageInfo,
VkDescriptorBufferInfo* pBufferInfo,
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* pInlineUniformBlock) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_SAMPLER: {
MVKSamplerDescriptorBindingMixin::read(mvkDescSet, descriptorType, dstIndex, pImageInfo,
pBufferInfo, pTexelBufferView, pInlineUniformBlock);
break;
}
default:
break;
}
}
void MVKSamplerDescriptorBinding::setLayout(MVKDescriptorSetLayoutBinding* dslBinding, uint32_t index) {
MVKDescriptorBinding::setLayout(dslBinding, index);
MVKSamplerDescriptorBindingMixin::setLayout(dslBinding, index);
}
#pragma mark -
#pragma mark MVKCombinedImageSamplerDescriptorBinding
// A null cmdEncoder can be passed to perform a validation pass
void MVKCombinedImageSamplerDescriptorBinding::bind(MVKCommandEncoder* cmdEncoder,
VkDescriptorType descriptorType,
uint32_t descriptorIndex,
bool stages[],
MVKShaderResourceBinding& mtlIndexes,
MVKVector<uint32_t>& dynamicOffsets,
uint32_t* pDynamicOffsetIndex) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: {
MVKImageDescriptorBinding::bind(cmdEncoder, descriptorType, descriptorIndex, stages,
MVKSamplerDescriptorMixin::bind(cmdEncoder, descriptorType, descriptorIndex, stages,
mtlIndexes, dynamicOffsets, pDynamicOffsetIndex);
MVKSamplerDescriptorBindingMixin::bind(cmdEncoder, descriptorType, descriptorIndex, stages,
mtlIndexes, dynamicOffsets, pDynamicOffsetIndex);
break;
}
@ -970,15 +904,14 @@ void MVKCombinedImageSamplerDescriptorBinding::bind(MVKCommandEncoder* cmdEncode
}
}
void MVKCombinedImageSamplerDescriptorBinding::write(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t srcIndex,
size_t stride,
const void* pData) {
void MVKSamplerDescriptor::write(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t srcIndex,
size_t stride,
const void* pData) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: {
MVKImageDescriptorBinding::write(mvkDescSet, descriptorType, srcIndex, stride, pData);
MVKSamplerDescriptorBindingMixin::write(mvkDescSet, descriptorType, srcIndex, stride, pData);
case VK_DESCRIPTOR_TYPE_SAMPLER: {
MVKSamplerDescriptorMixin::write(mvkDescSet, descriptorType, srcIndex, stride, pData);
break;
}
@ -987,19 +920,17 @@ void MVKCombinedImageSamplerDescriptorBinding::write(MVKDescriptorSet* mvkDescSe
}
}
void MVKCombinedImageSamplerDescriptorBinding::read(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t dstIndex,
VkDescriptorImageInfo* pImageInfo,
VkDescriptorBufferInfo* pBufferInfo,
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* pInlineUniformBlock) {
void MVKSamplerDescriptor::read(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t dstIndex,
VkDescriptorImageInfo* pImageInfo,
VkDescriptorBufferInfo* pBufferInfo,
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* pInlineUniformBlock) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: {
MVKImageDescriptorBinding::read(mvkDescSet, descriptorType, dstIndex, pImageInfo,
case VK_DESCRIPTOR_TYPE_SAMPLER: {
MVKSamplerDescriptorMixin::read(mvkDescSet, descriptorType, dstIndex, pImageInfo,
pBufferInfo, pTexelBufferView, pInlineUniformBlock);
MVKSamplerDescriptorBindingMixin::read(mvkDescSet, descriptorType, dstIndex, pImageInfo,
pBufferInfo, pTexelBufferView, pInlineUniformBlock);
break;
}
@ -1008,23 +939,92 @@ void MVKCombinedImageSamplerDescriptorBinding::read(MVKDescriptorSet* mvkDescSet
}
}
void MVKCombinedImageSamplerDescriptorBinding::setLayout(MVKDescriptorSetLayoutBinding* dslBinding, uint32_t index) {
MVKImageDescriptorBinding::setLayout(dslBinding, index);
MVKSamplerDescriptorBindingMixin::setLayout(dslBinding, index);
void MVKSamplerDescriptor::setLayout(MVKDescriptorSetLayoutBinding* dslBinding, uint32_t index) {
MVKDescriptor::setLayout(dslBinding, index);
MVKSamplerDescriptorMixin::setLayout(dslBinding, index);
}
#pragma mark -
#pragma mark MVKTexelBufferDescriptorBinding
#pragma mark MVKCombinedImageSamplerDescriptor
// A null cmdEncoder can be passed to perform a validation pass
void MVKTexelBufferDescriptorBinding::bind(MVKCommandEncoder* cmdEncoder,
VkDescriptorType descriptorType,
uint32_t descriptorIndex,
bool stages[],
MVKShaderResourceBinding& mtlIndexes,
MVKVector<uint32_t>& dynamicOffsets,
uint32_t* pDynamicOffsetIndex) {
void MVKCombinedImageSamplerDescriptor::bind(MVKCommandEncoder* cmdEncoder,
VkDescriptorType descriptorType,
uint32_t descriptorIndex,
bool stages[],
MVKShaderResourceBinding& mtlIndexes,
MVKVector<uint32_t>& dynamicOffsets,
uint32_t* pDynamicOffsetIndex) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: {
MVKImageDescriptor::bind(cmdEncoder, descriptorType, descriptorIndex, stages,
mtlIndexes, dynamicOffsets, pDynamicOffsetIndex);
MVKSamplerDescriptorMixin::bind(cmdEncoder, descriptorType, descriptorIndex, stages,
mtlIndexes, dynamicOffsets, pDynamicOffsetIndex);
break;
}
default:
break;
}
}
void MVKCombinedImageSamplerDescriptor::write(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t srcIndex,
size_t stride,
const void* pData) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: {
MVKImageDescriptor::write(mvkDescSet, descriptorType, srcIndex, stride, pData);
MVKSamplerDescriptorMixin::write(mvkDescSet, descriptorType, srcIndex, stride, pData);
break;
}
default:
break;
}
}
void MVKCombinedImageSamplerDescriptor::read(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t dstIndex,
VkDescriptorImageInfo* pImageInfo,
VkDescriptorBufferInfo* pBufferInfo,
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* pInlineUniformBlock) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: {
MVKImageDescriptor::read(mvkDescSet, descriptorType, dstIndex, pImageInfo,
pBufferInfo, pTexelBufferView, pInlineUniformBlock);
MVKSamplerDescriptorMixin::read(mvkDescSet, descriptorType, dstIndex, pImageInfo,
pBufferInfo, pTexelBufferView, pInlineUniformBlock);
break;
}
default:
break;
}
}
void MVKCombinedImageSamplerDescriptor::setLayout(MVKDescriptorSetLayoutBinding* dslBinding, uint32_t index) {
MVKImageDescriptor::setLayout(dslBinding, index);
MVKSamplerDescriptorMixin::setLayout(dslBinding, index);
}
#pragma mark -
#pragma mark MVKTexelBufferDescriptor
// A null cmdEncoder can be passed to perform a validation pass
void MVKTexelBufferDescriptor::bind(MVKCommandEncoder* cmdEncoder,
VkDescriptorType descriptorType,
uint32_t descriptorIndex,
bool stages[],
MVKShaderResourceBinding& mtlIndexes,
MVKVector<uint32_t>& dynamicOffsets,
uint32_t* pDynamicOffsetIndex) {
MVKMTLTextureBinding tb;
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
@ -1050,11 +1050,11 @@ void MVKTexelBufferDescriptorBinding::bind(MVKCommandEncoder* cmdEncoder,
}
}
void MVKTexelBufferDescriptorBinding::write(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t srcIndex,
size_t stride,
const void* pData) {
void MVKTexelBufferDescriptor::write(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t srcIndex,
size_t stride,
const void* pData) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: {
@ -1074,13 +1074,13 @@ void MVKTexelBufferDescriptorBinding::write(MVKDescriptorSet* mvkDescSet,
}
}
void MVKTexelBufferDescriptorBinding::read(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t dstIndex,
VkDescriptorImageInfo* pImageInfo,
VkDescriptorBufferInfo* pBufferInfo,
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* pInlineUniformBlock) {
void MVKTexelBufferDescriptor::read(MVKDescriptorSet* mvkDescSet,
VkDescriptorType descriptorType,
uint32_t dstIndex,
VkDescriptorImageInfo* pImageInfo,
VkDescriptorBufferInfo* pBufferInfo,
VkBufferView* pTexelBufferView,
VkWriteDescriptorSetInlineUniformBlockEXT* pInlineUniformBlock) {
switch (descriptorType) {
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: {
@ -1093,6 +1093,6 @@ void MVKTexelBufferDescriptorBinding::read(MVKDescriptorSet* mvkDescSet,
}
}
MVKTexelBufferDescriptorBinding::~MVKTexelBufferDescriptorBinding() {
MVKTexelBufferDescriptor::~MVKTexelBufferDescriptor() {
if (_mvkBufferView) { _mvkBufferView->release(); }
}

View File

@ -18,7 +18,7 @@
#pragma once
#include "MVKDescriptorBinding.h"
#include "MVKDescriptor.h"
#include <unordered_set>
#include <unordered_map>
#include <vector>
@ -133,10 +133,10 @@ protected:
friend class MVKDescriptorPool;
void propogateDebugName() override {}
inline MVKDescriptorBinding* getDescriptorBinding(uint32_t index) { return _bindings[index]; }
inline MVKDescriptor* getDescriptor(uint32_t index) { return _descriptors[index]; }
MVKDescriptorSetLayout* _pLayout = nullptr;
std::vector<MVKDescriptorBinding*> _bindings;
std::vector<MVKDescriptor*> _descriptors;
};

View File

@ -215,7 +215,7 @@ void MVKDescriptorSet::write(const DescriptorAction* pDescriptorAction,
pDescriptorAction->dstArrayElement);
uint32_t descCnt = pDescriptorAction->descriptorCount;
for (uint32_t descIdx = 0; descIdx < descCnt; descIdx++) {
_bindings[dstStartIdx + descIdx]->write(this, descType, descIdx, stride, pData);
_descriptors[dstStartIdx + descIdx]->write(this, descType, descIdx, stride, pData);
}
}
@ -238,29 +238,29 @@ void MVKDescriptorSet::read(const VkCopyDescriptorSet* pDescriptorCopy,
pDescriptorCopy->srcArrayElement);
uint32_t descCnt = pDescriptorCopy->descriptorCount;
for (uint32_t descIdx = 0; descIdx < descCnt; descIdx++) {
_bindings[srcStartIdx + descIdx]->read(this, descType, descIdx, pImageInfo, pBufferInfo,
pTexelBufferView, pInlineUniformBlock);
_descriptors[srcStartIdx + descIdx]->read(this, descType, descIdx, pImageInfo, pBufferInfo,
pTexelBufferView, pInlineUniformBlock);
}
}
MVKDescriptorSet::MVKDescriptorSet(MVKDescriptorSetLayout* layout) : MVKVulkanAPIDeviceObject(layout->_device) {
_pLayout = layout;
_bindings.reserve(layout->getDescriptorCount());
_descriptors.reserve(layout->getDescriptorCount());
uint32_t bindCnt = (uint32_t)layout->_bindings.size();
for (uint32_t bindIdx = 0; bindIdx < bindCnt; bindIdx++) {
MVKDescriptorSetLayoutBinding* dslBind = &layout->_bindings[bindIdx];
uint32_t descCnt = dslBind->getDescriptorCount();
MVKDescriptorSetLayoutBinding* mvkDSLBind = &layout->_bindings[bindIdx];
uint32_t descCnt = mvkDSLBind->getDescriptorCount();
for (uint32_t descIdx = 0; descIdx < descCnt; descIdx++) {
MVKDescriptorBinding* descBind = dslBind->newDescriptorBinding();
descBind->setLayout(dslBind, descIdx);
_bindings.push_back(descBind);
MVKDescriptor* mvkDesc = mvkDSLBind->newDescriptor();
mvkDesc->setLayout(mvkDSLBind, descIdx);
_descriptors.push_back(mvkDesc);
}
}
}
MVKDescriptorSet::~MVKDescriptorSet() {
mvkDestroyContainerContents(_bindings);
mvkDestroyContainerContents(_descriptors);
}

View File

@ -1143,7 +1143,7 @@ MTLSamplerDescriptor* MVKSampler::newMTLSamplerDescriptor(const VkSamplerCreateI
// If compareEnable is true, but dynamic samplers with depth compare are not available
// on this device, this sampler must only be used as an immutable sampler, and will
// be automatically hardcoded into the shader MSL. An error will be triggered if this
// sampler is used to update or push a descriptor binding.
// sampler is used to update or push a descriptor.
if (pCreateInfo->compareEnable && !_requiresConstExprSampler) {
mtlSampDesc.compareFunctionMVK = mvkMTLCompareFunctionFromVkCompareOp(pCreateInfo->compareOp);
}