mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-26 06:10:56 +00:00
[vulkan] Use a swizzle view for coverage-alpha
And thus a single pipeline for either colored glyphs or coverage-alpha glyphs, making for better batching when I get to that.
This commit is contained in:
parent
40b319bf42
commit
2828a4ce0c
6 changed files with 25 additions and 54 deletions
|
@ -277,12 +277,10 @@ vkshaderpath = libs/video/renderer/vulkan/shader
|
||||||
|
|
||||||
slice_src = $(vkshaderpath)/slice.vert
|
slice_src = $(vkshaderpath)/slice.vert
|
||||||
slice_c = $(vkshaderpath)/slice.vert.spvc
|
slice_c = $(vkshaderpath)/slice.vert.spvc
|
||||||
glyph_src = $(vkshaderpath)/glyph.vert
|
glyphv_src = $(vkshaderpath)/glyph.vert
|
||||||
glyph_c = $(vkshaderpath)/glyph.vert.spvc
|
glyphv_c = $(vkshaderpath)/glyph.vert.spvc
|
||||||
glyph_color_src = $(vkshaderpath)/glyph_color.frag
|
glyphf_src = $(vkshaderpath)/glyph.frag
|
||||||
glyph_color_c = $(vkshaderpath)/glyph_color.frag.spvc
|
glyphf_c = $(vkshaderpath)/glyph.frag.spvc
|
||||||
glyph_coverage_src = $(vkshaderpath)/glyph_coverage.frag
|
|
||||||
glyph_coverage_c = $(vkshaderpath)/glyph_coverage.frag.spvc
|
|
||||||
linev_src = $(vkshaderpath)/line.vert
|
linev_src = $(vkshaderpath)/line.vert
|
||||||
linev_c = $(vkshaderpath)/line.vert.spvc
|
linev_c = $(vkshaderpath)/line.vert.spvc
|
||||||
linef_src = $(vkshaderpath)/line.frag
|
linef_src = $(vkshaderpath)/line.frag
|
||||||
|
@ -355,9 +353,8 @@ pushcolor_c = $(vkshaderpath)/pushcolor.frag.spvc
|
||||||
|
|
||||||
$(slice_vert_c): $(slice_vert_src)
|
$(slice_vert_c): $(slice_vert_src)
|
||||||
|
|
||||||
$(glyph_vert_c): $(glyph_vert_src)
|
$(glyphv_c): $(glyphv_src)
|
||||||
$(glyph_color_c): $(glyph_color_src)
|
$(glyphf_c): $(glyphf_src)
|
||||||
$(glyph_coverage_c): $(glyph_coverage_src)
|
|
||||||
|
|
||||||
$(linev_c): $(linev_src)
|
$(linev_c): $(linev_src)
|
||||||
$(linef_c): $(linef_src)
|
$(linef_c): $(linef_src)
|
||||||
|
@ -424,9 +421,8 @@ $(pushcolor_c): $(pushcolor_src)
|
||||||
|
|
||||||
vkshader_c = \
|
vkshader_c = \
|
||||||
$(slice_c) \
|
$(slice_c) \
|
||||||
$(glyph_c) \
|
$(glyphv_c) \
|
||||||
$(glyph_color_c) \
|
$(glyphf_c) \
|
||||||
$(glyph_coverage_c) \
|
|
||||||
$(linev_c) \
|
$(linev_c) \
|
||||||
$(linef_c) \
|
$(linef_c) \
|
||||||
$(partphysicsc_c) \
|
$(partphysicsc_c) \
|
||||||
|
|
|
@ -1151,7 +1151,7 @@
|
||||||
@inherit = $properties.pipelines.trans_base;//FIXME should be sparate
|
@inherit = $properties.pipelines.trans_base;//FIXME should be sparate
|
||||||
stages = (
|
stages = (
|
||||||
{ stage = vertex; name = main; module = $builtin/slice.vert; },
|
{ stage = vertex; name = main; module = $builtin/slice.vert; },
|
||||||
{ stage = fragment; name = main; module = $builtin/glyph_color.frag; },
|
{ stage = fragment; name = main; module = $builtin/glyph.frag; },
|
||||||
);
|
);
|
||||||
vertexInput = $properties.vertexInput.slice;
|
vertexInput = $properties.vertexInput.slice;
|
||||||
inputAssembly = {
|
inputAssembly = {
|
||||||
|
@ -1168,6 +1168,10 @@
|
||||||
};
|
};
|
||||||
glyph = {
|
glyph = {
|
||||||
@inherit = $properties.pipelines.trans_base;//FIXME should be sparate
|
@inherit = $properties.pipelines.trans_base;//FIXME should be sparate
|
||||||
|
stages = (
|
||||||
|
{ stage = vertex; name = main; module = $builtin/glyph.vert; },
|
||||||
|
{ stage = fragment; name = main; module = $builtin/glyph.frag; },
|
||||||
|
);
|
||||||
vertexInput = $properties.vertexInput.glyph;
|
vertexInput = $properties.vertexInput.glyph;
|
||||||
inputAssembly = {
|
inputAssembly = {
|
||||||
// glyphs are drawn using instanced quads, so primitive restart
|
// glyphs are drawn using instanced quads, so primitive restart
|
||||||
|
@ -1182,20 +1186,6 @@
|
||||||
};
|
};
|
||||||
layout = glyph_layout;
|
layout = glyph_layout;
|
||||||
};
|
};
|
||||||
glyph_color = {
|
|
||||||
@inherit = $properties.pipelines.glyph;
|
|
||||||
stages = (
|
|
||||||
{ stage = vertex; name = main; module = $builtin/glyph.vert; },
|
|
||||||
{ stage = fragment; name = main; module = $builtin/glyph_color.frag; },
|
|
||||||
);
|
|
||||||
};
|
|
||||||
glyph_coverage = {
|
|
||||||
@inherit = $properties.pipelines.glyph;
|
|
||||||
stages = (
|
|
||||||
{ stage = vertex; name = main; module = $builtin/glyph.vert; },
|
|
||||||
{ stage = fragment; name = main; module = $builtin/glyph_coverage.frag; },
|
|
||||||
);
|
|
||||||
};
|
|
||||||
lines = {
|
lines = {
|
||||||
@inherit = $properties.pipelines.twod;
|
@inherit = $properties.pipelines.twod;
|
||||||
stages = (
|
stages = (
|
||||||
|
|
|
@ -43,9 +43,7 @@ static
|
||||||
static
|
static
|
||||||
#include "libs/video/renderer/vulkan/shader/glyph.vert.spvc"
|
#include "libs/video/renderer/vulkan/shader/glyph.vert.spvc"
|
||||||
static
|
static
|
||||||
#include "libs/video/renderer/vulkan/shader/glyph_color.frag.spvc"
|
#include "libs/video/renderer/vulkan/shader/glyph.frag.spvc"
|
||||||
static
|
|
||||||
#include "libs/video/renderer/vulkan/shader/glyph_coverage.frag.spvc"
|
|
||||||
static
|
static
|
||||||
#include "libs/video/renderer/vulkan/shader/line.vert.spvc"
|
#include "libs/video/renderer/vulkan/shader/line.vert.spvc"
|
||||||
static
|
static
|
||||||
|
@ -124,8 +122,7 @@ typedef struct shaderdata_s {
|
||||||
static shaderdata_t builtin_shaders[] = {
|
static shaderdata_t builtin_shaders[] = {
|
||||||
{ "slice.vert", slice_vert, sizeof (slice_vert) },
|
{ "slice.vert", slice_vert, sizeof (slice_vert) },
|
||||||
{ "glyph.vert", glyph_vert, sizeof (glyph_vert) },
|
{ "glyph.vert", glyph_vert, sizeof (glyph_vert) },
|
||||||
{ "glyph_color.frag", glyph_color_frag, sizeof (glyph_color_frag) },
|
{ "glyph.frag", glyph_frag, sizeof (glyph_frag) },
|
||||||
{ "glyph_coverage.frag", glyph_coverage_frag, sizeof (glyph_coverage_frag) },
|
|
||||||
{ "line.vert", line_vert, sizeof (line_vert) },
|
{ "line.vert", line_vert, sizeof (line_vert) },
|
||||||
{ "line.frag", line_frag, sizeof (line_frag) },
|
{ "line.frag", line_frag, sizeof (line_frag) },
|
||||||
{ "particle.vert", particle_vert, sizeof (particle_vert) },
|
{ "particle.vert", particle_vert, sizeof (particle_vert) },
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
#version 450
|
|
||||||
|
|
||||||
layout (set = 1, binding = 1) uniform sampler2D Texture;
|
|
||||||
|
|
||||||
layout (location = 0) in vec2 uv;
|
|
||||||
layout (location = 1) in vec4 color;
|
|
||||||
|
|
||||||
layout (location = 0) out vec4 frag_color;
|
|
||||||
|
|
||||||
void
|
|
||||||
main (void)
|
|
||||||
{
|
|
||||||
vec4 pix;
|
|
||||||
|
|
||||||
pix = texture (Texture, uv).rrrr;
|
|
||||||
frag_color = pix * color;
|
|
||||||
}
|
|
|
@ -191,7 +191,7 @@ typedef struct drawctx_s {
|
||||||
qfv_resobj_t *line_objects;
|
qfv_resobj_t *line_objects;
|
||||||
VkPipeline quad_pipeline;
|
VkPipeline quad_pipeline;
|
||||||
VkPipeline slice_pipeline;
|
VkPipeline slice_pipeline;
|
||||||
VkPipeline glyph_coverage_pipeline;
|
VkPipeline glyph_pipeline;
|
||||||
VkPipeline line_pipeline;
|
VkPipeline line_pipeline;
|
||||||
VkPipelineLayout layout;
|
VkPipelineLayout layout;
|
||||||
VkPipelineLayout glyph_layout;//slice pipeline uses same layout
|
VkPipelineLayout glyph_layout;//slice pipeline uses same layout
|
||||||
|
@ -538,7 +538,7 @@ Vulkan_Draw_Shutdown (vulkan_ctx_t *ctx)
|
||||||
|
|
||||||
dfunc->vkDestroyPipeline (device->dev, dctx->quad_pipeline, 0);
|
dfunc->vkDestroyPipeline (device->dev, dctx->quad_pipeline, 0);
|
||||||
dfunc->vkDestroyPipeline (device->dev, dctx->slice_pipeline, 0);
|
dfunc->vkDestroyPipeline (device->dev, dctx->slice_pipeline, 0);
|
||||||
dfunc->vkDestroyPipeline (device->dev, dctx->glyph_coverage_pipeline, 0);
|
dfunc->vkDestroyPipeline (device->dev, dctx->glyph_pipeline, 0);
|
||||||
dfunc->vkDestroyPipeline (device->dev, dctx->line_pipeline, 0);
|
dfunc->vkDestroyPipeline (device->dev, dctx->line_pipeline, 0);
|
||||||
Hash_DelTable (dctx->pic_cache);
|
Hash_DelTable (dctx->pic_cache);
|
||||||
delete_memsuper (dctx->pic_memsuper);
|
delete_memsuper (dctx->pic_memsuper);
|
||||||
|
@ -613,8 +613,7 @@ Vulkan_Draw_Init (vulkan_ctx_t *ctx)
|
||||||
|
|
||||||
dctx->quad_pipeline = Vulkan_CreateGraphicsPipeline (ctx, "twod");
|
dctx->quad_pipeline = Vulkan_CreateGraphicsPipeline (ctx, "twod");
|
||||||
dctx->slice_pipeline = Vulkan_CreateGraphicsPipeline (ctx, "slice");
|
dctx->slice_pipeline = Vulkan_CreateGraphicsPipeline (ctx, "slice");
|
||||||
dctx->glyph_coverage_pipeline
|
dctx->glyph_pipeline = Vulkan_CreateGraphicsPipeline (ctx, "glyph");
|
||||||
= Vulkan_CreateGraphicsPipeline (ctx, "glyph_coverage");
|
|
||||||
dctx->line_pipeline = Vulkan_CreateGraphicsPipeline (ctx, "lines");
|
dctx->line_pipeline = Vulkan_CreateGraphicsPipeline (ctx, "lines");
|
||||||
|
|
||||||
dctx->layout = Vulkan_CreatePipelineLayout (ctx, "twod_layout");
|
dctx->layout = Vulkan_CreatePipelineLayout (ctx, "twod_layout");
|
||||||
|
@ -1226,7 +1225,7 @@ Vulkan_FlushText (qfv_renderframe_t *rFrame)
|
||||||
VkDeviceSize offsets[] = {0};
|
VkDeviceSize offsets[] = {0};
|
||||||
dfunc->vkCmdBindVertexBuffers (cmd, 0, 1, &glyph_buffer, offsets);
|
dfunc->vkCmdBindVertexBuffers (cmd, 0, 1, &glyph_buffer, offsets);
|
||||||
dfunc->vkCmdBindPipeline (cmd, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
dfunc->vkCmdBindPipeline (cmd, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
||||||
dctx->glyph_coverage_pipeline);
|
dctx->glyph_pipeline);
|
||||||
dfunc->vkCmdSetViewport (cmd, 0, 1, &rFrame->renderpass->viewport);
|
dfunc->vkCmdSetViewport (cmd, 0, 1, &rFrame->renderpass->viewport);
|
||||||
dfunc->vkCmdSetScissor (cmd, 0, 1, &rFrame->renderpass->scissor);
|
dfunc->vkCmdSetScissor (cmd, 0, 1, &rFrame->renderpass->scissor);
|
||||||
|
|
||||||
|
@ -1352,6 +1351,12 @@ Vulkan_Draw_AddFont (rfont_t *rfont, vulkan_ctx_t *ctx)
|
||||||
.type = VK_IMAGE_VIEW_TYPE_2D,
|
.type = VK_IMAGE_VIEW_TYPE_2D,
|
||||||
.format = font->resource->glyph_image.image.format,
|
.format = font->resource->glyph_image.image.format,
|
||||||
.aspect = VK_IMAGE_ASPECT_COLOR_BIT,
|
.aspect = VK_IMAGE_ASPECT_COLOR_BIT,
|
||||||
|
.components = {
|
||||||
|
.r = VK_COMPONENT_SWIZZLE_R,
|
||||||
|
.g = VK_COMPONENT_SWIZZLE_R,
|
||||||
|
.b = VK_COMPONENT_SWIZZLE_R,
|
||||||
|
.a = VK_COMPONENT_SWIZZLE_R,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
__auto_type glyph_iview = &font->resource->glyph_iview;
|
__auto_type glyph_iview = &font->resource->glyph_iview;
|
||||||
|
|
Loading…
Reference in a new issue