//
// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//

// StreamProducerD3DTexture.h: Interface for a D3D11 texture stream producer

#ifndef LIBANGLE_RENDERER_D3D_D3D11_STREAM11_H_
#define LIBANGLE_RENDERER_D3D_D3D11_STREAM11_H_

#include "libANGLE/renderer/StreamProducerImpl.h"

namespace rx
{
class Renderer11;

class StreamProducerD3DTexture : public StreamProducerImpl
{
  public:
    StreamProducerD3DTexture(Renderer11 *renderer);
    ~StreamProducerD3DTexture() override;

    egl::Error validateD3DTexture(void *pointer,
                                  const egl::AttributeMap &attributes) const override;
    void postD3DTexture(void *pointer, const egl::AttributeMap &attributes) override;
    egl::Stream::GLTextureDescription getGLFrameDescription(int planeIndex) override;

    // Gets a pointer to the internal D3D texture
    ID3D11Texture2D *getD3DTexture();

    // Gets the slice index for the D3D texture that the frame is in
    UINT getArraySlice();

  private:
    Renderer11 *mRenderer;

    ID3D11Texture2D *mTexture;
    UINT mArraySlice;
    UINT mPlaneOffset;
};
}  // namespace rx

#endif  // LIBANGLE_RENDERER_D3D_D3D11_STREAM11_H_
