Hash :
99d492c2
Author :
Date :
2018-02-27T15:17:10
Use packed enums for the texture types and targets, part 2 This completes the refactor by using the packed enums in the gl:: layer and in the backends. The packed enum code generation is modified to support explicitly assigning values to the packed enums so that the TextureTarget cube map faces are in the correct order and easy to iterate over. BUG=angleproject:2169 Change-Id: I5903235e684ccf382e92a8a1e10c5c85b4b16a04 Reviewed-on: https://chromium-review.googlesource.com/939994 Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
//
// Copyright (c) 2012 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.
//
// Image11.h: Defines the rx::Image11 class, which acts as the interface to
// the actual underlying resources of a Texture
#ifndef LIBANGLE_RENDERER_D3D_D3D11_IMAGE11_H_
#define LIBANGLE_RENDERER_D3D_D3D11_IMAGE11_H_
#include "common/debug.h"
#include "libANGLE/ImageIndex.h"
#include "libANGLE/renderer/d3d/ImageD3D.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
namespace gl
{
class Framebuffer;
}
namespace rx
{
class Renderer11;
class TextureHelper11;
class TextureStorage11;
struct Renderer11DeviceCaps;
class Image11 : public ImageD3D
{
public:
Image11(Renderer11 *renderer);
~Image11() override;
static gl::Error GenerateMipmap(const gl::Context *context,
Image11 *dest,
Image11 *src,
const Renderer11DeviceCaps &rendererCaps);
static gl::Error CopyImage(const gl::Context *context,
Image11 *dest,
Image11 *source,
const gl::Rectangle &sourceRect,
const gl::Offset &destOffset,
bool unpackFlipY,
bool unpackPremultiplyAlpha,
bool unpackUnmultiplyAlpha,
const Renderer11DeviceCaps &rendererCaps);
bool isDirty() const override;
gl::Error copyToStorage(const gl::Context *context,
TextureStorage *storage,
const gl::ImageIndex &index,
const gl::Box ®ion) override;
bool redefine(gl::TextureType type,
GLenum internalformat,
const gl::Extents &size,
bool forceRelease) override;
DXGI_FORMAT getDXGIFormat() const;
gl::Error loadData(const gl::Context *context,
const gl::Box &area,
const gl::PixelUnpackState &unpack,
GLenum type,
const void *input,
bool applySkipImages) override;
gl::Error loadCompressedData(const gl::Context *context,
const gl::Box &area,
const void *input) override;
gl::Error copyFromTexStorage(const gl::Context *context,
const gl::ImageIndex &imageIndex,
TextureStorage *source) override;
gl::Error copyFromFramebuffer(const gl::Context *context,
const gl::Offset &destOffset,
const gl::Rectangle &sourceArea,
const gl::Framebuffer *source) override;
gl::Error recoverFromAssociatedStorage(const gl::Context *context);
void verifyAssociatedStorageValid(TextureStorage11 *textureStorage) const;
void disassociateStorage();
protected:
gl::Error map(const gl::Context *context, D3D11_MAP mapType, D3D11_MAPPED_SUBRESOURCE *map);
void unmap();
private:
gl::Error copyWithoutConversion(const gl::Offset &destOffset,
const gl::Box &sourceArea,
const TextureHelper11 &textureHelper,
UINT sourceSubResource);
gl::Error getStagingTexture(const TextureHelper11 **outStagingTexture,
unsigned int *outSubresourceIndex);
gl::Error createStagingTexture();
void releaseStagingTexture();
Renderer11 *mRenderer;
DXGI_FORMAT mDXGIFormat;
TextureHelper11 mStagingTexture;
unsigned int mStagingSubresource;
bool mRecoverFromStorage;
TextureStorage11 *mAssociatedStorage;
gl::ImageIndex mAssociatedImageIndex;
unsigned int mRecoveredFromStorageCount;
};
}
#endif // LIBANGLE_RENDERER_D3D_D3D11_IMAGE11_H_