aboutsummaryrefslogtreecommitdiff
path: root/mesalib/src/mesa/state_tracker
diff options
context:
space:
mode:
Diffstat (limited to 'mesalib/src/mesa/state_tracker')
-rw-r--r--mesalib/src/mesa/state_tracker/st_extensions.c13
-rw-r--r--mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp14
2 files changed, 22 insertions, 5 deletions
diff --git a/mesalib/src/mesa/state_tracker/st_extensions.c b/mesalib/src/mesa/state_tracker/st_extensions.c
index 9db648c03..07bd12567 100644
--- a/mesalib/src/mesa/state_tracker/st_extensions.c
+++ b/mesalib/src/mesa/state_tracker/st_extensions.c
@@ -34,6 +34,7 @@
#include "pipe/p_context.h"
#include "pipe/p_defines.h"
#include "pipe/p_screen.h"
+#include "util/u_math.h"
#include "st_context.h"
#include "st_extensions.h"
@@ -274,8 +275,6 @@ void st_init_limits(struct pipe_screen *screen,
c->MinProgramTextureGatherOffset = screen->get_param(screen, PIPE_CAP_MIN_TEXTURE_GATHER_OFFSET);
c->MaxProgramTextureGatherOffset = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_GATHER_OFFSET);
- c->UniformBooleanTrue = ~0;
-
c->MaxTransformFeedbackBuffers =
screen->get_param(screen, PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS);
c->MaxTransformFeedbackBuffers = MIN2(c->MaxTransformFeedbackBuffers, MAX_FEEDBACK_BUFFERS);
@@ -621,7 +620,6 @@ void st_init_extensions(struct pipe_screen *screen,
extensions->NV_fog_distance = GL_TRUE;
extensions->NV_texture_env_combine4 = GL_TRUE;
extensions->NV_texture_rectangle = GL_TRUE;
- extensions->NV_vdpau_interop = GL_TRUE;
extensions->OES_EGL_image = GL_TRUE;
extensions->OES_EGL_image_external = GL_TRUE;
@@ -700,6 +698,8 @@ void st_init_extensions(struct pipe_screen *screen,
}
}
+ consts->UniformBooleanTrue = consts->NativeIntegers ? ~0 : fui(1.0f);
+
/* Below are the cases which cannot be moved into tables easily. */
if (!has_lib_dxtc && !options->force_s3tc_enable) {
@@ -884,4 +884,11 @@ void st_init_extensions(struct pipe_screen *screen,
PIPE_BIND_SAMPLER_VIEW)) {
extensions->ARB_ES3_compatibility = GL_TRUE;
}
+
+ if (screen->get_video_param &&
+ screen->get_video_param(screen, PIPE_VIDEO_PROFILE_UNKNOWN,
+ PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
+ PIPE_VIDEO_CAP_SUPPORTS_INTERLACED)) {
+ extensions->NV_vdpau_interop = GL_TRUE;
+ }
}
diff --git a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index dd9c84f1a..62e4101d1 100644
--- a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -3091,8 +3091,18 @@ glsl_to_tgsi_visitor::visit(ir_discard *ir)
{
if (ir->condition) {
ir->condition->accept(this);
- this->result.negate = ~this->result.negate;
- emit(ir, TGSI_OPCODE_KILL_IF, undef_dst, this->result);
+ st_src_reg condition = this->result;
+
+ /* Convert the bool condition to a float so we can negate. */
+ if (native_integers) {
+ st_src_reg temp = get_temp(ir->condition->type);
+ emit(ir, TGSI_OPCODE_AND, st_dst_reg(temp),
+ condition, st_src_reg_for_float(1.0));
+ condition = temp;
+ }
+
+ condition.negate = ~condition.negate;
+ emit(ir, TGSI_OPCODE_KILL_IF, undef_dst, condition);
} else {
/* unconditional kil */
emit(ir, TGSI_OPCODE_KILL);