vrend_shader: add sampler array functionality in emit_sampler_decl

Sampler arrays don't work with shadow textures. Let's move sampler
array functionality into emit_sampler_decl to de-deuplicate logic.

Reviewed-by: Dave Airlie <airlied@redhat.com>
macos/master
Gurchetan Singh 6 years ago committed by Dave Airlie
parent 7c9be01c56
commit 327207986e
  1. 35
      src/vrend_shader.c

@ -3441,32 +3441,25 @@ static char get_return_type_prefix(enum tgsi_return_type type)
return ' '; return ' ';
} }
static void *emit_sampler_decl(struct dump_ctx *ctx, char *glsl_hdr, static void *emit_sampler_decl(struct dump_ctx *ctx, char *glsl_hdr, uint32_t i,
uint32_t i) uint32_t range, uint32_t return_type, uint32_t texture_type)
{ {
char buf[255]; char buf[255], ptc;
int is_shad = 0; int is_shad = 0;
const char *stc; const char *sname, *precision, *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); sname = tgsi_proc_to_prefix(ctx->prog_type);
if (ctx->cfg->use_gles) { precision = (ctx->cfg->use_gles) ? "highp " : " ";
precision = "highp ";
} else { ptc = vrend_shader_samplerreturnconv(return_type);
precision = " "; stc = vrend_shader_samplertypeconv(texture_type, &is_shad);
}
/* OpenGL ES do not support 1D texture /* GLES does not support 1D textures -- we use a 2D texture and set the parameter set to 0.5 */
* so we use a 2D texture with a parameter set to 0.5 if (ctx->cfg->use_gles && texture_type == TGSI_TEXTURE_1D)
*/
if (ctx->cfg->use_gles && !strcmp(stc, "1D"))
snprintf(buf, 255, "uniform %csampler2D %ssamp%d;\n", ptc, sname, i); snprintf(buf, 255, "uniform %csampler2D %ssamp%d;\n", ptc, sname, i);
else if (range)
snprintf(buf, 255, "uniform %s%csampler%s %ssamp%d[%d];\n", precision, ptc, stc, sname, i, range);
else else
snprintf(buf, 255, "uniform %s%csampler%s %ssamp%d;\n", precision, ptc, stc, sname, i); snprintf(buf, 255, "uniform %s%csampler%s %ssamp%d;\n", precision, ptc, stc, sname, i);
@ -3478,6 +3471,7 @@ static void *emit_sampler_decl(struct dump_ctx *ctx, char *glsl_hdr,
STRCAT_WITH_RET(glsl_hdr, buf); STRCAT_WITH_RET(glsl_hdr, buf);
ctx->shadow_samp_mask |= (1 << i); ctx->shadow_samp_mask |= (1 << i);
} }
return glsl_hdr; return glsl_hdr;
} }
@ -3880,7 +3874,8 @@ static char *emit_ios(struct dump_ctx *ctx, char *glsl_hdr)
if ((ctx->samplers_used & (1 << i)) == 0) if ((ctx->samplers_used & (1 << i)) == 0)
continue; continue;
glsl_hdr = emit_sampler_decl(ctx, glsl_hdr, i); glsl_hdr = emit_sampler_decl(ctx, glsl_hdr, i, 0, ctx->samplers[i].tgsi_sampler_return,
ctx->samplers[i].tgsi_sampler_type);
if (!glsl_hdr) if (!glsl_hdr)
return NULL; return NULL;
} }

Loading…
Cancel
Save