We can't clip and viewport transform the vertices before we let
the geometry shader process them. Lets make sure the generated
vertex shader has both disabled if geometry shader is present.
Signed-off-by: Zack Rusin <zackr@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: José Fonseca <jfonseca@vmware.com>
LLVMValueRef fetch_max;
struct lp_build_sampler_soa *sampler = 0;
LLVMValueRef ret, clipmask_bool_ptr;
LLVMValueRef fetch_max;
struct lp_build_sampler_soa *sampler = 0;
LLVMValueRef ret, clipmask_bool_ptr;
- const boolean bypass_viewport = variant->key.bypass_viewport;
- const boolean enable_cliptest = variant->key.clip_xy ||
- variant->key.clip_z ||
- variant->key.clip_user;
+ const struct draw_geometry_shader *gs = draw->gs.geometry_shader;
+ /* If geometry shader is present we need to skip both the viewport
+ * transformation and clipping otherwise the inputs to the geometry
+ * shader will be incorrect.
+ */
+ const boolean bypass_viewport = gs || variant->key.bypass_viewport;
+ const boolean enable_cliptest = !gs && (variant->key.clip_xy ||
+ variant->key.clip_z ||
+ variant->key.clip_user);
LLVMValueRef variant_func;
const unsigned pos = draw_current_shader_position_output(llvm->draw);
const unsigned cv = draw_current_shader_clipvertex_output(llvm->draw);
LLVMValueRef variant_func;
const unsigned pos = draw_current_shader_position_output(llvm->draw);
const unsigned cv = draw_current_shader_clipvertex_output(llvm->draw);