diff --git a/gfx/drivers_renderchain/d3d9_hlsl_renderchain.c b/gfx/drivers_renderchain/d3d9_hlsl_renderchain.c
index 216c4c9318..f63d00b631 100644
--- a/gfx/drivers_renderchain/d3d9_hlsl_renderchain.c
+++ b/gfx/drivers_renderchain/d3d9_hlsl_renderchain.c
@@ -53,7 +53,6 @@ struct shader_program_hlsl_data
 
 typedef struct hlsl_shader_data
 {
-   LPDIRECT3DDEVICE9 dev;
    struct shader_program_hlsl_data prg[RARCH_HLSL_MAX_SHADERS];
    unsigned active_idx;
    struct video_shader *cg_shader;
@@ -121,11 +120,11 @@ static void hlsl_use(hlsl_shader_data_t *hlsl,
 
 static bool d3d9_hlsl_load_program(
       hlsl_shader_data_t *hlsl,
+      LPDIRECT3DDEVICE9 dev,
       unsigned idx,
       struct shader_program_hlsl_data *program,
       struct shader_program_info *program_info)
 {
-   LPDIRECT3DDEVICE9 d3dr                    = (LPDIRECT3DDEVICE9)hlsl->dev;
    ID3DXBuffer *listing_f                    = NULL;
    ID3DXBuffer *listing_v                    = NULL;
    ID3DXBuffer *code_f                       = NULL;
@@ -163,8 +162,8 @@ static bool d3d9_hlsl_load_program(
       }
    }
 
-   d3d9_create_pixel_shader(d3dr,  (const DWORD*)d3d9x_get_buffer_ptr(code_f),  (void**)&program->fprg);
-   d3d9_create_vertex_shader(d3dr, (const DWORD*)d3d9x_get_buffer_ptr(code_v), (void**)&program->vprg);
+   d3d9_create_pixel_shader(dev,  (const DWORD*)d3d9x_get_buffer_ptr(code_f),  (void**)&program->fprg);
+   d3d9_create_vertex_shader(dev, (const DWORD*)d3d9x_get_buffer_ptr(code_v), (void**)&program->vprg);
    d3d9x_buffer_release((void*)code_f);
    d3d9x_buffer_release((void*)code_v);
 
@@ -183,6 +182,7 @@ error:
 }
 
 static bool hlsl_load_shader(hlsl_shader_data_t *hlsl,
+      LPDIRECT3DDEVICE9 dev,
       const char *cgp_path, unsigned i)
 {
    struct shader_program_info program_info;
@@ -198,13 +198,14 @@ static bool hlsl_load_shader(hlsl_shader_data_t *hlsl,
 
    RARCH_LOG("[D3D9 HLSL]: Loading Cg/HLSL shader: \"%s\".\n", path_buf);
 
-   if (!d3d9_hlsl_load_program(hlsl, i + 1, &hlsl->prg[i + 1], &program_info))
+   if (!d3d9_hlsl_load_program(hlsl, dev, i + 1, &hlsl->prg[i + 1], &program_info))
       return false;
 
    return true;
 }
 
-static bool hlsl_load_plain(hlsl_shader_data_t *hlsl, const char *path)
+static bool hlsl_load_plain(hlsl_shader_data_t *hlsl, LPDIRECT3DDEVICE9 dev,
+      const char *path)
 {
    struct video_shader *cg_shader = (struct video_shader*)
       calloc(1, sizeof(*cg_shader));
@@ -227,7 +228,7 @@ static bool hlsl_load_plain(hlsl_shader_data_t *hlsl, const char *path)
       strlcpy(hlsl->cg_shader->pass[0].source.path,
             path, sizeof(hlsl->cg_shader->pass[0].source.path));
 
-      if (!d3d9_hlsl_load_program(hlsl, 1, &hlsl->prg[1], &program_info))
+      if (!d3d9_hlsl_load_program(hlsl, dev, 1, &hlsl->prg[1], &program_info))
          return false;
    }
    else
@@ -239,7 +240,7 @@ static bool hlsl_load_plain(hlsl_shader_data_t *hlsl, const char *path)
    return true;
 }
 
-static bool hlsl_load_preset(hlsl_shader_data_t *hlsl, const char *path)
+static bool hlsl_load_preset(hlsl_shader_data_t *hlsl, LPDIRECT3DDEVICE9 dev, const char *path)
 {
    unsigned i;
    config_file_t *conf = config_file_new(path);
@@ -272,7 +273,7 @@ static bool hlsl_load_preset(hlsl_shader_data_t *hlsl, const char *path)
 
    for (i = 0; i < hlsl->cg_shader->passes; i++)
    {
-      if (!hlsl_load_shader(hlsl, path, i))
+      if (!hlsl_load_shader(hlsl, dev, path, i))
          goto error;
    }
 
@@ -298,16 +299,11 @@ static hlsl_shader_data_t *hlsl_init(d3d9_video_t *d3d, const char *path)
    if (!hlsl)
       goto error;
 
-   hlsl->dev         = d3d->dev;
-
-   if (!hlsl->dev)
-      goto error;
-
    program_info.combined     = stock_hlsl_program;
    program_info.is_file      = false;
 
    /* Load stock shader */
-   if (!d3d9_hlsl_load_program(hlsl, 0, &hlsl->prg[0], &program_info))
+   if (!d3d9_hlsl_load_program(hlsl, d3d->dev, 0, &hlsl->prg[0], &program_info))
    {
       RARCH_ERR("[D3D9 HLSL]: Failed to compile passthrough shader, is something wrong with your environment?\n");
       goto error;
@@ -315,12 +311,12 @@ static hlsl_shader_data_t *hlsl_init(d3d9_video_t *d3d, const char *path)
 
    if (path && (string_is_equal(path_get_extension(path), ".cgp")))
    {
-      if (!hlsl_load_preset(hlsl, path))
+      if (!hlsl_load_preset(hlsl, d3d->dev, path))
          goto error;
    }
    else
    {
-      if (!hlsl_load_plain(hlsl, path))
+      if (!hlsl_load_plain(hlsl, d3d->dev, path))
          goto error;
    }
 
@@ -336,9 +332,9 @@ static hlsl_shader_data_t *hlsl_init(d3d9_video_t *d3d, const char *path)
    }
 
    RARCH_LOG("[D3D9 HLSL]: Setting up vertex shader...\n");
-   d3d9_set_vertex_shader(hlsl->dev, 1, hlsl->prg[1].vprg);
+   d3d9_set_vertex_shader(d3d->dev, 1, hlsl->prg[1].vprg);
    RARCH_LOG("[D3D9 HLSL]: Setting up pixel shader...\n");
-   d3d9_set_pixel_shader(hlsl->dev, hlsl->prg[1].fprg);
+   d3d9_set_pixel_shader(d3d->dev, hlsl->prg[1].fprg);
 
    return hlsl;
 
@@ -399,36 +395,37 @@ static void hlsl_d3d9_renderchain_set_shader_params(
    d3d9_hlsl_set_param_1f(vprg, dev, "IN.frame_count",     &frame_cnt);
 }
 
-static void hlsl_deinit_progs(hlsl_shader_data_t *hlsl)
+static void hlsl_deinit_progs(hlsl_shader_data_t *hlsl,
+      LPDIRECT3DDEVICE9 dev)
 {
    unsigned i;
 
    for (i = 1; i < RARCH_HLSL_MAX_SHADERS; i++)
    {
       if (hlsl->prg[i].fprg && hlsl->prg[i].fprg != hlsl->prg[0].fprg)
-         d3d9_free_pixel_shader(hlsl->dev, hlsl->prg[i].fprg);
+         d3d9_free_pixel_shader(dev, hlsl->prg[i].fprg);
       if (hlsl->prg[i].vprg && hlsl->prg[i].vprg != hlsl->prg[0].vprg)
-         d3d9_free_vertex_shader(hlsl->dev, hlsl->prg[i].vprg);
+         d3d9_free_vertex_shader(dev, hlsl->prg[i].vprg);
 
       hlsl->prg[i].fprg = NULL;
       hlsl->prg[i].vprg = NULL;
    }
 
    if (hlsl->prg[0].fprg)
-      d3d9_free_pixel_shader(hlsl->dev, hlsl->prg[0].fprg);
+      d3d9_free_pixel_shader(dev, hlsl->prg[0].fprg);
    if (hlsl->prg[0].vprg)
-      d3d9_free_vertex_shader(hlsl->dev, hlsl->prg[0].vprg);
+      d3d9_free_vertex_shader(dev, hlsl->prg[0].vprg);
 
    hlsl->prg[0].fprg = NULL;
    hlsl->prg[0].vprg = NULL;
 }
 
-static void hlsl_deinit(hlsl_shader_data_t *hlsl)
+static void hlsl_deinit(hlsl_shader_data_t *hlsl, LPDIRECT3DDEVICE9 dev)
 {
    if (!hlsl)
       return;
 
-   hlsl_deinit_progs(hlsl);
+   hlsl_deinit_progs(hlsl, dev);
    memset(hlsl->prg, 0, sizeof(hlsl->prg));
 
    if (hlsl->cg_shader)
@@ -634,7 +631,7 @@ static void hlsl_d3d9_renderchain_free(void *data)
    if (!chain)
       return;
 
-   hlsl_deinit(chain->shader_pipeline);
+   hlsl_deinit(chain->shader_pipeline, chain->chain.dev);
    d3d9_hlsl_destroy_resources(chain);
    d3d9_renderchain_destroy_passes_and_luts(&chain->chain);
    free(chain);