Skip to content

Commit 64dc609

Browse files
lexaknyazevAngle LUCI CQ
authored andcommitted
Ensure ValidateDelete{Program|Shader} consistency
Deleting program zero is valid. Deleting shader zero is valid. Bug: angleproject:406922380 Change-Id: I2a26be8200585fae3a70c0a904be96ff590ebe7b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6409251 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
1 parent eb8deec commit 64dc609

3 files changed

Lines changed: 28 additions & 2 deletions

File tree

src/libANGLE/capture/FrameCapture.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7088,6 +7088,10 @@ void FrameCaptureShared::maybeCapturePreCallUpdates(
70887088
// If we're capturing, track which programs have been deleted
70897089
const ParamCapture &param =
70907090
call.params.getParam("programPacked", ParamType::TShaderProgramID, 0);
7091+
if (param.value.ShaderProgramIDVal.value == 0)
7092+
{
7093+
break; // no-op
7094+
}
70917095
handleDeletedResource(context, param.value.ShaderProgramIDVal);
70927096

70937097
// If this assert fires, it means a ShaderProgramID has changed from program to shader
@@ -7113,6 +7117,10 @@ void FrameCaptureShared::maybeCapturePreCallUpdates(
71137117
// If we're capturing, track which shaders have been deleted
71147118
const ParamCapture &param =
71157119
call.params.getParam("shaderPacked", ParamType::TShaderProgramID, 0);
7120+
if (param.value.ShaderProgramIDVal.value == 0)
7121+
{
7122+
break; // no-op
7123+
}
71167124
handleDeletedResource(context, param.value.ShaderProgramIDVal);
71177125

71187126
// If this assert fires, it means a ShaderProgramID has changed from shader to program
@@ -7761,6 +7769,10 @@ void FrameCaptureShared::maybeCapturePostCallUpdates(const gl::Context *context)
77617769
{
77627770
const ParamCapture &param =
77637771
lastCall.params.getParam("programPacked", ParamType::TShaderProgramID, 0);
7772+
if (param.value.ShaderProgramIDVal.value == 0)
7773+
{
7774+
break; // no-op
7775+
}
77647776
CaptureDeleteUniformLocations(param.value.ShaderProgramIDVal, &mFrameCalls);
77657777
break;
77667778
}

src/libANGLE/validationES2.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4438,7 +4438,7 @@ bool ValidateDeleteProgram(const Context *context,
44384438
{
44394439
if (program.value == 0)
44404440
{
4441-
return false;
4441+
return true; // no-op
44424442
}
44434443

44444444
if (!context->getProgramResolveLink(program))
@@ -4464,7 +4464,7 @@ bool ValidateDeleteShader(const Context *context,
44644464
{
44654465
if (shader.value == 0)
44664466
{
4467-
return false;
4467+
return true; // no-op
44684468
}
44694469

44704470
if (!context->getShaderNoResolveCompile(shader))

src/tests/gl_tests/SimpleOperationTest.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,20 @@ TEST_P(SimpleOperationTest, ClearAndSwap)
214214
ASSERT_FALSE(getGLWindow()->hasError());
215215
}
216216

217+
// Deleting shader zero is no-op.
218+
TEST_P(SimpleOperationTest, DeleteShaderZero)
219+
{
220+
glDeleteShader(0);
221+
EXPECT_GL_NO_ERROR();
222+
}
223+
224+
// Deleting program zero is no-op.
225+
TEST_P(SimpleOperationTest, DeleteProgramZero)
226+
{
227+
glDeleteProgram(0);
228+
EXPECT_GL_NO_ERROR();
229+
}
230+
217231
// Simple case of setting a scissor, enabled or disabled.
218232
TEST_P(SimpleOperationTest, ScissorTest)
219233
{

0 commit comments

Comments
 (0)