mirror of
https://github.com/EduApps-CDG/OpenDX
synced 2024-12-30 09:45:37 +01:00
[dxvk] Replaced DxvkResourceType by VkImageViewType
This commit is contained in:
parent
3419d55dee
commit
da867d4bca
@ -552,7 +552,7 @@ namespace dxvk {
|
|||||||
DxvkResourceSlot resource;
|
DxvkResourceSlot resource;
|
||||||
resource.slot = bindingId;
|
resource.slot = bindingId;
|
||||||
resource.type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
|
resource.type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
|
||||||
resource.dim = DxvkResourceDim::Buffer;
|
resource.view = VK_IMAGE_VIEW_TYPE_MAX_ENUM;
|
||||||
m_resourceSlots.push_back(resource);
|
m_resourceSlots.push_back(resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -588,7 +588,7 @@ namespace dxvk {
|
|||||||
DxvkResourceSlot resource;
|
DxvkResourceSlot resource;
|
||||||
resource.slot = bindingId;
|
resource.slot = bindingId;
|
||||||
resource.type = VK_DESCRIPTOR_TYPE_SAMPLER;
|
resource.type = VK_DESCRIPTOR_TYPE_SAMPLER;
|
||||||
resource.dim = DxvkResourceDim::Opaque;
|
resource.view = VK_IMAGE_VIEW_TYPE_MAX_ENUM;
|
||||||
m_resourceSlots.push_back(resource);
|
m_resourceSlots.push_back(resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -649,8 +649,7 @@ namespace dxvk {
|
|||||||
case DxbcResourceDim::Texture2DMs: return { spv::Dim2D, 0, 1, isUav ? 2u : 1u };
|
case DxbcResourceDim::Texture2DMs: return { spv::Dim2D, 0, 1, isUav ? 2u : 1u };
|
||||||
case DxbcResourceDim::Texture2DMsArr: return { spv::Dim2D, 1, 1, isUav ? 2u : 1u };
|
case DxbcResourceDim::Texture2DMsArr: return { spv::Dim2D, 1, 1, isUav ? 2u : 1u };
|
||||||
case DxbcResourceDim::Texture3D: return { spv::Dim3D, 0, 0, isUav ? 2u : 1u };
|
case DxbcResourceDim::Texture3D: return { spv::Dim3D, 0, 0, isUav ? 2u : 1u };
|
||||||
// Some applications bind non-array cube maps to cube map array slots
|
case DxbcResourceDim::TextureCube: return { spv::DimCube, 0, 0, isUav ? 2u : 1u };
|
||||||
case DxbcResourceDim::TextureCube: return { spv::DimCube, 1, 0, isUav ? 2u : 1u };
|
|
||||||
case DxbcResourceDim::TextureCubeArr: return { spv::DimCube, 1, 0, isUav ? 2u : 1u };
|
case DxbcResourceDim::TextureCubeArr: return { spv::DimCube, 1, 0, isUav ? 2u : 1u };
|
||||||
default: throw DxvkError(str::format("DxbcCompiler: Unsupported resource type: ", resourceType));
|
default: throw DxvkError(str::format("DxbcCompiler: Unsupported resource type: ", resourceType));
|
||||||
}
|
}
|
||||||
@ -661,7 +660,6 @@ namespace dxvk {
|
|||||||
case DxbcResourceDim::Buffer: m_module.enableCapability(spv::CapabilityImageBuffer); break;
|
case DxbcResourceDim::Buffer: m_module.enableCapability(spv::CapabilityImageBuffer); break;
|
||||||
case DxbcResourceDim::Texture1D: m_module.enableCapability(spv::CapabilityImage1D); break;
|
case DxbcResourceDim::Texture1D: m_module.enableCapability(spv::CapabilityImage1D); break;
|
||||||
case DxbcResourceDim::Texture1DArr: m_module.enableCapability(spv::CapabilityImage1D); break;
|
case DxbcResourceDim::Texture1DArr: m_module.enableCapability(spv::CapabilityImage1D); break;
|
||||||
case DxbcResourceDim::TextureCube:
|
|
||||||
case DxbcResourceDim::TextureCubeArr: m_module.enableCapability(spv::CapabilityImageCubeArray); break;
|
case DxbcResourceDim::TextureCubeArr: m_module.enableCapability(spv::CapabilityImageCubeArray); break;
|
||||||
case DxbcResourceDim::Texture2DMsArr: m_module.enableCapability(spv::CapabilityImageMSArray); break;
|
case DxbcResourceDim::Texture2DMsArr: m_module.enableCapability(spv::CapabilityImageMSArray); break;
|
||||||
default: break; // No additional capabilities required
|
default: break; // No additional capabilities required
|
||||||
@ -727,7 +725,7 @@ namespace dxvk {
|
|||||||
// Store descriptor info for the shader interface
|
// Store descriptor info for the shader interface
|
||||||
DxvkResourceSlot resource;
|
DxvkResourceSlot resource;
|
||||||
resource.slot = bindingId;
|
resource.slot = bindingId;
|
||||||
resource.dim = getDxvkResourceDim(resourceType);
|
resource.view = getViewType(resourceType);
|
||||||
|
|
||||||
if (isUav) {
|
if (isUav) {
|
||||||
resource.type = resourceType == DxbcResourceDim::Buffer
|
resource.type = resourceType == DxbcResourceDim::Buffer
|
||||||
@ -827,7 +825,7 @@ namespace dxvk {
|
|||||||
resource.type = isUav
|
resource.type = isUav
|
||||||
? VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
|
? VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
|
||||||
: VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER;
|
: VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER;
|
||||||
resource.dim = DxvkResourceDim::Buffer;
|
resource.view = VK_IMAGE_VIEW_TYPE_MAX_ENUM;
|
||||||
m_resourceSlots.push_back(resource);
|
m_resourceSlots.push_back(resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4349,22 +4347,22 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DxvkResourceDim DxbcCompiler::getDxvkResourceDim(DxbcResourceDim dim) const {
|
VkImageViewType DxbcCompiler::getViewType(DxbcResourceDim dim) const {
|
||||||
switch (dim) {
|
switch (dim) {
|
||||||
default:
|
default:
|
||||||
case DxbcResourceDim::Unknown: return DxvkResourceDim::Opaque;
|
case DxbcResourceDim::Unknown:
|
||||||
case DxbcResourceDim::Buffer: return DxvkResourceDim::Buffer;
|
case DxbcResourceDim::Buffer:
|
||||||
case DxbcResourceDim::RawBuffer: return DxvkResourceDim::Buffer;
|
case DxbcResourceDim::RawBuffer:
|
||||||
case DxbcResourceDim::StructuredBuffer: return DxvkResourceDim::Buffer;
|
case DxbcResourceDim::StructuredBuffer: return VK_IMAGE_VIEW_TYPE_MAX_ENUM;
|
||||||
case DxbcResourceDim::Texture1D: return DxvkResourceDim::Image1D;
|
case DxbcResourceDim::Texture1D: return VK_IMAGE_VIEW_TYPE_1D;
|
||||||
case DxbcResourceDim::Texture1DArr: return DxvkResourceDim::Image1DArray;
|
case DxbcResourceDim::Texture1DArr: return VK_IMAGE_VIEW_TYPE_1D_ARRAY;
|
||||||
case DxbcResourceDim::Texture2D: return DxvkResourceDim::Image2D;
|
case DxbcResourceDim::Texture2D: return VK_IMAGE_VIEW_TYPE_2D;
|
||||||
case DxbcResourceDim::Texture2DMs: return DxvkResourceDim::Image2D;
|
case DxbcResourceDim::Texture2DMs: return VK_IMAGE_VIEW_TYPE_2D;
|
||||||
case DxbcResourceDim::Texture2DArr: return DxvkResourceDim::Image2DArray;
|
case DxbcResourceDim::Texture2DArr: return VK_IMAGE_VIEW_TYPE_2D_ARRAY;
|
||||||
case DxbcResourceDim::Texture2DMsArr: return DxvkResourceDim::Image2DArray;
|
case DxbcResourceDim::Texture2DMsArr: return VK_IMAGE_VIEW_TYPE_2D_ARRAY;
|
||||||
case DxbcResourceDim::TextureCube: return DxvkResourceDim::ImageCube;
|
case DxbcResourceDim::TextureCube: return VK_IMAGE_VIEW_TYPE_CUBE;
|
||||||
case DxbcResourceDim::TextureCubeArr: return DxvkResourceDim::ImageCubeArray;
|
case DxbcResourceDim::TextureCubeArr: return VK_IMAGE_VIEW_TYPE_CUBE_ARRAY;
|
||||||
case DxbcResourceDim::Texture3D: return DxvkResourceDim::Image3D;
|
case DxbcResourceDim::Texture3D: return VK_IMAGE_VIEW_TYPE_3D;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -731,7 +731,7 @@ namespace dxvk {
|
|||||||
DxbcVectorType getInputRegType(
|
DxbcVectorType getInputRegType(
|
||||||
uint32_t regIdx) const;
|
uint32_t regIdx) const;
|
||||||
|
|
||||||
DxvkResourceDim getDxvkResourceDim(
|
VkImageViewType getViewType(
|
||||||
DxbcResourceDim dim) const;
|
DxbcResourceDim dim) const;
|
||||||
|
|
||||||
///////////////////////////
|
///////////////////////////
|
||||||
|
@ -1064,7 +1064,8 @@ namespace dxvk {
|
|||||||
m_cmd->trackResource(res.imageView);
|
m_cmd->trackResource(res.imageView);
|
||||||
m_cmd->trackResource(res.imageView->image());
|
m_cmd->trackResource(res.imageView->image());
|
||||||
} else {
|
} else {
|
||||||
Logger::err("DxvkContext: Unbound image descriptor");
|
Logger::err("DxvkContext: Unbound or incompatible image descriptor");
|
||||||
|
Logger::err(str::format(res.imageView->type(), " ", binding.view));
|
||||||
m_descriptors[i].image.sampler = VK_NULL_HANDLE;
|
m_descriptors[i].image.sampler = VK_NULL_HANDLE;
|
||||||
m_descriptors[i].image.imageView = VK_NULL_HANDLE;
|
m_descriptors[i].image.imageView = VK_NULL_HANDLE;
|
||||||
m_descriptors[i].image.imageLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
m_descriptors[i].image.imageLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||||
|
@ -219,6 +219,18 @@ namespace dxvk {
|
|||||||
return m_view;
|
return m_view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Image view type
|
||||||
|
*
|
||||||
|
* Convenience method to query the
|
||||||
|
* view type in order to check for
|
||||||
|
* resource compatibility.
|
||||||
|
* \returns Image view type
|
||||||
|
*/
|
||||||
|
VkImageViewType type() const {
|
||||||
|
return m_info.type;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Image view properties
|
* \brief Image view properties
|
||||||
* \returns Image view properties
|
* \returns Image view properties
|
||||||
|
@ -11,7 +11,7 @@ namespace dxvk {
|
|||||||
void DxvkDescriptorSlotMapping::defineSlot(
|
void DxvkDescriptorSlotMapping::defineSlot(
|
||||||
uint32_t slot,
|
uint32_t slot,
|
||||||
VkDescriptorType type,
|
VkDescriptorType type,
|
||||||
DxvkResourceDim dim,
|
VkImageViewType view,
|
||||||
VkShaderStageFlagBits stage) {
|
VkShaderStageFlagBits stage) {
|
||||||
uint32_t bindingId = this->getBindingId(slot);
|
uint32_t bindingId = this->getBindingId(slot);
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ namespace dxvk {
|
|||||||
DxvkDescriptorSlot slotInfo;
|
DxvkDescriptorSlot slotInfo;
|
||||||
slotInfo.slot = slot;
|
slotInfo.slot = slot;
|
||||||
slotInfo.type = type;
|
slotInfo.type = type;
|
||||||
slotInfo.dim = dim;
|
slotInfo.view = view;
|
||||||
slotInfo.stages = stage;
|
slotInfo.stages = stage;
|
||||||
m_descriptorSlots.push_back(slotInfo);
|
m_descriptorSlots.push_back(slotInfo);
|
||||||
}
|
}
|
||||||
|
@ -6,25 +6,6 @@
|
|||||||
|
|
||||||
namespace dxvk {
|
namespace dxvk {
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Resource dimension
|
|
||||||
*
|
|
||||||
* Used to validate resource bindings and to
|
|
||||||
* bind compatible dummy resource in case the
|
|
||||||
* client API did not bind a resource.
|
|
||||||
*/
|
|
||||||
enum class DxvkResourceDim : uint32_t {
|
|
||||||
Opaque,
|
|
||||||
Buffer,
|
|
||||||
Image1D,
|
|
||||||
Image1DArray,
|
|
||||||
Image2D,
|
|
||||||
Image2DArray,
|
|
||||||
ImageCube,
|
|
||||||
ImageCubeArray,
|
|
||||||
Image3D,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Resource slot
|
* \brief Resource slot
|
||||||
*
|
*
|
||||||
@ -32,9 +13,9 @@ namespace dxvk {
|
|||||||
* binding that a shader can access.
|
* binding that a shader can access.
|
||||||
*/
|
*/
|
||||||
struct DxvkResourceSlot {
|
struct DxvkResourceSlot {
|
||||||
uint32_t slot;
|
uint32_t slot;
|
||||||
VkDescriptorType type;
|
VkDescriptorType type;
|
||||||
DxvkResourceDim dim;
|
VkImageViewType view;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -47,7 +28,7 @@ namespace dxvk {
|
|||||||
struct DxvkDescriptorSlot {
|
struct DxvkDescriptorSlot {
|
||||||
uint32_t slot; ///< Resource slot index for the context
|
uint32_t slot; ///< Resource slot index for the context
|
||||||
VkDescriptorType type; ///< Descriptor type (aka resource type)
|
VkDescriptorType type; ///< Descriptor type (aka resource type)
|
||||||
DxvkResourceDim dim; ///< Resource dimension (buffer or image)
|
VkImageViewType view; ///< Compatible image view type
|
||||||
VkShaderStageFlags stages; ///< Stages that can use the resource
|
VkShaderStageFlags stages; ///< Stages that can use the resource
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -92,13 +73,13 @@ namespace dxvk {
|
|||||||
* entirely new binding is added.
|
* entirely new binding is added.
|
||||||
* \param [in] slot Resource slot
|
* \param [in] slot Resource slot
|
||||||
* \param [in] type Resource type
|
* \param [in] type Resource type
|
||||||
* \param [in] dim Resource dimension
|
* \param [in] view Image view type
|
||||||
* \param [in] stage Shader stage
|
* \param [in] stage Shader stage
|
||||||
*/
|
*/
|
||||||
void defineSlot(
|
void defineSlot(
|
||||||
uint32_t slot,
|
uint32_t slot,
|
||||||
VkDescriptorType type,
|
VkDescriptorType type,
|
||||||
DxvkResourceDim dim,
|
VkImageViewType view,
|
||||||
VkShaderStageFlagBits stage);
|
VkShaderStageFlagBits stage);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -59,7 +59,7 @@ namespace dxvk {
|
|||||||
void DxvkShader::defineResourceSlots(
|
void DxvkShader::defineResourceSlots(
|
||||||
DxvkDescriptorSlotMapping& mapping) const {
|
DxvkDescriptorSlotMapping& mapping) const {
|
||||||
for (const auto& slot : m_slots)
|
for (const auto& slot : m_slots)
|
||||||
mapping.defineSlot(slot.slot, slot.type, slot.dim, m_stage);
|
mapping.defineSlot(slot.slot, slot.type, slot.view, m_stage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user