st/xorg: setup constant buffers for vertex and fragment shaders
This commit is contained in:
parent
3c3ad915d8
commit
9ccbadb22d
|
@ -172,27 +172,10 @@ set_viewport(struct exa_context *exa, int width, int height,
|
||||||
static void
|
static void
|
||||||
bind_viewport_state(struct exa_context *exa, PicturePtr pDstPicture)
|
bind_viewport_state(struct exa_context *exa, PicturePtr pDstPicture)
|
||||||
{
|
{
|
||||||
const int param_bytes = 8 * sizeof(float);
|
|
||||||
int width = pDstPicture->pDrawable->width;
|
int width = pDstPicture->pDrawable->width;
|
||||||
int height = pDstPicture->pDrawable->height;
|
int height = pDstPicture->pDrawable->height;
|
||||||
float vs_consts[8] = {
|
|
||||||
2.f/width, 2.f/height, 1, 1,
|
|
||||||
-1, -1, 0, 0
|
|
||||||
};
|
|
||||||
struct pipe_constant_buffer *cbuf = &exa->vs_const_buffer;
|
|
||||||
|
|
||||||
set_viewport(exa, width, height, Y0_BOTTOM);
|
set_viewport(exa, width, height, Y0_BOTTOM);
|
||||||
|
|
||||||
pipe_buffer_reference(&cbuf->buffer, NULL);
|
|
||||||
cbuf->buffer = pipe_buffer_create(exa->ctx->screen, 16,
|
|
||||||
PIPE_BUFFER_USAGE_CONSTANT,
|
|
||||||
param_bytes);
|
|
||||||
|
|
||||||
if (cbuf->buffer) {
|
|
||||||
pipe_buffer_write(exa->ctx->screen, cbuf->buffer,
|
|
||||||
0, param_bytes, vs_consts);
|
|
||||||
}
|
|
||||||
exa->ctx->set_constant_buffer(exa->ctx, PIPE_SHADER_VERTEX, 0, cbuf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -295,6 +278,61 @@ bind_samplers(struct exa_context *exa, int op,
|
||||||
cso_set_sampler_textures(exa->cso, 3, textures);
|
cso_set_sampler_textures(exa->cso, 3, textures);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
setup_vs_constant_buffer(struct exa_context *exa,
|
||||||
|
int width, int height)
|
||||||
|
{
|
||||||
|
const int param_bytes = 8 * sizeof(float);
|
||||||
|
float vs_consts[8] = {
|
||||||
|
2.f/width, 2.f/height, 1, 1,
|
||||||
|
-1, -1, 0, 0
|
||||||
|
};
|
||||||
|
struct pipe_constant_buffer *cbuf = &exa->vs_const_buffer;
|
||||||
|
|
||||||
|
pipe_buffer_reference(&cbuf->buffer, NULL);
|
||||||
|
cbuf->buffer = pipe_buffer_create(exa->ctx->screen, 16,
|
||||||
|
PIPE_BUFFER_USAGE_CONSTANT,
|
||||||
|
param_bytes);
|
||||||
|
|
||||||
|
if (cbuf->buffer) {
|
||||||
|
pipe_buffer_write(exa->ctx->screen, cbuf->buffer,
|
||||||
|
0, param_bytes, vs_consts);
|
||||||
|
}
|
||||||
|
exa->ctx->set_constant_buffer(exa->ctx, PIPE_SHADER_VERTEX, 0, cbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
setup_fs_constant_buffer(struct exa_context *exa)
|
||||||
|
{
|
||||||
|
const int param_bytes = 4 * sizeof(float);
|
||||||
|
float fs_consts[8] = {
|
||||||
|
0, 0, 0, 1,
|
||||||
|
};
|
||||||
|
struct pipe_constant_buffer *cbuf = &exa->fs_const_buffer;
|
||||||
|
|
||||||
|
pipe_buffer_reference(&cbuf->buffer, NULL);
|
||||||
|
cbuf->buffer = pipe_buffer_create(exa->ctx->screen, 16,
|
||||||
|
PIPE_BUFFER_USAGE_CONSTANT,
|
||||||
|
param_bytes);
|
||||||
|
|
||||||
|
if (cbuf->buffer) {
|
||||||
|
pipe_buffer_write(exa->ctx->screen, cbuf->buffer,
|
||||||
|
0, param_bytes, fs_consts);
|
||||||
|
}
|
||||||
|
exa->ctx->set_constant_buffer(exa->ctx, PIPE_SHADER_FRAGMENT, 0, cbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
setup_constant_buffers(struct exa_context *exa, PicturePtr pDstPicture)
|
||||||
|
{
|
||||||
|
int width = pDstPicture->pDrawable->width;
|
||||||
|
int height = pDstPicture->pDrawable->height;
|
||||||
|
|
||||||
|
setup_vs_constant_buffer(exa, width, height);
|
||||||
|
setup_fs_constant_buffer(exa);
|
||||||
|
}
|
||||||
|
|
||||||
boolean xorg_composite_bind_state(struct exa_context *exa,
|
boolean xorg_composite_bind_state(struct exa_context *exa,
|
||||||
int op,
|
int op,
|
||||||
PicturePtr pSrcPicture,
|
PicturePtr pSrcPicture,
|
||||||
|
@ -312,6 +350,8 @@ boolean xorg_composite_bind_state(struct exa_context *exa,
|
||||||
bind_samplers(exa, op, pSrcPicture, pMaskPicture, pDstPicture,
|
bind_samplers(exa, op, pSrcPicture, pMaskPicture, pDstPicture,
|
||||||
pSrc, pMask, pDst);
|
pSrc, pMask, pDst);
|
||||||
|
|
||||||
|
setup_constant_buffers(exa, pDstPicture);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue