summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/nine/vertexshader9.c
diff options
context:
space:
mode:
authorAxel Davy <[email protected]>2016-11-01 18:23:05 +0100
committerAxel Davy <[email protected]>2016-12-20 23:44:22 +0100
commitf5f881fd3eac79fc2dad865bc1387bfcee40e352 (patch)
tree3f400ac98eee09363fb4307cb70ff6416f228c4e /src/gallium/state_trackers/nine/vertexshader9.c
parent97e4b65e7f7b675ca0d25b6dfe8cf299af2b7a3f (diff)
st/nine: Change the way nine_shader gets the pipe
The change is required with csmt, where depending on the thread you don't access the pipe the same way. Signed-off-by: Axel Davy <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers/nine/vertexshader9.c')
-rw-r--r--src/gallium/state_trackers/nine/vertexshader9.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/gallium/state_trackers/nine/vertexshader9.c b/src/gallium/state_trackers/nine/vertexshader9.c
index b1ee7acdaf1..947831d3bb4 100644
--- a/src/gallium/state_trackers/nine/vertexshader9.c
+++ b/src/gallium/state_trackers/nine/vertexshader9.c
@@ -39,6 +39,7 @@ NineVertexShader9_ctor( struct NineVertexShader9 *This,
{
struct NineDevice9 *device;
struct nine_shader_info info;
+ struct pipe_context *pipe;
HRESULT hr;
unsigned i;
@@ -55,6 +56,7 @@ NineVertexShader9_ctor( struct NineVertexShader9 *This,
}
device = This->base.device;
+ pipe = NineDevice9_GetPipe(device);
info.type = PIPE_SHADER_VERTEX;
info.byte_code = pFunction;
@@ -68,12 +70,12 @@ NineVertexShader9_ctor( struct NineVertexShader9 *This,
info.swvp_on = !!(device->params.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING);
info.process_vertices = false;
- hr = nine_translate_shader(device, &info);
+ hr = nine_translate_shader(device, &info, pipe);
if (hr == D3DERR_INVALIDCALL &&
(device->params.BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING)) {
/* Retry with a swvp shader. It will require swvp to be on. */
info.swvp_on = true;
- hr = nine_translate_shader(device, &info);
+ hr = nine_translate_shader(device, &info, pipe);
}
if (hr == D3DERR_INVALIDCALL)
ERR("Encountered buggy shader\n");
@@ -168,6 +170,9 @@ NineVertexShader9_GetFunction( struct NineVertexShader9 *This,
void *
NineVertexShader9_GetVariant( struct NineVertexShader9 *This )
{
+ /* GetVariant is called from nine_context, thus we can
+ * get pipe directly */
+ struct pipe_context *pipe = This->base.device->context.pipe;
void *cso;
uint64_t key;
@@ -192,7 +197,7 @@ NineVertexShader9_GetVariant( struct NineVertexShader9 *This )
info.swvp_on = device->swvp;
info.process_vertices = false;
- hr = nine_translate_shader(This->base.device, &info);
+ hr = nine_translate_shader(This->base.device, &info, pipe);
if (FAILED(hr))
return NULL;
nine_shader_variant_add(&This->variant, key, info.cso);
@@ -229,7 +234,7 @@ NineVertexShader9_GetVariantProcessVertices( struct NineVertexShader9 *This,
info.swvp_on = true;
info.vdecl_out = vdecl_out;
info.process_vertices = true;
- hr = nine_translate_shader(This->base.device, &info);
+ hr = nine_translate_shader(This->base.device, &info, This->base.device->pipe_sw);
if (FAILED(hr))
return NULL;
*so = info.so;