[virglrenderer-devel] [PATCH] shader: refactor sampler emission.
Dave Airlie
airlied at gmail.com
Tue Jul 3 03:48:39 UTC 2018
From: Dave Airlie <airlied at redhat.com>
This just moves the code to a function, it doesn't change any
of the expected code. It should make it easier to spot fixes.
---
src/vrend_shader.c | 76 ++++++++++++++++++++++++++--------------------
1 file changed, 43 insertions(+), 33 deletions(-)
diff --git a/src/vrend_shader.c b/src/vrend_shader.c
index f7bf853..f22eae7 100644
--- a/src/vrend_shader.c
+++ b/src/vrend_shader.c
@@ -3409,6 +3409,46 @@ static char get_return_type_prefix(enum tgsi_return_type type)
return ' ';
}
+static void *emit_sampler_decleration(struct dump_ctx *ctx, char *glsl_hdr,
+ uint32_t i)
+{
+ char buf[255];
+ int is_shad = 0;
+ const char *stc;
+ char ptc;
+ const char *sname;
+ const char *precision;
+
+ ptc = vrend_shader_samplerreturnconv(ctx->samplers[i].tgsi_sampler_return);
+ stc = vrend_shader_samplertypeconv(ctx->samplers[i].tgsi_sampler_type, &is_shad);
+
+ sname = tgsi_proc_to_prefix(ctx->prog_type);
+
+ if (ctx->cfg->use_gles) {
+ precision = "highp ";
+ } else {
+ precision = " ";
+ }
+
+ /* OpenGL ES do not support 1D texture
+ * so we use a 2D texture with a parameter set to 0.5
+ */
+ if (ctx->cfg->use_gles && !strcmp(stc, "1D"))
+ snprintf(buf, 255, "uniform %csampler2D %ssamp%d;\n", ptc, sname, i);
+ else
+ snprintf(buf, 255, "uniform %s%csampler%s %ssamp%d;\n", precision, ptc, stc, sname, i);
+
+ STRCAT_WITH_RET(glsl_hdr, buf);
+ if (is_shad) {
+ snprintf(buf, 255, "uniform %svec4 %sshadmask%d;\n", precision, sname, i);
+ STRCAT_WITH_RET(glsl_hdr, buf);
+ snprintf(buf, 255, "uniform %svec4 %sshadadd%d;\n", precision, sname, i);
+ STRCAT_WITH_RET(glsl_hdr, buf);
+ ctx->shadow_samp_mask |= (1 << i);
+ }
+ return glsl_hdr;
+}
+
static char *emit_ios(struct dump_ctx *ctx, char *glsl_hdr)
{
uint32_t i;
@@ -3804,43 +3844,13 @@ static char *emit_ios(struct dump_ctx *ctx, char *glsl_hdr)
} else {
nsamp = util_last_bit(ctx->samplers_used);
for (i = 0; i < nsamp; i++) {
- int is_shad = 0;
- const char *stc;
- char ptc;
if ((ctx->samplers_used & (1 << i)) == 0)
continue;
- const char *sname;
- const char *precision;
-
- ptc = vrend_shader_samplerreturnconv(ctx->samplers[i].tgsi_sampler_return);
- stc = vrend_shader_samplertypeconv(ctx->samplers[i].tgsi_sampler_type, &is_shad);
-
- sname = tgsi_proc_to_prefix(ctx->prog_type);
-
- if (ctx->cfg->use_gles) {
- precision = "highp ";
- } else {
- precision = " ";
- }
-
- /* OpenGL ES do not support 1D texture
- * so we use a 2D texture with a parameter set to 0.5
- */
- if (ctx->cfg->use_gles && !strcmp(stc, "1D"))
- snprintf(buf, 255, "uniform %csampler2D %ssamp%d;\n", ptc, sname, i);
- else
- snprintf(buf, 255, "uniform %s%csampler%s %ssamp%d;\n", precision, ptc, stc, sname, i);
-
- STRCAT_WITH_RET(glsl_hdr, buf);
- if (is_shad) {
- snprintf(buf, 255, "uniform %svec4 %sshadmask%d;\n", precision, sname, i);
- STRCAT_WITH_RET(glsl_hdr, buf);
- snprintf(buf, 255, "uniform %svec4 %sshadadd%d;\n", precision, sname, i);
- STRCAT_WITH_RET(glsl_hdr, buf);
- ctx->shadow_samp_mask |= (1 << i);
- }
+ glsl_hdr = emit_sampler_decleration(ctx, glsl_hdr, i);
+ if (!glsl_hdr)
+ return NULL;
}
}
if (ctx->prog_type == TGSI_PROCESSOR_FRAGMENT &&
--
2.17.1
More information about the virglrenderer-devel
mailing list