vulkan: fix wireframe validation error

This commit is contained in:
niki
2022-08-01 16:07:37 +02:00
parent 224b9e84f0
commit 98ebdd7871
4 changed files with 13 additions and 12 deletions
+3 -10
View File
@@ -250,7 +250,6 @@ bool Graphics::setMode(void* context, int width, int height, int pixelwidth, int
updatedBatchedDrawBuffers();
Shader::current = Shader::standardShaders[graphics::Shader::StandardShader::STANDARD_DEFAULT];
currentPolygonMode = VK_POLYGON_MODE_FILL;
restoreState(states.back());
setViewportSize(width, height, pixelwidth, pixelheight);
@@ -428,13 +427,6 @@ void Graphics::setScissor() {
void Graphics::setWireframe(bool enable) {
flushBatchedDraws();
if (enable) {
currentPolygonMode = VK_POLYGON_MODE_LINE;
}
else {
currentPolygonMode = VK_POLYGON_MODE_FILL;
}
states.back().wireframe = enable;
}
@@ -876,6 +868,7 @@ void Graphics::createLogicalDevice() {
VkPhysicalDeviceFeatures deviceFeatures{};
deviceFeatures.samplerAnisotropy = VK_TRUE;
deviceFeatures.fillModeNonSolid = VK_TRUE;
VkDeviceCreateInfo createInfo{};
createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
@@ -1176,7 +1169,7 @@ void Graphics::prepareDraw(const VertexAttributes& attributes, const BufferBindi
configuration.vertexAttributes = attributes;
configuration.shader = (Shader*)Shader::current;
configuration.primitiveType = primitiveType;
configuration.polygonMode = currentPolygonMode;
configuration.wireFrame = states.back().wireframe;
configuration.blendState = states.back().blend;
configuration.colorChannelMask = states.back().colorMask;
configuration.winding = states.back().winding;
@@ -1319,7 +1312,7 @@ VkPipeline Graphics::createGraphicsPipeline(GraphicsPipelineConfiguration config
rasterizer.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
rasterizer.depthClampEnable = VK_FALSE;
rasterizer.rasterizerDiscardEnable = VK_FALSE;
rasterizer.polygonMode = configuration.polygonMode;
rasterizer.polygonMode = Vulkan::getPolygonMode(configuration.wireFrame);
rasterizer.lineWidth = 1.0f;
rasterizer.cullMode = Vulkan::getCullMode(configuration.cullmode);
rasterizer.frontFace = Vulkan::getFrontFace(configuration.winding);
+1 -2
View File
@@ -28,7 +28,7 @@ struct GraphicsPipelineConfiguration {
VertexAttributes vertexAttributes;
Shader* shader = nullptr;
PrimitiveType primitiveType = PRIMITIVE_MAX_ENUM;
VkPolygonMode polygonMode = VK_POLYGON_MODE_FILL;
bool wireFrame;
BlendState blendState;
ColorChannelMask colorChannelMask;
Winding winding;
@@ -230,7 +230,6 @@ private:
// just like batchedDrawBuffers we need a vector for each frame in flight.
std::vector<std::vector<std::function<void()>>> cleanUpFunctions;
graphics::Texture* currentTexture = nullptr;
VkPolygonMode currentPolygonMode = VK_POLYGON_MODE_FILL;
// render pass variables.
VkFormat currentFramebufferOutputFormat = VK_FORMAT_UNDEFINED;
+8
View File
@@ -481,6 +481,14 @@ VkImageViewType Vulkan::getImageViewType(TextureType textureType) {
}
}
VkPolygonMode Vulkan::getPolygonMode(bool wireframe) {
if (wireframe) {
return VK_POLYGON_MODE_LINE;
} else {
return VK_POLYGON_MODE_FILL;
}
}
void Vulkan::cmdTransitionImageLayout(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout oldLayout, VkImageLayout newLayout,
uint32_t baseLevel, uint32_t levelCount, uint32_t baseLayer, uint32_t layerCount) {
VkImageMemoryBarrier barrier{};
+1
View File
@@ -43,6 +43,7 @@ public:
static VkCullModeFlags getCullMode(CullMode);
static VkImageType getImageType(TextureType);
static VkImageViewType getImageViewType(TextureType);
static VkPolygonMode getPolygonMode(bool wireframe);
static void cmdTransitionImageLayout(
VkCommandBuffer, VkImage, VkImageLayout oldLayout, VkImageLayout newLayout,