Commit e6e76c61 by Alexis Hetu Committed by Alexis Hétu

Add missing checks in the GraphicsPipeline constructor

Adjusted a few checks in the GraphicsPipeline constructor, specifically stages' specialization info and sample mask, which can either be null or default. Also fixed destroying Pipeline objects, making sure there's no confusion between GraphicsPipeline and ComputePipeline's destroy() methods inherited from their 2 base classes (Pipeline::destroy() and ObjectBase::destroy()). Bug b/118386749 Change-Id: I78be9f0bbb735518e07d52f7372dbf08b9834abf Reviewed-on: https://swiftshader-review.googlesource.com/c/23110Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarChris Forbes <chrisforbes@google.com>
parent caea0ba5
...@@ -203,7 +203,9 @@ GraphicsPipeline::GraphicsPipeline(const VkGraphicsPipelineCreateInfo* pCreateIn ...@@ -203,7 +203,9 @@ GraphicsPipeline::GraphicsPipeline(const VkGraphicsPipelineCreateInfo* pCreateIn
const VkPipelineShaderStageCreateInfo& vertexStage = pCreateInfo->pStages[0]; const VkPipelineShaderStageCreateInfo& vertexStage = pCreateInfo->pStages[0];
if((vertexStage.stage != VK_SHADER_STAGE_VERTEX_BIT) || if((vertexStage.stage != VK_SHADER_STAGE_VERTEX_BIT) ||
(vertexStage.flags != 0) || (vertexStage.flags != 0) ||
(vertexStage.pSpecializationInfo != nullptr)) !((vertexStage.pSpecializationInfo == nullptr) ||
((vertexStage.pSpecializationInfo->mapEntryCount == 0) &&
(vertexStage.pSpecializationInfo->dataSize == 0))))
{ {
UNIMPLEMENTED(); UNIMPLEMENTED();
} }
...@@ -211,7 +213,9 @@ GraphicsPipeline::GraphicsPipeline(const VkGraphicsPipelineCreateInfo* pCreateIn ...@@ -211,7 +213,9 @@ GraphicsPipeline::GraphicsPipeline(const VkGraphicsPipelineCreateInfo* pCreateIn
const VkPipelineShaderStageCreateInfo& fragmentStage = pCreateInfo->pStages[1]; const VkPipelineShaderStageCreateInfo& fragmentStage = pCreateInfo->pStages[1];
if((fragmentStage.stage != VK_SHADER_STAGE_FRAGMENT_BIT) || if((fragmentStage.stage != VK_SHADER_STAGE_FRAGMENT_BIT) ||
(fragmentStage.flags != 0) || (fragmentStage.flags != 0) ||
(fragmentStage.pSpecializationInfo != nullptr)) !((fragmentStage.pSpecializationInfo == nullptr) ||
((fragmentStage.pSpecializationInfo->mapEntryCount == 0) &&
(fragmentStage.pSpecializationInfo->dataSize == 0))))
{ {
UNIMPLEMENTED(); UNIMPLEMENTED();
} }
...@@ -287,7 +291,8 @@ GraphicsPipeline::GraphicsPipeline(const VkGraphicsPipelineCreateInfo* pCreateIn ...@@ -287,7 +291,8 @@ GraphicsPipeline::GraphicsPipeline(const VkGraphicsPipelineCreateInfo* pCreateIn
if((multisampleState->flags != 0) || if((multisampleState->flags != 0) ||
(multisampleState->rasterizationSamples != VK_SAMPLE_COUNT_1_BIT) || (multisampleState->rasterizationSamples != VK_SAMPLE_COUNT_1_BIT) ||
(multisampleState->sampleShadingEnable != 0) || (multisampleState->sampleShadingEnable != 0) ||
(multisampleState->pSampleMask != nullptr) || !((multisampleState->pSampleMask == nullptr) ||
(*(multisampleState->pSampleMask) == 0xFFFFFFFFu)) ||
(multisampleState->alphaToCoverageEnable != 0) || (multisampleState->alphaToCoverageEnable != 0) ||
(multisampleState->alphaToOneEnable != 0)) (multisampleState->alphaToOneEnable != 0))
{ {
...@@ -363,7 +368,7 @@ GraphicsPipeline::GraphicsPipeline(const VkGraphicsPipelineCreateInfo* pCreateIn ...@@ -363,7 +368,7 @@ GraphicsPipeline::GraphicsPipeline(const VkGraphicsPipelineCreateInfo* pCreateIn
} }
} }
void GraphicsPipeline::destroy(const VkAllocationCallbacks* pAllocator) void GraphicsPipeline::destroyPipeline(const VkAllocationCallbacks* pAllocator)
{ {
} }
...@@ -402,11 +407,10 @@ ComputePipeline::ComputePipeline(const VkComputePipelineCreateInfo* pCreateInfo, ...@@ -402,11 +407,10 @@ ComputePipeline::ComputePipeline(const VkComputePipelineCreateInfo* pCreateInfo,
{ {
} }
void ComputePipeline::destroy(const VkAllocationCallbacks* pAllocator) void ComputePipeline::destroyPipeline(const VkAllocationCallbacks* pAllocator)
{ {
} }
size_t ComputePipeline::ComputeRequiredAllocationSize(const VkComputePipelineCreateInfo* pCreateInfo) size_t ComputePipeline::ComputeRequiredAllocationSize(const VkComputePipelineCreateInfo* pCreateInfo)
{ {
return 0; return 0;
......
...@@ -24,18 +24,28 @@ namespace vk ...@@ -24,18 +24,28 @@ namespace vk
class Pipeline class Pipeline
{ {
public: public:
virtual void destroy(const VkAllocationCallbacks* pAllocator) = 0; operator VkPipeline()
{
return reinterpret_cast<VkPipeline>(this);
}
void destroy(const VkAllocationCallbacks* pAllocator)
{
destroyPipeline(pAllocator);
}
virtual void destroyPipeline(const VkAllocationCallbacks* pAllocator) = 0;
#ifndef NDEBUG #ifndef NDEBUG
virtual VkPipelineBindPoint bindPoint() const = 0; virtual VkPipelineBindPoint bindPoint() const = 0;
#endif #endif
}; };
class GraphicsPipeline : public Pipeline, public Object<GraphicsPipeline, VkPipeline> class GraphicsPipeline : public Pipeline, public ObjectBase<GraphicsPipeline, VkPipeline>
{ {
public: public:
GraphicsPipeline(const VkGraphicsPipelineCreateInfo* pCreateInfo, void* mem); GraphicsPipeline(const VkGraphicsPipelineCreateInfo* pCreateInfo, void* mem);
~GraphicsPipeline() = delete; ~GraphicsPipeline() = delete;
void destroy(const VkAllocationCallbacks* pAllocator) override; void destroyPipeline(const VkAllocationCallbacks* pAllocator) override;
#ifndef NDEBUG #ifndef NDEBUG
VkPipelineBindPoint bindPoint() const override VkPipelineBindPoint bindPoint() const override
...@@ -62,12 +72,12 @@ private: ...@@ -62,12 +72,12 @@ private:
sw::Color<float> blendConstants; sw::Color<float> blendConstants;
}; };
class ComputePipeline : public Pipeline, public Object<ComputePipeline, VkPipeline> class ComputePipeline : public Pipeline, public ObjectBase<ComputePipeline, VkPipeline>
{ {
public: public:
ComputePipeline(const VkComputePipelineCreateInfo* pCreateInfo, void* mem); ComputePipeline(const VkComputePipelineCreateInfo* pCreateInfo, void* mem);
~ComputePipeline() = delete; ~ComputePipeline() = delete;
void destroy(const VkAllocationCallbacks* pAllocator) override; void destroyPipeline(const VkAllocationCallbacks* pAllocator) override;
#ifndef NDEBUG #ifndef NDEBUG
VkPipelineBindPoint bindPoint() const override VkPipelineBindPoint bindPoint() const override
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment