gallium/util: make WRITES_ALL_CBUFS optional in the passthrough fragment shader
Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
@@ -959,7 +959,8 @@ hud_create(struct pipe_context *pipe, struct cso_context *cso)
|
|||||||
hud->fs_color =
|
hud->fs_color =
|
||||||
util_make_fragment_passthrough_shader(pipe,
|
util_make_fragment_passthrough_shader(pipe,
|
||||||
TGSI_SEMANTIC_COLOR,
|
TGSI_SEMANTIC_COLOR,
|
||||||
TGSI_INTERPOLATE_CONSTANT);
|
TGSI_INTERPOLATE_CONSTANT,
|
||||||
|
TRUE);
|
||||||
|
|
||||||
{
|
{
|
||||||
/* Read a texture and do .xxxx swizzling. */
|
/* Read a texture and do .xxxx swizzling. */
|
||||||
|
@@ -322,11 +322,12 @@ util_make_fragment_tex_shader_writestencil(struct pipe_context *pipe,
|
|||||||
void *
|
void *
|
||||||
util_make_fragment_passthrough_shader(struct pipe_context *pipe,
|
util_make_fragment_passthrough_shader(struct pipe_context *pipe,
|
||||||
int input_semantic,
|
int input_semantic,
|
||||||
int input_interpolate)
|
int input_interpolate,
|
||||||
|
boolean write_all_cbufs)
|
||||||
{
|
{
|
||||||
static const char shader_templ[] =
|
static const char shader_templ[] =
|
||||||
"FRAG\n"
|
"FRAG\n"
|
||||||
"PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1\n"
|
"%s"
|
||||||
"DCL IN[0], %s[0], %s\n"
|
"DCL IN[0], %s[0], %s\n"
|
||||||
"DCL OUT[0], COLOR[0]\n"
|
"DCL OUT[0], COLOR[0]\n"
|
||||||
|
|
||||||
@@ -337,7 +338,9 @@ util_make_fragment_passthrough_shader(struct pipe_context *pipe,
|
|||||||
struct tgsi_token tokens[1000];
|
struct tgsi_token tokens[1000];
|
||||||
struct pipe_shader_state state = {tokens};
|
struct pipe_shader_state state = {tokens};
|
||||||
|
|
||||||
sprintf(text, shader_templ, tgsi_semantic_names[input_semantic],
|
sprintf(text, shader_templ,
|
||||||
|
write_all_cbufs ? "PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1\n" : "",
|
||||||
|
tgsi_semantic_names[input_semantic],
|
||||||
tgsi_interpolate_names[input_interpolate]);
|
tgsi_interpolate_names[input_interpolate]);
|
||||||
|
|
||||||
if (!tgsi_text_translate(text, tokens, Elements(tokens))) {
|
if (!tgsi_text_translate(text, tokens, Elements(tokens))) {
|
||||||
|
@@ -89,7 +89,8 @@ util_make_fragment_tex_shader_writestencil(struct pipe_context *pipe,
|
|||||||
extern void *
|
extern void *
|
||||||
util_make_fragment_passthrough_shader(struct pipe_context *pipe,
|
util_make_fragment_passthrough_shader(struct pipe_context *pipe,
|
||||||
int input_semantic,
|
int input_semantic,
|
||||||
int input_interpolate);
|
int input_interpolate,
|
||||||
|
boolean write_all_cbufs);
|
||||||
|
|
||||||
|
|
||||||
extern void *
|
extern void *
|
||||||
|
@@ -309,7 +309,8 @@ static void renderer_set_fs(struct renderer *r, RendererFs id)
|
|||||||
switch (id) {
|
switch (id) {
|
||||||
case RENDERER_FS_COLOR:
|
case RENDERER_FS_COLOR:
|
||||||
fs = util_make_fragment_passthrough_shader(r->pipe,
|
fs = util_make_fragment_passthrough_shader(r->pipe,
|
||||||
TGSI_SEMANTIC_COLOR, TGSI_INTERPOLATE_PERSPECTIVE);
|
TGSI_SEMANTIC_COLOR, TGSI_INTERPOLATE_PERSPECTIVE,
|
||||||
|
TRUE);
|
||||||
break;
|
break;
|
||||||
case RENDERER_FS_TEXTURE:
|
case RENDERER_FS_TEXTURE:
|
||||||
fs = util_make_fragment_tex_shader(r->pipe,
|
fs = util_make_fragment_tex_shader(r->pipe,
|
||||||
|
@@ -218,7 +218,7 @@ static void init_prog(struct program *p)
|
|||||||
|
|
||||||
/* fragment shader */
|
/* fragment shader */
|
||||||
p->fs = util_make_fragment_passthrough_shader(p->pipe,
|
p->fs = util_make_fragment_passthrough_shader(p->pipe,
|
||||||
TGSI_SEMANTIC_COLOR, TGSI_INTERPOLATE_PERSPECTIVE);
|
TGSI_SEMANTIC_COLOR, TGSI_INTERPOLATE_PERSPECTIVE, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void close_prog(struct program *p)
|
static void close_prog(struct program *p)
|
||||||
|
@@ -60,7 +60,8 @@ get_passthrough_fs(struct st_context *st)
|
|||||||
if (!st->passthrough_fs) {
|
if (!st->passthrough_fs) {
|
||||||
st->passthrough_fs =
|
st->passthrough_fs =
|
||||||
util_make_fragment_passthrough_shader(st->pipe, TGSI_SEMANTIC_COLOR,
|
util_make_fragment_passthrough_shader(st->pipe, TGSI_SEMANTIC_COLOR,
|
||||||
TGSI_INTERPOLATE_PERSPECTIVE);
|
TGSI_INTERPOLATE_PERSPECTIVE,
|
||||||
|
TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return st->passthrough_fs;
|
return st->passthrough_fs;
|
||||||
|
@@ -99,7 +99,8 @@ set_fragment_shader(struct st_context *st)
|
|||||||
if (!st->clear.fs)
|
if (!st->clear.fs)
|
||||||
st->clear.fs =
|
st->clear.fs =
|
||||||
util_make_fragment_passthrough_shader(st->pipe, TGSI_SEMANTIC_GENERIC,
|
util_make_fragment_passthrough_shader(st->pipe, TGSI_SEMANTIC_GENERIC,
|
||||||
TGSI_INTERPOLATE_CONSTANT);
|
TGSI_INTERPOLATE_CONSTANT,
|
||||||
|
TRUE);
|
||||||
|
|
||||||
cso_set_fragment_shader_handle(st->cso_context, st->clear.fs);
|
cso_set_fragment_shader_handle(st->cso_context, st->clear.fs);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user