renderer: add support for ARB_texture_query_levels

macos/master
Dave Airlie 10 years ago
parent 19fae107e9
commit c66f8b23d9
  1. 12
      src/vrend_shader.c

@ -110,6 +110,8 @@ struct dump_ctx {
bool uses_sampler_buf; bool uses_sampler_buf;
bool uses_sampler_rect; bool uses_sampler_rect;
bool uses_lodq; bool uses_lodq;
bool uses_txq_levels;
/* create a shader with lower left if upper left is primary variant /* create a shader with lower left if upper left is primary variant
or vice versa */ or vice versa */
uint32_t shadow_samp_mask; uint32_t shadow_samp_mask;
@ -905,9 +907,17 @@ static int translate_tex(struct dump_ctx *ctx,
inst->Texture.Texture != TGSI_TEXTURE_2D_MSAA && inst->Texture.Texture != TGSI_TEXTURE_2D_MSAA &&
inst->Texture.Texture != TGSI_TEXTURE_2D_ARRAY_MSAA) inst->Texture.Texture != TGSI_TEXTURE_2D_ARRAY_MSAA)
snprintf(bias, 128, ", int(%s.w)", srcs[0]); snprintf(bias, 128, ", int(%s.w)", srcs[0]);
/* need to emit a textureQueryLevels */
if (inst->Dst[0].Register.WriteMask & 0x8) {
ctx->uses_txq_levels = true;
snprintf(buf, 255, "%s = %s(%s(textureQueryLevels(%s)));\n", dsts[0], dstconv, dtypeprefix, srcs[sampler_index]);
return emit_buf(ctx, buf);
} else {
snprintf(buf, 255, "%s = %s(%s(textureSize(%s%s)));\n", dsts[0], dstconv, dtypeprefix, srcs[sampler_index], bias); snprintf(buf, 255, "%s = %s(%s(textureSize(%s%s)));\n", dsts[0], dstconv, dtypeprefix, srcs[sampler_index], bias);
return emit_buf(ctx, buf); return emit_buf(ctx, buf);
} }
}
switch (inst->Texture.Texture) { switch (inst->Texture.Texture) {
case TGSI_TEXTURE_1D: case TGSI_TEXTURE_1D:
@ -1806,6 +1816,8 @@ static char *emit_header(struct dump_ctx *ctx, char *glsl_hdr)
STRCAT_WITH_RET(glsl_hdr, "#extension GL_ARB_uniform_buffer_object : require\n"); STRCAT_WITH_RET(glsl_hdr, "#extension GL_ARB_uniform_buffer_object : require\n");
if (ctx->uses_lodq) if (ctx->uses_lodq)
STRCAT_WITH_RET(glsl_hdr, "#extension GL_ARB_texture_query_lod : require\n"); STRCAT_WITH_RET(glsl_hdr, "#extension GL_ARB_texture_query_lod : require\n");
if (ctx->uses_txq_levels)
STRCAT_WITH_RET(glsl_hdr, "#extension GL_ARB_texture_query_levels : require\n");
if (ctx->has_viewport_idx) if (ctx->has_viewport_idx)
STRCAT_WITH_RET(glsl_hdr, "#extension GL_ARB_viewport_array : require\n"); STRCAT_WITH_RET(glsl_hdr, "#extension GL_ARB_viewport_array : require\n");
return glsl_hdr; return glsl_hdr;

Loading…
Cancel
Save