projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
r300g: fix min/max lod computation
[mesa.git]
/
src
/
gallium
/
drivers
/
softpipe
/
sp_state_fs.c
diff --git
a/src/gallium/drivers/softpipe/sp_state_fs.c
b/src/gallium/drivers/softpipe/sp_state_fs.c
index 7f072f5a2698eeeb8982600e5a731b449f2d3d3d..ded242d3dc54219b145faabdc920a6b73d4e6c21 100644
(file)
--- a/
src/gallium/drivers/softpipe/sp_state_fs.c
+++ b/
src/gallium/drivers/softpipe/sp_state_fs.c
@@
-35,7
+35,9
@@
#include "util/u_inlines.h"
#include "draw/draw_context.h"
#include "draw/draw_vs.h"
#include "util/u_inlines.h"
#include "draw/draw_context.h"
#include "draw/draw_vs.h"
+#include "draw/draw_gs.h"
#include "tgsi/tgsi_dump.h"
#include "tgsi/tgsi_dump.h"
+#include "tgsi/tgsi_exec.h"
#include "tgsi/tgsi_scan.h"
#include "tgsi/tgsi_parse.h"
#include "tgsi/tgsi_scan.h"
#include "tgsi/tgsi_parse.h"
@@
-95,10
+97,18
@@
softpipe_bind_fs_state(struct pipe_context *pipe, void *fs)
void
softpipe_delete_fs_state(struct pipe_context *pipe, void *fs)
{
void
softpipe_delete_fs_state(struct pipe_context *pipe, void *fs)
{
+ struct softpipe_context *softpipe = softpipe_context(pipe);
struct sp_fragment_shader *state = fs;
assert(fs != softpipe_context(pipe)->fs);
struct sp_fragment_shader *state = fs;
assert(fs != softpipe_context(pipe)->fs);
-
+
+ if (softpipe->fs_machine->Tokens == state->shader.tokens) {
+ /* unbind the shader from the tgsi executor if we're
+ * deleting it.
+ */
+ tgsi_exec_machine_bind_shader(softpipe->fs_machine, NULL, 0, NULL);
+ }
+
state->delete( state );
}
state->delete( state );
}
@@
-174,7
+184,6
@@
softpipe_set_constant_buffer(struct pipe_context *pipe,
const void *data = constants ? softpipe_resource(constants)->data : NULL;
assert(shader < PIPE_SHADER_TYPES);
const void *data = constants ? softpipe_resource(constants)->data : NULL;
assert(shader < PIPE_SHADER_TYPES);
- assert(index == 0);
draw_flush(softpipe->draw);
draw_flush(softpipe->draw);
@@
-186,6
+195,8
@@
softpipe_set_constant_buffer(struct pipe_context *pipe,
}
softpipe->mapped_constants[shader][index] = data;
}
softpipe->mapped_constants[shader][index] = data;
+ softpipe->const_buffer_size[shader][index] = size;
+
softpipe->dirty |= SP_NEW_CONSTANTS;
}
softpipe->dirty |= SP_NEW_CONSTANTS;
}
@@
-215,6
+226,8
@@
softpipe_create_gs_state(struct pipe_context *pipe,
if (state->draw_data == NULL)
goto fail;
if (state->draw_data == NULL)
goto fail;
+ state->max_sampler = state->draw_data->info.file_max[TGSI_FILE_SAMPLER];
+
return state;
fail:
return state;
fail: