summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_glsl_visitor.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_glsl_visitor.cpp')
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_glsl_visitor.cpp55
1 files changed, 36 insertions, 19 deletions
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_glsl_visitor.cpp b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_glsl_visitor.cpp
index 3f85b41c4d1..02bd86344be 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_glsl_visitor.cpp
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_glsl_visitor.cpp
@@ -826,6 +826,20 @@ void ir_print_glsl_visitor::visit(ir_texture *ir)
const bool is_shadow = ir->sampler->type->sampler_shadow;
const bool is_array = ir->sampler->type->sampler_array;
const bool is_msaa = ir->op == ir_txf_ms;
+
+ if (ir->op == ir_txs)
+ {
+ buffer.asprintf_append("textureSize (");
+ ir->sampler->accept(this);
+ if (ir_texture::has_lod(ir->sampler->type))
+ {
+ buffer.asprintf_append(", ");
+ ir->lod_info.lod->accept(this);
+ }
+ buffer.asprintf_append(")");
+ return;
+ }
+
const glsl_type* uv_type = ir->coordinate->type;
const int uv_dim = uv_type->vector_elements;
int sampler_uv_dim = tex_sampler_dim_size[sampler_dim];
@@ -835,7 +849,7 @@ void ir_print_glsl_visitor::visit(ir_texture *ir)
sampler_uv_dim += 1;
if (is_msaa)
sampler_uv_dim += 1;
- const bool is_proj = (uv_dim > sampler_uv_dim);
+ const bool is_proj = ((ir->op == ir_tex || ir->op == ir_txb || ir->op == ir_txl || ir->op == ir_txd) && uv_dim > sampler_uv_dim);
const bool is_lod = (ir->op == ir_txl);
#if 0 // BK - disable LOD workarounds.
@@ -869,27 +883,23 @@ void ir_print_glsl_visitor::visit(ir_texture *ir)
}
#endif // 0
-
- // texture function name
- //ACS: shadow lookups and lookups with dimensionality included in the name were deprecated in 130
- if(state->language_version<130)
- {
- buffer.asprintf_append ("%s", is_shadow ? "shadow" : "texture");
- buffer.asprintf_append ("%s", tex_sampler_dim_name[sampler_dim]);
- }
- else
- {
- if (ir->op == ir_txf
- || ir->op == ir_txf_ms) {
- buffer.asprintf_append ("texelFetch");
- }
- else
- buffer.asprintf_append ("texture");
- }
+ // texture function name
+ //ACS: shadow lookups and lookups with dimensionality included in the name were deprecated in 130
+ if(state->language_version<130)
+ {
+ buffer.asprintf_append ("%s", is_shadow ? "shadow" : "texture");
+ buffer.asprintf_append ("%s", tex_sampler_dim_name[sampler_dim]);
+ }
+ else
+ {
+ if (ir->op == ir_txf || ir->op == ir_txf_ms)
+ buffer.asprintf_append ("texelFetch");
+ else
+ buffer.asprintf_append ("texture");
+ }
if (is_array && state->EXT_texture_array_enable)
buffer.asprintf_append ("Array");
-
if (ir->op == ir_tex && is_proj)
buffer.asprintf_append ("Proj");
if (ir->op == ir_txl)
@@ -931,6 +941,13 @@ void ir_print_glsl_visitor::visit(ir_texture *ir)
buffer.asprintf_append (", ");
ir->lod_info.lod->accept(this);
}
+
+ // sample index
+ if (ir->op == ir_txf_ms)
+ {
+ buffer.asprintf_append (", ");
+ ir->lod_info.sample_index->accept(this);
+ }
// grad
if (ir->op == ir_txd)