From 475e16340159f51c9b582d30aa02d726f88e5a06 Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Tue, 7 Jul 2020 17:44:32 -0400 Subject: [PATCH] spirv: Fix bogus detection of PSIZE0 --- mojoshader_common.c | 2 ++ profiles/mojoshader_profile_spirv.c | 12 ++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/mojoshader_common.c b/mojoshader_common.c index 328c793..530efa0 100644 --- a/mojoshader_common.c +++ b/mojoshader_common.c @@ -1091,6 +1091,8 @@ void MOJOSHADER_spirv_link_attributes(const MOJOSHADER_parseData *vertex, const MOJOSHADER_attribute *vAttr = &vertex->outputs[i]; if (vAttr->usage == MOJOSHADER_USAGE_POSITION && vAttr->index == 0) continue; + if (vAttr->usage == MOJOSHADER_USAGE_POINTSIZE && vAttr->index == 0) + continue; if (vAttr->usage == MOJOSHADER_USAGE_COLOR && vAttr->index == 0) continue; diff --git a/profiles/mojoshader_profile_spirv.c b/profiles/mojoshader_profile_spirv.c index cc94463..c88f26a 100644 --- a/profiles/mojoshader_profile_spirv.c +++ b/profiles/mojoshader_profile_spirv.c @@ -271,17 +271,14 @@ static uint32 spv_output_location(Context *ctx, uint32 id, uint32 loc) return (buffer_size(ctx->helpers) >> 2) - 1; } // spv_output_location -static uint32 spv_output_attrib_location(Context *ctx, uint32 id, - MOJOSHADER_usage usage, uint32 index) +static void spv_output_attrib_location(Context *ctx, uint32 id, + MOJOSHADER_usage usage, uint32 index) { - uint32 result; SpirvPatchTable* table = &ctx->spirv.patch_table; push_output(ctx, &ctx->helpers); spv_emit(ctx, 4, SpvOpDecorate, id, SpvDecorationLocation, 0xDEADBEEF); pop_output(ctx); - result = (buffer_size(ctx->helpers) >> 2) - 1; - table->attrib_offsets[usage][index] = result; - return result; + table->attrib_offsets[usage][index] = (buffer_size(ctx->helpers) >> 2) - 1; } // spv_output_attrib_location static void spv_output_sampler_binding(Context *ctx, uint32 id, uint32 binding) @@ -1631,7 +1628,10 @@ static void spv_link_vs_attributes(Context *ctx, uint32 id, if (usage == MOJOSHADER_USAGE_POSITION && index == 0) spv_output_builtin(ctx, id, SpvBuiltInPosition); else if (usage == MOJOSHADER_USAGE_POINTSIZE && index == 0) + { spv_output_builtin(ctx, id, SpvBuiltInPointSize); + ctx->spirv.patch_table.attrib_offsets[usage][index] = 1; + } // else if else if (usage == MOJOSHADER_USAGE_COLOR && index == 0) spv_output_location(ctx, id, 0); else