Fix setColocatedSampleLocations on ES and GL < 4.5
Updates setColocatedSampleLocations to use glFramebufferParameteri when the DSA version glNamedFramebufferParameteri is not present. BUG=skia: Review URL: https://codereview.chromium.org/1415503008
This commit is contained in:
parent
4036674952
commit
98cad6219b
@ -75,6 +75,7 @@ typedef GrGLvoid (GR_GL_FUNCTION_TYPE* GrGLEndQueryProc)(GrGLenum target);
|
||||
typedef GrGLvoid (GR_GL_FUNCTION_TYPE* GrGLFinishProc)();
|
||||
typedef GrGLvoid (GR_GL_FUNCTION_TYPE* GrGLFlushProc)();
|
||||
typedef GrGLvoid (GR_GL_FUNCTION_TYPE* GrGLFlushMappedBufferRangeProc)(GrGLenum target, GrGLintptr offset, GrGLsizeiptr length);
|
||||
typedef GrGLvoid (GR_GL_FUNCTION_TYPE* GrGLFramebufferParameteriProc)(GrGLenum target, GrGLenum pname, GrGLint param);
|
||||
typedef GrGLvoid (GR_GL_FUNCTION_TYPE* GrGLFramebufferRenderbufferProc)(GrGLenum target, GrGLenum attachment, GrGLenum renderbuffertarget, GrGLuint renderbuffer);
|
||||
typedef GrGLvoid (GR_GL_FUNCTION_TYPE* GrGLFramebufferTexture2DProc)(GrGLenum target, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level);
|
||||
typedef GrGLvoid (GR_GL_FUNCTION_TYPE* GrGLFramebufferTexture2DMultisampleProc)(GrGLenum target, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level, GrGLsizei samples);
|
||||
|
@ -205,6 +205,7 @@ public:
|
||||
GLPtr<GrGLFinishProc> fFinish;
|
||||
GLPtr<GrGLFlushProc> fFlush;
|
||||
GLPtr<GrGLFlushMappedBufferRangeProc> fFlushMappedBufferRange;
|
||||
GLPtr<GrGLFramebufferParameteriProc> fFramebufferParameteri;
|
||||
GLPtr<GrGLFramebufferRenderbufferProc> fFramebufferRenderbuffer;
|
||||
GLPtr<GrGLFramebufferTexture2DProc> fFramebufferTexture2D;
|
||||
GLPtr<GrGLFramebufferTexture2DMultisampleProc> fFramebufferTexture2DMultisample;
|
||||
|
@ -269,6 +269,10 @@ const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (glVer >= GR_GL_VER(4,3)) {
|
||||
GET_PROC(FramebufferParameteri);
|
||||
}
|
||||
|
||||
if (extensions.has("GL_NV_path_rendering")) {
|
||||
GET_PROC_SUFFIX(MatrixLoadf, EXT);
|
||||
GET_PROC_SUFFIX(MatrixLoadIdentity, EXT);
|
||||
@ -624,6 +628,11 @@ const GrGLInterface* GrGLAssembleGLESInterface(void* ctx, GrGLGetProc get) {
|
||||
GET_PROC(CheckFramebufferStatus);
|
||||
GET_PROC(DeleteFramebuffers);
|
||||
GET_PROC(DeleteRenderbuffers);
|
||||
|
||||
if (version >= GR_GL_VER(3,1)) {
|
||||
GET_PROC(FramebufferParameteri);
|
||||
}
|
||||
|
||||
GET_PROC(FramebufferRenderbuffer);
|
||||
GET_PROC(FramebufferTexture2D);
|
||||
|
||||
|
@ -324,9 +324,17 @@ void GrGLCaps::init(const GrContextOptions& contextOptions,
|
||||
fDiscardRenderTargetSupport = false;
|
||||
fInvalidateFBType = kNone_InvalidateFBType;
|
||||
}
|
||||
glslCaps->fProgrammableSampleLocationsSupport =
|
||||
ctxInfo.hasExtension("GL_NV_sample_locations") ||
|
||||
ctxInfo.hasExtension("GL_ARB_sample_locations");
|
||||
|
||||
if (kGL_GrGLStandard == standard) {
|
||||
glslCaps->fProgrammableSampleLocationsSupport =
|
||||
ctxInfo.version() >= GR_GL_VER(4, 3) &&
|
||||
(ctxInfo.hasExtension("GL_ARB_sample_locations") ||
|
||||
ctxInfo.hasExtension("GL_NV_sample_locations"));
|
||||
} else {
|
||||
glslCaps->fProgrammableSampleLocationsSupport =
|
||||
ctxInfo.version() >= GR_GL_VER(3, 1) &&
|
||||
ctxInfo.hasExtension("GL_NV_sample_locations");
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* GrCaps fields
|
||||
|
@ -2035,9 +2035,17 @@ void GrGLGpu::setColocatedSampleLocations(GrRenderTarget* rt, bool useColocatedS
|
||||
return;
|
||||
}
|
||||
|
||||
GL_CALL(NamedFramebufferParameteri(target->renderFBOID(),
|
||||
GR_GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS,
|
||||
useColocatedSampleLocations));
|
||||
if (kGL_GrGLStandard == this->glStandard() && this->glVersion() >= GR_GL_VER(4,5)) {
|
||||
GL_CALL(NamedFramebufferParameteri(target->renderFBOID(),
|
||||
GR_GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS,
|
||||
useColocatedSampleLocations));
|
||||
} else {
|
||||
GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, target->renderFBOID()));
|
||||
GL_CALL(FramebufferParameteri(GR_GL_FRAMEBUFFER,
|
||||
GR_GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS,
|
||||
useColocatedSampleLocations));
|
||||
fHWBoundRenderTargetUniqueID = SK_InvalidUniqueID;
|
||||
}
|
||||
|
||||
target->flagAsUsingColocatedSampleLocations(useColocatedSampleLocations);
|
||||
}
|
||||
|
@ -713,6 +713,13 @@ bool GrGLInterface::validate() const {
|
||||
}
|
||||
}
|
||||
|
||||
if ((kGL_GrGLStandard == fStandard && glVer >= GR_GL_VER(4,3)) ||
|
||||
(kGLES_GrGLStandard == fStandard && glVer >= GR_GL_VER(3,1))) {
|
||||
if (nullptr == fFunctions.fFramebufferParameteri) {
|
||||
RETURN_FALSE_INTERFACE
|
||||
}
|
||||
}
|
||||
|
||||
if (kGL_GrGLStandard == fStandard && glVer >= GR_GL_VER(4,5)) {
|
||||
if (nullptr == fFunctions.fNamedFramebufferParameteri) {
|
||||
RETURN_FALSE_INTERFACE
|
||||
|
Loading…
Reference in New Issue
Block a user