projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
nv50,nvc0: implement blit
[mesa.git]
/
src
/
gallium
/
drivers
/
svga
/
svga_pipe_fs.c
diff --git
a/src/gallium/drivers/svga/svga_pipe_fs.c
b/src/gallium/drivers/svga/svga_pipe_fs.c
index e3be840d92092e859bb1151b58f83ba8c9e4569c..9aac546581eb7745242995943fc2125554a96304 100644
(file)
--- a/
src/gallium/drivers/svga/svga_pipe_fs.c
+++ b/
src/gallium/drivers/svga/svga_pipe_fs.c
@@
-23,19
+23,17
@@
*
**********************************************************/
*
**********************************************************/
-#include "
pipe/p
_inlines.h"
+#include "
util/u
_inlines.h"
#include "util/u_math.h"
#include "util/u_memory.h"
#include "util/u_math.h"
#include "util/u_memory.h"
+#include "util/u_bitmask.h"
#include "tgsi/tgsi_parse.h"
#include "tgsi/tgsi_parse.h"
-#include "
tgsi/tgsi_
text.h"
+#include "
draw/draw_con
text.h"
-#include "svga_screen.h"
#include "svga_context.h"
#include "svga_context.h"
-#include "svga_state.h"
#include "svga_tgsi.h"
#include "svga_hw_reg.h"
#include "svga_cmd.h"
#include "svga_tgsi.h"
#include "svga_hw_reg.h"
#include "svga_cmd.h"
-#include "svga_draw.h"
#include "svga_debug.h"
#include "svga_debug.h"
@@
-48,7
+46,6
@@
svga_create_fs_state(struct pipe_context *pipe,
const struct pipe_shader_state *templ)
{
struct svga_context *svga = svga_context(pipe);
const struct pipe_shader_state *templ)
{
struct svga_context *svga = svga_context(pipe);
- struct svga_screen *svgascreen = svga_screen(pipe->screen);
struct svga_fragment_shader *fs;
fs = CALLOC_STRUCT(svga_fragment_shader);
struct svga_fragment_shader *fs;
fs = CALLOC_STRUCT(svga_fragment_shader);
@@
-62,8
+59,13
@@
svga_create_fs_state(struct pipe_context *pipe,
tgsi_scan_shader(fs->base.tokens, &fs->base.info);
fs->base.id = svga->debug.shader_id++;
tgsi_scan_shader(fs->base.tokens, &fs->base.info);
fs->base.id = svga->debug.shader_id++;
- fs->base.use_sm30 = svgascreen->use_ps30;
+ fs->generic_inputs = svga_get_generic_inputs_mask(&fs->base.info);
+
+ svga_remap_generics(fs->generic_inputs, fs->generic_remap_table);
+
+ fs->draw_shader = draw_create_fragment_shader(svga->swtnl.draw, templ);
+
if (SVGA_DEBUG & DEBUG_TGSI || 0) {
debug_printf("%s id: %u, inputs: %u, outputs: %u\n",
__FUNCTION__, fs->base.id,
if (SVGA_DEBUG & DEBUG_TGSI || 0) {
debug_printf("%s id: %u, inputs: %u, outputs: %u\n",
__FUNCTION__, fs->base.id,
@@
-93,6
+95,8
@@
void svga_delete_fs_state(struct pipe_context *pipe, void *shader)
svga_hwtnl_flush_retry( svga );
svga_hwtnl_flush_retry( svga );
+ draw_delete_fragment_shader(svga->swtnl.draw, fs->draw_shader);
+
for (result = fs->base.results; result; result = tmp ) {
tmp = result->next;
for (result = fs->base.results; result; result = tmp ) {
tmp = result->next;
@@
-107,7
+111,16
@@
void svga_delete_fs_state(struct pipe_context *pipe, void *shader)
assert(ret == PIPE_OK);
}
assert(ret == PIPE_OK);
}
+ util_bitmask_clear( svga->fs_bm, result->id );
+
svga_destroy_shader_result( result );
svga_destroy_shader_result( result );
+
+ /*
+ * Remove stale references to this result to ensure a new result on the
+ * same address will be detected as a change.
+ */
+ if(result == svga->state.hw_draw.fs)
+ svga->state.hw_draw.fs = NULL;
}
FREE((void *)fs->base.tokens);
}
FREE((void *)fs->base.tokens);