st/nine: Calculate dummy sampler state only once

Signed-off-by: Axel Davy <axel.davy@ens.fr>
This commit is contained in:
Axel Davy
2015-05-14 19:10:41 +02:00
parent f5effeb8ea
commit 98f786b270
3 changed files with 24 additions and 35 deletions
+18 -3
View File
@@ -336,6 +336,8 @@ NineDevice9_ctor( struct NineDevice9 *This,
{
struct pipe_resource tmplt;
struct pipe_sampler_view templ;
struct pipe_sampler_state samp;
memset(&samp, 0, sizeof(samp));
tmplt.target = PIPE_TEXTURE_2D;
tmplt.width0 = 1;
@@ -364,9 +366,22 @@ NineDevice9_ctor( struct NineDevice9 *This,
templ.swizzle_a = PIPE_SWIZZLE_ONE;
templ.target = This->dummy_texture->target;
This->dummy_sampler = This->pipe->create_sampler_view(This->pipe, This->dummy_texture, &templ);
if (!This->dummy_sampler)
This->dummy_sampler_view = This->pipe->create_sampler_view(This->pipe, This->dummy_texture, &templ);
if (!This->dummy_sampler_view)
return D3DERR_DRIVERINTERNALERROR;
samp.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
samp.max_lod = 15.0f;
samp.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
samp.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
samp.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
samp.min_img_filter = PIPE_TEX_FILTER_NEAREST;
samp.mag_img_filter = PIPE_TEX_FILTER_NEAREST;
samp.compare_mode = PIPE_TEX_COMPARE_NONE;
samp.compare_func = PIPE_FUNC_LEQUAL;
samp.normalized_coords = 1;
samp.seamless_cube_map = 1;
This->dummy_sampler_state = samp;
}
/* Allocate upload helper for drivers that suck (from st pov ;). */
@@ -430,7 +445,7 @@ NineDevice9_dtor( struct NineDevice9 *This )
nine_bind(&This->record, NULL);
pipe_sampler_view_reference(&This->dummy_sampler, NULL);
pipe_sampler_view_reference(&This->dummy_sampler_view, NULL);
pipe_resource_reference(&This->dummy_texture, NULL);
pipe_resource_reference(&This->constbuf_vs, NULL);
pipe_resource_reference(&This->constbuf_ps, NULL);
+2 -1
View File
@@ -84,7 +84,8 @@ struct NineDevice9
uint16_t max_ps_const_f;
struct pipe_resource *dummy_texture;
struct pipe_sampler_view *dummy_sampler;
struct pipe_sampler_view *dummy_sampler_view;
struct pipe_sampler_state dummy_sampler_state;
struct gen_mipmap_state *gen_mipmap;
+4 -31
View File
@@ -705,7 +705,6 @@ update_textures_and_samplers(struct NineDevice9 *device)
struct pipe_context *pipe = device->pipe;
struct nine_state *state = &device->state;
struct pipe_sampler_view *view[NINE_MAX_SAMPLERS];
struct pipe_sampler_state samp;
unsigned num_textures;
unsigned i;
boolean commit_views;
@@ -745,24 +744,11 @@ update_textures_and_samplers(struct NineDevice9 *device)
* unbind dummy sampler directly when they are not needed
* anymore, but they're going to be removed as long as texture
* or sampler states are changed. */
view[i] = device->dummy_sampler;
view[i] = device->dummy_sampler_view;
num_textures = i + 1;
memset(&samp, 0, sizeof(samp));
samp.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
samp.max_lod = 15.0f;
samp.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
samp.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
samp.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
samp.min_img_filter = PIPE_TEX_FILTER_NEAREST;
samp.mag_img_filter = PIPE_TEX_FILTER_NEAREST;
samp.compare_mode = PIPE_TEX_COMPARE_NONE;
samp.compare_func = PIPE_FUNC_LEQUAL;
samp.normalized_coords = 1;
samp.seamless_cube_map = 1;
cso_single_sampler(device->cso, PIPE_SHADER_FRAGMENT,
s - NINE_SAMPLER_PS(0), &samp);
s - NINE_SAMPLER_PS(0), &device->dummy_sampler_state);
commit_views = TRUE;
commit_samplers = TRUE;
@@ -812,24 +798,11 @@ update_textures_and_samplers(struct NineDevice9 *device)
* unbind dummy sampler directly when they are not needed
* anymore, but they're going to be removed as long as texture
* or sampler states are changed. */
view[i] = device->dummy_sampler;
view[i] = device->dummy_sampler_view;
num_textures = i + 1;
memset(&samp, 0, sizeof(samp));
samp.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
samp.max_lod = 15.0f;
samp.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
samp.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
samp.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
samp.min_img_filter = PIPE_TEX_FILTER_NEAREST;
samp.mag_img_filter = PIPE_TEX_FILTER_NEAREST;
samp.compare_mode = PIPE_TEX_COMPARE_NONE;
samp.compare_func = PIPE_FUNC_LEQUAL;
samp.normalized_coords = 1;
samp.seamless_cube_map = 1;
cso_single_sampler(device->cso, PIPE_SHADER_VERTEX,
s - NINE_SAMPLER_VS(0), &samp);
s - NINE_SAMPLER_VS(0), &device->dummy_sampler_state);
commit_views = TRUE;
commit_samplers = TRUE;