Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(358)

Unified Diff: src/gpu/gl/GrGLCreateNullInterface.cpp

Issue 2081183002: Support texel and draw-indirect buffers in null GL contexts (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tools/gpu/gl/debug/DebugGLTestContext.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGLCreateNullInterface.cpp
diff --git a/src/gpu/gl/GrGLCreateNullInterface.cpp b/src/gpu/gl/GrGLCreateNullInterface.cpp
index 7282667913b9b368a58ae7983415ef2127fe58da..efdea2b47fb8eecacee859318359cbd64fe7640b 100644
--- a/src/gpu/gl/GrGLCreateNullInterface.cpp
+++ b/src/gpu/gl/GrGLCreateNullInterface.cpp
@@ -113,15 +113,12 @@ private:
class NullInterface : public GrGLTestInterface {
public:
NullInterface(bool enableNVPR)
- : fCurrArrayBuffer(0)
- , fCurrElementArrayBuffer(0)
- , fCurrPixelPackBuffer(0)
- , fCurrPixelUnpackBuffer(0)
- , fCurrProgramID(0)
+ : fCurrProgramID(0)
, fCurrShaderID(0)
, fCurrGenericID(0)
, fCurrUniformLocation(0)
, fCurrPathID(0) {
+ memset(fBoundBuffers, 0, sizeof(fBoundBuffers));
fExtensions.push_back("GL_ARB_framebuffer_object");
fExtensions.push_back("GL_ARB_blend_func_extended");
fExtensions.push_back("GL_ARB_timer_query");
@@ -150,26 +147,7 @@ public:
GrGLvoid bufferData(GrGLenum target, GrGLsizeiptr size, const GrGLvoid* data,
GrGLenum usage) override {
- GrGLuint id = 0;
-
- switch (target) {
- case GR_GL_ARRAY_BUFFER:
- id = fCurrArrayBuffer;
- break;
- case GR_GL_ELEMENT_ARRAY_BUFFER:
- id = fCurrElementArrayBuffer;
- break;
- case GR_GL_PIXEL_PACK_BUFFER:
- id = fCurrPixelPackBuffer;
- break;
- case GR_GL_PIXEL_UNPACK_BUFFER:
- id = fCurrPixelUnpackBuffer;
- break;
- default:
- SkFAIL("Unexpected target to nullGLBufferData");
- break;
- }
-
+ GrGLuint id = fBoundBuffers[GetBufferIndex(target)];
if (id > 0) {
BufferObj* buffer = fBufferManager.lookUp(id);
buffer->allocate(size, (const GrGLchar*) data);
@@ -185,38 +163,26 @@ public:
}
GrGLvoid bindBuffer(GrGLenum target, GrGLuint buffer) override {
- switch (target) {
- case GR_GL_ARRAY_BUFFER:
- fCurrArrayBuffer = buffer;
- break;
- case GR_GL_ELEMENT_ARRAY_BUFFER:
- fCurrElementArrayBuffer = buffer;
- break;
- case GR_GL_PIXEL_PACK_BUFFER:
- fCurrPixelPackBuffer = buffer;
- break;
- case GR_GL_PIXEL_UNPACK_BUFFER:
- fCurrPixelUnpackBuffer = buffer;
- break;
- }
+ fBoundBuffers[GetBufferIndex(target)] = buffer;
}
// deleting a bound buffer has the side effect of binding 0
- GrGLvoid deleteBuffers(GrGLsizei n, const GrGLuint* ids) override {
- for (int i = 0; i < n; ++i) {
- if (ids[i] == fCurrArrayBuffer) {
- fCurrArrayBuffer = 0;
- }
- if (ids[i] == fCurrElementArrayBuffer) {
- fCurrElementArrayBuffer = 0;
+ GrGLvoid deleteBuffers(GrGLsizei n, const GrGLuint* ids) override {
+ // First potentially unbind the buffers.
+ for (int buffIdx = 0; buffIdx < kNumBufferTargets; ++buffIdx) {
+ if (!fBoundBuffers[buffIdx]) {
+ continue;
}
- if (ids[i] == fCurrPixelPackBuffer) {
- fCurrPixelPackBuffer = 0;
- }
- if (ids[i] == fCurrPixelUnpackBuffer) {
- fCurrPixelUnpackBuffer = 0;
+ for (int i = 0; i < n; ++i) {
+ if (ids[i] == fBoundBuffers[buffIdx]) {
+ fBoundBuffers[buffIdx] = 0;
+ break;
+ }
}
+ }
+ // Then actually "delete" the buffers.
+ for (int i = 0; i < n; ++i) {
if (ids[i] > 0) {
BufferObj* buffer = fBufferManager.lookUp(ids[i]);
fBufferManager.free(buffer);
@@ -407,22 +373,7 @@ public:
GrGLvoid* mapBufferRange(GrGLenum target, GrGLintptr offset, GrGLsizeiptr length,
GrGLbitfield access) override {
- GrGLuint id = 0;
- switch (target) {
- case GR_GL_ARRAY_BUFFER:
- id = fCurrArrayBuffer;
- break;
- case GR_GL_ELEMENT_ARRAY_BUFFER:
- id = fCurrElementArrayBuffer;
- break;
- case GR_GL_PIXEL_PACK_BUFFER:
- id = fCurrPixelPackBuffer;
- break;
- case GR_GL_PIXEL_UNPACK_BUFFER:
- id = fCurrPixelUnpackBuffer;
- break;
- }
-
+ GrGLuint id = fBoundBuffers[GetBufferIndex(target)];
if (id > 0) {
// We just ignore the offset and length here.
BufferObj* buffer = fBufferManager.lookUp(id);
@@ -434,22 +385,7 @@ public:
}
GrGLvoid* mapBuffer(GrGLenum target, GrGLenum access) override {
- GrGLuint id = 0;
- switch (target) {
- case GR_GL_ARRAY_BUFFER:
- id = fCurrArrayBuffer;
- break;
- case GR_GL_ELEMENT_ARRAY_BUFFER:
- id = fCurrElementArrayBuffer;
- break;
- case GR_GL_PIXEL_PACK_BUFFER:
- id = fCurrPixelPackBuffer;
- break;
- case GR_GL_PIXEL_UNPACK_BUFFER:
- id = fCurrPixelUnpackBuffer;
- break;
- }
-
+ GrGLuint id = fBoundBuffers[GetBufferIndex(target)];
if (id > 0) {
BufferObj* buffer = fBufferManager.lookUp(id);
SkASSERT(!buffer->mapped());
@@ -462,21 +398,7 @@ public:
}
GrGLboolean unmapBuffer(GrGLenum target) override {
- GrGLuint id = 0;
- switch (target) {
- case GR_GL_ARRAY_BUFFER:
- id = fCurrArrayBuffer;
- break;
- case GR_GL_ELEMENT_ARRAY_BUFFER:
- id = fCurrElementArrayBuffer;
- break;
- case GR_GL_PIXEL_PACK_BUFFER:
- id = fCurrPixelPackBuffer;
- break;
- case GR_GL_PIXEL_UNPACK_BUFFER:
- id = fCurrPixelUnpackBuffer;
- break;
- }
+ GrGLuint id = fBoundBuffers[GetBufferIndex(target)];
if (id > 0) {
BufferObj* buffer = fBufferManager.lookUp(id);
SkASSERT(buffer->mapped());
@@ -492,21 +414,7 @@ public:
switch (pname) {
case GR_GL_BUFFER_MAPPED: {
*params = GR_GL_FALSE;
- GrGLuint id = 0;
- switch (target) {
- case GR_GL_ARRAY_BUFFER:
- id = fCurrArrayBuffer;
- break;
- case GR_GL_ELEMENT_ARRAY_BUFFER:
- id = fCurrElementArrayBuffer;
- break;
- case GR_GL_PIXEL_PACK_BUFFER:
- id = fCurrPixelPackBuffer;
- break;
- case GR_GL_PIXEL_UNPACK_BUFFER:
- id = fCurrPixelUnpackBuffer;
- break;
- }
+ GrGLuint id = fBoundBuffers[GetBufferIndex(target)];
if (id > 0) {
BufferObj* buffer = fBufferManager.lookUp(id);
if (buffer->mapped()) {
@@ -527,11 +435,21 @@ public:
private:
+ inline int static GetBufferIndex(GrGLenum glTarget) {
+ switch (glTarget) {
+ default: SkFAIL("Unexpected GL target to GetBufferIndex");
+ case GR_GL_ARRAY_BUFFER: return 0;
+ case GR_GL_ELEMENT_ARRAY_BUFFER: return 1;
+ case GR_GL_TEXTURE_BUFFER: return 2;
+ case GR_GL_DRAW_INDIRECT_BUFFER: return 3;
+ case GR_GL_PIXEL_PACK_BUFFER: return 4;
+ case GR_GL_PIXEL_UNPACK_BUFFER: return 5;
+ }
+ }
+ constexpr int static kNumBufferTargets = 6;
+
BufferManager fBufferManager;
- GrGLuint fCurrArrayBuffer;
- GrGLuint fCurrElementArrayBuffer;
- GrGLuint fCurrPixelPackBuffer;
- GrGLuint fCurrPixelUnpackBuffer;
+ GrGLuint fBoundBuffers[kNumBufferTargets];
GrGLuint fCurrProgramID;
GrGLuint fCurrShaderID;
GrGLuint fCurrGenericID;
« no previous file with comments | « no previous file | tools/gpu/gl/debug/DebugGLTestContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698