st/xorg: set vertex and fragment shader for the current op

This commit is contained in:
Zack Rusin
2009-08-27 18:17:54 -04:00
parent c7e103d238
commit 8bdce0c3a7

View File

@@ -1,5 +1,7 @@
#include "xorg_composite.h" #include "xorg_composite.h"
#include "xorg_exa_tgsi.h"
#include <cso_cache/cso_context.h> #include <cso_cache/cso_context.h>
#include <pipe/p_inlines.h> #include <pipe/p_inlines.h>
@@ -227,8 +229,25 @@ bind_rasterizer_state(struct exa_context *exa)
} }
static void static void
bind_shaders() bind_shaders(struct exa_context *exa, int op,
PicturePtr pSrcPicture, PicturePtr pMaskPicture)
{ {
unsigned vs_traits = 0, fs_traits = 0;
struct xorg_shader shader;
if (pSrcPicture) {
vs_traits |= VS_COMPOSITE;
fs_traits |= FS_COMPOSITE;
}
if (pMaskPicture) {
vs_traits |= VS_MASK;
fs_traits |= FS_MASK;
}
shader = xorg_shaders_get(exa->shaders, vs_traits, fs_traits);
cso_set_vertex_shader_handle(exa->cso, shader.vs);
cso_set_fragment_shader_handle(exa->cso, shader.fs);
} }
@@ -245,7 +264,7 @@ boolean xorg_composite_bind_state(struct exa_context *exa,
bind_viewport_state(exa, pDstPicture); bind_viewport_state(exa, pDstPicture);
bind_blend_state(exa, op, pSrcPicture, pMaskPicture); bind_blend_state(exa, op, pSrcPicture, pMaskPicture);
bind_rasterizer_state(exa); bind_rasterizer_state(exa);
bind_shaders(); bind_shaders(exa, op, pSrcPicture, pMaskPicture);
return FALSE; return FALSE;
} }