[virglrenderer-devel] [PATCH 16/19] tessellation: handle reading from outputs.
Dave Airlie
airlied at gmail.com
Fri Jun 8 05:14:20 UTC 2018
From: Dave Airlie <airlied at redhat.com>
Tessellation shaders can read back from outputs, so handle this.
---
src/vrend_shader.c | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/src/vrend_shader.c b/src/vrend_shader.c
index 00cedbe..f18d252 100644
--- a/src/vrend_shader.c
+++ b/src/vrend_shader.c
@@ -2198,8 +2198,23 @@ get_source_info(struct dump_ctx *ctx,
sinfo->override_no_wm[i] = ctx->inputs[j].override_no_wm;
break;
}
- }
- else if (src->Register.File == TGSI_FILE_TEMPORARY) {
+ } else if (src->Register.File == TGSI_FILE_OUTPUT) {
+ for (uint32_t j = 0; j < ctx->num_outputs; j++) {
+ if (ctx->outputs[j].first == src->Register.Index) {
+ enum vrend_type_qualifier srcstypeprefix = stypeprefix;
+ if (stype == TGSI_TYPE_UNSIGNED && ctx->outputs[j].is_int)
+ srcstypeprefix = TYPE_CONVERSION_NONE;
+ if (ctx->outputs[j].glsl_gl_block) {
+ /* GS input clipdist requires a conversion */
+ if (ctx->outputs[j].name == TGSI_SEMANTIC_CLIPDIST) {
+ create_swizzled_clipdist(ctx, srcs[i], src, ctx->outputs[j].sid, 1, get_string(stypeprefix), prefix, arrayname);
+ }
+ } else {
+ snprintf(srcs[i], 255, "%s(%s%s%s%s)", get_string(srcstypeprefix), prefix, ctx->outputs[j].glsl_name, arrayname, ctx->outputs[j].is_int ? "" : swizzle);
+ }
+ }
+ }
+ } else if (src->Register.File == TGSI_FILE_TEMPORARY) {
struct vrend_temp_range *range = find_temp_range(ctx, src->Register.Index);
if (!range)
return FALSE;
--
2.14.3
More information about the virglrenderer-devel
mailing list