#pragma once
#include "Common/GPU/Vulkan/VulkanLoader.h"
#include <cstring>
class FramebufferManagerVulkan;
struct ScissorRect {
int x, y;
int width, height;
};
struct VulkanDynamicState {
VkViewport viewport;
ScissorRect scissor;
bool useBlendColor;
uint32_t blendColor;
bool useStencil;
uint8_t stencilRef;
uint8_t stencilWriteMask;
uint8_t stencilCompareMask;
};
struct VulkanPipelineRasterStateKey {
unsigned int blendEnable : 1;
unsigned int srcColor : 5;
unsigned int destColor : 5;
unsigned int srcAlpha : 5;
unsigned int destAlpha : 5;
unsigned int blendOpColor : 3;
unsigned int blendOpAlpha : 3;
unsigned int logicOpEnable : 1;
unsigned int logicOp : 4;
unsigned int colorWriteMask : 4;
unsigned int depthClampEnable : 1;
unsigned int depthTestEnable : 1;
unsigned int depthWriteEnable : 1;
unsigned int depthCompareOp : 3;
unsigned int stencilTestEnable : 1;
unsigned int stencilCompareOp : 3;
unsigned int stencilPassOp : 4;
unsigned int stencilFailOp : 4;
unsigned int stencilDepthFailOp : 4;
unsigned int cullMode : 2;
unsigned int topology : 4;
bool operator < (const VulkanPipelineRasterStateKey &other) const {
size_t size = sizeof(VulkanPipelineRasterStateKey);
return memcmp(this, &other, size) < 0;
}
};