diff --git a/libs/video/renderer/vulkan/rp_main_def.plist b/libs/video/renderer/vulkan/rp_main_def.plist index f5de3da67..82c07e2b2 100644 --- a/libs/video/renderer/vulkan/rp_main_def.plist +++ b/libs/video/renderer/vulkan/rp_main_def.plist @@ -1,10 +1,13 @@ { properties = { color = { - bsp = "[0, 0.5, 0.6, 1]"; - alias = "[0.6, 0.5, 0, 1]"; - iqm = "[0.6, 0.5, 0, 1]"; - sprite = "[0.6, 0.5, 0, 1]"; + bsp = "[0.0, 0.5, 0.6, 1]"; + alias = "[0.6, 0.5, 0.0, 1]"; + iqm = "[0.6, 0.5, 0.0, 1]"; + sprite = "[0.6, 0.5, 0.0, 1]"; + particles = "[0.4, 0.5, 0.8, 1]"; + lights = "[0.8, 0.6, 0.2, 1]"; + compose = "[0.7, 0.7, 0.7, 1]"; }; color_dependency = { src = { @@ -186,7 +189,9 @@ renderpasses = { depth = { color = "[ 0.5, 0.5, 0.5, 1]"; attachments = { - depth = depth_stencil_read_only_optimal; + depth = { + depth = depth_stencil_attachment_optimal; + }; preserve = (color, emission, normal, position, output); }; pipelines = { @@ -229,7 +234,9 @@ renderpasses = { depth = $depth_dependency; }; attachments = { - depth = depth_stencil_read_only_optimal; + depth = { + depth = depth_stencil_read_only_optimal; + }; preserve = (color, emission, normal, position, output); }; pipelines = { @@ -254,7 +261,7 @@ renderpasses = { }; particles:trans = { color = $color.particles; - pipline = partdraw; + pipeline = partdraw; tasks = ( { func = particles_draw; }, ); @@ -273,7 +280,9 @@ renderpasses = { normal = color_attachment_optimal; position = color_attachment_optimal; }; - depth = depth_stencil_read_only_optimal; + depth = { + depth = depth_stencil_read_only_optimal; + }; preserve = (output); }; pipelines = { diff --git a/libs/video/renderer/vulkan/vkparse.c b/libs/video/renderer/vulkan/vkparse.c index 1f09f0e3f..fb11ad67d 100644 --- a/libs/video/renderer/vulkan/vkparse.c +++ b/libs/video/renderer/vulkan/vkparse.c @@ -314,13 +314,20 @@ parse_labeledsingle (const plfield_t *field, const plitem_t *item, // field->name, field->offset, // field->type, field->parser, field->data); + const char *key = PL_KeyAtIndex (item, 0); + if (!key) { + PL_Message (messages, item, "missing item"); + return 0; + } + item = PL_ObjectForKey (item, key); + if (!PL_CheckType (single->type, PL_Type (item))) { PL_TypeMismatch (messages, item, field->name, single->type, PL_Type (item)); return 0; } - plfield_t f = { 0, 0, single->type, single->parser, 0 }; + plfield_t f = { field->name, 0, single->type, single->parser, 0 }; void *value = vkparse_alloc (context, single->stride); memset (value, 0, single->stride); if (!single->parser (&f, item, value, messages, context)) { @@ -469,6 +476,8 @@ vkstrdup (parsectx_t *context, const char *str) return dup; } +static parse_string_t parse_string_array = { 0 }; + static int parse_string (const plfield_t *field, const plitem_t *item, void *data, plitem_t *messages, void *context) diff --git a/libs/video/renderer/vulkan/vkparse.plist b/libs/video/renderer/vulkan/vkparse.plist index 05f875f98..41fa107f4 100644 --- a/libs/video/renderer/vulkan/vkparse.plist +++ b/libs/video/renderer/vulkan/vkparse.plist @@ -459,7 +459,12 @@ value = depth; }; preserve = { - type = (labeledarray, qfv_attachmentrefinfo_t, name); + type = (array, { + parse_type = QFString; + type = "char *"; + parser = parse_string; + data = parse_string_array; + }); size = num_preserve; values = preserve; };