d3d11shader: Remove GstD3D11Quad helper object
authorSeungha Yang <seungha@centricular.com>
Wed, 15 Jun 2022 15:52:16 +0000 (00:52 +0900)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Fri, 17 Jun 2022 19:40:48 +0000 (19:40 +0000)
It's not very generic to be used for various scenario. Use native D3D11
APIs directly instead.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2622>

subprojects/gst-plugins-bad/sys/d3d11/gstd3d11shader.cpp
subprojects/gst-plugins-bad/sys/d3d11/gstd3d11shader.h

index 3f9ea34..912a028 100644 (file)
@@ -33,9 +33,6 @@ using namespace Microsoft::WRL;
 GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_shader_debug);
 #define GST_CAT_DEFAULT gst_d3d11_shader_debug
 
-/* too many const buffers doesn't make sense */
-#define MAX_CONST_BUFFERS 16
-
 static GModule *d3d_compiler_module = NULL;
 static pD3DCompile GstD3DCompileFunc = NULL;
 
@@ -229,168 +226,3 @@ gst_d3d11_create_vertex_shader (GstD3D11Device * device, const gchar * source,
 
   return TRUE;
 }
-
-struct _GstD3D11Quad
-{
-  GstD3D11Device *device;
-  ID3D11PixelShader *ps;
-  ID3D11VertexShader *vs;
-  ID3D11InputLayout *layout;
-  ID3D11Buffer *const_buffer[MAX_CONST_BUFFERS];
-  guint num_const_buffers;
-  ID3D11Buffer *vertex_buffer;
-  guint vertex_stride;
-  ID3D11Buffer *index_buffer;
-  DXGI_FORMAT index_format;
-  guint index_count;
-  D3D11_VIEWPORT viewport[GST_VIDEO_MAX_PLANES];
-  ID3D11ShaderResourceView *srv[GST_VIDEO_MAX_PLANES];
-  guint num_srv;
-  ID3D11RenderTargetView *rtv[GST_VIDEO_MAX_PLANES];
-  guint num_rtv;
-};
-
-GstD3D11Quad *
-gst_d3d11_quad_new (GstD3D11Device * device, ID3D11PixelShader * pixel_shader,
-    ID3D11VertexShader * vertex_shader, ID3D11InputLayout * layout,
-    ID3D11Buffer ** const_buffers, guint num_const_buffers,
-    ID3D11Buffer * vertex_buffer, guint vertex_stride,
-    ID3D11Buffer * index_buffer, DXGI_FORMAT index_format, guint index_count)
-{
-  GstD3D11Quad *quad;
-
-  g_return_val_if_fail (GST_IS_D3D11_DEVICE (device), NULL);
-  g_return_val_if_fail (pixel_shader != NULL, NULL);
-  g_return_val_if_fail (vertex_shader != NULL, NULL);
-  g_return_val_if_fail (layout != NULL, NULL);
-  g_return_val_if_fail (num_const_buffers <= MAX_CONST_BUFFERS, NULL);
-  g_return_val_if_fail (vertex_buffer != NULL, NULL);
-  g_return_val_if_fail (vertex_stride > 0, NULL);
-  g_return_val_if_fail (index_buffer != NULL, NULL);
-  g_return_val_if_fail (index_format != DXGI_FORMAT_UNKNOWN, NULL);
-
-  quad = g_new0 (GstD3D11Quad, 1);
-
-  quad->device = (GstD3D11Device *) gst_object_ref (device);
-  quad->ps = pixel_shader;
-  quad->vs = vertex_shader;
-  quad->layout = layout;
-  quad->vertex_buffer = vertex_buffer;
-  quad->vertex_stride = vertex_stride;
-  quad->index_buffer = index_buffer;
-  quad->index_format = index_format;
-  quad->index_count = index_count;
-
-  pixel_shader->AddRef ();
-  vertex_shader->AddRef ();
-  layout->AddRef ();
-  vertex_buffer->AddRef ();
-  index_buffer->AddRef ();
-
-  if (num_const_buffers > 0) {
-    guint i;
-
-    g_assert (const_buffers);
-
-    for (i = 0; i < num_const_buffers; i++) {
-      quad->const_buffer[i] = const_buffers[i];
-      quad->const_buffer[i]->AddRef ();
-    }
-
-    quad->num_const_buffers = num_const_buffers;
-  }
-
-  return quad;
-}
-
-void
-gst_d3d11_quad_free (GstD3D11Quad * quad)
-{
-  guint i;
-
-  g_return_if_fail (quad != NULL);
-
-  GST_D3D11_CLEAR_COM (quad->ps);
-  GST_D3D11_CLEAR_COM (quad->vs);
-  GST_D3D11_CLEAR_COM (quad->layout);
-  for (i = 0; i < quad->num_const_buffers; i++)
-    quad->const_buffer[i]->Release ();
-  GST_D3D11_CLEAR_COM (quad->vertex_buffer);
-  GST_D3D11_CLEAR_COM (quad->index_buffer);
-
-  gst_clear_object (&quad->device);
-  g_free (quad);
-}
-
-gboolean
-gst_d3d11_draw_quad (GstD3D11Quad * quad,
-    D3D11_VIEWPORT viewport[GST_VIDEO_MAX_PLANES], guint num_viewport,
-    ID3D11ShaderResourceView * srv[GST_VIDEO_MAX_PLANES], guint num_srv,
-    ID3D11RenderTargetView * rtv[GST_VIDEO_MAX_PLANES], guint num_rtv,
-    ID3D11BlendState * blend, gfloat blend_factor[4],
-    ID3D11SamplerState ** sampler, guint num_sampler)
-{
-  gboolean ret;
-
-  g_return_val_if_fail (quad != NULL, FALSE);
-
-  gst_d3d11_device_lock (quad->device);
-  ret = gst_d3d11_draw_quad_unlocked (quad, viewport, num_viewport,
-      srv, num_srv, rtv, num_viewport, blend, blend_factor, sampler,
-      num_sampler);
-  gst_d3d11_device_unlock (quad->device);
-
-  return ret;
-}
-
-gboolean
-gst_d3d11_draw_quad_unlocked (GstD3D11Quad * quad,
-    D3D11_VIEWPORT viewport[GST_VIDEO_MAX_PLANES], guint num_viewport,
-    ID3D11ShaderResourceView * srv[GST_VIDEO_MAX_PLANES], guint num_srv,
-    ID3D11RenderTargetView * rtv[GST_VIDEO_MAX_PLANES], guint num_rtv,
-    ID3D11BlendState * blend, gfloat blend_factor[4],
-    ID3D11SamplerState ** sampler, guint num_sampler)
-{
-  ID3D11DeviceContext *context;
-  UINT offsets = 0;
-  ID3D11ShaderResourceView *clear_view[GST_VIDEO_MAX_PLANES] = { NULL, };
-  ID3D11BlendState *blend_state = blend;
-
-  g_return_val_if_fail (quad != NULL, FALSE);
-  g_return_val_if_fail (viewport != NULL, FALSE);
-  g_return_val_if_fail (num_viewport <= GST_VIDEO_MAX_PLANES, FALSE);
-  g_return_val_if_fail (rtv != NULL, FALSE);
-  g_return_val_if_fail (num_rtv <= GST_VIDEO_MAX_PLANES, FALSE);
-
-  context = gst_d3d11_device_get_device_context_handle (quad->device);
-
-  context->IASetPrimitiveTopology (D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
-  context->IASetInputLayout (quad->layout);
-  context->IASetVertexBuffers (0, 1, &quad->vertex_buffer, &quad->vertex_stride,
-      &offsets);
-  context->IASetIndexBuffer (quad->index_buffer, quad->index_format, 0);
-
-  if (sampler)
-    context->PSSetSamplers (0, num_sampler, sampler);
-  context->VSSetShader (quad->vs, NULL, 0);
-  context->PSSetShader (quad->ps, NULL, 0);
-  context->RSSetViewports (num_viewport, viewport);
-
-  if (quad->num_const_buffers) {
-    context->PSSetConstantBuffers (0, quad->num_const_buffers,
-        quad->const_buffer);
-  }
-
-  if (srv)
-    context->PSSetShaderResources (0, num_srv, srv);
-  context->OMSetRenderTargets (num_rtv, rtv, NULL);
-  context->OMSetBlendState (blend_state, blend_factor, 0xffffffff);
-
-  context->DrawIndexed (quad->index_count, 0, 0);
-
-  if (srv)
-    context->PSSetShaderResources (0, num_srv, clear_view);
-  context->OMSetRenderTargets (0, NULL, NULL);
-
-  return TRUE;
-}
index 5fc0419..2ef3ae8 100644 (file)
@@ -28,8 +28,6 @@
 
 G_BEGIN_DECLS
 
-typedef struct _GstD3D11Quad GstD3D11Quad;
-
 gboolean gst_d3d11_shader_init (void);
 
 gboolean gst_d3d11_create_pixel_shader (GstD3D11Device * device,
@@ -43,44 +41,6 @@ gboolean gst_d3d11_create_vertex_shader (GstD3D11Device * device,
                                          ID3D11VertexShader ** shader,
                                          ID3D11InputLayout ** layout);
 
-GstD3D11Quad * gst_d3d11_quad_new (GstD3D11Device * device,
-                                   ID3D11PixelShader * pixel_shader,
-                                   ID3D11VertexShader * vertex_shader,
-                                   ID3D11InputLayout * layout,
-                                   ID3D11Buffer ** const_buffers,
-                                   guint num_const_buffers,
-                                   ID3D11Buffer * vertex_buffer,
-                                   guint vertex_stride,
-                                   ID3D11Buffer * index_buffer,
-                                   DXGI_FORMAT index_format,
-                                   guint index_count);
-
-void          gst_d3d11_quad_free (GstD3D11Quad * quad);
-
-gboolean gst_d3d11_draw_quad (GstD3D11Quad * quad,
-                              D3D11_VIEWPORT viewport[GST_VIDEO_MAX_PLANES],
-                              guint num_viewport,
-                              ID3D11ShaderResourceView *srv[GST_VIDEO_MAX_PLANES],
-                              guint num_srv,
-                              ID3D11RenderTargetView *rtv[GST_VIDEO_MAX_PLANES],
-                              guint num_rtv,
-                              ID3D11BlendState *blend,
-                              gfloat blend_factor[4],
-                              ID3D11SamplerState ** sampler,
-                              guint num_sampler);
-
-gboolean gst_d3d11_draw_quad_unlocked (GstD3D11Quad * quad,
-                                       D3D11_VIEWPORT viewport[GST_VIDEO_MAX_PLANES],
-                                       guint num_viewport,
-                                       ID3D11ShaderResourceView *srv[GST_VIDEO_MAX_PLANES],
-                                       guint num_srv,
-                                       ID3D11RenderTargetView *rtv[GST_VIDEO_MAX_PLANES],
-                                       guint num_rtv,
-                                       ID3D11BlendState *blend,
-                                       gfloat blend_factor[4],
-                                       ID3D11SamplerState ** sampler,
-                                       guint num_sampler);
-
 G_END_DECLS
 
 #endif /* __GST_D3D11_SHADER_H__ */