8#define LineVertex450 (VK_SHADER_STAGE_VERTEX_BIT | (1 << 6))
9#define LineFragment450 (VK_SHADER_STAGE_FRAGMENT_BIT | (1 << 7))
13 { VK_PRIMITIVE_TOPOLOGY_LINE_STRIP,
14 { { 0, { .binding=0, .descriptorType=VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
15 .descriptorCount=1, .stageFlags=VK_SHADER_STAGE_VERTEX_BIT,
16 .pImmutableSamplers=
nullptr } } },
17 { .binding=0, .stride=2 *
sizeof(float),
18 .inputRate=VK_VERTEX_INPUT_RATE_VERTEX },
19 { { 0, 0, VK_FORMAT_R32G32_SFLOAT, 0 } },
20 { .stageFlags=VK_SHADER_STAGE_VERTEX_BIT, .offset=0,
24 { VK_PRIMITIVE_TOPOLOGY_LINE_STRIP,
37"#extension GL_ARB_separate_shader_objects : enable\n"
38"layout(set = 0, binding = 0) uniform Projection { mat4 projection; } proj;\n"
39"layout(push_constant) uniform ComboBuffer {\n"
43"layout(location = 0) in vec2 fragPosition;\n"
44"layout(location = 0) out vec4 fragColor;\n"
46" gl_Position = proj.projection * cb.transform * vec4(fragPosition, 0.0, 1.0);\n"
47" fragColor = cb.color;\n"
500x07230203, 0x00010300, 0x00080008, 0x0000002F,
510x00000000, 0x00020011, 0x00000001, 0x0006000B,
520x00000001, 0x4C534C47, 0x6474732E, 0x3035342E,
530x00000000, 0x0003000E, 0x00000000, 0x00000001,
540x0008000F, 0x00000000, 0x00000004, 0x6E69616D,
550x00000000, 0x0000000D, 0x00000020, 0x0000002A,
560x00030003, 0x00000002, 0x000001C2, 0x00090004,
570x415F4C47, 0x735F4252, 0x72617065, 0x5F657461,
580x64616873, 0x6F5F7265, 0x63656A62, 0x00007374,
590x00040005, 0x00000004, 0x6E69616D, 0x00000000,
600x00060005, 0x0000000B, 0x505F6C67, 0x65567265,
610x78657472, 0x00000000, 0x00060006, 0x0000000B,
620x00000000, 0x505F6C67, 0x7469736F, 0x006E6F69,
630x00070006, 0x0000000B, 0x00000001, 0x505F6C67,
640x746E696F, 0x657A6953, 0x00000000, 0x00070006,
650x0000000B, 0x00000002, 0x435F6C67, 0x4470696C,
660x61747369, 0x0065636E, 0x00070006, 0x0000000B,
670x00000003, 0x435F6C67, 0x446C6C75, 0x61747369,
680x0065636E, 0x00030005, 0x0000000D, 0x00000000,
690x00050005, 0x00000011, 0x6A6F7250, 0x69746365,
700x00006E6F, 0x00060006, 0x00000011, 0x00000000,
710x6A6F7270, 0x69746365, 0x00006E6F, 0x00040005,
720x00000013, 0x6A6F7270, 0x00000000, 0x00050005,
730x00000017, 0x626D6F43, 0x6675426F, 0x00726566,
740x00060006, 0x00000017, 0x00000000, 0x6E617274,
750x726F6673, 0x0000006D, 0x00050006, 0x00000017,
760x00000001, 0x6F6C6F63, 0x00000072, 0x00030005,
770x00000019, 0x00006263, 0x00060005, 0x00000020,
780x67617266, 0x69736F50, 0x6E6F6974, 0x00000000,
790x00050005, 0x0000002A, 0x67617266, 0x6F6C6F43,
800x00000072, 0x00050048, 0x0000000B, 0x00000000,
810x0000000B, 0x00000000, 0x00050048, 0x0000000B,
820x00000001, 0x0000000B, 0x00000001, 0x00050048,
830x0000000B, 0x00000002, 0x0000000B, 0x00000003,
840x00050048, 0x0000000B, 0x00000003, 0x0000000B,
850x00000004, 0x00030047, 0x0000000B, 0x00000002,
860x00040048, 0x00000011, 0x00000000, 0x00000005,
870x00050048, 0x00000011, 0x00000000, 0x00000023,
880x00000000, 0x00050048, 0x00000011, 0x00000000,
890x00000007, 0x00000010, 0x00030047, 0x00000011,
900x00000002, 0x00040047, 0x00000013, 0x00000022,
910x00000000, 0x00040047, 0x00000013, 0x00000021,
920x00000000, 0x00040048, 0x00000017, 0x00000000,
930x00000005, 0x00050048, 0x00000017, 0x00000000,
940x00000023, 0x00000000, 0x00050048, 0x00000017,
950x00000000, 0x00000007, 0x00000010, 0x00050048,
960x00000017, 0x00000001, 0x00000023, 0x00000040,
970x00030047, 0x00000017, 0x00000002, 0x00040047,
980x00000020, 0x0000001E, 0x00000000, 0x00040047,
990x0000002A, 0x0000001E, 0x00000000, 0x00020013,
1000x00000002, 0x00030021, 0x00000003, 0x00000002,
1010x00030016, 0x00000006, 0x00000020, 0x00040017,
1020x00000007, 0x00000006, 0x00000004, 0x00040015,
1030x00000008, 0x00000020, 0x00000000, 0x0004002B,
1040x00000008, 0x00000009, 0x00000001, 0x0004001C,
1050x0000000A, 0x00000006, 0x00000009, 0x0006001E,
1060x0000000B, 0x00000007, 0x00000006, 0x0000000A,
1070x0000000A, 0x00040020, 0x0000000C, 0x00000003,
1080x0000000B, 0x0004003B, 0x0000000C, 0x0000000D,
1090x00000003, 0x00040015, 0x0000000E, 0x00000020,
1100x00000001, 0x0004002B, 0x0000000E, 0x0000000F,
1110x00000000, 0x00040018, 0x00000010, 0x00000007,
1120x00000004, 0x0003001E, 0x00000011, 0x00000010,
1130x00040020, 0x00000012, 0x00000002, 0x00000011,
1140x0004003B, 0x00000012, 0x00000013, 0x00000002,
1150x00040020, 0x00000014, 0x00000002, 0x00000010,
1160x0004001E, 0x00000017, 0x00000010, 0x00000007,
1170x00040020, 0x00000018, 0x00000009, 0x00000017,
1180x0004003B, 0x00000018, 0x00000019, 0x00000009,
1190x00040020, 0x0000001A, 0x00000009, 0x00000010,
1200x00040017, 0x0000001E, 0x00000006, 0x00000002,
1210x00040020, 0x0000001F, 0x00000001, 0x0000001E,
1220x0004003B, 0x0000001F, 0x00000020, 0x00000001,
1230x0004002B, 0x00000006, 0x00000022, 0x00000000,
1240x0004002B, 0x00000006, 0x00000023, 0x3F800000,
1250x00040020, 0x00000028, 0x00000003, 0x00000007,
1260x0004003B, 0x00000028, 0x0000002A, 0x00000003,
1270x0004002B, 0x0000000E, 0x0000002B, 0x00000001,
1280x00040020, 0x0000002C, 0x00000009, 0x00000007,
1290x00050036, 0x00000002, 0x00000004, 0x00000000,
1300x00000003, 0x000200F8, 0x00000005, 0x00050041,
1310x00000014, 0x00000015, 0x00000013, 0x0000000F,
1320x0004003D, 0x00000010, 0x00000016, 0x00000015,
1330x00050041, 0x0000001A, 0x0000001B, 0x00000019,
1340x0000000F, 0x0004003D, 0x00000010, 0x0000001C,
1350x0000001B, 0x00050092, 0x00000010, 0x0000001D,
1360x00000016, 0x0000001C, 0x0004003D, 0x0000001E,
1370x00000021, 0x00000020, 0x00050051, 0x00000006,
1380x00000024, 0x00000021, 0x00000000, 0x00050051,
1390x00000006, 0x00000025, 0x00000021, 0x00000001,
1400x00070050, 0x00000007, 0x00000026, 0x00000024,
1410x00000025, 0x00000022, 0x00000023, 0x00050091,
1420x00000007, 0x00000027, 0x0000001D, 0x00000026,
1430x00050041, 0x00000028, 0x00000029, 0x0000000D,
1440x0000000F, 0x0003003E, 0x00000029, 0x00000027,
1450x00050041, 0x0000002C, 0x0000002D, 0x00000019,
1460x0000002B, 0x0004003D, 0x00000007, 0x0000002E,
1470x0000002D, 0x0003003E, 0x0000002A, 0x0000002E,
1480x000100FD, 0x00010038
154"#extension GL_ARB_separate_shader_objects : enable\n"
155"layout(location = 0) in vec4 lineColor;\n"
156"layout(location = 0) out vec4 fragColor;\n"
158" fragColor = lineColor;\n"
1610x07230203, 0x00010300, 0x00080008, 0x0000000D,
1620x00000000, 0x00020011, 0x00000001, 0x0006000B,
1630x00000001, 0x4C534C47, 0x6474732E, 0x3035342E,
1640x00000000, 0x0003000E, 0x00000000, 0x00000001,
1650x0007000F, 0x00000004, 0x00000004, 0x6E69616D,
1660x00000000, 0x00000009, 0x0000000B, 0x00030010,
1670x00000004, 0x00000007, 0x00030003, 0x00000002,
1680x000001C2, 0x00090004, 0x415F4C47, 0x735F4252,
1690x72617065, 0x5F657461, 0x64616873, 0x6F5F7265,
1700x63656A62, 0x00007374, 0x00040005, 0x00000004,
1710x6E69616D, 0x00000000, 0x00050005, 0x00000009,
1720x67617266, 0x6F6C6F43, 0x00000072, 0x00050005,
1730x0000000B, 0x656E696C, 0x6F6C6F43, 0x00000072,
1740x00040047, 0x00000009, 0x0000001E, 0x00000000,
1750x00040047, 0x0000000B, 0x0000001E, 0x00000000,
1760x00020013, 0x00000002, 0x00030021, 0x00000003,
1770x00000002, 0x00030016, 0x00000006, 0x00000020,
1780x00040017, 0x00000007, 0x00000006, 0x00000004,
1790x00040020, 0x00000008, 0x00000003, 0x00000007,
1800x0004003B, 0x00000008, 0x00000009, 0x00000003,
1810x00040020, 0x0000000A, 0x00000001, 0x00000007,
1820x0004003B, 0x0000000A, 0x0000000B, 0x00000001,
1830x00050036, 0x00000002, 0x00000004, 0x00000000,
1840x00000003, 0x000200F8, 0x00000005, 0x0004003D,
1850x00000007, 0x0000000C, 0x0000000B, 0x0003003E,
1860x00000009, 0x0000000C, 0x000100FD, 0x00010038
193 { VK_DYNAMIC_STATE_LINE_WIDTH },
197 m_needsPrepare =
true;
216 float fade = 1.0F - (
m_rate / 150.0F);
217 float zoom = 1.0F - (
m_rate / 4000.0F);
220 state.second[1] *= fade;
221 state.second[2] *= zoom;
232 vertex.second[0] =
m_hue;
233 vertex.second[1] = 1.0;
234 vertex.second[2] = 1.0;
235 auto * buffer = vertex.first->GetMappedMemory();
238 vertex.first->Update(
nullptr);
257 m_vulkanFuncs->vkCmdBindDescriptorSets(currentcmdbuf, VK_PIPELINE_BIND_POINT_GRAPHICS,
262 float centrex =
m_area.left() + (
m_area.width() / 2.0F);
263 float centrey =
m_area.top() + (
m_area.height() / 2.0F);
268 VkDeviceSize offset = 0;
269 VkBuffer vbos { vertex.first->GetBuffer() };
270 m_vulkanFuncs->vkCmdBindVertexBuffers(currentcmdbuf, 0, 1, &vbos, &offset);
277 QMatrix4x4 transform;
280 transform.translate(centrex, centrey);
281 transform.scale(vertex.second[2]);
282 transform.translate(-centrex, -centrey);
285 auto color = QColor::fromHsvF(
static_cast<qreal
>(vertex.second[0]), 1.0,
286 static_cast<qreal
>(vertex.second[1]));
294 m_vulkanFuncs->vkCmdPushConstants(currentcmdbuf, layout, VK_SHADER_STAGE_VERTEX_BIT,
337 int size =
m_fade ? 8 : 1;
static MythBufferVulkan * Create(MythVulkanObject *Vulkan, VkDeviceSize Size)
VkPhysicalDeviceFeatures GetPhysicalDeviceFeatures() const
VkPhysicalDeviceLimits GetPhysicalDeviceLimits() const
VkPipelineLayout GetPipelineLayout(void) const
void Prepare(QRect Area) override
void TearDownVulkan() override
MythVisualMonoScopeVulkan(AudioPlayer *Audio, MythRender *Render, bool Fade)
void Draw(QRect Area, MythPainter *, QPaintDevice *) override
MythRenderVulkan * InitialiseVulkan(QRect Area) override
~MythVisualMonoScopeVulkan() override
VertexStates m_vertexBuffers
virtual void TearDownVulkan()
VkDescriptorPool m_descriptorPool
virtual MythRenderVulkan * InitialiseVulkan(QRect)
MythUniformBufferVulkan * m_projectionUniform
VkDescriptorSet m_projectionDescriptor
MythShaderVulkan * m_vulkanShader
QVulkanDeviceFunctions * m_vulkanFuncs
MythRenderVulkan * m_vulkanRender
MythWindowVulkan * m_vulkanWindow
bool IsValidVulkan() const
bool UpdateVertices(float *Buffer)
void InitCommon(QRect Area)
std::map< int, std::pair< QString, std::vector< uint32_t > > > MythShaderMap
std::map< int, MythBindingDesc > MythBindingMap
static const MythBindingMap k450LineBindings
static const MythShaderMap k450LineShaders
static eu8 clamp(eu8 value, eu8 low, eu8 high)
static constexpr size_t NUM_SAMPLES